PL/0'コンパイラのJava版


PL/0'コンパイラはCで書かれていましたが,それをJavaで書き直したものを作りました.
C版の5つのプログラムファイルをそのままJava版の5つのファイルに書き直したものです.
ただし,codegen.cについてはCodeGen.javaとCodeGenB.javaの2つを作りました.
それらのコンパイル結果はパッケージpl0に入ります.使い方は

   $ java pl0/PL0 オプション指定 ソースファイル名

です.コンパイル結果のソースプログラムの情報(トークンの種類や,エラーの表示など) は「ソースファイル名.html」というファイルに出力されます.

オプション指定は'-'で始まる1つの文字列で,その中に

Javaでは,目的コードの命令語をクラスのオブジェクトとして表現すると,目的コードの配列は各命令語の参照(ポインタ)の列となる.それがCodeGen.javaで作られる目的コードである.

それに対して,目的コードの配列をバイト(Javaのbyte型)の配列として,各命令語を1〜5バイトで表現するようにしたのがCodeGenB.javaである.オプションで'b'を指定すると,後者が使われる.


トレースでは,簡単のために,スタックのトップと実行する命令を交互に印字する.
ただし,演算のスタックに何も積まれていないときに,スタックのトップにあるように見えるのは,スタックに割当てられた最後の局所変数である.

PL/0'コンパイラのjava版のソースリスト