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は図書館情報大学の大学院生 宍戸浩子さんのレポートを中田が少し書き直したものです。