解释器模式报告_第1页
解释器模式报告_第2页
解释器模式报告_第3页
解释器模式报告_第4页
解释器模式报告_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、组员: 报告流程报告流程什么是解释器模式什么是解释器模式解释器模式结构及其中的角色解释器模式结构及其中的角色解释器模式举例解释器模式举例解释器模式的优缺点及适用情形解释器模式的优缺点及适用情形代码演示代码演示什么是解释器模式什么是解释器模式 解释器模式解释器模式 给定一个语言,定义它的文法的一种表示,并定义一给定一个语言,定义它的文法的一种表示,并定义一个解器,这个解释器使用该表示来解释语言中的句。个解器,这个解释器使用该表示来解释语言中的句。 解释器模式是一种使用频率相对较低但学习难度较大的设计模式,它用于描述如何使用面向对象语言构成一个简单的语言解释器。在某些情况下,为了更好地描述某一些特

2、定类型的问题,我们可以创建一种新的语言,这种语言拥有自己的表达式和结构,即文法规则,这些问题的实例将对应为该语言中的句子。此时,可以使用解释器模式来设计这种新的语言。文法规则文法规则 解释器模式描述了如何为简单的语言定义一个文法,解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。如何在该语言中表示一个句子,以及如何解释这些句子。例如:可以使用如下文法规则来定义:expression := value | operationoperation := expression + expression | expression - expression |

