C#设计模式-解释器模式

C#设计模式-解释器模式

ID:36432705

大小:2.31 MB

页数:25页

时间:2019-05-09

C#设计模式-解释器模式_第1页
C#设计模式-解释器模式_第2页
C#设计模式-解释器模式_第3页
C#设计模式-解释器模式_第4页
C#设计模式-解释器模式_第5页
资源描述:

《C#设计模式-解释器模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、DesignPatterns解释器模式刘伟(Sunny)weiliu_china@126.com大纲解释器模式概述文法规则和抽象语法树解释器模式的结构与实现解释器模式的应用实例解释器模式的优缺点与适用环境要不要弄个新的编程语言玩玩?解释器模式概述加法/减法解释器示意图解释器模式概述分析C#语言无法直接解释类似“1+2+3–4+1”这样的字符串定义一套文法规则来实现对这些语句的解释,即设计一个自定义语言基于现有的编程语言面向对象编程语言解释器模式解释器模式概述解释器模式的定义类行为型模式解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示

2、来解释语言中的句子。InterpreterPattern:Givenalanguage,definearepresentationforitsgrammaralongwithaninterpreterthatusestherepresentationtointerpretsentencesinthelanguage.解释器模式概述解释器模式的定义在解释器模式的定义中所指的“语言”是使用规定格式和语法的代码是一种使用频率相对较低但学习难度相对较大的设计模式,用于描述如何使用面向对象语言构成一个简单的语言解释器能够加深对面向对象思想的理解,并且理解编程语言中文法规则的解释过程文法

3、规则和抽象语法树文法规则1+2+3–4+1“::=”表示“定义为”“

4、”表示“或”“{”和“}”表示“组合”“*”表示“出现0次或多次”expression::=value

5、operationoperation::=expression'+'expression

6、expression'-'expressionvalue::=aninteger//一个整数值文法规则和抽象语法树抽象语法树抽象语法树(AbstractSyntaxTree,AST)描述了如何构成一个复杂的句子,通过对抽象语法树的分析,可以识别出语言中的终结符类和非终结符类非终结符表达式终结符表达式解释器模式的结构与

7、实现解释器模式的结构解释器模式的结构与实现解释器模式的结构解释器模式包含以下4个角色:AbstractExpression(抽象表达式)TerminalExpression(终结符表达式)NonterminalExpression(非终结符表达式)Context(环境类)解释器模式的结构与实现解释器模式的实现典型的抽象表达式类代码:abstractclassAbstractExpression{publicabstractvoidInterpret(Contextctx);}解释器模式的结构与实现解释器模式的实现典型的终结符表达式类代码:classTerminalExpres

8、sion:AbstractExpression{publicoverridevoidInterpret(Contextctx){//终结符表达式的解释操作}}解释器模式的结构与实现解释器模式的实现典型的非终结符表达式类代码:classNonterminalExpression:AbstractExpression{privateAbstractExpressionleft;privateAbstractExpressionright;publicNonterminalExpression(AbstractExpressionleft,AbstractExpressionrig

9、ht){this.left=left;this.right=right;}publicoverridevoidInterpret(Contextctx){//递归调用每一个组成部分的interpret()方法//在递归调用时指定组成部分的连接方式,即非终结符的功能}}解释器模式的结构与实现解释器模式的实现环境类Context:用于存储一些全局信息,一般包含一个Hashtable或List等类型的集合对象(也可以直接由Hashtable等集合类充当环境类),存储一系列公共信息,例如变量名与值的映射关系(key/value)等,用于在执行具体的解释操作时从中获取相关信息可以在环境

10、类中增加一些所有表达式解释器都共有的功能,以减轻解释器的职责当系统无须提供全局公共信息时可以省略环境类,根据实际情况决定是否需要环境类解释器模式的结构与实现解释器模式的实现典型的环境类代码:usingSystem.Collections;classContext{privateHashtableht=newHashtable();//往集合对象中设值publicvoidAssign(stringkey,stringvalue){ht.Add(key,value);}//获取存储在集合对象中的值publi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。