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

戻る