解释器模式如何在Java项目中实现?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。
类型:行为类模式
类图:
解释器模式是一个比较少用的模式,本人之前也没有用过这个模式。下面我们就来一起看一下解释器模式。
解释器模式的结构
- 抽象解释器:声明一个所有具体表达式都要实现的抽象接口(或者抽象类),接口中主要是一个interpret()方法,称为解释操作。具体解释任务由它的各个实现类来完成,具体的解释器分别由终结符解释器TerminalExpression和非终结符解释器NonterminalExpression完成。
- 终结符表达式:实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表达式,但有多个实例,对应不同的终结符。终结符一半是文法中的运算单元,比如有一个简单的公式R=R1+R2,在里面R1和R2就是终结符,对应的解析R1和R2的解释器就是终结符表达式。
- 非终结符表达式:文法中的每条规则对应于一个非终结符表达式,非终结符表达式一般是文法中的运算符或者其他关键字,比如公式R=R1+R2中,+就是非终结符,解析+的解释器就是一个非终结符表达式。非终结符表达式根据逻辑的复杂程度而增加,原则上每个文法规则都对应一个非终结符表达式。
- 环境角色:这个角色的任务一般是用来存放文法中各个终结符所对应的具体值,比如R=R1+R2,我们给R1赋值100,给R2赋值200。这些信息需要存放到环境角色中,很多情况下我们使用Map来充当环境角色就足够了。
代码实现
class Context {} abstract class Expression { public abstract Object interpreter(Context ctx); } class TerminalExpression extends Expression { public Object interpreter(Context ctx){ return null; } } class NonterminalExpression extends Expression { public NonterminalExpression(Expression...expressions){ } public Object interpreter(Context ctx){ return null; } } public class Client { public static void main(String[] args){ String expression = ""; char[] charArray = expression.toCharArray(); Context ctx = new Context(); Stack<Expression> stack = new Stack<Expression>(); for(int i=0;i<charArray.length;i++){ //进行语法判断,递归调用 } Expression exp = stack.pop(); exp.interpreter(ctx); } }
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容猜你喜欢
AI推送时光机解释器模式如何在Java项目中实现
后端开发2023-05-31
迭代器模式如何在java项目中实现
后端开发2023-05-31
责任链模式如何在Java项目中实现
后端开发2023-05-31
在java项目中如何实现一个单例模式
后端开发2023-05-31
如何在Java项目中实现一个命令模式
后端开发2023-05-31
webservice方式如何在java项目中实现
后端开发2023-05-31
如何在Java项目中实现一个抽象工厂模式
后端开发2023-05-31
如何在Java项目中使用适配器模式
后端开发2023-05-31
在java项目中实现工厂模式的方法
后端开发2023-05-31
逆波兰表达式如何在Java项目中实现
后端开发2023-05-31
在Java项目中实现装饰者模式的方法
后端开发2023-05-31
事件委托模式怎么在java项目中实现
后端开发2023-05-31
怎么在java项目中实现一个单例模式
后端开发2023-05-31
怎么在Java项目中实现一个策略模式
后端开发2023-05-31
在Java项目中如何实现实例化
后端开发2023-05-31
责任链模式如何在Java项目中使用
后端开发2023-05-31
如何理解Java设计模式的解释器模式
后端开发2023-06-25
Builder模式如何在Java中实现
后端开发2023-05-31
怎么在Java项目中实现一个观察者模式
后端开发2023-05-31
FloydWarshall算法如何在java项目中实现
后端开发2023-05-31
咦!没有更多了?去看看其它编程学习网 内容吧