科目名 |
コンパイラ |
担当教員 |
酒居 敬一 |
対象学年 |
3年 |
クラス |
学部:専門001 |
講義室 |
A106 |
開講学期 |
2学期 |
曜日・時限 |
月2,木2 |
単位区分 |
選択 |
授業形態 |
一般講義 |
単位数 |
2 |
準備事項 |
|
備考 |
|
授業の詳細1 |
講義の目的
これまで「アルゴリズムとデータ構造」および「情報学群実験1」「情報学群実験2」で良いプログラムの書き方を学んだ.それに引き続き,「オペレーティングシステム」「計算機アーキテクチャ」「データベース」といった講義とともに本講義を習得することで,計算機のハードウェアとソフトウェアの間に位置するコンパイラと呼ばれるプログラムを理解することを目的とする.
|
授業の詳細2 |
講義の進め方
これまでの講義や実験でも,コンパイラは使用してきている.さらに,高級言語としてC言語やJavaを,低級言語としてアセンブリを,OSのある環境だけではなくOSのない環境でも使用してきた. 本講義では,これまで習得した知識に基づいて,つぎの順で進めていく. 1. コンパイラの入門 2. コンパイラの構成とプログラミング言語の形式的な記述法 3. コンパイラの中核技術(字句解析・構文解析・意味解析・コード生成・コード最適化) 4. Javaに代表される新しいプログラミング言語 |
授業の詳細3 |
達成目標
本講義を修得することにより,以下の能力が身につく. 1.コンパイラというプログラムの動作について理解する. 2.コンパイラの構成を理由とともに理解する. 3.プログラミング言語について,その形式的な表現を読み書きできる. 4.コンパイラの中核技術5つについて,それぞれ理解する. 5.Javaを例に,動的コンパイルの必要性や有用性を理解する. |
授業の詳細4 |
講義計画 1. コンパイラの概要 コンパイラは,プログラミング言語で記述されたプログラムを計算機が理解できる機械語に翻訳するソフトウェアである.ここでは,まず用語を説明し,つぎにインタプリタとコンパイラの違いを理解する. 2. コンパイラの構成 ここでは,次回以降のために,コンパイラの内部について説明する. 3. プログラミング言語の形式的な記述 プログラミング言語の文法を厳密に定義する必要性を説明し,バッカス記法や構文図式について理解する. 4. 字句解析 ソースプログラムをコンパイラが受け取ったときの最初の処理である字句解析を説明し,字句を認識するための有限オートマトンについて理解する. 5-6. 構文解析 字句解析の結果,ソースプログラムはトークンの列になった.ここでは,トークンの列を読みながら,文法と照らしあわせてソースプログラムがどのように記述されたかを機械的に理解する方法について理解する. さらに,構文解析の方法として下向き構文解析,LL(1)文法について述べる. 7. 中間表現 構文解析の結果を表現するための中間表現を説明し,そこで表現されるデータについて理解する. |
授業の詳細5 |
8. 意味解析 構文解析では形式的に名前を取り扱った.ここでは,名前の宣言や使用において過不足がないかを確認することについて理解する.また,この意味解析の効率化にも触れる. 9. コード生成 翻訳するという作業においては,コード生成は最後の処理である.ここでは,中間表現から機械語へ変換する様子を理解する. 10. コード最適化 生成されたコードは実際に計算機で解釈・実行できる状態にある.しかし,実使用上では計算機をより有効に利用し,処理を早く片付けたりコンパクトなコードにしたい.ここでは,コードの最適化について説明し,そのアルゴリズムを理解する. 11. 例外処理 ここでは,例外処理の取り扱いについて学習する.通常処理の中で,例外が発生したときのプログラムの振るまいとそれを実現する方法について理解する. 12-11. コンパイラと実行環境の連携 例外処理やメモリ管理など,実行時に利用する機能がある.ここでは,そういった機能の説明と,実装方法について理解する. 14. 動的コンパイラ Javaの実行環境のように,仮想機械のコードを実機械で処理する場合,解釈実行系よりも実機械のコードにその場で変換して実行したほうが早い場合がある.ここでは,そういった動的コンパイルについて説明し,その手法について学習する. 15. 理解度確認 これまでの学習の効果を確認する. |
授業の詳細6 |
テキスト: 『IT Text コンパイラとバーチャルマシン』, 今城哲二,岩澤京子,布広永示,千葉雄司著(オーム社) ISBN-10: 4274133087 ISBN-13: 978-4274133084 |
授業の詳細7 |
成績評価: 適宜数回の演習を行なうとともにクォータ末に理解度の確認を行なう.合計で100点を満点とし,60点以上を合格(AA, A, B, C)とする. 理解度の確認方法として,教科書で説明されているアルゴリズムや実装を例に,以下のようにする. 1. コンパイラをプログラムとして実装できるようにするため,文法表現の変換を具体例で示してもらう. 2. プログラムとコンパイラの文法を示し,中間表現を生成してもらう.さらに生成に必要なデータ構造について説明してもらう. 3. 中間表現の文法と中間表現を示し,適用可能な最適化をしてもらう.あるいは最適化が適用できない理由を説明してもらう. 4. 専門用語の説明,各種の表現手段や書式について詳細に説明してもらう. 5. プログラムを例に示し,文法を定義してもらう. 6. 文法を示し,構文解析器を実装してもらう. 7. 文法上は正しいが意味が間違っている例を示し,意味解析について説明してもらう. なお,理解度の確認の際には,教科書をはじめとする,紙の資料を参照しても構わない.
<成績評価の基準> AA:特に優れた成績を示したもの A :優れた成績を示したもの B :良好と認められる成績を示したもの C :合格と認められる成績を示したもの F :不合格 |
授業の詳細8 |
備 考: なし
履修前の受講が望ましい科目: アルゴリズムとデータ構造,情報学群実験1,情報学群実験2 |
授業の詳細9 |
|
授業の詳細10 |
|