私は表現評価プログラムをやっています。ちょうどthisのようです。私の問題は、操作の優先順位をどのように処理するのか分かりません。表現の評価
Evaluate("2 + (3 * 5)")
自体を再呼び出し、このようでしょう:今
Evaluate("3 * 5")
、そこから私はこのように、括弧の最も内側のカップルを見つけて、見つけたときに、それらの内側に式を解くために再帰を使用しましたはかっこではなく、結果を計算して別の時間を呼び出します。
Evaluate("2 + 15")
いいえ、戻り値は期待どおり17です。私はEvaluate("2 + 3 * 5")
を呼び出す場合でも、結果は次のとおりです。明らかに間違っている
Evaluate("2 + 3 * 5")
Evaluate("5 * 5")
。
基本的に私は操作を左から右に解決しています。どのようにして最初に実行する必要がある操作を選択できますか?私は、すべての操作を囲む括弧をいくつか追加することを考えていましたが、それほど良く見えません。
それでは、まず式全体を解析する必要がありますか?別の方法がありますか?
(http://stackoverflow.com/questions/4582398/writing-a-simple-equation-parser) –