简单的表达式求值

我叫管灵杰

我叫管灵杰

2016-01-29 12:15

简单的表达式求值,简单的表达式求值

简单的表达式求值


作者/ZF.Yi

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

下载源代码


一直很想做个比 Windows 自带的高级一点的计算器,能将整个表达式输入,然后求值。这个程序要求读者具备编译原理的一些知识。举个实例来说明程序处理过程。假设要求值的表达式为 :

      -25*(56+15)# (其中#号作为表达式结束标志)。      
首先对表达式进行词法分析,允许出现的字符为:
      {0 ,1, 2 ,3 ,4 ,5 ,6, 7 ,8, 9 . ,+ ,-, *, / ,( ,),#}   
分析的结果产生两种类型的单词:操作符和操作数。

操作符包括:
      {+, - ,* ,/ ,( ,)}  
操作数包括:
      int 和 double 类型。  
上面表达式产生的单词序列为:
      {-25,*,(,56,+,15,)}。      
这些单词的类型也需要保存。

词法分析正确后将对产生的单词序列进行语法分析。

定义E为表达式,N为常数(视为终结符)。表达式的产生式可表示如下:
      E ' N       E ' (E)      E ' E+E      E ' E-E      E ' E*E      E ' E/E
消除左递归后的产生式(E_为新产生的符号):
      E-NE_      E-(E)E_      E_-+EE_      E_--EE_      E_-*EE_      E_-/EE_      E_-NULL (空串)
可以根据这个产生式构造递归的语法分析器。具体细节就不叙述了,可以阅读源代码。

语法分析正确后就可以求值了,求值时用到一个操作数堆栈和操作符堆栈,以及一个算符优先表(存储了运算符之间的优先关系),具体细节可以阅读源码。
展开更多 50%)
分享

猜你喜欢

简单的表达式求值

C语言教程 C语言函数
简单的表达式求值

后缀表达式求值及校验

C语言教程 C语言函数
后缀表达式求值及校验

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Mysql入门系列:MYSQL表达式求值和MYSQL类型转换

编程语言 网络编程
Mysql入门系列:MYSQL表达式求值和MYSQL类型转换

正则表达式

Web开发
正则表达式

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

正则表达式口诀 正则表达式学习工具

Web开发
正则表达式口诀 正则表达式学习工具

C++数据结构学习:用栈做表达式求值

编程语言 网络编程
C++数据结构学习:用栈做表达式求值

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何用CZip/CUnzip类压缩/解压缩文件

如何用CZip/CUnzip类压缩/解压缩文件

背景音乐是如何插入的?

背景音乐是如何插入的?
下拉加载更多内容 ↓