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:维护语法分析树中各节点的行为。

INTERPRETER(解释器)的更多相关文章

  1. 二十三、Interpreter 解释器模式

    设计: 代码清单: Node public abstract class Node { public abstract void parse(Context context) throws Parse ...

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

    Interpreter 解释器模式(行为型模式) 动机(Motivation) 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变 ...

  3. 23、Interpreter 解释器模式

    1.Interpreter 解释器模式 解释器模式是一种使用频率相对较低但学习难度较大的设计模式,它用于描述如何使用面向对象语言构成一个简单的语言解释器.在某些情况下,为了更好地描述某一些特定类型的问 ...

  4. 面向对象设计模式之Interpreter解释器模式(行为型)

    动机:在软件构建过程中 ,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化.在这种情况下,将特定领域的问题表达为某种语法规则的句子,然后构建一个 ...

  5. interpreter(解释器模式)

    一.引子 其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中:在实际应用中,我们可能很少碰到去构造一个语言的文法的情况. 虽然你几乎用 ...

  6. Interpreter(解释器)-类行为型模式

    1.意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 2.动机 如果一种特定类型的问题发生的频率足够高,那么可能就值的将该问题的各个实例表述为一个 ...

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

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解 ...

  8. [设计模式]解释器(Interpreter)之大胆向MM示爱吧

    为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 “我刚写了个小程序,需要你来参与下.”我把MM叫到我的电脑旁,“来把下面这条命令打进去,这是个练习打(Pian)符(ni)号(de)的 ...

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

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  10. 解释器( interpreter ) 与 编译器( compiler ) 的对比

    什么是解释器与编译器 1.解释器 解释器是一种计算机程序,它将每个高级程序语句转换成机器代码. 2.编译器 把高级语言编写的程序转换成机器码,将人可读的代码转换成计算机可读的代码(0和1). 3.机器 ...

随机推荐

  1. 使用工具创建Ribbon的按钮

         来自为知笔记(Wiz)

  2. recv send 阻塞和非阻塞

    http://blog.csdn.net/xiaofei0859/article/details/6037814 int send( SOCKET s, const char FAR *buf, in ...

  3. Codeforces Round #370 (Div. 2) A

    Description There are n integers b1, b2, ..., bn written in a row. For all i from 1 to n, values ai ...

  4. dubbo源码之四——服务发布二

    dubbo版本:2.5.4 2. 服务提供者暴露一个服务的详细过程 上图是服务提供者暴露服务的主过程: 首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloWorldImpl ...

  5. 【leetcode❤python】171. Excel Sheet Column Number

    #-*- coding: UTF-8 -*- # ord(c) -> integer##Return the integer ordinal of a one-character string. ...

  6. 协方差Covariance的表述推导

    今天想了一下关于概率论的一维数据期望.方差以及高维数据的矩阵表示,突然想到为什么在一维中 方差的表示为:V(x) = E((x-E(x))2) 而到了高维,这样的表述就成了协方差呢?V(X) = E( ...

  7. 查看博客模板的css代码

    1.可以去模板列表里选择一个模板 http://www.cnblogs.com/Skins.aspx 目前使用的模板是http://www.cnblogs.com/SkinUser.aspx?Skin ...

  8. Android 杂记 - 存货盘点用的客户端

    最近有个盘点用的东西,要放到移动设备,本来用 .Net Compact Framework,CAB 部署在 CE 系统的移动条码设备.技术太旧,我用了这个周末两天时间,把这东西在试试实现在安卓上面,给 ...

  9. CUBRID学习笔记 11 数据类型之日期

    datetime 虽然和mysql很相像,但是日期类型和mysql是不一样的.和sqlserver差不多. 如YYYY-MM-DD hh:mi:ss.fff or mm/dd/yyyy hh:mi:s ...

  10. catkin_make broken after intalling python 3.5 with anaconda

    "No module named catkin_pkg.package" on catkin_make w/ Indigo I have the problem after ana ...