FrontPage

2008/05/21からのアクセス回数 7925

sampleCコンパイラのソース・リスト

原書では、ソースリストがでているますが、それを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のコード生成がことなるため省略させて いただきました。

コメント

この記事は、

選択肢 投票
おもしろかった 14  
そうでもない 0  
わかりずらい 0  

皆様のご意見、ご希望をお待ちしております。

  • kenさんのご指摘でsample.lの%=, ++, --の定義を修正しました。 -- 竹本 浩? 2010-07-31 (土) 13:14:13

(Input image string)


添付ファイル: filesample.l 1222件 [詳細] fileyywhere.c 888件 [詳細] fileyyerror.c 925件 [詳細] filesymtab.h 1050件 [詳細] filesymtab.c 1178件 [詳細] filesimulator.mk 931件 [詳細] filesimgen.c 982件 [詳細] filesim.h 916件 [詳細] filesim.c 980件 [詳細] filesample.y 1551件 [詳細] filemessage.c 1045件 [詳細] filemem.c 998件 [詳細] fileMakefile 1003件 [詳細] filemain.c 937件 [詳細] filegen.h 1014件 [詳細] filegen.c 1111件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-01-26 (火) 22:16:34 (421d)
SmartDoc