定义 给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表
示来解释语言中的句子
类图

通用代码
//抽象表达式
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语法分析等
本文介绍了解释器模式的基本概念,包括其定义、类图、通用代码实现及应用场景。解释器模式适用于解析较为固定的语言结构,例如SQL语法分析。文章还探讨了此模式的优点和局限性。
5051

被折叠的 条评论
为什么被折叠?



