


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、23种设计模式(14):解释器模式-编程开发技术23种设计模式(14):解释器模式原文出处:卡奴达摩的专栏定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器 使用该表示來解释语言中句了。类型:行为类模式类图:解释器模式是一个比较少用的模式,木人z前也没有用过这个模式。下面我们就 来i起看一下解释器模式。解释器模式的结构抽象解释器:声明一个所冇具体表达式都要实现的抽象接口(或者抽象类),接口中 主要是一个interpret。方法,称为解释操作。具体解释任务由它的各个实现类来完成, 具体的解释器分别山终结符解释器terminalexpression和非终结符解释器 nonter
2、minalexpression 完成。终结符表达式:实现与文法屮的元素相关联的解释操作,通常一个解释器模式屮只 有-个终结符表达式,但有多个实例,对应不同的终结符。终结符一半是文法中的 运算单元,比如有一个简单的公式r二r1+r2,在里面r1和r2就是终结符,对应 的解析r1和r2的解释器就是终结符表达式。非终结符表达式:文法中的每条规则对应于一个非终结符表达式,非终结符表达式 一般是文法中的运算符或者其他关键字,比如公式r=r1+r2中,+就是非终结符, 解析+的解释器就是个非终结符表达式。作终结符农达式根据逻辑的复杂程度而增 力ii,原则上每个文法规则都对应一个非终结符表达式。环境角色:这
3、个角色的任务一般是用來存放文法中各个终结符所对应的貝体值,比 如r二r1+r2,我们给r1赋值10(),给r2赋值20()。这些信息需要存放到环境角色 屮,很多情况下我们使用map来充当环境角色就足够了。代码实现class context abstract class expression public abstract object interpreter(context ctx);class terminalexprcssion cxtcnds exprcssion public object interpreter(context ctx) return null;class nonte
4、rminalexprcssion cxtcnds exprcssion public nonterminalexpression(expression.expressions) public object interpreter(context ctx) return null;public class client public static void main (string args)string expression =char chararray = expressiontochararray(); context ctx = new context ();stack<expr
5、ession> stack 二 new stack<expression>(); for (i nt i二0;i <chararray. 1ength;i +)/进行语法判断,递归调用expression exp = stackpop();exp. interpreter(ctx);文法递归的代码部分需要根据具体的情况来实现,因此在代码屮没冇体现。抽彖 表达式是牛成语法集合的关键,毎个非终结符表达式解释一个最小的语法单元, 然后通过递归的方式将这些语法单-元组合成完整的文法,这就是解释器模式。解释器模式的优缺点 解释器是一个简单的语法分析工具,它最显著的优点就是扩展性,
6、修改语法规则 只需要修改相应的非终结符就可以了,若扩展语法,只需要增加非终结符类就可 以了。但是,解释器模式会引起类的膨胀,每个语法都需要产生一个非终结符表达式, 语法规则比较复杂时,就可能产生大量的类文件,为维护带来卄常多的麻烦。同 时,由于采用递归调用方法,每个非终结符表达式只关心与自己相关的表达式, 每个表达式需要知道最终的结果,必须通过递归方式,无论是面向对象的语言还 是面向过程的语言,递归都是一个不推荐的方式。由于使用了大量的循环和递归, 效率是一个不容忽视的问题。特别是用于解释一个解析复杂、冗长的语法吋,效 率是难以忍受的。解释器模式的适用场景在以下情况下可以使用解释器模式:有一个简单的语法规则,比如一个sql语句,如果我们需要根据sql语句进行rm转 换,就可以使用解禅器模式来对语心进行解释。 些重复发生的问题,比如加减乘除四则运算,但是公式每次都不同,有时是 a+b-c*d,有时是涉b+c-d,等等等等个,公式千变万化,但是都是由加减乘除四个 非终结符来连接的,这时我们就可以使用解释器模式。注意事项解释器模式真的是一个比较少用的模式,因为对它的维护实在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度合同管理岗位职责及考核评价体系合同
- 二零二五年度一手房买卖合同解除及补偿协议书
- 二零二五年度叉车安全操作规范协议及安全责任追究办法
- 2025年度生物科技项目出资入股合同
- 二零二五年度门窗行业技术培训与咨询服务合同协议
- 政府临时工合同工2025年度劳动合同履行与监督协议
- 二零二五年度新能源债权转让与项目合作合同
- 二零二五年度人工智能研发团队劳动集体合同(人工智能应用)
- 教师教育教学质量评估合作协议2025年度范本
- 2025年度高校毕业生就业见习基地协议
- 三好学生竞选12
- 2024-2025学年六年级上学期数学第三单元3.1-搭积木比赛(教案)
- DeepSeek从入门到精通
- 植保机械技术培训课件
- 人工智能赋能职业教育高质量发展研究
- 2024年水利工程建设行业市场发展监测及投资潜力预测报告
- 岗位职责心得体会(2篇)
- 高中地理兴趣小组活动方案
- 立案委托书撰写指南让法律更简单3篇
- 机械设计基础 课件 01机械设计概论
- 基于大数据的消费趋势预测与分析报告
评论
0/150
提交评论