为什么我们需要前缀,后缀表示法

Cha*_*ani 27 compiler-construction algorithm programming-languages formal-languages

我知道他们每个人如何相互转换,但从未真正理解他们的应用是什么.通常的中缀操作是可读的,但它失败的地方导致了前缀和后缀表示法的开始

Jan*_*ger 43

Infix表示法对于人类来说很容易阅读,而前/后缀表示法更容易为机器解析.前/后符号表示的最大优点是不会出现像运算符优先级这样的问题.

例如,考虑中缀表达式1 # 2 $ 3.现在,我们不知道这些运算符的含义,因此有两种可能的对应的后缀表达式:1 2 # 3 $1 2 3 $ #.在不知道管理这些运算符使用的规则的情况下,中缀表达式基本上是没有价值的.

或者,更一般地说:可以从前/后缀表达式恢复原始(解析)树而无需任何其他知识,但对于中缀表达式则不一样.

  • @ 6502在这方面有关系吗? (3认同)
  • 前缀和后缀表示法仍然需要知道每个运算符需要多少个操作数。如果没有这些知识,就无法解析它们。Lisp 通过给每个子表达式加上括号来解决这个问题。`1 2 # 3 $` 可以等价于 `($ (# 1 2) 3)` 或 `($ 1 (# 2) 3)`。 (2认同)

Kei*_*son 6

后缀表示法,也称为RPN,很容易从左到右处理。操作数被压入堆栈;运算符从堆栈中弹出其操作数并压入结果。很少或不需要解析。它被 Forth 和一些计算器使用(HP 计算器因使用 RPN 而闻名)。

前缀表示法几乎同样容易处理;它用在 Lisp 中。

  • @DerekLedbetter:是的,所有内容都带有括号,但括号之间的内容使用前缀表示法:`(+ 2 2)`。它不是*纯粹的*前缀表示法。 (4认同)