设计模式课程设计-四则运算表达式.doc

设计模式课程设计-四则运算表达式.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
设计模式课程设计 一、四则运算学习软件 请使用面向对象来设计一个完成数学运算的计算器,计算器要实现四则运算、三角运算、倒数、乘方/开方这些基本运算,给出设计界面,由界面按钮来录入表达式的内容,能够保留计算表达式,根据计算优先级完成表达式的计算,并且使用抽象语法树显示计算的过程,可单步执行、一次执行、多次回退,可以提供给学生学习数学运算知识。 1、设计场景说明:数学表达式运算。对常数或变量进行加减乘除乘方、开方、三角函数等运算,如何使用面向对象的方式来进行设计呢? 可以说明一下语法规则如下 表达式格式:常量|变量|加|减|乘|除… 加:表达式 + 表达式 减:表达式 - 表达式 乘:表达式 * 表达式 变量:任何标志符 常量:数字 2、设计界面如下:(可以根据你的需要改进界面设计,可以将输入框变为一个textArea,以存放更多的字符串,类似编辑框) 3、计算器数学运算表达式分析(首先使用解释器模式建立语法规则) 要求分析处理表达式中的单层括号,不包括嵌套括号(请考虑嵌套括号); 要求处理变量,最多三个变量(名称限定为A、B、C) 按照优先级及替换原则进行表达式分析(递归下降分析,简单说明如下:) 3.1首先分析和替换括号,使用括号作为分隔符分解表达式,所以每个元素由”(“或者”)”以及括号中的表达式和括号外的表达式组成,计算括号内的表达式,用结果替换该表达式;形成新的表达式。 3.2对新的表达式,分析和替换*/符号,使用+-符号作为分隔符分解表达式,所以每个元素由+,-,以及乘除法表达式组成,计算乘除法表达式(建立语法树),用结果替换该表达式(或递归调用);形成新的表达式。 3.3对新的表达式,使用+-符号作为分隔符分解表达式,所以每个元素由+,-,以及数字组成,建立语法树,最后得到表达式结果。 3.4对其他运算,类似进行优先级替换,同样可以得到计算结果。 4、对数学表达式可以增加各种新的操作,如对不同节点进行格式化(不同颜色)显示、算法优先级显示、类型检查、赋值检查、以及语法检查、解释执行,考虑使用访问者模式。 上帝回答:办法很简单:你可以把作用于不同节点类的相关的操作(如格式化显示操作)打包在一个单独的对象里,该对象我们叫它“访问者(visitor)”;然后把这个对像作为参数分别传递给抽象语法树的节点类,相当于这个对象遍历了这棵树。当一个节点元素“接受(accept)”访问者时,它就会发送给访问者一个请求,要求对自己进行处理。访问者本身也有一个代表节点元素的参数。于是访问者就会为该元素执行被请求的操作—在最开始的笨方法中,这个操作的定义是放在节点类里的。. 例如,一个编译器如果不使用访问者模式,可能就要通过用抽象语法树里的TypeCheck操作来完成type-check动作。每一个子节点都需要实现不同的TypeCheck方法。而如果该编译器采用访问者模式,它就可以创建一个TypeCheckingVisitor 对象,调用抽象语法树里的Accept操作,把自己作为参数传入。每一个子节点将实现回调访问者的Accept方法:不同的子节点类回调不同的访问者方法。例如:赋值节点回调VisitAssignment方法;变量引用节点回调VisitVariableReference方法。过去放在AssignmentNode类里的TypeCheck方法的定义现在放在TypeCheckingVisitor类的VisitAssignment里面。 如果需要访问者支持多种操作,而不仅是type-checking一种, 我们可以使用一个抽象父类NodeVisitor, 从该类派生出抽象语法树的所有访问者。NodeVisitor 类必须为每一个子节点类声明一个操作。需要计算程序度量数据的应用程式定义NodeVisitor的新的子类, 而且不再需要在节点类中添加特定于应用程式的代码。访问者模式把每一个不同编译阶段的操作封装到了跟该阶段有关的一个访问者类里面。 另外,对每一个按钮所要执行的任务,我们通过命令模式来设计 可能用到的模式:解释器模式、命令模式、备忘录模式、访问者模式等 可参考的源代码:interpret.rar 这里专门有一个图框表达上面的表达式的抽象语法树结构

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档