定义 给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表
示来解释语言中的句子
类图
通用代码
//抽象表达式
public abstract class AbstractExpression {
public abstract Object Interpret(Context ctx);
}
//终结符表达式
public class TerminalExpression extends AbstractExpression {
@Override
public Object Interpret(Context ctx) {
return null;
}
}
//非终结符表达式
public class NonterminalExpression extends AbstractExpression {
public NonterminalExpression(AbstractExpression...expression){
}
@Override
public Object Interpret(Context ctx) {
// TODO Auto-generated method stub
return null;
}
}
客户类
public class Client {
public static void main(String args[]){
Context ctx = new Context();
//通常定义一个具体的表达式,通常为ListArray,LinkedList,Stack等类型
Stack<AbstractExpression> stack = null;
/*
for( ; ;){
语法判断,并产生递归调用
}
*/
AbstractExpression exp = stack.pop();
exp.Interpret(ctx);
//具体元素进入场景
}
}
优点
扩展性好,修改语法规则只要修改相应的非终结符表达式就可以了
缺点
容易引起类膨胀。每个语法都要产生一个非终结符表达式
采用递归方法,不易调试
效率问题。大量使用了循环和递归
注意事项
解释器模式一般用来解析比较标准的字符集,如SQL语法分析等