我正在做一个表达式评估程序,就像这样。我的问题是我不知道如何处理操作优先级。我使用递归来找到最里面的一对括号,并在找到后解决其中的表达式,如下所示:
Evaluate("2 + (3 * 5)")
将以这种方式重新调用自己:
Evaluate("3 * 5")
现在,由于没有括号,它计算结果并再次调用自己:
Evaluate("2 + 15")
好的,返回值是 17,正如预期的那样。但如果我调用Evaluate("2 + 3 * 5")
结果是:
Evaluate("2 + 3 * 5")
Evaluate("5 * 5")
这显然是错误的。
基本上我正在从左到右解决操作。如何选择必须首先执行的操作?我想在每个操作周围添加几个括号,但看起来不太好。
那么,我需要先解析整个表达式还是有另一种方法?