And*_*rei 3 algorithm infix-notation notation postfix-notation shunting-yard
我正在测试一个中缀到后缀到中缀的转换器,并发现了一些不确定性.例如,一个简单的中缀和
1 + 2 + 3 + 4
Run Code Online (Sandbox Code Playgroud)
可以转换为后缀一个
1 2 + 3 + 4 +
Run Code Online (Sandbox Code Playgroud)
假设没有累积优先级相同的运算符.如果他们是我那么
1 2 3 4 + + +
Run Code Online (Sandbox Code Playgroud)
另一方面,所有以下后缀表达式都可以转换为初始总和
1 2 + 3 + 4 +
1 2 + 3 4 + +
1 2 3 4 + + +
Run Code Online (Sandbox Code Playgroud)
所有这些后缀表达式都是正确的吗?
如果您要制作这样的转换器,您会选择哪种形式?我需要选择一个进行测试.
您需要定义一个额外的约束.
在数学上,你的后缀表达式都是一样的.但是在计算机上,由于溢出,整数加法并不是真正可交换的.
用abcd替换1 2 3 4并考虑溢出的可能性.大多数编程语言定义a + b + c + d必须从左到右进行评估,这a b + c + d +是唯一正确的翻译.
只有当您定义评估顺序是"未指定"时,所有后缀版本都是等效的.对于(较旧的)C编译器来说就是这种情况.
是的,一切都正确.它们对应于以下括号中缀表达式:
((1 + 2) + 3) + 4
(1 + 2) + (3 + 4)
1 + (2 + (3 + 4))
Run Code Online (Sandbox Code Playgroud)