Design Pattern | Interpreter Pattern(インタプリタパターン)

Interpreterパターンとは?

  • Interpreterという英単語は通訳という意味である。
  • Interpreterパターンは、ある形式で書かれたファイルの内容を、「通訳」の役割を持つプログラムで解釈し表現する方式である。
  • GoFのデザインパターンでは、振る舞いに関するデザインパターンに分類される。

Interpreterパターンのサンプルプログラム

テキストファイルに書かれた言語を構文解析するプログラムである。

Class Diagram
Interpreter Pattern Class Diagram

構文解析対象のテキストで使用する言語の文法では、BNF表記法を使用する。

<program> ::= program <command list>
<command list> ::= <command>* end
<command> ::= <repeat command> | <primitive command>
<repeat command> ::= repeat <number> <command list>
<primitive command> ::= go | right | left
  • <program>は、トークンprogramの後にコマンド列が続くことを意味する。
  • <command list>は、0個以上のコマンドの後にトークンendが続くことを意味する。
  • <command>は、繰り返し命令または基本命令のいずれかである。|はORを表す。
  • <repeat command>は繰り返し実行を表す。
  • <primitive command>gorightleftのような基本命令を表す。

例では、program、command list、command、repeat command、primitive commandといった文法概念をノードクラスに分ける。各ノードは自分の文法規則を解析し、構文木を作る。

メリット

言語やルール集合を文法として表現できる場合、Interpreterパターンでは各文法規則をクラスとして表現できる。これにより解析や拡張がしやすくなるが、文法が大きくなるとクラス数が増えやすい。