コンパイラ 2021
情報システム・セキュリティコース(CSSS) 向けの「コンパイラ」 (火 Ⅱ コマ・
3304 教室
担当: 香川) の情報を掲載します。
現在の課題✨ へ
受講上の注意
お知らせ
(新しいものほど上です)
(10/05) 昨年(2020)度の試験問題 ,
解答例
今年度も持ち込み不可 です。
(10/05)
教科書の p.45 表 4.2 に訂正があります。
「コンパイラの仕組み」訂正
(10/05) パスワードがかかっているページは、Gmail アカウント(大学のメールのアカウント)
で閲覧できます。
(10/05) この授業は、現在のところ Moodle を使用していません。
(連絡には DreamCampus を使用します。)
配布プリント
以下は前期「オートマトン」で配布したブリントの再掲です。
各週の予定
現在の課題✨ へ
パスワードがかかっているページは、Gmail アカウント(大学のメールのアカウント)
で閲覧してください。
注意:
設定が変更されたのに、変更が反映されないときは、
いったんログアウト して、
再度アクセスを試みて下さい。
必ず各自で提出したファイルのバックアップ を取っておいて下さい。
(自分のノート PC だけではなく、stfile などの大学のサーバのどこかにもバックアップしておいて下さい!!)
各個人へのメッセージ
過去
📁/📂 (← ここ以前の課題の開閉)
第 01 週 10/05(復習、1 章 )
着席位置
配布プリントに関するアンケート 、
課題 、
アップロード 、
課題に対するコメント 、
第 02 週 10/12(1 章 )
着席位置
課題 、
アップロード 、
配布プリントに関するアンケート
(← 先週に回答していない人は回答しておいて下さい。今週も未回答の場合は、「希望しない」と回答したとみなします。)
課題に対するコメント 、
第 03 週 10/19
着席位置
課題 、
アップロード 、
演算子順位法による構文解析
(PDF )
課題に対するコメント 、
10/26 は金曜振替日になります。
第 04 週 11/02(2 章 )
着席位置
課題 、
アップロード 、
課題に対するコメント 、
第 05 週 11/09(2 章 )
着席位置
課題 、
アップロード 、
Flex と Bison のインストール (パスワードは授業中に連絡) 、
Bison について (PDF )、Flex と Bison を同時に使う (PDF )
課題に対するコメント 、
第 06 週 11/16
着席位置
課題 、
アップロード 、
Bison について (PDF )、Flex と Bison を同時に使う (PDF )
課題に対するコメント 、
11/23(火)は祝日(勤労感謝の日)です。
第 07 週 11/25(木)⦅火曜振替⦆ (4–7 章 、
A 章 )
急遽、遠隔 (Zoom) で実施します。 Zoom URL は、Dream Campus で確認して下さい。
着席位置
課題 、
アップロード 、
プリント第 4 〜 7 章 記号表と中間語・誤り処理・実行時環境とレジスタ割付け・コード生成、
プリント第 A 章 Oolong について
課題に対するコメント 、
Oolong のダウンロード📋/📂 (← Oolong に関する説明の開閉)
Oolong は JVM 用のアセンブラです。
本演習では Oolong をコンパイラのターゲットとして使用します。
第 08 週 11/30(7 章 、A 章 )
いつもの 3304 教室で対面で実施します。
着席位置 、
課題 、
アップロード 、
課題に対するコメント 、
第 09 週 12/07(3 章 下向き構文解析)
着席位置
課題 、
アップロード 、
プリント第 3 章 下向き構文解析
課題に対するコメント 、
第 10 週 12/14(3 章 )
着席位置
課題 、
アップロード 、
課題に対するコメント 、
第 11 週 12/21
着席位置
課題 、
アップロード 、
再帰下降構文解析プログラムの例
📋/📂 (← 再帰下降構文解析プログラムに関する説明の開閉)
次の文法(開始記号は Expr
):
Expr → CON
| FID '(' List ')'
List → Expr Rest
Rest → ',' Expr
| ε
-- 以下は終端記号: 字句解析部で処理
CON → '0' | '1' | ... | '9' -- 簡単のため一桁の数のみ
FID → '+' | '-' | '*' | '!'
に対する再帰下降構文解析プログラム
再帰下降構文解析プログラムの例
(
PDF )
課題に対するコメント 、
第 12 週 01/11
着席位置
課題
(問 4, 5 の締切を 2/06 に延長しました。) 、
アップロード 、
📋/📂 (← tinierC.c に関する説明の開閉)
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 -> … (長いので省略)
に対する再帰下降構文解析プログラムの例である。
実行の仕方
tinierC.c から実行ファイル(tinierC.exe)を生成する
( bcc32 tinierC.c
または、 cl 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 が初期値になる)。
課題に対するコメント 、
第 13 週 01/18
着席位置
課題
(問 2 〜 5 の締切を 2/06 に延長しました。) 、
アップロード 、
課題に対するコメント 、
第 14 週 01/25
着席位置
課題 、
アップロード 、
課題に対するコメント 、
第 15 週 02/01
着席位置
課題 、
アップロード 、
課題に対するコメント 、(02/07 16:00 ころ 公開)
現在
第 16 週 02/08(期末テスト)
いつもの 3304 で実施
(02/08 New!) 今年(2021)度の期末試験問題 と解答例
今後
📋/📂 (← ここ以降の予定の開閉)
参考リンク
(新しいものほど上です)
教科書
「オートマトン」と同じ教科書を使います。
コンパイラの仕組み
渡邊 坦 著
朝倉書店
ISBN4-254-12708-1
Koji Kagawa (kagawa@eng.〜)
(〜の部分は SPAM mail 予防のため省略します。)