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