二十一 设计模式之解释器模式

来源:互联网 发布:qsv格式转换软件 编辑:程序博客网 时间:2024/05/18 02:23

定义  给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表

示来解释语言中的句子

类图

通用代码

//抽象表达式

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语法分析等