2013-11-27 12 views
8

中置式を後置式に変換する際に単項 " - "を扱う良い方法はありますか?shunting-yardアルゴリズムの単項マイナスを扱う

明白なものはすべて単項 " - "に接頭辞として0が付いています。ありがとう!

+0

この問題にはいくつかの解決策がありますが、それらのすべてがいくつか拡張されています。 – harold

+0

あなたの投稿の2年後、私はちょうど同じ質問をしました。それは常に関連性のある質問のようなものです。例: - 3は0に変換されます-3 -3 = -6ほとんどのパーサーはマイナスを1つの製品からマイナスを適用します、 - (-3)= 6.乾杯、 – MrVelez

+0

@MrVelez:ゼロのプレフィックスは機能しませんが、別の理由で正しいと思います。プレフィックスゼロによって前処理 ' - 3'は '0-0-3'( '0-3-3'ではなく、2番目の3はどこから来るのでしょうか? 3 ' - >' 0 - 、 - 3 ' - >' 0-0-、3 ' - >' 0-0-3 ' 'これは-3と評価されます。これはおそらく--3から欲しいものではありません。 \ '0-0-3'をポストフィックス '0 0 3 - - 'に変換すると、それは望ましい3に評価されます。 –

答えて

6

私がこの数年前にしたことは、私の後置式の新しい演算子を発明したことです。だから、私が中点の単項マイナスに遭遇したとき、それを#に変換します。したがって、a + -bの私の接尾辞はab#+になりました。

もちろん、評価者は#が1つのオペランドしかポップしていないことを知っていなければなりませんでした。

種類は、構築後にどのように使用するかによって異なります。それを表示したい場合は、特別な#オペレータがおそらく人々を混乱させるでしょう。しかし、あなたがそれを内部的に使っているなら(それは私でした)、それは素晴らしいことです。

+1

私もこれを行います。私が「中立点に単項マイナスを見つけた」と判断できる唯一の方法は、次にオペレータまたはオペランドが期待されるかどうかを定義するブール値のコンテキストを維持することです。私はハイフンが単項または二進であるときを決定するために他の人が何をしたのか知りたい。 –

+0

@ A.I.Breveleri:中置に再帰下降パーサを使用すると、明示的に状態を維持することなく単項演算子を認識できます。たとえば、http://www.engr.mun.ca/~theo/Misc/exp_parsing.htmを参照してください。 –

関連する問題