言語を定義するだけで構文解析器にもスタイルシートにもなってくれないかな

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 の中身がどうなっているのかはまたの機会に