简朴的表达式求值
当前位置:以往代写 > C/C++ 教程 >简朴的表达式求值
2019-06-13

简朴的表达式求值

简朴的表达式求值

一直很想做个比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 (空串)

可以按照这个发生式结构递归的语法阐明器。详细细节就不论述了,可以阅读源代码。

语法阐明正确后就可以求值了,求值时用到一个操纵数仓库和操纵符仓库,以及一个算符优先表(存储了运算符之间的优先干系),详细细节可以阅读源码。

本文配套源码

    关键字:

在线提交作业