私はshunting-yard アルゴリズムを実装しています。演算子に欠落している引数がある場合、検出に問題があります。ウィキペディアのエントリはこのトピックに関して非常に悪く、以下の例でもコードがクラッシュします。
たとえば、 には引数3 - (5 + )
がないため、正しくありません。+
アルゴリズムが に到達する直前に)
、演算子スタックには が含まれ- ( +
、オペランド スタックには が含まれます3 5
。次に、次のようになります。
+
オペレータースタックからポップします+
二項演算子であることを発見- 2 つのオペランドをポップし、演算子を適用し、結果 (
8
) をオペランド スタックにプッシュします。 (
次に、一致するものをスタックからポップし、続行します
+
では、引数が欠落していることをどのように検出できますか? ウィキペディアも更新する場合は、さらに称賛します:-)