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

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は「通訳者・解釈者」という意味で、異なる言語を翻訳する通訳士のように、プログラムが文を読んで意味を解釈するイメージだよ
← 用語集にもどる