PL/0'コンパイラのJava版
PL/0'コンパイラはCで書かれていましたが,それをJavaで書き直したものを作りました.
C版の5つのプログラムファイルをそのままJava版の5つのファイルに書き直したものです.
ただし,codegen.cについてはCodeGen.javaとCodeGenB.javaの2つを作りました.
それらのコンパイル結果はパッケージpl0に入ります.使い方は
$ java pl0/PL0 オプション指定 ソースファイル名
です.コンパイル結果のソースプログラムの情報(トークンの種類や,エラーの表示など)
は「ソースファイル名.html」というファイルに出力されます.
オプション指定は'-'で始まる1つの文字列で,その中に
- 文字's'があれば記号表をブロックごとに印字し,
- 文字'o'があれば目的コードを印字し,
- 文字't'があれば目的コードの実行のトレースを印字し,
- 文字'b'があれば目的コードをバイトコード型にする.
Javaでは,目的コードの命令語をクラスのオブジェクトとして表現すると,目的コードの配列は各命令語の参照(ポインタ)の列となる.それがCodeGen.javaで作られる目的コードである.
それに対して,目的コードの配列をバイト(Javaのbyte型)の配列として,各命令語を1〜5バイトで表現するようにしたのがCodeGenB.javaである.オプションで'b'を指定すると,後者が使われる.
トレースでは,簡単のために,スタックのトップと実行する命令を交互に印字する.
ただし,演算のスタックに何も積まれていないときに,スタックのトップにあるように見えるのは,スタックに割当てられた最後の局所変数である.
PL/0'コンパイラのjava版のソースリスト