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

How do unary operators get parsed using RPN?

给定中缀表达式 -190 + 20,RPN 的正确结果应该是什么样的?

-190 + 20 == -190 20 + ?

或..

-190 + 20 == 190 - 20 + ?

一元运算符(负)的规则是否与其他运算符相同,只是 right 关联 属性 和更高的优先级?

类似的表达方式如下: -(9 + 9)

会吗? -(9 + 9) = 9 - 9 +?

在典型的 RPN 语言中,您不能根据上下文将相同的标记 - 解释为一元或二元运算符,因为没有上下文。它必须始终是其中之一。所以通常 - 保留为二元减法运算符,而其他一些标记用于一元否定运算符。第四,例如,称它为NEGATE。因此在 Forth 中,您的 -190 + 20 可以编码为 190 NEGATE 20 +,而您的 -(9+9) 可以编码为 9 9 + NEGATE.

Forth 也可以解析负数,因此您的 -190 + 20 也可以编码为 -190 20 +。然而,- 在此实例中不是运算符,而只是单个标记 -190 的一部分。此示例中使用的唯一运算符是 +.

如果你用典型的 RPN 语言写 190 - 20 +,你会得到一个堆栈下溢(或者堆栈上发生的任何事情,负 190,加上 20)因为 - 是无条件的解释为二元运算符。

RPN 没有优先级和结合性的概念 - 这些用于解决表达式计算中的歧义,而 RPN 首先没有这种歧义。