22
優先順位のある式(式)パーサー?
バイナリ(+、-、|、&、*、/など)演算子、単項(!)演算子、および括弧を処理する単純なスタックアルゴリズムを使用して、方程式パーサーを開発しました。 ただし、この方法を使用すると、すべてに同じ優先順位が残ります。演算子に関係なく左から右に評価されますが、括弧を使用して優先順位を強制できます。 そのため、現在のところ、「1 + 11 * 5」は56でなく、60を返します。 これは現在のプロジェクトに適していますが、後のプロジェクトで使用できる汎用ルーチンが欲しいです。 明確にするために編集: 優先順位のある方程式を解析するための良いアルゴリズムは何ですか? 私は実装が簡単なものに興味があり、利用可能なコードのライセンス問題を回避するために自分でコーディングできることを理解しています。 文法: 文法の質問が理解できません-これを手で書きました。YACCやBisonの必要性がわからないほど簡単です。「2 + 3 *(42/13)」のような方程式で文字列を計算するだけです。 言語: 私はCでこれを行っていますが、言語固有のソリューションではなく、アルゴリズムに興味があります。Cは十分に低いレベルなので、必要に応じて別の言語に簡単に変換できます。 コード例 上記で説明した単純式パーサーのテストコードを投稿しました。プロジェクトの要件が変更されたため、コードがプロジェクトに組み込まれていなかったため、パフォーマンスやスペースを最適化する必要がありませんでした。元の詳細形式であり、すぐに理解できるはずです。演算子の優先順位の観点からそれをさらに行う場合は、マクロハックを選択することになります。マクロハックは、プログラムの他の部分と簡単に一致するためです。ただし、これを実際のプロジェクトで使用する場合は、よりコンパクトで高速なパーサーを使用します。 関連する質問 数学パーサーのスマートなデザイン? -アダム