后缀的负数前缀

Zep*_*hyr 1 infix-notation infix-operator postfix

如何将负数从中缀转换为后缀?

假设我有一个表达式

a =-b-(-cd)

在某些地方,我读到您可以将诸如

a =(-b)-(-cd)

但是在这里,如果我这样做的话,我将在后缀表达式的开头得到类似“ ab-”的术语,表示ab且不正确。

我该如何转换呢?

M O*_*ehm 7

在后缀表示法中,您必须区分二进制减法运算符sub和一元否定运算符neg。两者都用减号表示,但是上下文告诉您哪个是哪个。

你已经有了一个否定,当减为表达式的开始,还是后一个左括号或二元运算后:

    - (X + Ý)→   X ý 附加
    4× - X   →4 X NEG MULT
    2×( - X + Y)→2 X NEG ÿ 附加 MULT

当减号在右括号后或符号后,即在变量或数字后,您将得到减法

    1 − x   →1 x
    (4?x)− 1   →4 x 1

请注意,一元运算符neg只会从堆栈中取出一个参数。如果要使用二进制运算符,可以在第二个操作数之前加一个零,并使用binary sub

    −(x + y)→0 x y 添加 sub
    4 x mult   →4 0 x sub mult
    2 x ne y add mul   →2 0 x sub y 添加 mult

最后,您可以将类似的逻辑应用于一元加号,您可以忽略该逻辑:

    + x   →   x
    +(x + y)→   x y