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
© Copyright 2024 ExpyDoc