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

Interpreterパターン とは?

最終更新:
💡 式のルールをクラスにして、組み合わせた式を評価する

文法のルールをクラスで表現し、その組み合わせで作った式を解釈・評価するデザインパターン。小さな計算式や条件式の評価器などを設計するときに使える。

📌 このページのポイント
3 + 5 × 2 を式の木で表す + 3 × 5 2 足し算 掛け算 数値 評価:5 × 2 = 10 → 3 + 10 = 13 文字列から木を作る解析処理は別途必要
線は式の親子関係。各演算オブジェクトが子の式を評価し、その結果を使う。
ひよこ ひよこ
計算式を読み取って実行する仕組みを作りたいな。
ペンギン先生 ペンギン先生
その設計に使えるのがInterpreterパターンだよ。「数値」「足し算」「掛け算」などを式のクラスとして表し、組み合わせた式を評価するんだ。
ひよこ ひよこ
文法をクラスで表現するって、どういうこと?
ペンギン先生 ペンギン先生
例えば「3 + 5」を、値3と値5を持つ数値オブジェクトと、その2つを子に持つ足し算オブジェクトで表すんだ。足し算の解釈処理が両方の値を取得して足すと、結果は8になるよ。
ひよこ ひよこ
図の「3 + 5 × 2」はどうなるの?
ペンギン先生 ペンギン先生
足し算の左の子を3、右の子を「5 × 2」の掛け算にするよ。掛け算が5と2を評価して10を返し、足し算が3と10を足して13を返すんだ。木の形が演算のまとまりを表しているね。
ひよこ ひよこ
文字列を渡せば、自動でその木になるの?
ペンギン先生 ペンギン先生
文字を読み、文法や優先順位に従って木を作る解析処理は別に必要だよ。Interpreterパターンだけで、あらゆる入力の解析方法まで自動的に決まるわけではないんだ。
ひよこ ひよこ
複雑な言語にも向いている?
ペンギン先生 ペンギン先生
小さな文法なら式クラスを追いやすいけれど、ルールが増えると管理が難しくなるよ。ANTLRのように文法からパーサーを生成する道具も選択肢になる。ただし、解析結果をどう評価・実行するかは別途設計が必要だね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Interpreterパターン」って出てきたら「文法をクラスで表して文を解釈する設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Interpreter Pattern」 = 解釈者パターン
💬 Interpreterは「通訳者・解釈者」という意味で、異なる言語を翻訳する通訳士のように、プログラムが文を読んで意味を解釈するイメージだよ

参考資料

← 用語集にもどる