INTERPRETER(解释器)

1 意图:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

2 动机:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。

构建一个解释器,解释这些句子来解决问题。

3 适用性:

当一个语言需要解释执行,并且你可以将该语言中的句子表示为一个抽象的语法分析树时,可使用解释器模式。

效果最好情况:

.文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。无需构建语法分析树即可解释表达式,节省时间和空间。

.效率不是一个关键问题,最高效的解释器不是通过直接解释语法分析树实现的,而是先转换为另外的形式。

4 参与者:

.AbstractExpression:声明一个抽象的解释操作,这个接口为抽象语法树中所有节点所共享。

.TerminalExpression:实现与文法中的终结符相关联的解释操作。一个句子中的每个终结符需要该类的一个实例。

.NonterminalExpression:对文法中的每一条规则R::=R1R2...Rn都需要一个NonterminalExpression

为从R1到Rn的每个符号都维护一个AbstrationExpression类型的实例变量。

实现Interpret操作,递归调用表示R1到Rn的那些对象的解释操作。

.Context:

包含解释器之外的一些全局信息

.Client:

构建抽象语法树。调用解释操作

5 协作:

.Client:构建一个句子,它是NonterminalExpression和TerminalExpression的实例的一个抽象语法树。然后初始化上下文调用解释操作。

.每一个非终结符表达式节点定义相应子表达式的解释操作。而各终结符表达式的解释操作构成了递归的基础。

.每一节点的解释操作用上下文来存储和访问解释器的状态

6 效果:

1)易于改编和扩展

2)也易于实现文法

3)复杂的文法难以维护

4)增加了新的解释表达式的方式

7 实现:

Interpreter和Composite实现相通。

1)创建抽象语法树 解释器不创建语法树。可以由编译器生成或手动创建,或客户提供。

2)定义解释操作:

并不一定要在解释表达式类中定义解释操作,如果经常创建新的解释器,那么用Visitor模式将一个解释器放入一个独立的访问者对象中。

3)与Flyweight模式共享终结符:

8 相关模式:

Composite模式:抽象语法树是一个复合模式的实例

Flyweight:如何在抽象语法树中共享终结符

Iterator:解释器可以用一个迭代器遍历该结构

Visitor:维护语法分析树中各节点的行为。

时间: 2024-10-08 12:09:58

INTERPRETER(解释器)的相关文章

(16):(行为型模式) Interpreter 解释器模式

(16):(行为型模式) Interpreter 解释器模式,布布扣,bubuko.com

设计模式15:Interpreter 解释器模式(行为型模式)

Interpreter 解释器模式(行为型模式) 动机(Motivation) 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化. 在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的. 意图(Intent) 给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器用来解释语言中的句子.——<设计模式>GoF 中文数字转换为阿拉伯数字 public

设计模式 十六、Interpreter 解释器(行为模式)

动机(Motivation) 件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化. 种情况下,特定的领域的问题表达式为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的. 意图(Intent) 给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子. interpreter 模式的几个要点 Interpreter模式的应用场合是interpreter模式应用中

interpreter(解释器模式)

一.引子 其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中:在实际应用中,我们可能很少碰到去构造一个语言的文法的情况. 虽然你几乎用不到这个模式,但是看一看还是能受到一定的启发的. 二.定义与结构 解释器模式的定义如下:定义语言的文法,并且建立一个解释器来解释该语言中的句子.它属于类的行为模式.这里的语言意思是使用规定格式和语法的代码. 在GOF的书中指出:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例

设计模式(15)--Interpreter(解释器模式)--行为型

1.模式定义: 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 2.模式特点: 解释器模式在实际的系统开发中使用的非常少,因为它会引起效率.性能以及维护等问题,一般在大中型的框架型项目能够找到它的身影,比如一些数据分析工具.报表设计工具.科学计算工具等等,若你确实遇到“一种特定类型的问题发生的频率足够高”的情况,准备使用解释器模式时,可以考虑一下Expression4J.MESP(Math

设计模式之解释器模式(Interpreter)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

设计模式(二十)解释器模式(Interpreter)-行为型

解释器模式Interpreter 解释器模式在软件开发中应用的比较少,它主要用在底层的编程语言设计上,因此不太容易理解. 联想:传一个算数表达式,对加减乘除自动匹配,能够自动计算其结果. 原理图 解释器模式实现原理图 单个运算符的数学公式计算机可以用来理解这个解释器模式的使用. 参考文献 [1] 郭峰.深入浅出设计莫模式[M].中国铁道出版社,2013(1):415-423.

Interpreter 模式详解--设计模式(22)

Interpreter 模式的来源: Interpreter(解释器)模式是一种特殊的设计模式,它建立一个解释器(Interpreter),对于特定的计算机程序设计语言,用来解释预先定义的文法.简单地说,Interpreter模式是一种简单的语法解释器构架.解释器模式属于行为模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. Interpreter 模式作用:     正如其名,此模式大多用来解释一些(自定义的)独特语法,例如某些游戏开发引擎中

(二十)解释器模式-代码实现

介绍 概念:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 应用场景:语言解释器(把我们能看懂的代码转换成了难看懂的机器码) 好处:以简单的方式使用复杂的东西. 例子 //解释器 package note.com.interpreter; /** * 解释器 * @author lxz * */ public class Interpreter { public void say(String lag){ if("nh".equals(

【行为型】Interpreter模式

解释器模式意图为给定的语言定义其文法表示,同时定义该文法表示的一套解释器来解释语言中的句子.该模式说的简单通俗点,其主要用途是用来解释用的.至于解释什么,则要看具体的上下文环境.我们可以为一个表达式专门写一个解释器.也可以为一个语句写一个解释器,一个语句可以看成是由多个表达式构成的.因此,我们同样可以为一段文本写个解释器等等.而在要设计实现一个有效的解释器之前,试想下,首先要做的将是要为待解释的表达式进行其文法定义,即:定义其规则.一个先简单的例子,假如用户自己发明了一个脚本语言.如果想要让该语