開発
Interpreterパターン
makuta
Interpreter という英単語は、「通訳」や「解釈者」を意味する単語です。
何らかのフォーマットで書かれたファイルの中身を、解析した結果にそって何らかの処理を行いたい場合があります。 Interpreter パターンとは、このような「解析した結果」得られた手順にそった処理を実現するために最適なパターンです。
Interpreterパターンは、GoFでは次のように定義されています。
言語に対して、文法表現と、それを使用して文を解釈するインタプリタを一緒に定義する。
例えば、「1+2」というインプットがあった場合、
- 葉:「1」、「2」といったデータの部分
- 枝:「+」などの処理方法を指定している部分
といったようにデータ構造を作ります。このような構文木にそった処理を実現するには、Interpreterパターンが利用できます。
コードが実行される手順を大まかに説明すると、次のようになります。
- 記述されたコードの文字を意味のある字句(トークン)に分解する(字句解析)
- 字句解析の結果を基に文法に従っているかどうかチェックする(構文解析)
- 中間コードや最終的なコードを生成
- コードを実行
1番目の字句解析と2番目の構文解析がおこなわれた結果は木構造として表すことができ、構文木と呼ばれます。Interpreterパターンは、この構文木を処理するための最適なパターンです。
実際に処理をする時はCompositeパターンと同じなので、再帰的に処理をします。
Interpreterパターンでは、枝の処理方法の部分を処理毎にクラスで定義します。そうすることで、規則の追加や変更が容易になるのです。この規則とは、構文木における節や葉に相当します。そして、そのクラスのインスタンスを繋げることで構文木そのものを表現しつつ、構文木を処理できるのです。
ということで、なんらかの文法規則をもった文書 (プログラム言語) を解析し, その結果得られた手順 (命令) に基づき処理を実行していくInterpreterパターンについてでした。