GN.*_*GN. 4 math rpn unary-operator postfix-notation
给定中缀表达式-190 + 20,正确的 RPN 结果会是什么样子?
-190 + 20 == -190 20 +?
或者..
-190 + 20 == 190 - 20 +?
一元运算符(负数)的规则是否与其他运算符相同,但只是right结合属性,并且优先级更高?
类似的表达式如下:
-(9 + 9)
将会?
-(9 + 9) = 9 - 9 +?
在典型的 RPN 语言中,您不能-根据上下文将相同的标记解释为一元或二元运算符,因为没有上下文。它必须始终是其中之一。因此通常-保留为二元减法运算符,而其他一些标记则用于一元负运算符。例如,福斯称其为NEGATE。因此,在 Forth 中,your-190 + 20可以编码为190 NEGATE 20 +,your -(9+9)as 9 9 + NEGATE。
Forth 还可以解析负数,因此您-190 + 20也可以被编码-190 20 +。然而,-在本例中 不是运算符,而只是单个标记的一部分-190。此示例中使用的唯一运算符是+。
如果您190 - 20 +使用典型的 RPN 语言编写,您将得到堆栈下溢(或者堆栈上发生的任何情况,负 190,加上 20),因为-被无条件解释为二元运算符。
RPN 没有优先级和结合性的概念——这些概念用于解决表达式求值中的歧义性,而 RPN 本来就没有这样的歧义性。