私はこのように式評価プログラムをやっています。私の問題は、操作の優先順位を処理する方法がわからないことです。再帰を使用して、最も内側の括弧のペアを見つけ、見つかったら、次のようにそれらの中の式を解決します。
Evaluate("2 + (3 * 5)")
次のように自分自身を再呼び出しします。
Evaluate("3 * 5")
ここでは、括弧がないため、結果を計算し、もう一度自分自身を呼び出します。
Evaluate("2 + 15")
わかりました。期待どおり、戻り値は 17 です。しかし、私が呼び出すとEvaluate("2 + 3 * 5")
、結果は次のようになります。
Evaluate("2 + 3 * 5")
Evaluate("5 * 5")
これは明らかに間違っています。
基本的に左から右に操作を解いています。最初に実行する必要がある操作を選択するにはどうすればよいですか? すべての操作を囲む括弧をいくつか追加することを考えていましたが、見栄えがよくありません。
では、最初に式全体を解析する必要がありますか? 別の方法がありますか?