【问题标题】:How do unary operators get parsed using RPN?如何使用 RPN 解析一元运算符?
【发布时间】:2020-11-17 01:17:49
【问题描述】:

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

-190 + 20 == -190 20 +?

或者..

-190 + 20 == 190 - 20 +?

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

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

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

【问题讨论】:

    标签: math postfix-notation unary-operator rpn


    【解决方案1】:

    在典型的 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 首先没有这种歧义。

    【讨论】:

    • 谢谢。我的意思是,在将中缀分流到后缀期间,当词法分析器将标记识别为一元减号时——(我已经看到它建议)一元减号应设置为右关联,并具有最高优先级(即是 pow 运算符是 3,一元减号应该是 4)?
    • Eldredge 的完美回答。 Here 是一个类似 Forth 的解释器。
    猜你喜欢
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多