コンパイラ

科目基礎情報

学校 釧路工業高等専門学校 開講年度 平成31年度 (2019年度)
授業科目 コンパイラ
科目番号 0059 科目区分 専門 / 必修
授業形態 授業 単位の種別と単位数 学修単位: 2
開設学科 情報工学分野 対象学年 5
開設期 前期 週時間数 2
教科書/教材 教科書:佐渡一広他 未来へつなぐデジタルシリーズ コンパイラ(共立出版) 参考書:村上列訳 lex&yaccプログラミング(アスキー出版局)
担当教員 林 裕樹

到達目標

字句解析の仕組みが理解できる
文法定義の表現が理解できる
構文解析の仕組みが理解できる
構文木の意味づけが理解できる
コード生成の仕組みが理解できる

ルーブリック

理想的な到達レベルの目安標準的な到達レベルの目安未到達レベルの目安
評価項目1字句解析の動作原理を理解し、正規表現で記述できる字句解析の動作原理がわかる字句解析の動作がわからない
評価項目2文法定義の表現を理解し、内容を把握できる文法定義の表現方法がわかる文法定義の表現がわからない
評価項目3構文解析の動作原理を理解し、構文解析のオートマトンを構築できる構文解析の動作原理がわかる構文解析の動作がわからない
評価項目4構文木を構築し、その意味を解析できる構文木と意味の対応関係がわかる構文木の意味が分からない
評価項目5コード生成の仕組みを理解し、実際のコードの動作を解析できるコード生成の動作原理がわかるコード生成の動作がわからない

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

学習・教育到達度目標 D 説明 閉じる
JABEE d-1 説明 閉じる

教育方法等

概要:
プログラムを解析してコンピュータで実行可能な形式に変換するための基礎理論や、コンパイラがオートマトンの具体的な応用の一つであることを理解するとともに、字句解析器や構文解析器の自動生成ツール等の応用を学ぶことを目標とする。
これまでに学んだC言語やJava言語などのコンパイラが、どのような仕組みで動作しているのかを理解することができる。
授業の進め方・方法:
講義形式で授業を行う。コンパイラの理論はオートマトンを用いることを前提とするので、オートマトンの授業内容を確認しておくとよい。
また、適宜レポート課題を課す。
合否判定は、2回の定期試験(100点満点)の結果の平均が60点以上で合格とする。
最終評価は、2回の定期試験の結果の平均にレポート等による±10%の評価を加えた総合評価とする。
再試験は、60点未満であった定期試験の範囲それぞれに対して、出題した問題について60%以上得点することを合格の条件とする。
前関連科目:オートマトン
後関連科目:オペレーティングシステム
注意点:
コンパイラの仕組みを理解することで、プログラミング言語の制限やコンパイル時のエラーメッセージの理由なども知ることができるので、自分でコンパイル操作をする際のコンパイラの挙動をよく観察しておくとよい。

授業計画

授業内容 週ごとの到達目標
前期
1stQ
1週 プログラムと言語の動作原理 プログラムがどのように動作しているのかが説明できる
2週 字句解析(1) 字句解析の動作原理が説明できる
3週 字句解析(2) 字句解析器の自動生成ツールの基本動作が説明できる
4週 文法(1) 文法の定義方法が説明できる
5週 下向構文解析(1) 下向構文解析の動作原理が説明できる
6週 下向構文解析(2) LL構文解析の基本動作が説明できる
7週 yaccによる構文解析 yaccによる構文解析器の自動生成の基本が説明できる
8週 前期中間試験を実施する
2ndQ
9週 上向構文解析(1) SLR構文解析の動作原理が説明できる
10週 上向構文解析(2) 構文解析のためのオートマトンの構築原理が説明できる
11週 上向構文解析(3) 正規LR構文解析とLALR構文解析の動作原理が説明できる
12週 構文木と意味づけ 構文木と意味の対応が説明できる
13週 コード生成(1) レジスタ割当の仕組みが説明できる
14週 コード生成(2) 関数や手続きの生成の仕組みが説明できる
15週 コード生成(3) 実際のコンパイラの出力から動作を説明できる
16週 前期末試験を実施する

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

分類分野学習内容学習内容の到達目標到達レベル授業週
専門的能力分野別の専門工学情報系分野プログラミング代入や演算子の概念を理解し、式を記述できる。3
プロシージャ(または、関数、サブルーチンなど)の概念を理解し、これらを含むプログラムを記述できる。3
変数の概念を説明できる。4
データ型の概念を説明できる。4
制御構造の概念を理解し、条件分岐を記述できる。4
制御構造の概念を理解し、反復処理を記述できる。4
与えられたソースプログラムを解析し、プログラムの動作を予測することができる。4
主要な言語処理プロセッサの種類と特徴を説明できる。4
ソフトウェア開発に利用する標準的なツールの種類と機能を説明できる。4
プログラミング言語は計算モデルによって分類されることを説明できる。4
主要な計算モデルを説明できる。4
ソフトウェアアルゴリズムの概念を説明できる。4
与えられたアルゴリズムが問題を解決していく過程を説明できる。4
同一の問題に対し、それを解決できる複数のアルゴリズムが存在しうることを説明できる。4
整列、探索など、基本的なアルゴリズムについて説明できる。4
時間計算量によってアルゴリズムを比較・評価できることを説明できる。4
領域計算量などによってアルゴリズムを比較・評価できることを説明できる。4
コンピュータ内部でデータを表現する方法(データ構造)にはバリエーションがあることを説明できる。4
同一の問題に対し、選択したデータ構造によってアルゴリズムが変化しうることを説明できる。4
リスト構造、スタック、キュー、木構造などの基本的なデータ構造の概念と操作を説明できる。4
ソースプログラムを解析することにより、計算量等のさまざまな観点から評価できる。4
同じ問題を解決する複数のプログラムを計算量等の観点から比較できる。4
計算機工学整数・小数をコンピュータのメモリ上でディジタル表現する方法を説明できる。3
基数が異なる数の間で相互に変換できる。3
整数を2進数、10進数、16進数で表現できる。3
小数を2進数、10進数、16進数で表現できる。3
基本的な論理演算を行うことができる。3
基本的な論理演算を組合わせて、論理関数を論理式として表現できる。3
論理式の簡単化の概念を説明できる。3
簡単化の手法を用いて、与えられた論理関数を簡単化することができる。3
システムプログラム形式言語の概念について説明できる。4
オートマトンの概念について説明できる。4
コンパイラの役割と仕組みについて説明できる。4
形式言語が制限の多さにしたがって分類されることを説明できる。4
正規表現と有限オートマトンの関係を説明できる。4

評価割合

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