コンパイラ構成法
情報工学科 選択 2単位 3年秋学期
【授業の目的】プログラムは,コンパイラと呼ばれるソフトウェアによって,アセンブリ言語や機械語のプログラムに翻訳された上で実行される。この授業では,プログラミング言語についての基礎的な概念や形式化を学んだ後,普段書いているプログラムがコンピュータ内部でどのように実行されるか,そのためにコンパイラがどのように構成されているかを学ぶ.コンパイラは,一般にフロントエンドとバックエンドとの2つの部分に分けることができる.フロントエンドはさらに字句解析,構文解析,意味解析の3つに,バックエンドは中間表現の生成,コード最適化,目的コード作成の3つに分けられる.この授業では,講義時間の関係から全体を詳しく説明する余裕がないので,フロントエンドの部分に焦点を当てて講義を行う.コンピュータアーキテクチャ,アセンブリ言語によるプログラム演習,およびデータ構造とアルゴリズムについての基礎知識を前提とする.
コンパイラこそ,コンピュータ科学の中核を形成する分野である.この講義を通じて,現在のプログラミング言語がどのような考え方と技術によって支えられているか,プログラミング言語がコンピュータアーキテクチャとどのように密接に関係しているか,そして2年次に学んでデータ構造とアルゴリズムが実際にどのように応用されているか,更にコンパイラの開発を通じて計算機科学がどのように発展を遂げてきたかを理解していただきたい.
【テキスト】Andrew W. Appel著,神林靖・滝本宗宏訳,最新コンパイラ構成技法,翔泳社
【評価の方法】プロジェクトと定期試験。
【授業計画】
1.
ガイダンス
2.
Ocamlについて
3.
言語プロセッサの概要:プログラムの実行方式,コンパイラの内部構造と翻訳されたコード例 9/30, 10/7
4.
言語設計:歴史的展望
字句解析:正規表現 10/14
5.
有限オートマトン:字句解析部生成
構文解析:文法、構文と意味 11/4
6.
下向き解析法、再帰的下降法、解析木 11/11
7.
表駆動LL構文解析 11/25
8.
構文駆動翻訳
9.
データ型:型宣言と型検査 12/2
10.
式の処理:構文木と中間表現、レジスタ割付け 12/9
11.
記憶域割付け:構造体・配列の扱い
12.
オブジェクト指向プログラミングの概念
13.
関数型プログラミングの概念
14. 関数の駆動:ヒープとスタック,フレーム割付け 12/16
15. コード最適化と目的コードの生成:コード生成アルゴリズム,制御フローグラフ,最適化技法 1/6, 1/20
【備 考】授業計画は、変更される可能性がある。