定义语言的文法,并且建立一个解释器来解释该语言中的句子。
为某种语言定义一个文法,并用该文法解释语言中的语句,当一个程序要处理许多不同,但又有些类似的问题时,用一种简单的语言描述这些问题,然后让程序解释该语言。
在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。
Interpreter模式比较适合简单的文法表示,对于复杂的文法表示,Interpreter模式会产生比较大的类层次结构,需要求助于语法分析生成器这样的标准工具。
抽象表达式类:
public abstract class AbstractExpression {
public abstract void interpret(Context ctx);
}
终结符表达式类:
public class TerminalExpression extends AbstractExpression{
public void interpret(Context ctx) {
System.out.println("TerminalExpression interpret");
}
}
非终结符表达式类:
public class NonterminalExpression extends AbstractExpression {
private AbstractExpression successor;
public AbstractExpression getSuccessor() {
return successor;
}
public void setSuccessor(AbstractExpression successor) {
this.successor = successor;
}
public void interpret(Context ctx) {
System.out.println("NonterminalExpression interpret start");
if(successor!=null){
successor.interpret(ctx);
}
System.out.println("NonterminalExpression interpret end");
}
}
测试类:
public class Client {
public static void main(String[] args) {
Context ctx = new Context();
NonterminalExpression e1 = new NonterminalExpression();
AbstractExpression e2 = new TerminalExpression();
e1.setSuccessor(e2);
e1.interpret(ctx);
}
}