如何将负数从中缀转换为后缀?
假设我有一个表达式
a=-b-(-c-d)
在某些地方,我读到你可以像一样将负数进行合成
a=(-b)-(-c-d)
但在这里,如果我这样做,我会在后缀表达式的开头得到一个像"ab-"这样的术语,它的意思是a-b,是不正确的。
如何转换?
在中缀表示法中,必须区分二进制减法运算符sub和一元否定运算符neg。两者都用减号表示,但上下文告诉你哪个是哪个。
当减号在表达式开头、左括号后面或二进制运算符后面时,您得到了否定:
emsp&减(x+y)/emsp→emspxy添加neg
/emsp 4&次&减号x/emsp→emsp;4x负mult
emsp;2&次;(减号;x+y)/emsp→emsp;2xnegy添加mult
当减号在右括号后面或符号后面时,即在变量或数字后面时,您就得到了减法:
emsp;1&减号x/emsp→emsp;1xsub
/emsp (4*x)&减号1/emsp→emsp;4xmult1sub
注意一元运算符neg只从堆栈中取出一个参数。如果你想坚持使用二进制运算符,你可以在第二个操作数之前加一个零,并使用二进制sub:
emsp&减(x+y)/emsp→emsp;0xy添加sub
/emsp 4xneg多重 rarr 4 0x子mult
emsp;2xnegy添加mult rarr 2 0x子y添加mult
最后,您可以将类似的逻辑应用于一元加号,您可以忽略它:
emsp;+x/emsp→emspx
/emsp +(x+y)/emsp→emspxy添加