3.1
インタプリタとは
インタプリタ
(
interpreter
)は,文字列を受け取って,それを特定の プログラミング言語のプログラムとして解釈して,実行結果を計算する計算機 プログラムである.よってインタプリタは,解釈するプログラミング言語の
シンタックス
(
syntax
),つまり,どのような文字列がプログラムをな すか,と,
セマンティクス
(
semantics
),つまり,プログラムがどの ように実行されるか,のふたつを間接的に定義しているといえる.コンパイラ もまた,あるプログラミング言語の構文と意味を規定しているが,入力プログ ラムから,その実行結果を計算するかわりに,別の(多くの場合,アセンブリ 言語などより低級な)プログラミング言語に翻訳した結果を出力とするプログ ラムである.その意味では,インタプリタとコンパイラではセマンティクスの 与え方が違っているといえる.
さて,インタプリタ自体もプログラムであるから,なんらかのプログラミング 言語で書かれている.このとき,「インタプリタ自体が書かれているプログラ ミング言語」を
定義する言語
(
defining language
)といい,「インタ プリタが入力として受け取るプログラミング言語」を
定義される言語
(
defined language
)という. 本実験では,
定義する言語
=
Objective Caml
定義される言語
=
ML
(Objective Camlのサブセット)
である.一般には,定義する言語と定義される言語は異なるが, 今回のように両者が一致する場合,そのインタプリタを特に,
メタ・ サーキュラ・インタプリタ
(
meta circular interpreter
)という. 以下では,定義する言語でのプログラムの記述にはタイプライタ体 (
abcde
)を,定義される言語のプログラムにはサン・セリフ体 (
abcde
)を用いて,両者を区別する.
典型的なインタプリタは,字句解析・構文解析・解釈部から構成される. 字句解析・構文解析はコンパイラと同様に,文字列からプログラムの抽象構文 木を生成する過程で,定義される言語のシンタックスを規定している.解釈部 分は,セマンティクスを定義していて,抽象構文木を入力としてプログラムの 実行結果を計算する部分で,インタプリタの核となる.