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

课程设计报告课程:编译原理学号:姓名:班级: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语言的知识。这次课程设计采用逆波兰式的知识,这可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式。本次设计使我进一步端正了我的学习态度,学会了实事求是,对自己要严格要求。我觉得动手做设计之前,头脑里必须清楚该怎么做,这一点是很重要的。就目前来说,我的动手能力虽然差一点,但我想,通过我的不懈努力,在这方面,我总会得到提高。在此次的课程设计中我最大的体会就是进一步认识到了理论联系实践的重要性。总而言之,此次课程设计让我学到了好多平时在课堂上学不到的东西,增加了我的知识运用能力,增强我的实际操作能力。我相信经过实践后的学习我可以将编译原理这门课程掌握的更好。

编译原理是一门比较难懂但是又非常核心的计算机课程,在学习的过程中对什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术#include

#include

编译原理公式计算器C语言,编译原理课程设计-简单计算器实现.doc相关推荐

  1. c语言课程设计计算器程序分析,c语言课程设计简单计算器程序..docx

    课程设计名称:C语言课程设计 课程设计题目: 简单计算器程序 TOC \o "1-5" \h \z \o "Current Document" 第1章需求分析1 ...

  2. c语言课程设计计算器软件,C语言课程设计简单计算器程序.docx

    课程设计名称: C 语言课程设计课程设计题目: 简单计算器程序 目录 第1章 需求分析 0 设计要求 0 任务 0 第2章 总体设计 1 TOC \o "1-5" \h \z \o ...

  3. java课程设计简单计算器_JAVA课程设计--简易计算器(201521123022 黄俊麟)

    1.团队课程设计博客链接 2.个人负责模板或任务说明 1.初始化业务逻辑. 2.开方.正负.清零.退格.数字内容输入拼接,输出结果的实现. 3.四则运算算法的实现. 4.每个按钮返回对应的业务(每个按 ...

  4. 猴子吃桃问题c语言链表,数据结构课程设计--猴子吃桃子问题.doc

    Data organization curriculm project 数据结构课程设计 设计题目: 猴子吃桃子问题 专业班级: 通信工程0804班 学生学号: 0909082421 学生姓名: 王 ...

  5. java计算机设计总结,java课程设计报告--计算器设计

    java课程设计报告--计算器设计 1 课 程 Java 程序设计 题 目 计算器设计 年 级 2010 级 专 业 信息一班 学 号 姓 名 组 员 指导教师 课程设计题目计算器设计 2 课程设计论 ...

  6. c语言图形时钟编程,C语言图形时钟课程设计实验报告.doc

    C语言图形时钟课程设计实验报告.doc 目录 1.系统功能要求 . 2. 数据结构设计及 说明 . 3.程序结构(画流程图) . 4.各模块的功能 . 5.试验结果(包括输入数据和输出结果) . 6. ...

  7. C语言课程学籍管理课程书面报告,C语言学籍管理系统课程设计报告书

    <C语言学籍管理系统课程设计报告书>由会员分享,可在线阅读,更多相关<C语言学籍管理系统课程设计报告书(30页珍藏版)>请在人人文库网上搜索. 1.C语言程序设计课程设计报告学 ...

  8. c语言时钟报告,C语言图形时钟课程设计实验报告

    C语言图形时钟课程设计实验报告 目录1.系统功能要求.2. 数据结构设计及说明.3.程序结构(画流程图) .4.各模块的功能.5.试验结果(包括输入数据和输出结果) .6.体会.7.参考文献.8.附录 ...

  9. 将 改为c语言表达式,基于c语言表达式求解课程设计修改.doc

    基于c语言表达式求解课程设计修改 摘 要 通过数据结构这门课程,我们较深入的了解到了栈,栈是一种重要的线性结构,它广泛应用于各种软件系统中,因此在面向对象的程序设计中,它们是多型数据类型. 本次试验我 ...

最新文章

  1. 2010年暑假送给大学生30句话
  2. Hadoop安装记录(伪分布式)
  3. Eclipse 答疑:代码版权?如何更改 Eclipse 中注释块的 @author 版权信息?
  4. python中递归函数写法_Python之递归函数
  5. 3-3HDFS架构详解
  6. Bootstrap3 弹出提示插件的方法
  7. FBI曾要求加密服务商Lavabit监视斯诺登邮件
  8. 用GZIP来压缩socket传输的序列化的类
  9. MySql 不香了?我们公司为什么放弃MySql选择NewSql?
  10. json字符串中的大括号转义传到后台_string.format格式化字符串中转义大括号“{}”...
  11. 【数字信号去噪】基于matlab奇异值分解(SVD)数字信号降噪【含Matlab源码 1020期】
  12. phpcms v9 开发笔记
  13. iPhone开发Swift基础08 加密与安全
  14. 线段树(lazy用法)
  15. 分享下最近的Nvidia GPU 3060 laptop GPU、linzhi、Tesla算力曲线
  16. 网络安全需要看什么书?(网安工程师)?
  17. RISCV ISS Spike 介绍
  18. Android 仿微信裁剪图片
  19. python 字符串方法总结
  20. 蓝桥杯 填写乘法算式

热门文章

  1. 显著性检测研究思路和方法
  2. 各种排序的时间复杂度、空间复杂度、稳定性
  3. HTML5中div布局的float属性
  4. 程序员必修之路---离职与劳动仲裁的纠纷解决
  5. 数据校验码(计算机组成原理)
  6. 汕大计算机科学与技术学院,汕头大学都有什么系?
  7. 钢结构基本原理全面详细总结
  8. 云数据库 Redis 版连接数据库-DMS登录云数据库
  9. Ubuntu20.04 卸载cuda 11.0
  10. 硬盘、寄存器、二级缓存(高速缓存)、内存四种存储器中,速度最快的是?