1.1 プログラミング言語

1.4 コンパイラの移植
(1) T図式
Nで記述された
LからMへのコンパイラ
L
Mで記述された
Lのインタプリタ
L
M
M
N
インタプリート(解釈)
コンパイル(翻訳)
L
L
M M
N
Lで記述されたプログラムを
Nで記述されたLからMへの
コンパイラで翻訳する
L
L
M
Lで記述されたプログラムを
Mで記述された
Lのインタプリタで
解釈実行する
(2) コンパイラをインタプリタで実行
Lで記述されたAからBへのコンパイラを
Mで記述されたLのインタプリタで解釈実行する
A
B
L
L
M
(3) 仮想マシンによる移植(コンバート)
ひとつのプログラミング言語のコンパイラを複数機種で作成
するのは作業量がかかる
①仮想機械(virtual machine)の機械語を設定し、そのコー
ドを生成するコンパイラを作成する。
②各機種では、仮想機械のインタープリタを作成する。
L
L
I
I
I
M1
I
I
I
I
I
M1
M2
…
I
I
Mn
(4) 仮想マシンのアセンブラ表現を出力
一般のアセンブラのコーディング形式は、ほぼ同じ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ・・・
ラベル部
継続行指定
オペレー
ション部
オペランド部
空白桁
①オペレーションのニーモニックコードやオペランドの記述
方法が異なる。
②アセンブラのソースプログラムはテキスト形式である。
マクロアセンブラで機械語を生成する
①インタプリタ方式よりコンパイラの実行速度が速い。
②インタプリタ方式よりコンパイラのメモリ量が一般に多くな
る。
(5) ブートストラップ(bootstrapping)
ⅰ)ある機種M0上で動作する高級言語Lのコンパイラがあ
るものとする(①)。
ⅱ)機械語M1のコードを生成するコンパイラを言語Lで作成
する(②)。
ⅲ)M0上で②を①によってコンパイルすれば③が得られる。
ⅳ)M0上で②を③によってコンパイルすれば④が得られる
L ② M1
L ④ M1
L ② M1 L L ③ M1 M1 ⅳ)
L L ① M0 M0 ⅲ)
ⅱ)
M0
M1で動く
Lのコンパイラがえられる
ⅰ)
(6) 最適化コンパイラをブートストラップで
ⅰ)非最適化コンパイラL1があるものとする(①)。
ⅱ)最適化コンパイラL2を高級言語L1の機能の範囲内で作
成する(②)。
ⅲ)②を①によってコンパイルすれば③が得られる。
L2 ② M
L2 ③ M
L1 L1 ① M M ⅲ)
ⅱ)
M
ⅰ)
最適化コンパイラ③がえられる
(7) ブートストラップの組合せによる配布
コンパイラを受け取った側で仮想マシンのインタプリタおよ
び対象マシン用のコンパイラ(コード生成部分のみ)を作成
することで新しいマシンのコンパイラを得ることができる。
赤い枠内だけを行う
L
L
L ② M1
L ④ M1
L ② M1 L L
M1 M 1
L
I L L ① I L
I L L
I I
I
②
M
L
M0 0
I
M1
②
M0
M1