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

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

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

示来解释语言中的句子

类图

通用代码

//抽象表达式

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值