情報システム・セキュリティコース (CSSS) 向けの「コンパイラ」 (火 Ⅱ コマ・ 3304 教室 担当: 香川) の情報を掲載します。
(新しいものほど上です)
(02/06)
昨年(2022)度の試験問題,
解答例
今年度も持ち込み不可です。
(10/03) 教科書の p.45 表 4.2 に訂正があります。 「コンパイラの仕組み」訂正
(10/03) パスワードがかかっているページは、Microsoft アカウント(大学のメールのアカウント) で閲覧できます。
(10/03) この授業は、現在のところ Moodle を使用していません。
(連絡には DreamCampus カダサポを使用します。)
2 Q「オートマトン」の授業資料からの抜粋です。「オートマトン」を受講していなかった人は、ダウンロードしておいてください。
ここにリンクをはっていないファイルや、公開日前のファイルは 公開日までに変更する可能性があるので注意してください。
以上をすべてまとめた PDF
パスワードがかかっているページは、 Microsoft アカウント(大学のメールのアカウント) で閲覧してください。
注意: 設定が変更されたのに、変更が反映されないときは、 いったんログアウトして、 再度アクセスを試みて下さい。
必ず各自で提出したファイルのバックアップを取っておいて下さい。 (自分のノート PC だけではなく、stfile などの大学のサーバのどこかにもバックアップしておいて下さい!!)
10/31 は月曜振替日になります。
Flex と Bison のインストール(パスワードは授業中に連絡)、 Bison について(PDF)、
「オートマトン」を履修していない人は、Flex について (PDF) を読んでおいてください。
Flex について (PDF) (復習)、 Flex と Bison を同時に使う(PDF)
Oolong は JVM 用のアセンブラーです。 本演習では Oolong をコンパイラーのターゲットとして使用します。
oolong.jar は課題プログラムを作成するフォルダーにコピーします。
次の文法(開始記号は E
):
E → C | F '(' L ')' L → E R R → ',' E | ε -- 以下は終端記号: 字句解析部で処理 C → '0' | '1' | ... | '9' -- 簡単のため一桁の数のみ F → '+' | '-' | '*' | '!'
に対する再帰下降構文解析プログラムの例
01/09 は金曜振替日です。
本日の課題が早くできた人は、最終週の課題を やっておいてください。
tinierC.c は、次の文法(開始記号は X
):
(Statement List) X -> S X | ε (Statement) S -> if ( E ) S else S | while ( E ) S | do S while ( E ) ; | for ( id = E ; E ; id = E ) S | { X } | print ( E ) ; | println ( E ) ; | id = E ; (Expression) E -> … (長いので省略)
に対する再帰下降構文解析プログラムの例である。
文法は LR 構文解析のときに使った例(tinierLexer.l と tinierParser.y)とほぼ同じ(tinierC.c の冒頭に差異に関するコメントあり)
単なるチェックではなく、コード生成をしている
左再帰を除去した部分の後始末をしている
tinierC.c から実行ファイル(tinierC.exe)を生成する
( cl tinierC.c
または bcc32 tinierC.c
)。
この tinierC.exe が TinierC のコンパイラーである。
TinierC のソースファイルを作成する。
(以下の例ではこのソースファイルの名前は、
MyProg.tc としている。)
内容は、例えば以下のようなものとする。
if (a == 1) { d = b * c; } else { d = b + c; } println(d + 2);
TinierC のソースをコンパイルする。
以下の例では、生成する Oolong ファイルの名前を MyProg.j としている。
( tinierC.exe < MyProg.tc > MyProg.j
)
Oolong で、上で生成された Oolong ファイルをアセンブルする。
( java -jar oolong.jar MyProg.j
)
上で、生成されたクラスファイルを実行する。
( java -classpath . MyProg 10 20 30
)
ここまでの例のとおり実行すれば、52 と表示されるはずである
(a = 10, b = 20, c = 30 が初期値になる)。
また java -classpath . MyProg 1 20 30
では 602 となる
(a = 1, b = 20, c = 30 が初期値になる)。
この授業は基本は対面授業ですが、事情があって対面授業に出席できない受講生のために 02/06 の授業は Zoom でも配信します。 URL はカダサポを見てください。
課題に対するコメント(02/13 12:00 ころ 公開)、
(02/13 New!) 今年(2023)度の期末試験問題と解答例
(← ここ以降の予定の開閉)
(新しいものほど上です)
jacc のマニュアル (学外)
Bison のマニュアルの日本語訳 (大量になるので印刷はしません。)
Bison と Flex のインストール, 「オートマトン」の授業でインストールしていない人はインストールしておいてください。
「オートマトン」と同じ教科書を使います。
コンパイラの仕組み
渡邊 坦 著
朝倉書店
ISBN4-254-12708-1
姓の小文字.名の小文字@〜
)
(SPAM mail 予防のため省略します。)