トランスレータを書いてみよう。
ちょっとだけ書いてみたScalaで書いたトランスレータを紹介します。
四則演算と、代入、if else 文と式しか対応してないので、まだまだトランスレータとして動かせる
物ではありませんけど。
tが文を処理する関数で、teが式を処理する関数です。
引数はAnyですから、すべての値を取ります。
そして、引数をマッチングしてタプルで指定された形だった場合のみ処理し、そうでなければ文字列に
そのまま変換して出力します。
def t(exp:Any):String = exp match { case (a,"+",b) => te(exp) case (a,"-",b) => te(exp) case (a,"*",b) => te(exp) case (a,"/",b) => te(exp) case (a,"=",b) => te(exp) case ("if","(",a,")",b) => val e1 = te(a); "if ("+ (if(e1=="void") "" else e1) +")" + t(b) case (a,"else",b) => t(a) + " else " + t(b) case _ => "" + exp } def te(exp:Any):String = exp match { case (a,"+",b) => te(a) + "+" + te(b) case (a,"-",b) => te(a) + "-" + te(b) case (a,"*",b) => te(a) + "*" + te(b) case (a,"/",b) => te(a) + "/" + te(b) case (a,"=",b) => te(a) + "=" + te(b) case ("if","(",a,")", (b,"else",c)) => "("+ te(a) +") ? " + te(b) + ":" + te(c) case _ => "" + exp }
javaの場合、パッケージがあって、importがあって、クラス定義が並んでいる。で、クラスの中には、
変数や、メソッドが入っていて、メソッド内には複数の文があり、文の中には式があるってかんじの
文法になっています。それに従った構成でちゃんとかけば、ちゃんとしたトランスレータが作れます。