質問

私は中置ツーのpostfixツー中置コンバータをテストし、不確実性のいくつかの種類を見つけています。例えば、簡単な中置和

1 + 2 + 3 + 4

が後置いずれかに変換することができる

1 2 + 3 + 4 +

等しい優先順位の演算子が蓄積されていないと仮定します。彼らは、その後であれば、私は取得

1 2 3 4 + + +

一方、以下のすべてのpostfixの式は、最初の合計に変換することができます。

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

これらすべての後置表現は正しいですか?

UPDATE1

あなたは、このようなコンバータを作りたい場合、

、どのフォームにあなたは選びますか?私はテストのための1つを選択する必要があります。

役に立ちましたか?

解決

あなたは余分な制約を定義する必要があります。

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

bはC dで1 2 3 4を交換し、オーバーフローの可能性を検討します。ほとんどのプログラミング言語は、そのa + b + c + dが左から右にそれa b + c + d +が唯一の正しい翻訳したものですので、評価されなければならない定義します。

あなたは評価の順序は、全てのPostfixのバージョンが等価である「不定」であることを定義のみ

。すなわち、(古い)Cコンパイラの場合であった。

他のヒント

うん、すべて正しいです。彼らは、以下の括弧中置式に対応します:

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

+が混乱している - 。それはそう実際には、すべての結果はの正しい

そうです、可換であります

は、他の事業者と+を置き換える考えてみます。1 a 2 b 3 c 4
ここでは、正しい結果、左結合の演算子のために、

であります
1 2 a 3 b 4 c

だから、あなたのケースでは、私が期待する1 2 + 3 + 4 +

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top