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