算法的输入会是像这样的一个表达式:
a+(-b)
a*-b+c
即任何标准C编译器支持的表达式。
现在,我已经将输入格式化为令牌流,这些令牌包含信息,无论是操作符还是操作数。算法应该接受此输入并给出一个后缀表达式,以便我可以进行评估。
如果我使用标准转换算法,我无法区分一元和二元操作符。例如a*(-b)会给我ab-*,这会导致错误的计算。
算法的输入会是像这样的一个表达式:
a+(-b)
a*-b+c
即任何标准C编译器支持的表达式。
现在,我已经将输入格式化为令牌流,这些令牌包含信息,无论是操作符还是操作数。算法应该接受此输入并给出一个后缀表达式,以便我可以进行评估。
如果我使用标准转换算法,我无法区分一元和二元操作符。例如a*(-b)会给我ab-*,这会导致错误的计算。
5+-2
是可以的,但5+-+-2
呢? - hfossli-
操作符转换为操作数-1
和操作符*
,并删除所有一元的+
操作符。-
与*
连续。4*(-(5))
这样,您的令牌将变成:
4
*
(
-1
*
(
5
)
)
a*(-b)
转换后的字符串是什么样子的?你坚持使用 C 符号还是也接受像 4(5-2) 这样只隐含 * 符号的表达式? - Antonio-6
转换为06-
以完全消除一元运算符。我喜欢这种方法,因为它更正交,你不需要在处理时考虑特殊情况。-
仍然是二元减号,~
变成否定符号。