如何使用 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 首先没有这种歧义。
给定中缀表达式 -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 首先没有这种歧义。