#设计模式解释器模式

上传人:宝路 文档编号:47867723 上传时间:2018-07-05 格式:PPT 页数:25 大小:2.31MB
返回 下载 相关 举报
#设计模式解释器模式_第1页
第1页 / 共25页
#设计模式解释器模式_第2页
第2页 / 共25页
#设计模式解释器模式_第3页
第3页 / 共25页
#设计模式解释器模式_第4页
第4页 / 共25页
#设计模式解释器模式_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《#设计模式解释器模式》由会员分享,可在线阅读,更多相关《#设计模式解释器模式(25页珍藏版)》请在金锄头文库上搜索。

1、www.ChinaSA.info Design Patterns解释器模式刘 伟 (Sunny)weiliu_www.ChinaSA.info 大纲w 解释器模式概述w 文法规则和抽象语法树w 解释器模式的结构与实现w 解释器模式的应用实例w 解释器模式的优缺点与适用环境 要不要弄个新的要不要弄个新的 编程语言玩玩?编程语言玩玩?www.ChinaSA.info 解释器模式概述w 加法/减法解释器示意图www.ChinaSA.info 解释器模式概述w 分析C#语言无法直接解释类似“1 + 2 + 3 4 + 1”这样 的字符串定义一套文法规则来实现对这些语句的解释,即设计 一个自定义语言基于

2、现有的编程语言 面向对象编程语言 解释器模式www.ChinaSA.info 解释器模式概述w 解释器模式的定义类行为型模式解释释器模式:给定一个语言,定义义它的文法的一种表示, 并定义一个解释器,这个解释器使用该表示来解释语释语 言中的 句子。Interpreter Pattern: Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.www.

3、ChinaSA.info 解释器模式概述w 解释器模式的定义在解释器模式的定义中所指的“语言”是 使用规定格式和语法的代码是一种使用频率相对较低但学习难度相 对较大的设计模式,用于描述如何使用 面向对象语言构成一个简单的语言解释 器能够加深对面向对象思想的理解,并且 理解编程语言中文法规则的解释过程www.ChinaSA.info 文法规则和抽象语法树w 文法规则 1 + 2 + 3 4 + 1“:=”表示“定义为”“|”表示“或”“”和“”表示“组合”“*”表示“出现0次或多次”expression := value | operation operation := expression +

4、 expression | expression - expression value := an integer /一个整数值www.ChinaSA.info 文法规则和抽象语法树w 抽象语法树抽象语法树(Abstract Syntax Tree, AST) 描述了如何构成一个复杂 的句子,通过对抽象语法 树的分析,可以识别出语 言中的终结符类和非终结 符类非终结符表达式终结符表达式www.ChinaSA.info 解释器模式的结构与实现w 解释器模式的结构www.ChinaSA.info 解释器模式的结构与实现w 解释器模式的结构解释器模式包含以下4个角色:AbstractExpressi

5、on(抽象表达式)TerminalExpression(终结符表达式)NonterminalExpression(非终结符表达式)Context(环境类)www.ChinaSA.info 解释器模式的结构与实现w 解释器模式的实现典型的抽象表达式类代码:abstract class AbstractExpression public abstract void Interpret(Context ctx); www.ChinaSA.info 解释器模式的结构与实现w 解释器模式的实现典型的终结符表达式类代码:class TerminalExpression : AbstractExpressi

