本文共 3283 字,大约阅读时间需要 10 分钟。
解释器模式(Interpreter Pattern):给定一种语言(规定格式和语法的代码),定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
类图及角色
抽象表达角色(Abstract Expression):声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。
终结符表达式角色(Terminal Expression):实现与文法中的终结符相关联的解释操作。一个句子中的每个终结符需要该类的一个实例。
非终结表达式角色(Non terminal Expression):对文法中的每一条规则R::=R1R2…Rn都需要一个Nonterminal Expression类型的实例变量,为文法中的非终结符实现解释(Interpret)操作。解释一般要递归地调用表示R1到Rn的那些对象的解释操作。
上下文角色(context):包含解释器之外的一些全局信息。
客户端角色(client):构建表示该文法定义的语言中一个特定的句子的抽象语法树。该抽象语法树由终结符表达式和非终结符表达式的实例装配而成,调用解释操作。
解释器模式的优缺点
优点
- 易于改变和扩展文法(原因1:使用类来表示文法规则2:可用继承来改变或扩展)。
- 增加新的解释表达式使得实现新的“计算”变得容易。
缺点
4. 每一条文法定义一个类,复杂的文法难以维护(多如乱麻的类难以交织)
当文法非常复杂时,应该用其他技术如语法分析程序或编译器生成器更为合适。
5. 效率低。最高效率的解释器不是通过直接解释分析语法树来实现的,而是将他们转化为另一种形式。(如正则表达式被转换为状态机)
解释器的适用情况
- 文法相对简单,使用率高。
- 不追求效率,或者效率不是一个关键问题。
//上下文环境角色public class Context { private HashMap
上一篇:
下一篇:
转载地址:http://fmrai.baihongyu.com/