Post on 28-Mar-2021
コンパイラとプログラミング言語第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 コンパイラとプログラム言語