アルゴリズムとデータ構造1

コンパイラ
2012年10月1日
酒居敬一@A468([email protected])
http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/COMP/2012/index.html
1
テキスト
 『コンパイラとバーチャルマシン』
今城哲二,布広永示,岩澤京子,千葉雄司
オーム社
参考書

『コンパイラの構造と最適化』
 中田育男 著(朝倉書店)

『コンパイラ』
 中井央

著(コロナ社)
『プログラミング言語C』
 B.W.カーニハン,D.M.リッチー
2
著,石田晴久 訳(共立出版).
共著
講義計画
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
コンパイラの概要
コンパイラの構成
プログラミング言語の形式的な記述
字句解析
構文解析1
構文解析2
中間表現
意味解析
コード生成
コード最適化
例外処理
コンパイラと実行環境の連携1
コンパイラと実行環境の連携2
動的コンパイラ
[クォータ末試験]
(10月1日2時限)
(10月4日2時限)
(10月11日2時限)
(10月15日2時限)
(10月18日2時限)
(10月22日2時限)
(10月25日2時限)
(10月29日2時限)
(11月1日2時限)
(11月5日2時限)
(11月8日2時限)
(11月12日2時限)
(11月15日2時限)
(11月19日2時限)
(未定11月22日?)
成績評価


クオータ末試験および演習を総合的に評価する.
試験や演習で持ち込めるもの


4
教科書・ノート・配布資料
再試験はしない.
本講義の位置づけ
1.
プログラムの勉強(技術的な知識)


2.
アルゴリズムとデータ構造(抽象的な知識)


3.

情報学群実験2
コーディング対象を知る
システム設計の勉強(高水準の知識)


5
計算機システムの基礎
数学と計算法(計算機はΣや∫を知らない)
計算機のしくみの勉強(低水準の知識)

4.
計算機言語、情報学群実験1
背景は、表現方法としてのプログラミング言語
オペレーティングシステム
コンパイラ
コンパイラ
ソース
プログラム
コンパイラ
目的
プログラム
実行中の
プログラム
エラーメッセージ
ソースリスト
プログラム
ファイル
コンパイラは、ソースファイルをオブジェクトファイルに
翻訳する。
その過程で言語仕様に合わない記述があれば、エラー。


6
さまざまなプログラム
ソースプログラム(Source Program)


人間が読み書き可能な、人工言語で書いたプログラム。
オブジェクトプログラム(Object Program)


ソースプログラムを機械語に翻訳したプログラム。

ただし、そのままでは実行できない。
実行プログラム(Executable Program)


実行時ライブラリなどと結合し計算機で実行できるプログラム。
これらは通常、ファイルに格納しておく。


それぞれに読み書きするプログラムが存在する。

7
エディタ、コンパイラ、リンケージエディタ、OS、デバッガ
言語処理系の構成
ソース
プログラム
エディタ
コンパイラ
・
・
・
目的
プログラム
・
・
・
実行時
ライブラリ
リンケージ
エディタ
実行
プログラム
動的
リンカ
OSの上で
実行
デバッガ
ソース
プログラム
8
コンパイラ
目的
プログラム
クロスコンパイラ
多くのコンパイラではコンパイラが動作する計算機と、
実行プログラムが動作する計算機は同じ。
しかし、そうでない場合もある。


ソース
プログラム
C
コンパイラ
開発用PC
目的
プログラム
マイコンで
実行
組み込みマイコン
学群実験2で演習したはず。覚えてますか?

9
プリプロセッサ

高水準言語記述のファイルを入力し、高水準言語の
ファイルを出力するプログラムをトランスレータと呼ぶ。


PascalからC、FORTRANからCへの変換系がある。
コンパイラの前段階で特別に変換するものを、
プリプロセッサと呼ぶ。
C++ソース
プログラム
10
C++プリ
プロセッサ
Cソース
プログラム
C
コンパイラ
目的
プログラム
インタプリタ

解釈と実行を行うプログラムをインタプリタと呼んでいる。

翻訳するプログラムはコンパイラ。
インタプリタ
ソース
プログラム
ソース
プログラム
11
コンパイラ部
コンパイラ
中間語
(メモリ上)
中間語
インタプリタ部
インタプリタ
コンパイラとインタプリタの比較

実行速度はざっと一桁くらい、コンパイルして得た
プログラムのほうが速い。

コンパイラは「解釈」がいらない水準まで「翻訳」する。


翻訳には時間がかかる。
プロセッサで即実行できるので実行は速い。



インタープリタは「翻訳」する場合もある。

プロセッサで即実行できないので、「解釈」に時間がかかる。



OSは実行可能形式ファイルをメモリにロードするだけ。
解釈と実行はプロセッサというハードウェアが行っている。
OSは解釈実行プログラム(インタプリタ)をメモリにロードする。
解釈と実行をインタプリタというソフトウェアが行っている。
ここまでは、現在でも生きているけど、古い話。
12
インタプリタの例

数値計算 (計算機の前で電卓たたいてませんか?)


雑多な処理



bash, perl, awk, sed
ruby, python
プログラミング言語



bc
(かつての)BASIC
scheme
再利用することはないプログラムは、インタプリタ言語で
書いて、使って、捨てる。

13
一桁も二桁も遅くてもいい。仕事するのは機械だから。
仮想計算機とJava


バイトコードが中間語、Java VMがインタープリタ、
というように見える。
実際は、解釈をプロセッサに任せるべく、
Java VM
実行時に機械語へコンパイルしている。
OS A
計算機A
Java VM
Java
プログラム

Java
コンパイラ
Java
バイトコード
2ページ前に「古い」と書いた理由。
・
・
・
OS B
計算機B
Java VM
OS C
計算機C
14