言語を定義するだけで構文解析器にもスタイルシートにもなってくれないかな
PascalをCに変換,またはその逆をやりたい場合,どうしても構文解析器とスタイルシート(出力方法)を両方書かないといけない.でも次のようにしたら1個でまとめられないか.
class Substitute { Expression left,right; } class WhileStatement { Expression cond; Statement action; } language C { grammar Substitute { #{left} = #{right} } grammar WhileStatement { while (#{cond}) #{action}; } } language Pascal { grammar Substitute { #{left} := #{right} } grammar WhileStatement { while #{cond} do #{action}; } }
こう書いておくと
x=0; while (x<3) s=s+x;
を
x :=0; while x<3 do s:=s+x;
にしたり,その逆ができる
Expression だの Statement の中身がどうなっているのかはまたの機会に