Interpreter パターン

Interpreter パターンは、コンピュータプログラミングにおけるデザインパターンの一つである。Interpreter パターンの基本的な考えは、定義された種類の問題を素早く解くために、Compositパターンを使って ドメイン固有言語を実装することである。特化言語は汎用の言語よりも数倍から数百倍高速に問題を解ける場合が多い。
例.
Java.
以下の Java の例は、汎用のプログラミング言語がより特化した言語を解釈する例を、ここでは 逆ポーランド記法 を用いて示す。
入力:
 '42 4 2 - +' equals 44
パーサー:
import java.util.*;
interface Expression {
 public void interpret(Stack<Integer> s);
 
class TerminalExpression_Number implements Expression {
 private int number;
 
class TerminalExpression_Plus implements Expression {
 
class TerminalExpression_Minus implements Expression {
 
class Parser {
 private ArrayList<Expression> parseTree = new ArrayList<Expression>(); // only one NonTerminal Expression here
 public Parser(String s) {
 for (String token : s.split(" ")) {
 if (token.equals("+")) parseTree.add( new TerminalExpression_Plus() );
 else if (token.equals("-")) parseTree.add( new TerminalExpression_Minus() );
 else parseTree.add( new TerminalExpression_Number(Integer.valueOf(token)) );
 public int evaluate() {
 Stack<Integer> context = new Stack<Integer>(); 
 for (Expression e : parseTree) e.interpret(context);
 return context.pop();
class InterpreterExample {
 public static void main(String[] args) {
 // ここで上述の式を評価している 
 String expression = "42 4 2 - +";
 Parser p = new Parser(expression);
 System.out.println("'" + expression +"' equals " + p.evaluate());