3

infix-to-postfix-to-infix コンバーターをテストしていますが、ある種の不確実性が見つかりました。たとえば、単純な中置和

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 つ選択する必要があります。

4

3 に答える 3

7

追加の制約を定義する必要があります。

数学的には、後置式はすべて同じです。しかし、コンピューターの整数の加算は、オーバーフローのために実際には可換ではありません。

1 2 3 4 を abcd に置き換え、オーバーフローの可能性を考慮します。ほとんどのプログラミング言語では、 をa + b + c + d左から右に評価する必要があると定義しているため、それa b + c + d +が唯一の正しい変換になります。

評価の順序が「未指定」であると定義した場合にのみ、すべての後置バージョンが同等になります。(古い) C コンパイラの場合がそうでした。

于 2010-08-09T14:00:36.857 に答える
5

はい、すべて正しいです。これらは、次の角かっこで囲まれた中置式に対応します。

((1 + 2) + 3) + 4
(1 + 2) + (3 + 4)
1 + (2 + (3 + 4))
于 2010-08-09T13:54:52.447 に答える
2

+紛らわしいです - それは可換であるため、実際にはすべての結果が正しいように見えます。

+他の演算子に置き換えることを検討してください: 1 a 2 b 3 c 4.
ここで、左結合演算子の正しい結果は次のとおりです。

1 2 a 3 b 4 c

だから、あなたの場合、私は期待します1 2 + 3 + 4 +

于 2010-08-09T14:04:30.457 に答える