到達目標
コンパイラがソースプログラムから機械語を生成するための主なフェーズ(字句解析,構文解析,中間コード生成,仮想機械と仮想機械語,コード生成)について学び,その内容を理解し,説明できるようになることを目標とする。
ルーブリック
| 理想的な到達レベルの目安 | 標準的な到達レベルの目安 | 未到達レベルの目安 |
字句解析 | 字句解析の手法を理解し,説明できる。 | 字句解析の手法を理解している。 | 字句解析の手法を理解していない。 |
構文解析 | 再帰下降解析による構文解析を理解し,説明できる。 | 再帰下降解析による構文解析を理解している。 | 再帰下降解析による構文解析を理解していない。 |
中間コード生成 | 中間コード生成の手法を理解し,説明できる。 | 中間コード生成の手法を理解している。 | 中間コード生成の手法を理解していない。 |
仮想機械と仮想機械語 | 仮想機械と仮想機械語を理解し,説明できる。 | 仮想機械と仮想機械語を理解している。 | 仮想機械と仮想機械語を理解していない。 |
コード生成 | コード生成の手法を理解し,説明できる。 | コード生成の手法を理解している。 | コード生成の手法を理解していない。 |
学科の到達目標項目との関係
教育方法等
概要:
コンパイラは高水準のプログラミング言語を機械語の命令列に変換し,出力するソフトウェアである。コンパイラを構成する各フェーズが,どのような理論に基づいて構築されているのかを学び,コンパイラ(サブセット版)のソースコードから理論がどのように実装されているのかを学ぶ。
授業の進め方・方法:
学習内容はスライドを用いて説明する。理論的な内容について学習した後,Cコンパイラ(サブセット版)のソースプログラムを用い,理論がどのように実装されているのかを理解する。学習の過程でプログラムをコンパイルすることがあるが,Linux上のGCCを用いる。学習内容を確認し,理解を深めるため,課題を出す。
学習内容は,正規表現,有限オートマトン,アセンブリ言語と深い関係がある。
注意点:
試験の成績を70%,平素の学習状況(課題等)を30%とし,総合的に評価する。成績評価は中間と期末の各期間の評価の平均とする。授業中,他の学生と相談してもよいが,各自が主体的に取り組むことが重要である。授業に真剣に取り組まない者は,平素の学習状況を減点することがある。
本科目は学習単位のため,1単位時間(45分)の講義×15回に加えて,2単位時間(90分)の自学自習×15回が必要である。したがって,45時間以上の自学自習を行わなければならない。これが達成されないと,成績評価が60点以上の場合でも,59点として扱い,単位を認定しない。1課題の提出をもって,自学自習1回が実施されたものとする。指定された期日までに課題が提出されなかった場合,減点することがある。
授業の属性・履修上の区分
授業計画
|
|
週 |
授業内容 |
週ごとの到達目標 |
前期 |
1stQ |
1週 |
ガイダンス コンパイラ学ぶ前の準備 |
授業の進め方と評価方法を理解する。 コンパイラ,リンカおよびローダの基本的な機能を理解する。
|
2週 |
コンパイラの概要 |
コンパイル処理の主要なフェーズについて理解する。
|
3週 |
Cコンパイラ(サブセット版)の概要 |
実際に動作可能なコンパイラとして,Cコンパイラ(サブセット版)のソースコードを参考にする。その概要について理解する。
|
4週 |
形式言語 |
形式言語の用語と定義について理解する。
|
5週 |
字句解析(1) |
字句解析の基本について理解する。
|
6週 |
字句解析(2) |
字句解析の基本について理解する。
|
7週 |
構文解析(1) |
再帰下降解析の基本について理解する。
|
8週 |
構文解析(2) |
再帰下降解析の基本について理解する。
|
2ndQ |
9週 |
記号表と型 |
記号表の構造と型の表現方法について理解する。
|
10週 |
中間言語 |
Cコンパイラ(サブセット版)の中間言語について理解する。
|
11週 |
実行時のデータ構成 |
実行時のデータ九尾正の概要について理解する。
|
12週 |
仮想機械と機械語 |
Cコンパイラ(サブセット版)が生成する機械語が動作する,仮想機械とその機械語について理解する。
|
13週 |
インタープリタ |
Cコンパイラ(サブセット版)が生成した仮想機械の機械語を実行するインタープリタについて理解する。
|
14週 |
コード生成(1) |
仮想機械の機械語の生成について理解する。
|
15週 |
コード生成((2) |
仮想機械の機械語の生成について理解する。
|
16週 |
|
|
モデルコアカリキュラムの学習内容と到達目標
分類 | 分野 | 学習内容 | 学習内容の到達目標 | 到達レベル | 授業週 |
専門的能力 | 分野別の専門工学 | 情報系分野 | プログラミング | 主要な言語処理プロセッサの種類と特徴を説明できる。 | 3 | 前1 |
ソフトウェア開発に利用する標準的なツールの種類と機能を説明できる。 | 3 | 前1 |
プログラミング言語は計算モデルによって分類されることを説明できる。 | 3 | |
主要な計算モデルを説明できる。 | 3 | |
システムプログラム | 形式言語の概念について説明できる。 | 4 | 前2 |
コンパイラの役割と仕組みについて説明できる。 | 4 | 前1 |
形式言語が制限の多さにしたがって分類されることを説明できる。 | 4 | 前2 |
正規表現と有限オートマトンの関係を説明できる。 | 4 | 前2 |
評価割合
| 試験 | 課題 | 合計 |
総合評価割合 | 70 | 30 | 100 |
基礎的能力 | 50 | 20 | 70 |
専門的能力 | 20 | 10 | 30 |