- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第16章 解释器模式16.1 问题的提出16.2解释器模式16.3应用示例16.1问题的提出 生活中数学表达式有很重要的意义。例如在银行、证券类项目中,经常会有一些模型运算,通过对现有数据的统计、分析而预测不可知或未来可能发生的商业行为。一般的模型运算都有一个或多个运算公式,通常是加减乘除四则运算,偶尔也有指数、开方等复杂运算。利用模型运算的一般步骤是:①输入一个模型公式(如加减四则运算);②输入模型中的参数;③运算出结果。? 例如我们要计算a+b-c三个整数的值,可能有读者认为这太简单了,很快编写出如下关键代码。 Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); int result = a+b-c; 仔细分析上述代码就会发现:该代码仅包含了模型运算的输入参数及获取运算结果过程,缺乏模型输入过程。假设运算模型用字符串“a+b+c”来描述,该字符串如何能转化成相应的功能类,进而计算出结果呢?解释器模式为我们提供了一个较好的策略。16.2解释器模式16.2.1文法规则和抽象语法树 解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。在正式分析解释器模式结构之前,我们先来学习如何表示一个语言的文法规则以及如何构造一棵抽象语法树。?在整数加法/减法解释器中,每一个输入表达式都包含了三个语言单位,可以使用如下文法规则来定义。 expression ::=value | operation operation ::=expression+expression | expression-expression value ::=an integer expression代表一个表达式,operation代表一个操作,value代表一个整数值。?该文法规则包含三条语句,第一条表示表达式的组成方式,其中value和operation是后面两个语言单位的定义,每一条语句所定义的字符串如operation和value称为语言构造成分或语言单位,符号“::=”表示“定义为”的意思,其左边的语言单位通过右边来进行说明和定义,语言单位对应终结符表达式和非终结符表达式。如本规则中的operation是非终结符表达式,它的组成元素仍然可以是表达式,可以进一步分解,而value是终结符表达式,它的组成元素是最基本的语言单位,不能再进行分解。Context??AbstractExpressionClient??+interpret(Context ctx)?TerminalExpressionNonterminalExpression??+interpret(Context ctx)+interpret(Context ctx)图16-2 解释器模式抽象类图16.2.2解释器模式 解释器模式是一种按照规定语法进行解析的方案,其定义如下:给定一个语言,?定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。其抽象UML类图如图16-2所示。?解释器模式各个角色具体描述如下所示。●AbstractExpression(抽象表达式):在抽象表达式中声明了抽象的解释操作,它是所有终结符表达式和非终结符表达式的公共父类。●TerminalExpression(终结符表达式):终结符表达式是抽象表达式的子类,它实现了与文法中的终结符相关联的解释操作,在句子中的每一个终结符都是该类的一个实例。通常在一个解释器模式中只有少数几个终结符表达式类,它们的实例可以通过非终结符表达式组成较为复杂的句子。●NonterminalExpression(非终结符表达式):非终结符表达式也是抽象表达式的子类,它实现了文法中非终结符的解释操作,由于在非终结符表达式中可以包含终结符表达式,也可以继续包含非终结符表达式,因此其解释操作一般通过递归的方式来完成。●Context(环境类):环境类又称为上下文类,它用于存储解释器之外的一些全局信息,通常它临时存储了需要解释的语句。让我们利用解释器模式来完成双精度数加法/减法器的设计,其代码如下所示。(1)Context.java:上下文环境类。class Context{ MapString,Double m = new HashMap(); void assign(String key, double value){ m.put(key, value); }}(2)Expression.java:抽象表达式接口定义。interface Expression{ public double interpret(Con
您可能关注的文档
最近下载
- 《静脉曲张疾病》课件.ppt VIP
- 学习贯彻《关于加强党的作风建设论述摘编》PPT:持之以恒推进作风建设常态化长效化,保持党的先进性和纯洁性(附文稿).pptx VIP
- 仙溪志-宋-黄岩孙.pdf VIP
- 小学道德与法治新部编版三年级上册第二单元 学科学 爱科学教案(2025秋).doc
- SL∕T 821-2023 节水规划编制规程.pdf
- 部编版二年级道德与法治上册第8课《我为班级作贡献》精美课件.pptx VIP
- 护士注册体检表-(正式).doc VIP
- 检查检验分级管理制度.docx VIP
- 第4课(牛字旁)课件 2025小学生书法通用版二年级下册.ppt
- 智能世界2035报告.pdf
文档评论(0)