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