コンパイラとプログラミング言語
第
1
週 コンパイラの概要2014年4月9日 金岡 晃
1
この授業について
•
講義科目名称–
コンパイラとプログラミング言語•
英文科目名称– Compilers and Programming Languages
•
開講期間–
春学期•
配当年– 3
学年•
単位数– 2
•
科目必選区分–
選択•
担当教員–
金岡 晃•
開講日時–
水曜日・1
時限2014/4/9 コンパイラとプログラム言語
授業計画
2
第
1
週(4/9)
コンパイラの概要 第
2
週(4/16)
コンパイラの構成 第
3
週(4/23)
プログラミング言語の形式的な 記述
第
4
週(4/30)
字句解析の概要と非決定性有限 オートマトン
第
5
週(5/7)
決定性有限オートマトン・字句 解析プログラム
第
6
週(5/14)
中間試験 第
7
週(5/21)
構文解析の概要
/
上向き構文解析第
8
週(5/28)
下向き構文解析
/
構文解析プ ログラム第
9
週(6/4)
中間表現と意味解析 第
10
週(6/11)
Java
仮想マシンとその機械語 第11
週(6/18)
条件分岐文と繰り返し文の コード生成
第
12
週(6/25)
関数呼び出しのコード生成 第
13
週(7/2)
休講 第
14
週(7/9)
休講
(7/23- 8/5)
期末試験
2014/4/9 コンパイラとプログラム言語
授業概要と教科書
•
授業概要–
人間が作るプログラムは人間に対する可読性があるが機械に対して の可読性はない。機械に対する可読性を持たせて実行可能なプログ ラムへと変換するためには、さまざまな処理が必要となる。–
人間が作成したプログラム(ソースプログラム)に対する字句解析 による字句の分割、分割された字句に対する構文解析、そして機械 語への変換という処理が大まかな流れとなる。また構文を解析する にあたっては、そのプログラミング言語がそれぞれの構文でどういった意味を持つか、という 言語自体の形式的な記述も必要となる。
–
本授業では、人間が作るプログラムが機械で動かすプログラムに変換されるコンパイルについて、
その内部の流れとその詳細を学ぶ。
•
教科書–
「コンパイラとバーチャルマシン」(今城哲二他著、オーム社)
3 2014/4/9 コンパイラとプログラム言語
第 1 週 コンパイラの概要
コンパイラとプログラミング言語
4 2014/4/9 コンパイラとプログラム言語
本日の到達目標と概要
• 到達目標
– 言語処理系におけるコンパイラの位置づけの理解 – コンパイラとインタプリタの長所と短所の理解
• 概要
– プログラムの形態 – コンパイラの入出力 – 言語処理系の構成 – トランスレータ – インタプリタ
– コンパイラとインタプリタの比較 – 仮想計算機と Java
5 2014/4/9 コンパイラとプログラム言語
プログラムの形態
2014/4/9 コンパイラとプログラム言語
6
プログラム 計算機上で特定の仕事を行うもの
ソースプログラム 計算機に与える動作指示を人間が読み書き可能な 人工言語(プログラム言語)で記述したもの。
ソースコードと呼ぶこともある。
目的プログラム 人間が読み書きするのは困難な2進数の羅列であ る機械語で構成されているが、そのままでは計算 機で実行できない。オブジェクトプログラム、オ ブジェクトコードまたは機械コードと呼ぶことも ある。
実行プログラム 機械語で構成されており、計算機で実行可能であ る。
コンパイラ
2014/4/9 コンパイラとプログラム言語
7
ソースプログラム
目的プログラム
コンパイラ エラーメッセージ ソースリスト
文法上に誤りがないか チェック
この変換行為を
「コンパイル(
compile
)」と言う。
様々なプログラム で共通する部分
ライブラリとリンケージ
•
外部ライブラリの利用–
組み込み関数や入出力機能は、機械語の量が大き くなる–
目的プログラム(オブジェクトコード)には入れ ず、実行時ライブラリの中の個々の実行時ルーチ ンとして事前に用意していく•
リンケージエディタ–
複数の目的プログラムと実行時ライブラリ中の実 行時ルーチンをまとめて1
つの実行プログラムと して結合する–
リンカと呼ぶこともある•
静的リンクと動的リンク–
静的リンク:リンケージエディタにより必要なプ ログラムをすべて結合する方式–
動的リンク:必要なプログラムをリンケージエ ディタで結合せずに実行し、サブプログラムや実 行時ルーチンを必要になったときに呼び出す方式2014/4/9 コンパイラとプログラム言語
8
メインプログラム とサブプログラム、
など複数のプログ ラムにより
1
つの 大きなプログラム を構成することが多い
エディタ
2014/4/9 コンパイラとプログラム言語
9
ソースプログラムの作成時に 利用するソフトウェア
JCpad Eclipse
秀丸エディタ
Visual Studio
言語処理系
• コンパイラ、リンケージエディタ、エディタ、デバッガ、実行時ラ イブラリなど、プログラムの開発・翻訳(コンパイル)・実行に関 係するプログラム群の総称
• 処理系とも呼ぶ
2014/4/9 コンパイラとプログラム言語
10
エディタ
ソース プログラム
ソース プログラム
・・
・
コンパイラ
コンパイラ
目的 プログラム
目的 プログラム
リンケージ エディタ
実行時 ライブラリ
実行 プログラム
実行 デバッガ
クロスコンパイラ
2014/4/9 コンパイラとプログラム言語
11
エディタ
ソース プログラム
ソース プログラム
・・
・
コンパイラ
コンパイラ
目的 プログラム
目的 プログラム
リンケージ
エディタ 実行
プログラム
通常は
コンパイルした環境と
同じ計算機環境で実行するように コンパイルされる
ソース プログラム
C
コンパイラ 目的 プログラム 計算機の種類が異なるコンパイラ
(クロスコンパイラ)
実行 プログラム
Windows
組み込みマイコン環境
トランスレータとインタプリタ
• トランスレータ
– 高水準プログラム言語のプログラムを入力し、高水準プログラ ム言語のプログラムを出力する
• プリプロセッサ:
– コンパイラの前段階で特別の処理を行うもの
– プログラム言語の文法を拡張した書き方に従うソースプ ログラムを、プログラム言語の文法範囲内に収める
• インタプリタ
– ソースプログラムを読んで直ちに実行する方式
• 言語処理系の一形態
2014/4/9 コンパイラとプログラム言語
12
コンパイラとインタプリタの比較
2014/4/9 コンパイラとプログラム言語
13
コンパイラ インタプリタ
出力 機械語 中間後
翻訳(コンパイル)時間 比較的長い 比較的短い
実行時間 速い 遅い
処理系開発 大変 相対的に楽
•
コンパイラを各計算機の環境ごとにつくらないといけない•
目的プログラムは各環境に応じたものを用意しなければならない•
実行プログラムは各環境に応じたものになる仮想計算機と Java
2014/4/9 コンパイラとプログラム言語
14
エディタ
ソース プログラム
ソース プログラム
・・
・
コンパイラ
コンパイラ
目的 プログラム
目的 プログラム
リンケージ
エディタ 実行
プログラム
コンパイルした環境と同じ計算機環境で実行するようにコンパイルされる
環境に依存しない仮想的に考えられた計算機(バーチャルマシン、仮想計算機)と、
仮想計算機用のプログラムを実行可能なソフトを計算機と
OS
の組ごとに作成すれば、プログラム作成者は
1
つのプログラムを作るだけで様々な環境でプログラムが実行できる本日の到達目標と概要
• 到達目標
– 言語処理系におけるコンパイラの位置づけの理解 – コンパイラとインタプリタの長所と短所の理解
• 概要
– プログラムの形態 – コンパイラの入出力 – 言語処理系の構成 – トランスレータ – インタプリタ
– コンパイラとインタプリタの比較 – 仮想計算機と Java
15 2014/4/9 コンパイラとプログラム言語