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


PL/0'コンパイラはCで書かれていましたが,それをyaccで書き直したものを作りました.
C版のファイルのうち、table.h、codegen.hはそのまま使い、 table.cとcodegen.cはほとんどそのまま使い、それ以外をlex(またはflex) とyacc(またはbison)で書きました。
以下のファイルからlex(またはflex) とyacc(またはbison)を使ってPL/0'コンパイラを構成することが出来ます。


たとえば、bisonとflexを使う場合は、

  $ bison -d -y pl0.y

によって、y.tab.hとy.tab.cを生成し、

  $ flex -l pl0.l

によって、lex.yy.cを生成し、
y.tab.c, lex.yy.c, table.c, codegen.c から実行ファイルを作ればよい。
mainはy.tab.cにある。


yaccを使うことによって、コンパイラの動作を構文規則に則して書くことが出来るので、 C版やJava版に比べると大変簡潔で分かりやすいものになっている。

ただし、このコンパイラはソースプログラムのエラーに対しては大変弱い。
エラーがあれば、コンパイラは"parse error"、または"syntax error"とプリントして 直ちに構文解析を終了するだけである。
わずかに、変数名のリストの中の","について、それを書き忘れたときにも通るように処置してある だけである。


pl0.lとpl0.yは図書館情報大学の大学院生 宍戸浩子さんのレポートを中田が少し書き直したものです。