この授業では、プログラミング言語についての基礎的な概念を述べたあと、普段書いているプログラムがコンピュータ内部でどのように実行されるか、またコンパイラがどのように構成されているかを説明する。概念や理論への理解を深めるために、コンパイラ実装に関するプログラミング課題を課す。プログラミングにはScalaを用いる。
本講義を履修することによって次の能力を修得する。
1. プログラムがコンピュータ内部でどのように実行されるかを説明できる。
2. コンパイラの各構成要素の役割とその仕組み, アルゴリズムを説明できる。
3. 簡単なプログラミング言語のインタープリタやコンパイラを実装できる。
インタープリタ, コンパイラ, 構文解析, コード生成,レジスタ割付け,ごみ集め
✔ 専門力 | 教養力 | コミュニケーション力 | 展開力(探究力又は設定力) | 展開力(実践力又は解決力) |
講義形式で理論や技術を学び, プログラミング課題を通じ実践力をつける.
授業計画 | 課題 | |
---|---|---|
第1回 | 概要: プログラムの実行方式 | インタープリタ,コンパイラ,バイトコードコンパイラ |
第2回 | オートマトンと字句解析 | トークン,正規表現, NFA, DFA |
第3回 | 文脈自由文法の復習 | 導出, 構文木, CYKアルゴリズム |
第4回 | 構文解析(1):予測型構文解析 | 再帰下降構文解析, LL(1) |
第5回 | 構文解析(2):LR構文解析の基礎 | LR(0) |
第6回 | 構文解析(3):LR構文解析の拡張 | SLR, LR(1) |
第7回 | プログラミング言語の型体型と型検査 | 型体型, 多相型, 部分型, 型検査 |
第8回 | 理解度確認テスト及び授業後半の概要 | 理解度を確認する |
第9回 | プログラミング言語の意味論とインタープリタ | 評価戦略, 操作的意味論, インタープリタ |
第10回 | コード生成(1):概要, アセンブリ言語 | アセンブリ言語, X86-64, 関数呼び出し規約 |
第11回 | コード生成(2):中間言語, 中間言語への変換, アセンブリ言語への変換 | 3番地コード, 中間言語への変換, アセンブリ言語への変換 |
第12回 | 生存変数解析とレジスタ割付け | データフロー解析, 生存変数, 干渉グラフ, グラフ彩色 |
第13回 | レジスタ割付けとコード生成 | 既彩色節, 合弁 |
第14回 | ごみ集め | マークスイープ法,コピー回収法 |
第15回 | プログラミング演習:コード生成 | コード生成器を実装する |
指定しない
講義資料を適宜配付する.
次の本を参考書として使用する.
神林靖,滝本宗宏訳,最新コンパイラ構成技法,Andrew W. Appel著,神林靖,滝本宗宏訳,翔栄社.
「コンパイラ[第2版] 原理・技法・ツール」,A.V.エイホ,M.S. ラム,R.セシィ,J.D.ウルマン著,原田賢一訳,サイエンス社.
中間テスト及びプログラミングに関するレポートにより評価する.
オートマトン,文脈自由文法,アセンブリ言語に関する基礎的な知識を仮定する.
プログラミング言語Scalaによる基礎的なプログラミングができることを仮定する.