七天开发基于编译原理的公式计算器设计与实现-第一天

465 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

1 概述

1.1目的与意义

利用编译原理设计编译器的基本思想,设计实现一个简单的公式计算器,掌握如何应用编译原理中词法分析和语法分析的基本方法,来解决实际应用中的问题。

所谓的编译程序是指这样的一种程序,它能够把某一种语言程序(称为源语言程序)转换成另一种语言程序(称为目标语言程 序),而后者与前者在逻辑上是等价的。公式计算器的输入是一个由字符组成的表达式(源程序),如果这个表达式是合法的,则输出是这个表达式的计算结果(目标代码);否则输出错误信息。因此公式计算器是一个典型的编译程序。

编译原理是计算机软件专业的一门重要的专业必修课。尽管编译过程与外文书刊的翻译工作过程比较类似,但由于编译程序所翻译的毕竟不是自然语言,必然有其自身特性,因而学生普遍认为这门课程是专业课中比较难于学习的。即使学习了编译原理这门课,大多数学生也不可能就开发出一个编译程序。事实上,许多从事计算机专业的人士也未能编写出一个完整的编译系统。而编制四则混合运算的计算器,就等价于编写一个小的编译系统,而且又具有可实现性,因此,把这个题目作为编译原理学习的一个测验题目是非常适合的。

1.2主要完成的任务

(1)设计及实现计算表达式的公式计算器,表达式中至少包含+、-、×、/、(、)等运算符,可以对其进行扩充。

(2)对于一个给定的表达式,能够检查有无词法错误和语法错误,若有错误能指定出错位置和错误类型。

(3)给出该表达式的中间表示形式,前缀和后缀表达式。

(4)输出运算结果,达到公式计算的目的。

(5)准备多组测试样例,对测试样例进行测试和验证,并对输出结果进行分析。

1.3使用的开发工具

       代码使用DevC++开发。

1.4解决的主要问题

      计算器是我们经常使用的小工具,很多计算器实现了不少功能,如四则运算、进制转换、三角函数计算、指数运算等, 但以下几点令人遗憾:一方面计算器的系统设计不合理,不方便扩展计算器的功能;另一方面不支持表达式运算,使用时必须先把表达式拆分成更小的表达式,然后一个一个地进行计算,用户使用不方便;再者有些计算器虽然支持表达式运算, 但每一步都会显示中间结果,如果一不小心输错了就必须重新输入,使用起来也不方便。本文结合编译原理中的词法分析和语法分析方法,给出了表达式计算器的系统设计过程,并在 DevC++下使用面向过程的技术实现了计算器,解决了以上问题。