5

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

假设我有一个表达式

a = - b - (-cd)

在某些地方,我读到您可以对负数进行复述,例如

a = (-b) - (-cd)

但是在这里,如果我这样做,我会在后缀表达式的开头得到一个类似“ab-”的术语,这意味着 ab 并且是不正确的。

我该如何转换?

4

1 回答 1

13

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

你有一个negation,当减号在表达式的开头,或者在左括号之后或在二元运算符之后:

    − ( x + y ) →   x y add neg
    4 × − x   → 4 x neg mult
    2 × (− x + y) → 2 x neg y add mult

当减号在右括号之后或符号之后,即在变量或数字之后,你得到了减法:

    1 - x   → 1 x sub
    (4 * x ) - 1   → 4 x mult 1 sub

注意一元运算符neg只从堆栈中取出一个参数。如果你想坚持使用二元运算符,你可以在第二个操作数之前推一个零并使用二元sub

    - ( x + y ) → 0 x y add sub
    4 x neg mult   → 4 0 x sub mult
    2 x neg y add mult   → 2 0 x sub y add mult

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

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

于 2017-10-21T08:56:38.613 回答