四则运算比如:a + b*c +( d - e)
编译器的做法一般是将其解析成逆波兰式之后再进行运算
解析过程如下:
依次取经过四则运算之后的 四则运算表达式 中的各个元素x
分析规则:(需要使用到 存在逆波兰式结果的栈 结果栈和临时存放运算符的栈 运算符栈)
1 如果x为操作数则直接压入结果栈
2 如果x为操作符则分析规则如下:
a 如果x为"(", 则直接将其压入运算符栈
b 如果x为")",则将距离其最近的运算符依次压入结果栈中,并将"("丢弃
c 如果x不为"("或者")":
如果运算符栈为空,则直接将x入运算符栈
如果运算符栈非空,若x比运算符栈顶运算符的优先级高,则将x入栈,否则将运算符栈中优先级高于x的运算符依次出栈直到遇到优先级小于x的运算符
3 如果到达表达式的末尾,则将运算符栈中的所有运算符依次压入结果栈中