我正在测试中缀到后缀到中缀转换器并发现某种不确定性。例如,一个简单的中缀和

1 + 2 + 3 + 4

可以转换为后缀一

1 2 + 3 + 4 +

假设具有相同优先级的运算符没有累积。如果他们是那么我得到

1 2 3 4 + + +

另一方面,以下所有后缀表达式都可以转换为初始和

1 2 + 3 + 4 +
1 2 + 3 4 + +
1 2 3 4 + + +

这些后缀表达式都正确吗?

更新1

如果你要制作这样的转换器,你会选择哪种形式?我需要选择一个进行测试。

有帮助吗?

解决方案

您需要定义一个额外的约束。

从数学上讲,您的后缀表达式都是相同的。但在计算机上,由于溢出,整数加法实际上并不可交换。

将 1 2 3 4 替换为 a b c d 并考虑溢出的可能性。大多数编程语言都定义了这一点 a + b + c + d 必须从左到右评估,以便 a b + c + d + 是唯一正确的翻译。

仅当您定义评估顺序为“未指定”时,所有后缀版本都是等效的。(旧的)C 编译器就是这种情况。

其他提示

是的,都正确。它们与以下括号中的表达式相对应: 通用标签

+令人困惑-它是可交换的,因此实际上每个结果似乎都是正确的。

考虑用其他运算符替换+1 a 2 b 3 c 4
对于左关联运算符,此处的正确结果是 通用标签

所以,就您而言,我希望1 2 + 3 + 4 +

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top