解释器模式,其实就是编译原理中的语法解释器,如果用在项目中,可以用于实现动态脚本的解析,也就是说项目可以支持用户脚本扩展。

但实际上,这种运行时解释,效率很慢,如果不是很需要的话,不建议使用。

一种简单实现:

Context是上下文场景,比如做一个计算器,那这个Context可以作为一个Calculator类,可以在构造函数中用于接受待解析的表达式(如 a+b-c),以及执行相应的解释。

Expression代表不同的symbol的操作,比如:

1.+对应的Expression,操作是:将+的左结点出栈后,和右结点生成+表达式对象压栈(也可以是其他存储结构)

2.具体数字的Expression就只是把数字作为结点存储后压栈

等。

最后在表达式解释完成后,将根结点表达式出栈待用。

Context执行Run,将表达式(a+b-c)中abc的真实值传入,计算得到最后结果。

实现一个较好的解释器需要编译原理知识,可以学习vczh的博客http://www.cppblog.com/vczh/

学习笔记——解释器模式Interpreter的更多相关文章

  1. 设计模式 笔记 解释器模式 Interpreter

    //---------------------------15/04/26---------------------------- //Interpreter 解释器模式----类行为型模式 /* 1 ...

  2. 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern)

    原文:乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern) 作 ...

  3. 解释器模式 Interpreter 行为型 设计模式(十九)

      解释器模式(Interpreter)   考虑上图中计算器的例子 设计可以用于计算加减运算(简单起见,省略乘除),你会怎么做?    你可能会定义一个工具类,工具类中有N多静态方法 比如定义了两个 ...

  4. 二十四种设计模式:解释器模式(Interpreter Pattern)

    解释器模式(Interpreter Pattern) 介绍给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子. 示例有一个Message实体类,某个类对它的 ...

  5. C#设计模式:解释器模式(Interpreter Pattern)

    一,C#设计模式:解释器模式(Interpreter Pattern) 1,解释器模式的应用场合是Interpreter模式应用中的难点,只有满足“业务规则频繁变化,且类似的模式不断重复出现,并且容易 ...

  6. 《Head first设计模式》学习笔记 – 迭代器模式

    <Head first设计模式>学习笔记 – 迭代器模式 代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 爆炸性新闻:对象村餐厅和对象村煎饼屋合并了!真是个 ...

  7. 设计模式之笔记--解释器模式(Interpreter)

    解释器模式(Interpreter) 定义 解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 类图 描述 Expr ...

  8. [设计模式] 15 解释器模式 Interpreter

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对解释器模式是这样说的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.如果一种特定类 ...

  9. Java设计模式学习记录-解释器模式

    前言 这次介绍另一个行为模式,解释器模式,都说解释器模式用的少,其实只是我们在日常的开发中用的少,但是一些开源框架中还是能见到它的影子,例如:spring的spEL表达式在解析时就用到了解释器模式,以 ...

随机推荐

  1. Android UI方面的学习记录

    1,android:textAllCaps=“false” android5.0后有可能button的text显示全是大写,设置这个后才能正常显示小写 2,优化listview性能: 1,view重用 ...

  2. C#第十三天

    1.单例模式 1)将构造函数私有化 2)提供一个静态方法,返回一个对象 3)创建一个单例 namespace 单例模式 { public partial class Form1 : Form { pu ...

  3. centos 安装cacti监控

    CentOS 6下Cacti搭建文档 安装依赖关系 yum -y install mysql-devel httpd php php-pdo php-snmp php-mysql lm_sensors ...

  4. centos6 搭建hdwiki

    前期准备:安装好Mysql+apache+PHP,测试apache能够解析index.php文件后就可以. 用户名 xiaohe 密码 123456 #### mysql安装好后: adduser w ...

  5. no method declared with objective-c selector error

    down voteaccepted Swift 2.2 / Xcode 7.3 has a new way to use selector:Selector("funcName") ...

  6. 项目版本管理 github简介

    git config user.email "c.wuliying@samsung.com"git config user.name "swportal" ** ...

  7. Xcode 8 控制台输出大量不用的log的问题解决&&NSLog失效的解决

    Product-->Scheme-->editeScheme中:Auguments中Environment Variable中 Scheme中添加环境变量 "OS_ACTIVIT ...

  8. ubuntu下安装teamviewer

    Ubuntu 14.04 安装teamviewer出现安装32位依赖包 wget http://download.teamviewer.com/download/teamviewer_i386.deb ...

  9. UVALive 6911 Double Swords (Set,贪心,求区间交集)

    补:华中VJ这个题目很多标程都不能AC了,包括我下面原本AC了的代码,再交就WA掉了,感觉是样例有问题呢-- 首先左边的是必须要选的,然后右边的需要注意,有些区间是可以舍掉的.1.区间里有两个不同的A ...

  10. Asp.net MVC 单元测试 简要笔记

    首先要啰嗦几句. 单元测试是TDD的重要实践方法,也是代码质量的一种保证手段.在项目的工程化开发中,研发人员应该尽量保证书写Unit Test,即使不使用TDD. (VS中,我们可以直接使用微软提供的 ...