インタープリター
最近いろいろあってインタプリターを勉強中。
このエントリーはそれの備忘録。
インタプリターを実装するのは個人で行うと大変だ。なぜなら結構な規模のプログラムになるからだ。
インタプリターのプログラムは次のようにパート分けできる
- 字句解析処理
- 構文解析処理
- 意味解析処理
- 実行処理
コンパイラだと実行の所がアセンブリなりバイトコードなりの出力となる。
この4つのパートそれぞれが結構なボリューム&難しいので,とてもいい練習になると思う。
実際大学の情報処理学科だと学部生の授業のひとつとしてコンパイラ作成があるときくし。
字句解析処理はソースをプログラム的に意味のある単語や文に分解する。
ソース中のコメントはこの処理で消える。
単語は型とか変数名とか定数とか予約語とか。
文とは演算とか代入とかの命令の一塊をさすみたいだけど,結構人によってばらばらな解釈みたいです。
構文解析処理は字句解析によって得られた単語や文からツリー構造を作ります。
ツリー構造というのは例えば
a = 3 + 10;
という文から次の図のようなものになります
意味解析では出来上がったツリー構造にをトラバースして変数宣言とか関数の定義とかを見つけて実行の前処理をしてあげる。
トラバースというのは,ツリー構造をルートから左優先でツリーを辿る処理です。
このとき変数宣言から変数のテーブルを作ったりなど実行時に必要な事をしてあげます。
実行では意味解析同様ツリー構造をトラバースします。
ここではスタック処理とかを使って四則演算やったりデータにアクセスしたり関数呼び出したり。。。
ちなみに実行を行うプログラムをバーチャルマシンと呼ぶこともあるそうです。