设计模式.解释器模式(Interpreter).pptx

设计模式.解释器模式(Interpreter).pptx

ID:52850434

大小:1.70 MB

页数:38页

时间:2020-03-26

设计模式.解释器模式(Interpreter).pptx_第1页
设计模式.解释器模式(Interpreter).pptx_第2页
设计模式.解释器模式(Interpreter).pptx_第3页
设计模式.解释器模式(Interpreter).pptx_第4页
设计模式.解释器模式(Interpreter).pptx_第5页
资源描述:

《设计模式.解释器模式(Interpreter).pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、设计模式(DesignPattern)张凯副教授计算机学院软件工程系问题(Problem)设计与实现一个四则算术运算解释器可以分析任意+、-、*、/表达式,并计算其数值输入表达式为一个字符串表达式输出结果为双精度浮点数(Double)问题(Problem)输入是一个用字符串表达的四则运算,比如1+2*3。目的是试图去理解这个字符串表达的运算指令,然后计算出结果7。之所以是一个解释器Interpreter,而不是一个编译器Compiler,是因为程序是去理解指令并且执行指令,而不是把指令编译成机器代码来运行;后者是编译器的目标。问题(Problem)第一个

2、部分,是截取输入字符串,然后返回单元指令。比如,对于指令1+2*3–4/5,就需要被分解成如下所示的单元指令集:问题(Problem)第二个部分,把单元指令集组成一个树结构,称之为AbstractSyntaxTree。按照将来需要解释的顺序,优先执行的指令放在树的叶的位置,最后执行的指令是树根Root。后缀式(逆波兰式)的求值问题(Problem)程序只有2种单元指令:操作数NumExpression和运算符OpExpression。定义了一个抽象类,叫做Expression,然后NumExpression和OpExpression继承了该抽象类。问题(

3、Problem)abstractclassExpression{abstractpublicdoubleInterpreter(Syntaxroot);}classNumExpression:Expression{privatedouble_value;publicNumExpression(doublevalue){this._value=value;}publicdoubleValue{get{returnthis._value;}}publicoverridedoubleInterpreter(Syntaxroot){return((NumExpr

4、ession)(root.Expression)).Value;}}classOpExpression:Expression{privateOp_value;……publicoverridedoubleInterpreter(Syntaxroot){doublelvalue,rvalue;if(root.LeftChild==null)lvalue=0;elselvalue=((Expression)root.LeftChild.Expression).Interpreter(root.LeftChild);if(root.RightChild==nul

5、l)rvalue=0;elservalue=((Expression)root.RightChild.Expression).Interpreter(root.RightChild);switch(((OpExpression)root.Expression).Value){caseOp.Plus:returnlvalue+rvalue;caseOp.Minus:returnlvalue-rvalue;caseOp.Multiply:returnlvalue*rvalue;caseOp.Divide:returnlvalue/rvalue;default

6、:return0;}}}问题(Problem)enumOp:int{Plus='+',Minus='-',Multiply='*',Divide='/'}enumPrioirty{Lv2=2,Lv1=1,Lv0=0}问题(Problem)classSyntax{privateExpression_Expression;privateSyntax_left;privateSyntax_right;publicSyntax(ExpressionExpression){this._Expression=Expression;this._left=null;th

7、is._right=null;}publicExpressionExpression{get{returnthis._Expression;}}publicSyntaxLeftChild{get{returnthis._left;}set{this._left=value;}}publicSyntaxRightChild{get{returnthis._right;}set{this._right=value;}}}classSyntaxTree{privateSyntax_root;privateint_count;publicSyntaxTree()

8、{this._root=null;this._count=0;}publicSy

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。