如何使用 RPN 解析一元运算符?

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 +

Nat*_*dge 6

在典型的 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 本来就没有这样的歧义性。