编译原理课程设计-简单计算器实现.docVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理课程设计-简单计算器实现

课程设计报告 课程: 编译原理 学号: 姓名: 班级: 11级嵌入式应用技术班 教师: 时间: 2014年6月 计算机科学与技术系 设计名称: 简单计算器的实现 设计内容、目的与要求: 设计内容: 计算器的功能要求如下:可以支持加(+)、减(-)、乘(*)、除(/)运算,如3+4-5*2/2;支持括号运算,如(4+5)*5/8。用户输入表达式后,转化为逆波兰式并执行计算,最后输出该表达式的结果。 设计目的: 1、对单词的构词规则有明确的定义;? 2、编写的分析程序能够正确识别源程序中的语法符号; 3、计算器源程序的以.c格式输出;? 4、对于源程序中的语法错误,能够做出简单的错误处理,给出简单的错误提示, 保证顺利完成整个源程序的分析;? 5、计算器能够实现加,减,乘,除,混合运算,多项式运算 设计要求: 将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值。? 掌握利用算符优先分析法完成中缀表达式到逆波兰式的转化。 计划与进度安排: 5月日月日月日月日月日月日月日 2.2.3逆波兰式生成的设计思想及算法 首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。 读入一个用中缀表示的简单算术表达式,从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出。 如果不是数字,该字符则是运算符,此时需比较优先关系。 做法如下将该字符与运算符栈顶的运算符的优先关系相比较。如果,该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈。倘若不是的话,则将此运算符栈顶的运算重复上述操作直至扫描完整个简单算术表达式,确定所有字符都得到正确处理,我们便可以将中缀式表示的简单算术表达式转化为逆波兰表示的简单算术表达式。 图三 实现计算器加法功能 图四 实现计算器减法功能 图五 实现计算器乘法功能 图六 实现计算器除法功能 图七 实验计算器混合运算功能 设计体会与建议: 在期末的课程设计中,我们小组讨论选择一个比较熟悉的课题——简单计算器的实现。本课题的设计要求是实现具有加、减、乘、除、括号等运算的简单计算器,输入表达式,输出该表达式的值。从大一学习C语言,到大三学习JAVA,我们都接触过实现计算器的实验,对于本次的课程设计,我们还是有点基础。而这次的课程设计我们选择是用C语言编写的。设计的主要原理是用后缀表达式和堆栈实现对表达式的分析后进行计算。 在编程的过程中,有些C语言的知识已经忘记,我重新找出C语言的书,一边重温之前学习的知识,一边编写代码。在此,我运用到编译原理中间代码生成的一种形式——逆波兰式。逆波兰式生成的要点是运算对象顺序不变,运算符紧跟运算对象之后。掌握了这个要点,理解起来还是很容易的。在这次的课程设计中,通过我们小组的积极配合,共同努力,我们很顺利的完成这次任务。但是我感觉有两点不足,就是我们不能实现小数的计算,再者就是运行的界面不够美观。这两点需要提升。总的来说,对于这次课程设计我很满意。 这学期学习编译原理这门课程,一开始我认为学习编译原理就是了解一些原理,理论的知识,是不需要编写代码的,但是在第一堂课经过老师的介绍之后,我了解到,虽然本课程是编译原理,书本上讲到的都是一些理论知识,但是无论是哪一门课程都是需要有实践作为基础才能够将其学习的更好。在第一次课上,老师就声明这门课比较难,要认真学,所以我很认真的对待这门课程。 本次课程设计是实现一个简易的计算器,经过大一以到大三的学习,再重新运用C语言编程感觉还挺上手的,这也可以让我重新复习一下C语言的知识。这次课程设计采用逆波兰式的知识,这可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式。本次设计使我进一步端正了我的学习态度,学会了实事求是,对自己要严格要求。我觉得动手做设计之前,头脑里必须清楚该怎么做,这一点是很重要的。就目前来说,我的动手能力虽然差一点,但我想,通过我的不懈努力,在这方面,我总会得到提高。在此次的课程设计中我最大的体会就是进一步认识到了理论联系实践的重要性。总而言之,此次课程设计让我学到了好多平时在课堂上学不到的东西,增加了我的知识运用能力,增强我的实际操作能力。我相信经过实践后的学习我可以将编译原理这门课程掌握的更好。 编译原理是一门比较难懂但是又非常核心的计算机课程,在学习的过程中对什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术#includestdio.h #includestdlib.h

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档