Interpreterパターン (1)
『Rubyによるデザインパターン』(ラス・オルセン著 ピアソン・エデュケーション刊)の例をPythonに変換して書いています。目次
周知の通り、PythonもRubyも標準的な処理系は、インタープリタとして実装されています。
Interpreterパターンは、簡易言語(Pythonほど大げさではないやつ)を作るためのパターンです。
Interpreterパターンは抽象構文木(abstract syntax tree、AST)を作る事から始まります。
ASTは生の文字列に比べて、扱いやすく、効率的です。
たとえば、式"5.0 + 3 * x" のASTは次のような感じになります。
さてこのASTが手に入ったら、式の値を計算する容易はほぼ出来ました。変数 x に実際の値を代入する事以外は。
x = 1 なら式全体の値は8.0と評価され、x = -3 なら式全体の値は -4.0 と評価されます。
ASTの値を評価するとき、ASTは自分自身を再帰的に評価していきます。
まず、ツリーのルートノード("*"のノード)に自分自身を評価するように要請します。
すると、"*"のノードは、子ノードである"5.0"と"+"に値を要求します。
"5.0"の値は簡単に分かりますが、"+"のノードはさらに自分の子供たち"3" と "x" に値を要求します。
これで評価が終わり、式全体の値が得られます。
しかし、式の例だと何が嬉しいのか分からないので、次の項でファイル検索コマンドのインタープリタを作ります。