负数的中缀到后缀

Infix to postfix for negative numbers

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

假设我有一个表达式

a = - b - (-c-d)

在某些地方我读到你可以像

a = (-b) - (-c-d)

但是如果我这样做,我会在后缀表达式的开头得到一个像 "ab-" 这样的术语,意思是 a-b 并且是不正确的。

如何转换?

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

你有一个求反,当减号出现在表达式的开头,或左括号后或二元运算符后:

− (x + y) → x y 添加 否定
4 × − x → 4 x neg mult
2 × (− x + y) 2 x neg y 添加

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

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

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

− (x + y) → 0 x y 添加
4 x neg mult → 4 0 x sub mult
2 x neg y add mult → 2 0 x sub y add 多个

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

+ xx
+ (x + y) → x y 添加