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