Up Next
3.1 インタプリタとは

インタプリタ(interpreter)は,文字列を受け取って,それを特定の プログラミング言語のプログラムとして解釈して,実行結果を計算する計算機 プログラムである.よってインタプリタは,解釈するプログラミング言語の シンタックス(syntax),つまり,どのような文字列がプログラムをな すか,と,セマンティクス(semantics),つまり,プログラムがどの ように実行されるか,のふたつを間接的に定義しているといえる.コンパイラ もまた,あるプログラミング言語の構文と意味を規定しているが,入力プログ ラムから,その実行結果を計算するかわりに,別の(多くの場合,アセンブリ 言語などより低級な)プログラミング言語に翻訳した結果を出力とするプログ ラムである.その意味では,インタプリタとコンパイラではセマンティクスの 与え方が違っているといえる.

さて,インタプリタ自体もプログラムであるから,なんらかのプログラミング 言語で書かれている.このとき,「インタプリタ自体が書かれているプログラ ミング言語」を定義する言語(defining language)といい,「インタ プリタが入力として受け取るプログラミング言語」を定義される言語(defined language)という. 本実験では,
定義する言語 = Objective Caml
定義される言語 = ML (Objective Camlのサブセット)
である.一般には,定義する言語と定義される言語は異なるが, 今回のように両者が一致する場合,そのインタプリタを特に,メタ・ サーキュラ・インタプリタ(meta circular interpreter)という. 以下では,定義する言語でのプログラムの記述にはタイプライタ体 (abcde)を,定義される言語のプログラムにはサン・セリフ体 (abcde)を用いて,両者を区別する.

典型的なインタプリタは,字句解析・構文解析・解釈部から構成される. 字句解析・構文解析はコンパイラと同様に,文字列からプログラムの抽象構文 木を生成する過程で,定義される言語のシンタックスを規定している.解釈部 分は,セマンティクスを定義していて,抽象構文木を入力としてプログラムの 実行結果を計算する部分で,インタプリタの核となる.


Up Next