[[FrontPage]]

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(おもしろかった[18],そうでもない[0],わかりずらい[0])

皆様のご意見、ご希望をお待ちしております。
- kenさんのご指摘でsample.lの%=, ++, --の定義を修正しました。 -- [[竹本 浩]] &new{2010-07-31 (土) 13:14:13};

#comment_kcaptcha

削除しました(removed)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc