コンパイラとプログラミング⾔語
第1週 コンパイラの概要
2013年4⽉10⽇
⾦岡 晃
1
この授業について
•
講義科⽬名称
–
コンパイラとプログラミング⾔語
•
英⽂科⽬名称
– Compilers and Programming Languages
•
開講期間
–
春学期
•
配当年
– 3
学年
•
単位数
– 2
•
科⽬必選区分
–選択
•
担当教員
–
⾦岡 晃
•
開講⽇時
–
⽔曜⽇・
1時限
2013/4/10 コンパイラとプログラム⾔語
授業計画
2
第1週 コンパイラの概要 第2週 コンパイラの構成
第3週 プログラミング⾔語の形式的 な記述
第4週 字句解析の概要と⾮決定性有 限オートマトン
第5週 決定性有限オートマトン 第6週 字句解析プログラム
第7週 中間試験
第8週 構⽂解析の概要
第9週 下向き構⽂解析
第10週 構⽂解析プログラム 第11週 中間表現と意味解析
第12週 Java仮想マシンとその機械語 第13週 条件分岐⽂と繰り返し⽂の
コード⽣成
第14週 関数呼び出しのコード⽣成 第15週 期末試験
2013/4/10 コンパイラとプログラム⾔語
授業概要と教科書
•
授業概要
–
本授業では、
C⾔語のサブセットのプログラミング⾔語を取り上 げ、字句解析、構⽂解析、意味解析を⾏い、機械語(
Java仮想マ シンのバイトコード)を⽣成するコンパイラを
Java⾔語で実装す る⽅法について解説する
•
教科書
–
「コンパイラとバーチャルマシン」
(今城哲⼆他著、オーム社)
•
参考書
–
「プログラミング⾔語処理系」
(佐々政孝著、岩間書店)
–
「コンパイラ第
2版」
(エイホ・ラム・セシィ・ウルマン著、
サイエンス社)
3 2013/4/10 コンパイラとプログラム⾔語
評価⽅法とオフィスアワー
•
評価⽅法
–
期末試験・中間試験を
80点、出席状況を
20点とし、合計が
60点 以上を合格とする。
•
オフィスアワー
–
オフィスアワーについてはメールで個別に時間を予約するもの とする
•
連絡先:
[email protected]‐u.ac.jp4 2013/4/10 コンパイラとプログラム⾔語
第 1 週 コンパイラの概要
コンパイラとプログラミング⾔語
5 2013/4/10 コンパイラとプログラム⾔語
本⽇の到達⽬標と概要
•
到達⽬標
–
⾔語処理系におけるコンパイラの位置づけの理解
–コンパイラとインタプリタの⻑所と短所の理解
•
概要
–
プログラムの形態
–コンパイラの⼊出⼒
–
⾔語処理系の構成
–トランスレータ
–インタプリタ
–
コンパイラとインタプリタの⽐較
–仮想計算機と
Java6 2013/4/10 コンパイラとプログラム⾔語
プログラムの形態
2013/4/10 コンパイラとプログラム⾔語
7
プログラム 計算機上で特定の仕事を⾏うもの
ソースプログラム 計算機に与える動作指示を人間が読み書き可能な 人工言語(プログラム言語)で記述したもの。ソース コードと呼ぶこともある。
⽬的プログラム 人間が読み書きするのは困難な2進数の羅列である 機械語で構成されているが、そのままでは計算機で 実行できない。オブジェクトプログラム、オブジェクト コードまたは機械コードと呼ぶこともある。
実⾏プログラム 機械語で構成されており、計算機で実行可能である。
コンパイラ
2013/4/10 コンパイラとプログラム⾔語
8
ソースプログラム
⽬的プログラム コンパイラ
コンパイラ エラーメッセージ ソースリスト
⽂法上に誤りがないか チェック
この変換⾏為を
「コンパイル(compile)」
と⾔う。
様々なプログラ ムで共通する部
分
ライブラリとリンケージ
•
外部ライブラリの利⽤
–
組み込み関数や⼊出⼒機能は、機械語の量が⼤き くなる
–
⽬的プログラム(オブジェクトコード)には⼊れ ず、実⾏時ライブラリの中の個々の実⾏時ルーチ ンとして事前に⽤意していく
•
リンケージエディタ
–
複数の⽬的プログラムと実⾏時ライブラリ中の実
⾏時ルーチンをまとめて
1つの実⾏プログラムと して結合する
–
リンカと呼ぶこともある
•
静的リンクと動的リンク
–
静的リンク:リンケージエディタにより必要なプ ログラムをすべて結合する⽅式
–
動的リンク:必要なプログラムをリンケージエ ディタで結合せずに実⾏し、サブプログラムや実
⾏時ルーチンを必要になったときに呼び出す⽅式
2013/4/10 コンパイラとプログラム⾔語
9
メインプログラム とサブプログラム、
など複数のプログ ラムにより1つの
⼤きなプログラム を構成することが
多い
エディタ
2013/4/10 コンパイラとプログラム⾔語
10
ソースプログラムの作成時に 利⽤するソフトウェア
JCpad Eclipse
秀丸エディタ 秀丸エディタ
Visual Studio
⾔語処理系
• コンパイラ、リンケージエディタ、エディタ、デバッガ、実⾏時ラ イブラリなど、プログラムの開発・翻訳(コンパイル)・実⾏に関 係するプログラム群の総称
• 処理系とも呼ぶ
2013/4/10 コンパイラとプログラム⾔語
11
エディタ
プログラムソース
プログラムソース
・・・
コンパイラ
コンパイラ
プログラム⽬的
プログラム⽬的
リンケージ エディタ ライブラリ実⾏時
プログラム実⾏
実⾏
デバッガ
クロスコンパイラ
2013/4/10 コンパイラとプログラム⾔語
12
エディタ
プログラムソース
プログラムソース
・・・
コンパイラ
コンパイラ
プログラム⽬的
プログラム⽬的
リンケージ
エディタ 実⾏
プログラム
通常は
コンパイルした環境と通常は
同じ計算機環境で実⾏するように コンパイルされる
プログラムソース
コンパイラC ⽬的 プログラム
計算機の種類が異なるコンパイラ
(クロスコンパイラ)
プログラム実⾏
Windows 組み込み
マイコン環境
トランスレータとインタプリタ
•
トランスレータ
–
⾼⽔準プログラム⾔語のプログラムを⼊⼒し、⾼⽔準プログラ ム⾔語のプログラムを出⼒する
•
プリプロセッサ:
–
コンパイラの前段階で特別の処理を⾏うもの
–
プログラム⾔語の⽂法を拡張した書き⽅に従うソースプ ログラムを、プログラム⾔語の⽂法範囲内に収める
•
インタプリタ
–
ソースプログラムを読んで直ちに実⾏する⽅式
•
⾔語処理系の⼀形態
2013/4/10 コンパイラとプログラム⾔語
13
コンパイラとインタプリタの⽐較
2013/4/10 コンパイラとプログラム⾔語
14
コンパイラ インタプリタ
出⼒ 機械語 中間語
翻訳(コンパイル)時間 ⽐較的⻑い ⽐較的短い
実⾏時間 速い 遅い
処理系開発 ⼤変 相対的に楽
• コンパイラを各計算機の環境ごとにつくらないといけない
• ⽬的プログラムは各環境に応じたものを⽤意しなければならない
• 実⾏プログラムは各環境に応じたものになる
仮想計算機と Java
2013/4/10 コンパイラとプログラム⾔語
15
エディタ
ソース プログラムソース
ソース プログラムソース
・・・
コンパイラ
コンパイラ
⽬的 プログラム⽬的
⽬的 プログラム⽬的
リンケージ
エディタ 実⾏実⾏
プログラム
コンパイルした環境と同じ計算機環境で実⾏するようにコンパイルされる
環境に依存しない仮想的に考えられた計算機(バーチャルマシン、仮想計算機)と、
仮想計算機⽤のプログラムを実⾏可能なソフトを計算機とOSの組ごとに作成すれば、
プログラム作成者は1つのプログラムを作るだけで様々な環境でプログラムが実⾏できる
授業計画
16
第1週 コンパイラの概要 第2週 コンパイラの構成
第3週 プログラミング⾔語の形式的 な記述
第4週 字句解析の概要と⾮決定性有 限オートマトン
第5週 決定性有限オートマトン 第6週 字句解析プログラム
第7週 中間試験
第8週 構⽂解析の概要
第9週 下向き構⽂解析
第10週 構⽂解析プログラム 第11週 中間表現と意味解析
第12週 Java仮想マシンとその機械語 第13週 条件分岐⽂と繰り返し⽂の
コード⽣成
第14週 関数呼び出しのコード⽣成 第15週 期末試験
2013/4/10 コンパイラとプログラム⾔語
次回以降
• コンパイラの内部へ
– 第2週「コンパイラの構成」
– 第3週「プログラミング⾔語の形式的な記述」
• コンパイラ動作の詳細
– ソースコードに対する最初のアクション「字句解析」
• 第4週「字句解析の概要と⾮決定性有限オートマトン」
• 第5週「決定性有限オートマトン」
• 第6週「字句解析プログラム」
– 続いてのアクション「構⽂解析」
• 第8週「構⽂解析の概要」
• 第9週「下向き構⽂解析」
• 第10週「構⽂解析プログラム」
– 出来上がった「中間表現」
• 第11週「中間表現と意味解析」
– 最終フェーズ「コード⽣成」
• 第12週「Java仮想マシンとその機械語」
• 第13週「条件分岐⽂と繰り返し⽂のコード⽣成」
• 第14週「関数呼び出しのコード⽣成」
2013/4/10 コンパイラとプログラム⾔語
17