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

175 阅读2分钟

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

原本打算七天更完的,没想到五天就结束了,下面应该会继续linux服务器方面的内容。

5编码实现

5.1功能完成

完成计算器的功能如下:支持加(+)、减(一)、乘(*)、除(/)、取负(@)、乘方(^)和取模(%)等运算;支持浮点数运算,如3.24+4;支持括号运算,如(4+5)*5/8;判断用户输入的表达式是否正确,如3++5是个错误的表达式,在计算时将提示错误。

5.2主要程序的代码设计及注释

代码主要分了7个模块,由于代码太多,不便直接贴出,需要的同学可以直接私信我。

  1. 词法检查单词合法性函数代码:
  2. 语法分析检测str从current起始,开头是否是Factor函数:
  3. 语法分析检测str从current起始,开头是否是一个Exp函数:
  4. 返回运算符优先级函数:
  5. 中缀表达式序列转后缀表达式序列函数:
  6. 求后缀表达式序列的值函数:
  7. Main()主函数设计:

6测试和试运行

测试用例1:(4%3+((2*6)/4)-3+2^2)
测试结果1:

image.png
测试用例2:3++4
测试结果2:

image.png
测试用例3:+3+5
测试结果3:

image.png
测试用例4:3 3+4
测试结果4:

image.png
测试用例5:(3+5-6
测试结果5:

image.png

7总结

通过本次开发,我全面系统的了解了编译原理程序构造的原理和基本实现方法,并从词法分析器入手,为了便于词法分析器的修改和扩充,选择使用自动机的方法,从设计自动机到实现自动机状态转移函数过程中遇到了很多问题,对问题逐个击破,实现了一个简单的计算表达式的编译过程。这让我在课堂上学习到的知识得到了充分的运用,也能找到在课堂上发现不了的错误,同时也能锻炼自己的编程能力。
最遗憾的其实是,差个图形界面,这就是后面QT的事情了,暂时还不打算做。