6、on public override void Interpret(Context ctx) /终结符表达式的解释操作 www.ChinaSA.info 解释器模式的结构与实现w 解释器模式的实现典型的非终结符表达式类代码:class NonterminalExpression : AbstractExpression private AbstractExpression left; private AbstractExpression right;public NonterminalExpression(AbstractExpression left, AbstractExpression

7、right) this.left = left; this.right = right; public override void Interpret(Context ctx) /递归调递归调 用每一个组组成部分的interpret()方法/在递归调递归调 用时时指定组组成部分的连连接方式,即非终结终结 符的功能 www.ChinaSA.info 解释器模式的结构与实现w 解释器模式的实现环境类Context: 用于存储一些全局信息,一般包含一个Hashtable或List等类 型的集合对象(也可以直接由Hashtable等集合类充当环境类 ),存储一系列公共信息,例如变量名与值的映射关系 (

8、key/value)等,用于在执行具体的解释操作时从中获取相关 信息 可以在环境类中增加一些所有表达式解释器都共有的功能,以 减轻解释器的职责 当系统无须提供全局公共信息时可以省略环境类,根据实际情 况决定是否需要环境类www.ChinaSA.info 解释器模式的结构与实现w 解释器模式的实现典型的环境类代码:using System.Collections; class Context private Hashtable ht = new Hashtable();/往集合对象中设值public void Assign(string key, string value)ht.Add(key,

9、value);/获取存储在集合对象中的值public string Lookup(string key)return (string)htkey; www.ChinaSA.info 解释器模式的应用实例w 实例说明某软件公司要开发一套机器人控制程序,在该机器人控制程序中包含 一些简单 的英文控制指令,每一个指令对应 一个表达式(expression),该 表达式可以是简单 表达式也可以是复合表达式。每一个简单 表达式由移 动方向(direction),移动方式(action)和移动距离(distance)三部分组成,其 中,移动方向包括向上(up)、向下(down)、向左(left)、向右(r

10、ight);移动 方式包括移动(move)和快速移动(run);移动距离为一个正整数。两个表 达式之间可以通过与(and)连接,形成复合(composite)表达式。 用户通过对图 形化的设置界面进行操作可以创建一个机器人控制指令 ,机器人在收到指令后将按照指令的设置进行移动,例如输入控制指令 “up move 5”将“向上移动5个单位”;输入控制指令“down run 10 and left move 20”将“向下快速移动10个单位再向左移动20个单位”。 现使用解释器模式来设计该 程序并模拟实现 。www.ChinaSA.info 解释器模式的应用实例w 实例分析及类图文法规则 终结符表

11、达式direction、action和distance对应 DirectionNode类、ActionNode类和DistanceNode类 非终结符表达式expression和composite对应 SentenceNode类和AndNode类expression := direction action distance | composite /表达式 composite := expression and expression /复合表达式 direction := up | down | left | right /移动方向 action := move | run /移动方式 dis

12、tance := an integer /移动距离www.ChinaSA.info 解释器模式的应用实例w 实例分析及类图抽象语法树 down run 10 and left move 20www.ChinaSA.info 解释器模式的应用实例w 实例分析及类图机器人控制程序结构图www.ChinaSA.info 解释器模式的应用实例w 实例代码 (1) AbstractNode:抽象结点类,充当抽象表达式角色 (2) AndNode:And结点类,充当非终结符表达式角色 (3) SentenceNode:简单句子结点类,充当非终结符表达式角色 (4) DirectionNode:方向结点类,

13、充当终结符表达式角色 (5) ActionNode:动作结点类,充当终结符表达式角色 (6) DistanceNode:距离结点类,充当终结符表达式角色 (7) InstructionHandler:指令处理类,工具类 (8) Program:客户端测试类演示参考代码 (DesignPatternInterpreterSample)www.ChinaSA.info 解释器模式的应用实例w 结果及分析 down run 10 and left move 20向下快速移动向下快速移动1010再向左移动再向左移动2020up move 5 and down run 10 and left move

14、5向上移动向上移动5 5再向下快速移动再向下快速移动1010再向左移动再向左移动5 5www.ChinaSA.info 解释器模式的优缺点与适用环境w 模式优点易于改变和扩展文法可以方便地实现一个简单的语言实现文法较为容易(有自动生成工具 )增加新的解释表达式较为方便www.ChinaSA.info 解释器模式的优缺点与适用环境w 模式缺点对于复杂文法难以维护执行效率较低www.ChinaSA.info 解释器模式的优缺点与适用环境w 模式适用环境可以将一个需要解释执行的语言中的句 子表示为一棵抽象语法树一些重复出现的问题可以用一种简单的 语言来进行表达一个语言的文法较为简单执行效率不是关键问题www.ChinaSA.info ENDEND

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号