コンパイラ

科目基礎情報

学校 明石工業高等専門学校 開講年度 2018
授業科目 コンパイラ
科目番号 0046 科目区分 専門 / 必修
授業形態 講義 単位の種別と単位数 履修単位: 1
開設学科 電気情報工学科(情報工学コース) 対象学年 5
開設期 前期 週時間数 2
教科書/教材 (教科書) 湯淺太一:「情報系教科書シリーズ コンパイラ」、オーム社  (参考文献)B. W. Kernighan, R. Pike 著、石田晴久 監訳:「UNIXプログラミング環境(第8章)」、アスキー
担当教員 三浦 欽也

到達目標

この科目ではコンパイラの理論と実際について解説し、コンパイラの開発に必要な知識を習得するとともに、プログラミング言語とプログラムの実行に関するより深い理解を得ることを目的とする。
具体的な達成目標は、
 [1] 字句解析の理論的基礎と手法を理解すること
 [2] 構文解析の理論的基礎と手法を理解すること
 [3] 意味解析とコード生成の手法を理解すること
である。これらの手法を学習することにより、実践的なコンパイラ作成の能力を培い、実践的な問題解決能力を醸成する。また、それらの手法の理論的基礎を学習することにより、プログラミング言語、及び、そのコンパイラを柔軟に設計する基本的な能力を身につけ、プログラムの実行に関するより深い理解を通して、実践的なプログラミングの能力を高める。

ルーブリック

理想的な到達レベルの目安標準的な到達レベルの目安未到達レベルの目安
評価項目1字句解析の理論的基礎と手法を理解し、的確に字句解析をすることができる字句解析の理論的基礎と手法を理解し、字句解析をすることができる字句解析の理論的基礎と手法を理解できず、字句解析をすることができない
評価項目2構文解析の理論的基礎と手法を理解し、的確に構文解析をすることができる構文解析の理論的基礎と手法を理解し、構文解析をすることができる構文解析の理論的基礎と手法を理解できず、構文解析をすることができない
評価項目3意味解析とコード生成の手法を理解し、的確に意味解析とコード生成をすることができる意味解析とコード生成の手法を理解し、意味解析とコード生成をすることができる意味解析とコード生成の手法を理解できず、意味解析とコード生成をすることができない

学科の到達目標項目との関係

学習・教育到達度目標 (F) 説明 閉じる
学習・教育到達度目標 (G) 説明 閉じる
学習・教育到達度目標 (H) 説明 閉じる

教育方法等

概要:
我々がプログラムを記述する際、人間にとって可読性の高いプログラミング言語(高級言語)を用いるのが普通である。コンパイラは、そのような高級言語で記述されたプログラムを、CPUが解釈実行できる言語(機械語)に変換するためのプログラムである。この科目では、これまでに発達してきたプログラミング言語の構文と意味に関するさまざまな理論と、それらに基づいて開発されてきた、プログラミング言語を機械語に変換するための種々の手法について講義を行う。
授業の進め方・方法:
講義。15週で実習を行う。
注意点:
受講に当たっては、マイクロコンピュータ(アセンブリ言語)、プログラミングII、データ構造とアルゴリズム、離散数学(有限オートマトン・形式言語理論)、またはそれらに相当する科目を修得しておくことが望ましい。
合格の対象としない欠席条件(割合) 1/3以上の欠課

授業計画

授業内容 週ごとの到達目標
前期
1stQ
1週 コンパイラの概要
コンパイラ(compiler)の理論的なモデルと一般的なコンパイル(compilation)の過程、また、コンパイラの構造について説明できる。
2週 字句解析 1/3
コンパイラの字句解析の理論的基礎として、正規表現(Regular Expression; RE)と有限オートマトン(Finite Automaton; FA)を扱うことができる。
3週 字句解析 2/3
正規表現で表わされた字句構造を受理する有限オートマトンを構成することができる。
4週 字句解析 3/3
状態遷移表を用いた字句解析プログラムの実際、字句解析プログラムのlexによる自動生成、およびエラー処理について説明できる。
5週 文法(形式言語理論) 1/2
形式言語理論、特にプログラミング言語の構文定義で一般的に用いられる文脈自由文法(Context Free Grammar; CFG)を扱うことができる。また、BNF・拡張BNF・構文図式について説明できる。
6週 文法(形式言語理論) 2/2
形式言語理論における諸概念: 記号列の導出・最左/最右導出・解析木・文法のあいまい性等について説明できる。
7週 構文解析 1/3
再帰的下向き構文解析法、特にLL(1)構文解析について説明できる。また、左再帰の問題を解決することができる。
8週 中間試験
2ndQ
9週 構文解析 2/3
LR構文解析について理解し、構文解析プログラムのyaccによる自動生成について説明できる。
10週 構文解析 3/3
あいまいな文法への対処法とエラー処理について説明できる。
11週 意味解析 1/2
意味解析の概要と言語中の名前とそれが表わすオブジェクトの対応付け(名前の解決)の方法について説明できる。また、スコープと名前空間についても説明できる。
12週 意味解析 2/2
前方参照の扱い、型チェック、型変換、およびエラー処理について説明できる。
13週 コード生成 1/2
具体的な実行環境のモデルを定義し、関数呼び出しに対応するコードの生成について説明できる。また、局所変数等のために記憶領域を割当てる方法について説明できる。
14週 コード生成 2/2
各種の文や式のコードを生成する方法について説明できる。
15週 実習
コンピュータとyacc・lexを用いて簡単な言語処理系を作成することができる。
16週 期末試験

モデルコアカリキュラムの学習内容と到達目標

分類分野学習内容学習内容の到達目標到達レベル授業週
専門的能力分野別の専門工学情報系分野システムプログラム形式言語の概念について説明できる。4
オートマトンの概念について説明できる。4
コンパイラの役割と仕組みについて説明できる。4
形式言語が制限の多さにしたがって分類されることを説明できる。4
正規表現と有限オートマトンの関係を説明できる。4

評価割合

試験課題発表相互評価ポートフォリオその他合計
総合評価割合80200000100
基礎的能力0000000
専門的能力80200000100
分野横断的能力0000000