2008/05/21からのアクセス回数 9973
原書では、ソースリストがでているますが、それをbision, flex, gccに対応するように 修正し、現在のシステムでも動作するソースリストを添付します。 7章、8章のサンプルと同じ結果ができることを確認しました。
sample.lが字句解析のソースです。
flexでコンパイルする場合には、
flex sample.l
とします。
sample.yが、bisionの入力とするシンタックス解析のソースです。 y.tab.hを出力するために、-dオプションを指定し、出力をyaccと同じくするために-oオプションを指定します。
bison -d -o y.tab.c sample.y
message.cは、エラーメッセージを扱う関数です。可変引数を扱うように修正しました。
symtab.hは、sample.yをコンパイルするために必要な記号テーブルを持ったファイルです。
symtab.cは、記号テーブルを処理するCの関数です。
mem.cは、メモリ・アロケーションのためのCの関数です。
gen.hには、sample.yのコンパイルおいて必要な、シンボリック・コード生成のための ニーモニックが記述されています。
gen.cには、sampleCが使われる仮想的な計算機のアセンブリ・コードを生成するCの関数が記述されています。
sampleCコンパイラのロードアンドゴー・バージョンは、-DSIMULATORオプションでコンパイルします。 simulator.mkがロードアンドゴー・システム用のmakefileです。
sim.hは、シミュレータ用のニーモニック定義をしています。
sim.cは、仮想的な計算機のための実際のシミュレータ・プログラムです。
simgen.cは、シミュレータ用のコード生成ルーチンです。
bison, flexのライブラリがない環境でも動作するようにyyerror.c, yywhere.cに簡易バージョンを定義しました。また、yyerfpの定義のために、main.cを用意しました。
コード生成を作成するためのMakefileも用意しました。
コード生成版(generator)を作成するmakeコマンドは、
make
です。
シミュレータ(simulator)を生成する場合には、*.oファイルを削除してからmakeコマンドを実行します。
make clean make -f simulator.mk
原書のyaccparのエラー・メッセージに関連する部分は、bisonとyaccのコード生成がことなるため省略させて いただきました。
この記事は、
皆様のご意見、ご希望をお待ちしております。