以下哪个后缀符号正确表示中缀和1 + 2 + 3 + 4?

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)

所有这些后缀表达式都是正确的吗?

UPDATE1

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

Hen*_*man 6

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

在数学上,你的后缀表达式都是一样的.但是在计算机上,由于溢出,整数加法并不是真正可交换的.

用abcd替换1 2 3 4并考虑溢出的可能性.大多数编程语言定义a + b + c + d必须从左到右进行评估,这a b + c + d +是唯一正确的翻译.

只有当您定义评估顺序是"未指定"时,所有后缀版本都是等效的.对于(较旧的)C编译器来说就是这种情况.


Dav*_*vid 5

是的,一切都正确.它们对应于以下括号中缀表达式:

((1 + 2) + 3) + 4
(1 + 2) + (3 + 4)
1 + (2 + (3 + 4))
Run Code Online (Sandbox Code Playgroud)

  • 要迂腐,唯一严格正确的顺序是第一顺序.其他的是等价的,但仅仅因为加法是相关的.显然,他们都给出了相同的答案,但是,1441 +++也是如此. (2认同)