primary_expr: .... | SYMBOL '(' ')' { $$ = makeAST(CALL_OP,$1,NULL); } | '(' expr ')' { $$ = $2; }
言語処理系(コンパイラとインタープリタ)の入門で、その理論と技法の基礎を 解説する。簡単なCコンパイラを例に内部の仕組みを具体的に紹介する。
この講義は、言語処理系、すなわちプログラミング言語のコンパイラとインター プリタのしくみを習得するのが目的である。目標としては、簡単な言語処理系 を作成できるようになることである。
これまでの経験から、話を聞いただけでも理解が進まないようなので、演習問 題で実際に簡単な言語処理系を作ってもらいながら、講義を進めることにする。 大体、次のような手順で進める。
http://www.hpcs.is.tsukuba.ac.jp/~msato/lecture-note/comp2003/にて公開する。講義の進め方については、昨年度の講義資料
http://www.hpcs.is.tsukuba.ac.jp/~msato/lecture-note/comp2002/にあるが、同じとは限らないので参考程度にしてほしい。
comp-lecture@hpcs.is.tsukuba.ac.jpメールのsubjectは、
comp report 課題番号とし、最初に学籍番号、氏名を明記すること。特に、最終の課題については重 視する。
comp-lecture@hpcs.is.tsukuba.ac.jpまで。
回 | 日時 | 1 時限 | 2 時限 | 講義資料 |
---|---|---|---|---|
第1回 | 9月2日 | 言語処理系とは | 基本:式の処理 | [講義資料1] [講義スライド1] |
第2回 | 9月9日 | 字句解析の基礎 lexの使い方 |
top-down parserの作り方と 言語処理系データ構造 |
[講義資料2]
[講義資料3] [tiny-c資料1] [tiny-c資料2] [講義スライド2] [講義スライド3] [講義スライド4] |
第3回 | 9月16日 | 演習 (課題1,課題2) | 構文解析の基礎と実際 yaccの使い方(1) |
[講義資料4] [講義資料5] [講義スライド5] |
第4回 | 9月30日 | 演習 (課題3) | yaccの使い方(2) インタプリター (式、関数の実行) |
[講義資料6] [tiny-c資料3] [講義スライド6] |
第5回 | 10月7日 | 演習 (課題4) | インタプリターの解説 (制御文、局所変数) |
[講義資料7] [講義スライド7] |
お休み | 10月14日 | 学園祭のためお休み | ||
第6回 | 10月21日 | 小テスト | スタックマシン | [講義資料8] [講義スライド8] |
第7回 | 10月28日 | 演習 (課題5) | スタックマシンへのコンパイラ | [講義資料9] [講義スライド9] |
第8回 | 11月4日 | 演習 (課題6) | レジスタマシンへのコンパイラ | [講義資料10] [講義スライド10] |
第9回 | 11月11日 | 演習(課題7),最終課題 | コード最適化入門、まとめ | [講義資料11] [講義スライド11] |