Shunting-Yard アルゴリズムを使用して式を評価します。アルゴリズムを適用するだけで式を検証できます。オペランドの欠落、括弧の不一致などがあると失敗します。ただし、Shunting-Yard アルゴリズムには、人間が読めるインフィックスよりも多くの構文がサポートされています。例えば、
1 + 2
+ 1 2
1 2 +
Shunting-Yard アルゴリズムへの入力として「1+2」を提供するすべての許容可能な方法です。'+ 1 2' と '1 2 +' は有効なインフィックスではありませんが、標準の Shunting-Yard アルゴリズムで処理できます。アルゴリズムは実際には順序を気にしません。「最も近い」オペランドを取得する優先順位に従って演算子を適用します。
入力を人間が読める有効なインフィックスに制限したいと思います。Shunting-Yard アルゴリズムを変更して無効な infix で失敗するようにするか、Shunting-Yard を使用する前に infix 検証を提供する方法を探しています。
これを行うための公開された手法を知っている人はいますか? 基本演算子、カスタム演算子、括弧、および関数 (複数の引数を持つ) の両方をサポートする必要があります。基本的なオペレーター以外で動作するものはオンラインで見たことがありません。
ありがとう