表达式求值

Posted gizing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了表达式求值相关的知识,希望对你有一定的参考价值。

对一个中缀表达式求值分为两部分:

  1. 将中缀表达式转为后缀表达式
  2. 对后缀表达式求值

tip:波兰式是前缀表达式,逆波兰式是后缀表达式

中缀转后缀

利用栈实现,扫描输入的中缀表达式,大致思路:

  1. 遇到操作数,直接输出
  2. 遇到左括号,将其放入栈中
  3. 遇到右括号,将栈元素弹出并输出,直至遇到左括号
  4. 遇到其他操作符,如加减乘除,不断从栈中弹出比当前操作符优先级更高的元素,然后将当前操作符入栈。有一点需要注意,只有在遇到" ) "的情况下我们才弹出" ( ",其他情况我们都不会弹出" ( "
  5. 如果读到了输入的末尾,则将栈中所有元素弹出

例子

中缀表达式a + b*c + (d * e + f) * g,其转换成后缀表达式则为a b c * + d e * f + g * +。

对后缀求值

利用栈实现,扫描输入的后缀表达式,大致思路:

  1. 遇到操作数则入栈
  2. 遇到操作符则从栈中弹出两个元素进行运算,将结果入栈

最终栈里的元素就是结果值

以上是关于表达式求值的主要内容,如果未能解决你的问题,请参考以下文章

Java Eclipse 求值表达式

python 短路求值或惰性求值

Java 表达式中子表达式的求值顺序

表达式求值

中缀表达式求值的思路分析与代码实现

中缀表达式求值的思路分析与代码实现