《创建自己的语言:解释器模式.ppt》由会员分享,可在线阅读,更多相关《创建自己的语言:解释器模式.ppt(12页珍藏版)》请在三一办公上搜索。
1、第16章 创建自己的语言:解释器模式,16.1 创建自己的语言解释器,16.2 模式定义,16.3 模式分析,16.4 模式实现,16.5 设计原则,16.6 使用场合,16.7 本章要点,16.1 创建自己的语言解释器,先简单地定义一下“myida”语言的语法规则:(1)“myida”语言区分大小写;(2)“myida”语言以PROGRAM开头,END结尾;(3)PRINTLN表示打印一行并换行;(4)使用FORFROMTOEND表示循环。示例语言内容如下:PROGRAM PRINTLN start.FOR i FROM 90 TO 100 PRINTLN i END PRINTLN end
2、.END该句表示的意思是:首先打印“start”换行,然后循环打印“90”换行、“91”换行、“100”换行,最后打印“end”换行。,16.2 模式定义,解释器模式(Interpreter Pattern),就是给定一个语言的文法表示,并且定义一个解释器,用来解释语言中的句子。解释器模式描述了怎样在有了一个简单的文法后,使用模式设计解释这些语句。,16.3 模式分析,16.3.1“myida”语言分析(1)以PROGRAM开头。(2)存在两种语句:基础语句和复杂语句。(3)语言的主体部分应该是一个待执行的列表语句集合。(4)复杂语句中含有的是一个列表语句集合,如示例中的FOR语句中就含有PR
3、INTLN语句。(5)语言的解释执行是一个递归调用的过程,其中的每一个语句都会递归解释执行,直到一个最基础的语句被执行,然后返回。(6)以END结尾。,16.3.1“myida”语言分析,可以得出“myida”语言的解释树结构图,如图16-1所示。,16.3.2“myida”语言解释器原理,按照“myida”语言的解释结构图,以及语法规则描述的内容,我们很容易得到“myida”语言解释器的活动图,如图16-2所示。,16.4 模式实现,16.4.1 创建上下文环境16.4.2 创建解析表达式1表达式接口IExpressions2主表达式ProgramExpression3列表表达式ListEx
4、pression4命令表达式CommandExperssion5循环表达式ForExpression6基础表达式PrimitiveExpression16.4.3 让“myida”语言解释器开始工作,16.5 设计原则,1“开-闭”原则2封装变化部分,16.6 使用场合,(1)一种特定类型的问题发生的频率足够高,并且业务规则频繁变化,不断重复出现类似情况。(2)业务规则不是过于复杂烦琐,比较容易抽象出语法规则。(3)效率不是软件系统中主要考虑的因素。,16.6 使用场合,来看一下解释器模式的静态类图,加深对解释器模式的理解,如图16-5所示。,16.6 使用场合,1解释器模式中的角色2扩展1:Java SDK中的解释器模式3扩展2:相关的设计模式,16.7 本章要点,1解释器模式2设计原则3模式中的角色4相关的设计模式5使用场合,