3、 expression expression | expression expressionvalue := an integer /一个整数值)(xzyxz 该文法规则包含三条语句,第一条表示表达式的组成方式,其中value和operation是后面两个语言单位的定义,每一条语句所定义的字符串如operation和value称为语言构造成分或语言单位,符号“:=”表示“定义为”的意思,其左边的语言单位通过右边来进行说明和定义,语言单位对应终结符表达式和非终结符表达式。如本规则中的operation是非终结符表达式,它的组成元素仍然可以是表达式,可以进一步分解,而value是终结符表达式,它的

4、组成元素是最基本的语言单位,不能再进行分解。 公式中仅有两类元素:运算元素和运算符号,运算元素就是指x、y、z等符号,需要具体赋值的对象,也叫做终结符号,为什么叫终结符号呢?因为这些元素除了需要赋值外,不需要做任何处理,所有运算元素都对应一个具体的业务参数,这是语法中最小的单元逻辑,不可再拆分;运算符号就是加减符号,需要我们编写算法进行处理,每个运算符号都要对应处理单元,否则公式无法运行,运算符号也叫做非终结符号。两类元素的共同点是都要被解析,不同点是所有的运算元素具有相同的功能,可以用一个类表示,而运算符号则是需要分别进行解释,加法需要加法解析器,减法也需要减法解析器。抽象语法树 在该抽象语

5、法树中,可以通过终结符表达式value和非终结符表达式operation组成复杂的语句,每个文法规则的语言实每个文法规则的语言实例都可以表示为一个抽象语法树例都可以表示为一个抽象语法树,即每一条具体的语句都可以用类似上图所示的抽象语法树来表示,在图中终结符在图中终结符表达式类的实例作为树的叶子节点,而非终结符表达式类表达式类的实例作为树的叶子节点,而非终结符表达式类的实例作为非叶子节点,它们可以将终结符表达式类的实的实例作为非叶子节点,它们可以将终结符表达式类的实例以及包含终结符和非终结符实例的子表达式作为其子节例以及包含终结符和非终结符实例的子表达式作为其子节点点。抽象语法树描述了如何构成一

6、个复杂的句子,通过对抽象语法树的分析,可以识别出语言中的终结符类和非终结符类。解释器模式结构及其中的角色解释器模式的解释器模式的UMLUML图图解释器模式结构及其中的角色AbstractExpression(抽象表达式):在抽象表达式中声明了抽象的解释操作,它是所有终结符表达式和非终结符表达式的公共父类。 TerminalExpression(终结符表达式):终结符表达式是抽象表达式的子类,它实现了与文法中的终结符相关联的解释操作,在句子中的每一个终结符都是该类的一个实例。通常在一个解释器模式中只有少数几个终结符表达式类,它们的实例可以通过非终结符表达式组成较为复杂的句子。 Nontermin

7、alExpression(非终结符表达式):非终结符表达式也是抽象表达式的子类,它实现了文法中非终结符的解释操作,由于在非终结符表达式中可以包含终结符表达式,也可以继续包含非终结符表达式,因此其解释操作一般通过递归的方式来完成。 Context(环境类):环境类又称为上下文类,它用于存储解释器之外的一些全局信息,通常它临时存储了需要解释的语句。Client:客户端,创建一个抽象语法树,调用解释操作。参考代码抽象表达式 在解释器模式中,每一种终结符和非终结符都有一个具体类与之对应,正因为使用类来表示每一条文法规则,所以系统将具有较好的灵活性和可扩展性。对于所有的终结符和非终结符,我们首先需要抽象

8、出一个公共父类,即抽象表达式类public abstract class Expression /每个表达式必须有一个解析任务public abstract Object interpreter(Context ctx);参考代码终结符表达式public class TerminalExpression extends Expression /通常终结符表达式只有一个,但是有多个对象public Object interpreter(Context ctx) return null;参考代码非终结符表达式public class NonterminalExpression extends Ex

9、pression/每个非终结符表达式都会对其他表达式产生依赖public NonterminalExpression(Expression expression) public Object interpreter(Context ctx) /进行文法处理 /递归调用每一个组成部分的interpret()方法 /在递归调用时指定组成部分的连接方式,即非终结符的功能参考代码上下文Context采用HashMap容纳一个具体的表达式,其代码如下所示: pulic class Context private HashMap map=new HashMap(): . public class Clie

10、ntpublic static void main (String args)Context ctx=new Context():for(; ;)/进行语法判断,并产生递归调用 . 通常Client是一个封装类,封装的结果就是传递进来一个规范性的语法文件,解释器分析后产生结果并返回,避免调用者与语法解释器的耦合关系。参考代码Client演示举例演示举例四则运算四则运算简单介绍一下,其中的角色分配: ArithmeticExpression 接口代表算术表达式; Variable类代表表达式中的变量,对应终结符表达式; Variables类使用Map存各个变量的值,对应解释器中的环境角色; Pl

11、us、Substract、Multiply、Dvision类分别代表加减乘除四种运算,对应解释器中的非终结符表达式; CientDemo类对应客户端应用。解释其模式举例解释其模式举例四则运算四则运算UMLUML演示举例演示举例简单英文翻译器简单英文翻译器 下面我们结合一个简单的英文翻译器来理解解释其模式,用户输入“Teacher drink water”,程序将输出“老师喝水”。程序不会自己懂得语言,需要我们定义好这个语言的语法表示,并且给出一个解释器并且用定义好的语法表示来解释这种语言中的句子。 使用程序实现该该语言时,定义的基本操作是将终结符号的值翻译为汉语,比如 Teacher翻译为“老

12、师”,Drink翻译为“喝”,Water翻译为“水”,当用户输入语句“Teacher Drink Water”后,程序输出“老师喝水”SentenceTeacher drink water. Subject Predicate Object Noun Verb Noun := := := | := | := You|I|He|She := Me|You|Him|Them := Teacher|Student|Tiger|Water := Drink|Instruct|Receive文法规则 上述语言是英语语言的一个子集,该语言一共定义了八个语言单位和相关的八条语言规则,语法单位分为非终结符和终

13、结符,例如上面的、都是非终结符号,、都是终结符号。这样根据语法规则就可以产生定义语言的所有语句,程序就可以对产生的语句进行某种操作,例如刚才说的翻译操作。下面介绍该文法中的四种角色1 Node接口对应抽象表达式( AbstractionExpression )2 终结符表达式( TermailExpression ) 文法中共有4个终结语言单位,分别是、 、 、和 ,由于与和 是“或”的关系,所以针对和 的语言单位是同一个类SubjectPronounOr NounNode,针对 和 的语言单位是ObjectPronounOr NounNode,针对的语言单位是VerbNode。3 非终结符表达式 针对给出的文法,共有4个非终结表达式类,针对 语言单位的类是SentenceNode,针对 语言单位的类是PredicateNode,针对 语言单位的类是ObjectNode。4上下文角色是Context类翻译器翻译器UMLUML解释器模式的优缺点及适用情形

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论