用法
创建表达式解析器的本地实例。
final ExpressionParser expressionParser = ExpressionParser();
然后,您可以像这样计算您的“字符串”表达式:
final String exp = "-2 + 5 + 10 * 2";
final double? result = expressionParser.calculate(); // result would be 23
当我们调用 calculate 时,它会自动检查表达式的有效性。
所以,我们不需要在这里进行任何手动检查。(如果表达式无效,则结果将为 null)
但是,如果您想手动检查表达式的有效性,可以这样做,例如:
final bool isValid = expressionParser.isInvalidOperation(exp) // Would be false
请参阅 官方示例 以了解 mate 的 UI 实现。
解释
解析器将字符串表达式分成部分(存储在自定义 Expression 类中),然后遍历这些部分并对它们求和。
如果字符串表达式为 "2+5",则部分将是:["2", "+5"]。所以部分的总和将是 2+(+5) -> 7。
让我们用默认表达式看看:"-2 + 5 + 10 * 2"。
在这种情况下,部分将是:["-2", "+5", "10*2"]。由于运算符优先级,我们在部分的末尾得到了 "10*2"。
所以,最终结果将是:-2+(+5)+(10*2) -> 3+20 -> 23。
