【インタープリターパターン】

Interpreterパターン とは?

公開:
💡 文法ルールをクラスで表して、文章を自動で読み解く通訳機
📌 このページのポイント
Interpreterパターン:文法をクラスで表現して解釈 入力式 3 + 5 * 2 + 3 * 5 2 AddExpression MultiplyExpression NumberExpression 結果: 13
Interpreterパターン:式を抽象構文木に変換してinterpret()で評価
ひよこ ひよこ
プログラムが他の言語や式を読んで実行するって、どうやって作るの?
ペンギン先生 ペンギン先生
そこで使えるのがInterpreterパターンだよ。文法のルールをクラスとして表現して、入力された文字列を解釈して実行する仕組みを作れるんだ。
ひよこ ひよこ
文法をクラスで表現って、どういうこと?
ペンギン先生 ペンギン先生
例えば「数値」「足し算」「掛け算」をそれぞれクラスで作るんだよ。「3 + 5」を解析するとき、「3」と「5」をNumberクラス、「+」をAddクラスで表してツリー構造に組み立てる。それを評価(interpret)すると結果の8が得られるよ。
ひよこ ひよこ
正規表現もこれで作れそうだね!
ペンギン先生 ペンギン先生
まさに!正規表現エンジンやSQLパーサ、シェルスクリプトの解析なんかがInterpreterパターンの代表例だよ。Compositeパターンと組み合わせてツリー構造を作るのが定番だね。
ひよこ ひよこ
ツリー構造?
ペンギン先生 ペンギン先生
「3 + 5 * 2」のような式を解釈するとき、掛け算を先に計算するために木のような入れ子構造(抽象構文木)を作るんだよ。葉ノードが数値、枝ノードが演算子になる形だね。
ひよこ ひよこ
小さな言語を自作したいときにも使えそうだね!
ペンギン先生 ペンギン先生
そう!ゲームのスクリプト言語やビジネスルールエンジンにも活用されるよ。ただし文法が複雑になると管理しにくくなるから、そのときはANTLRなどのパーサジェネレータを使うほうがいいね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Interpreterパターン」って出てきたら「文法をクラスで表して文を解釈する設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Interpreter Pattern」 = 解釈者パターン
💬 Interpreterは「通訳者・解釈者」という意味で、異なる言語を翻訳する通訳士のように、プログラムが文を読んで意味を解釈するイメージだよ
← 用語集にもどる