1. コンパイラの処理の各フェーズにおける用語を説明できる
2. コンパイラの処理の各フェーズで使われる文法記述を読むことができる
3. コンパイラの処理の各フェーズに関して処理手順を説明できる
概要:
プログラマは、通常、人間の言葉に近いプログラミング言語(例:C言語)を用いてプログラムを作成する。しかし、コンピュータが直接実行できるのは機械語のプログラムだけである。したがって、機械語以外の言語で作成されたプログラムは、機械語のプログラムに翻訳する必要がある。この翻訳を行うのがコンパイラやインタプリタなどの言語処理系である。言語処理系は、現在のソフトウェア開発環境において、重要かつ欠くことのできない基本的なソフトウェア群である。本授業では、言語処理系の中でも重要な位置を占める「コンパイラ」を中心に講義する。
授業目標は次の2点である。第1の目標は、コンパイラの全体構造と各部の役割を理解することである。第2の目標は、コンパイラの各部が行う処理を把握し、そこで行われている基本技術を学ぶことである。コンパイラの各部を実現するための技法やアルゴリズムは他のソフトウェア開発でも利用できる。
授業の進め方・方法:
板書を中心に授業を進めていく。
注意点:
内容の理解と定着をはかるため、課題に取り組む時間が必要である。
|
|
週 |
授業内容 |
週ごとの到達目標 |
前期 |
1stQ |
1週 |
ガイダンス、プログラミング言語 |
各種プログラミング言語の特徴を理解できる。
|
2週 |
コンパイラとインタプリタ |
コンパイラとインタプリタの違いを理解できる。
|
3週 |
コンパイラの論理的構造と物理的構造 |
論理的構造の各フェーズで行う処理の概要を理解できる。 物理的構造の特徴を理解できる。
|
4週 |
言語と形式文法(BNF表記) |
BNF表記の記述法を習得できる。
|
5週 |
言語と形式文法(BNF表記) |
プログラム言語の文法の一部をBNF表記で記述できる。
|
6週 |
言語と形式文法(構文図) |
構文図の記述法を習得できる。
|
7週 |
言語と形式文法(構文図)、 あいまいな文法,あいまいでない文法 |
プログラム言語の文法の一部を構文図で記述できる。 あいまいな文法の特徴を説明できる。
|
8週 |
中間試験 |
|
2ndQ |
9週 |
形式文法 |
言語理論で使われる文法の表記法を理解できる。記号列を生成するための文法を記述することができる。
|
10週 |
形式文法(句構造文法、文脈依存文法、文脈自由文法、正規文法) |
句構造文法、文脈依存文法、文脈自由文法、正規文法の特徴を説明できる。プログラミング言語の文法は正規文法、文脈自由文法で記述できることを理解できる。
|
11週 |
字句解析(字句解析の処理内容、トークン) |
字句解析の処理内容を説明できる。トークンの特徴を説明でき、トークンを検出できる理屈を理解できる。
|
12週 |
字句解析(正規表現とオートマトン) |
正規表現から非決定性有限オートマトンを生成できる。
|
13週 |
字句解析(決定性オートマトンの作成) |
非決定性有限オートマトンを状態数最少の決定性オートマトンに変換できる。
|
14週 |
字句解析(決定性オートマトンの動作) |
決定性オートマトンの動作をトレースし、プログラムを字句解析する処理を机上で実行できる。
|
15週 |
期末試験 |
|
16週 |
テスト返却と解説 |
|
後期 |
3rdQ |
1週 |
構文解析(文脈自由文法) |
プログラムの構文を記述するには文脈自由文法を使うことを理解する。
|
2週 |
構文解析(LL(1)文法) |
LL(1)文法の特徴を理解する。
|
3週 |
構文解析(再帰的下向き構文解析) |
再帰的下向き構文解析の処理の特徴を理解する。
|
4週 |
構文解析(First集合,Follow集合,Director集合,構文解析表) |
First集合、Follow集合、Director集合の意味を理解する。 LL(1)文法から構文解析表を作成することができる。
|
5週 |
構文解析(上向き構文解析) |
上向き構文解析の特徴を理解する。
|
6週 |
構文解析(上向き構文解析) |
構文規則から上向き構文解析の構文解析表を作成することができる。
|
7週 |
構文解析(上向き構文解析) |
上向き構文解析の動作をトレースし、どのように構文木が作られるかを示すことができる。
|
8週 |
中間試験 |
|
4thQ |
9週 |
意味解析(意味解析の処理内容) |
意味解析の必要性を理解する。
|
10週 |
意味解析(名前表の構造) |
名前表の必要性を説明できる。名前表に保持するデータの特徴を理解する。名前表の構造の特徴を理解する。
|
11週 |
意味解析(名前表の探索) |
名前表にデータを登録する手法、名前表からデータを探索する手法を理解する。変数のスコープを実現する手法を理解する。
|
12週 |
コード生成(中間コードの種類) |
中間コードの必要性を理解する。 中間コードにどのようなものがあるかを説明できる。
|
13週 |
コード生成(中間コードの生成) |
構文木から中間コードを生成する手法を理解する。
|
14週 |
コードの最適化 |
局所的最適化に関して理解する。 反復構造に関する最適化に関して理解する。
|
15週 |
期末試験 |
|
16週 |
テスト返却と解説 |
|
分類 | 分野 | 学習内容 | 学習内容の到達目標 | 到達レベル | 授業週 |
専門的能力 | 分野別の専門工学 | 情報系分野 | プログラミング | 代入や演算子の概念を理解し、式を記述できる。 | 4 | |
プロシージャ(または、関数、サブルーチンなど)の概念を理解し、これらを含むプログラムを記述できる。 | 4 | |
変数の概念を説明できる。 | 4 | |
データ型の概念を説明できる。 | 4 | |
制御構造の概念を理解し、条件分岐を記述できる。 | 4 | |
制御構造の概念を理解し、反復処理を記述できる。 | 4 | |
与えられた問題に対して、それを解決するためのソースプログラムを記述できる。 | 4 | |
ソフトウェア生成に必要なツールを使い、ソースプログラムをロードモジュールに変換して実行できる。 | 4 | |
与えられたソースプログラムを解析し、プログラムの動作を予測することができる。 | 4 | |
主要な言語処理プロセッサの種類と特徴を説明できる。 | 4 | |
ソフトウェア開発に利用する標準的なツールの種類と機能を説明できる。 | 4 | |
ソフトウェア | アルゴリズムの概念を説明できる。 | 4 | |
与えられたアルゴリズムが問題を解決していく過程を説明できる。 | 4 | |
同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを説明できる。 | 4 | |
整列、探索など、基本的なアルゴリズムについて説明できる。 | 4 | |
コンピュータ内部でデータを表現する方法(データ構造)にはバリエーションがあることを説明できる。 | 4 | |
システムプログラム | 形式言語の概念について説明できる。 | 4 | |
オートマトンの概念について説明できる。 | 4 | |
コンパイラの役割と仕組みについて説明できる。 | 4 | |
形式言語が制限の多さにしたがって分類されることを説明できる。 | 4 | |
正規表現と有限オートマトンの関係を説明できる。 | 4 | |