zoukankan      html  css  js  c++  java
  • 十一个行为模式之解释器模式(Interpreter Pattern)

    定义:
    定义一个语言的文法,可以使用一个解释器来解释其文法。定义终结符和非终结符的统一接口,并使用抽象对象建立非终结符与其它元素的关联。

    结构图:

    • AbstractExpression:抽象表达式类,为所有元素定了抽象解释的操作,是多有终结符类和非终结符类的公共父类。
    • TerminalExperssion:终结符类,所有语法中终结符的解释操作,可以通过复制的组合成为非终结符表达式。
    • NotTerminalExperssion:非终结符类,所有语法非终结符的解释操作,由于非终结符可以包含非终结符表达式,可以使用递归的方式来完成解释。
    • Context:环境类,存放全局的信息,通常它存储了需要解释的语句。

    注意:

    • 如果有多个终结符类或者非终结符类,可以考虑使用工厂方法来创建对应类的实例。
    • 一般解析表达式都需要栈结构来依次从左向右进行解析。

    优点:

    • 可以实现一个简单的语言解析
    • 易于改变和扩展文法,由于解释器使用继承的方式,所以可以动态添加解释器来改变和扩展文法。

    缺点

    • 对复杂文法难为维护,一个终结符或者非终结符对应一个类,如果文法复杂则导致类的个数急剧增加。
    • 执行效率低,采用了大量的循环和递归的方法来解析文法。

    实例

    InterpreterPattern.java

  • 相关阅读:
    css顺序
    修改input默认样式
    H5 新特性之全局属性 三
    h5 全局新属性 四
    H5 新特性之全局属性一
    [心得]VS2008免编译立即生效的方法
    让vs2008支持jQuery的智能提示!
    Winson.Framework 3.3 发布!!
    通过反射自动填充实体
    Winson.SqlPager 2.5 发布!
  • 原文地址:https://www.cnblogs.com/zhangfei614/p/6074151.html
Copyright © 2011-2022 走看看