您的位置:首页 > 科技 > 能源 > pmp培训_最近最新mv在线观看免费高清_网络广告投放方案_网站设计公司排行榜

pmp培训_最近最新mv在线观看免费高清_网络广告投放方案_网站设计公司排行榜

2024/12/28 9:36:08 来源:https://blog.csdn.net/2303_76262050/article/details/144666231  浏览:    关键词:pmp培训_最近最新mv在线观看免费高清_网络广告投放方案_网站设计公司排行榜
pmp培训_最近最新mv在线观看免费高清_网络广告投放方案_网站设计公司排行榜

背景

四则运算问题:先输入表达式的形式如a+b+c-d,然后分别输入变量的值,最后输出结果。

传统模式:编写一个方法,接收表达式的形式,分析表达式,再根据分析结果执行相关操作。

问题:

不利于拓展,耦合性高,(如果想要加入乘法运算需要修改很多地方)

基本介绍

给定一个语言(表达式),定义他的文法的一种表示,并定义解释器,使用解释器解释语言。

最常见的例子:编译器

四个角色

①context:是环境角色,含有解释器之外的全局信息

②AbstractExpression:抽象表达式,有一个对外的抽象方法,用于解释操作。

③TerminalExpression:为终结符表达式,处理终结符相关操作,继承自AbstractExpression

④NonTerminalExpression:为非终结符表达式,处理非终结符相关操作,继承自AbstractExpression

具体实现

创建Expression抽象类,对外提供一个interpreter()解释语句的方法。

interpreter(map)需要传入一个map,map的key是表达式(abc),key是对应表达式的具体值(比如a对应1),返回值是一个int。

创建VarExpression类,继承自Expression抽象类。(对应abc)

有一个属性变量key就是他的表达式(如a),它的interpreter返回值就是他的表达式再map中对应的值。

创建SymbolExpression父类,继承自Expression抽象类(对应+ * -)

有两个Expression类的成员变量,分别表示自身对象左边的表达式和右边的表达式。

它的interpreter应该需要它的子类去实现,所以在这里就返回一个默认值(0).

创建SubExpression(-),AddExpression(+)继承自SymbolExpression

在他们实现interpreter方法时,根据对应的+-*方法,将左右Expression的值做运算后返回。

创建Calculate类(对应上述的context)解决逻辑问题。

利用栈,存储Expression类,遍历输入表达式,根据不同的运算符号和表达式构建出要传入interpreter的map和存储SubExpression中的左右Expression以及调用SubExpression。具体代码与设计模式关系不大,故略。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com