次の接尾辞表記法のどれが中置和1 + 2 + 3 + 4を正しく表しますか?

algorithm infix-notation notation postfix-notation shunting-yard
次の接尾辞表記法のどれが中置和1 + 2 + 3 + 4を正しく表しますか?

私は、中置から後置への変換をテストしていますが、ある種の不確実性が見つかりました。 たとえば、単純な中置和

1 + 2 + 3 + 4

接尾辞1に変換できます

1 2 + 3 + 4 +

優先順位が同じ演算子は蓄積されないと仮定します。 もしそうなら、私は得る

1 2 3 4 + + +

一方、以下のすべての接尾辞式は初期合計に変換できます

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

これらの接尾辞式はすべて正しいですか?

更新1

そのようなコンバーターを作成する場合、どの形式を選択しますか? テスト用に1つを選択する必要があります。

  3  0


ベストアンサー

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

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

1 2 3 4をa b c dに置き換え、オーバーフローの可能性を考慮します。 ほとんどのプログラミング言語では、「a + b + c + d」を左から右に評価して、「a b + c + d +」だけが正しい翻訳になるように定義する必要があると定義しています。

評価の順序が「指定されていない」と定義した場合のみ、すべての接尾辞バージョンは同等です。 (古い)Cコンパイラの場合がそうでした。

6


うん、すべて正しい。 これらは、次の括弧で囲まれた中置式に対応します。

((1 + 2) + 3) + 4
(1 + 2) + (3 + 4)
1 + (2 + (3 + 4))

5


`+`は紛らわしい-可換なので、実際にはすべての結果が_seems_正しい。

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

1 2 a 3 b 4 c

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

2


タイトルとURLをコピーしました