我需要实现一个简单的数学表达式计算器,如 1 + 2 *(3.4 + 0.1)
我认为用
实现这些东西很容易QScriptEngine::evaluate()
但是存在一个问题:一些无效的表达式被认为是有效的并且被评估为某种东西而不是产生错误。
示例:
QString expression = "1 + 2*("; // <---- wrong expression
auto checkResult = QScriptEngine::checkSyntax(expression);
if (checkResult.state() == QScriptSyntaxCheckResult::Valid)
{
QScriptEngine engine;
auto scriptResult = engine.evaluate(expression);
if (scriptResult.isValid() && scriptResult.isNumber())
{
double value = scriptResult.toNumber(); // <---- the value is 3.0, instead of an error
}
}
所以我的问题是:我错过了什么,有一种方法可以在使用Qt的QScriptEngine :: evaluate()之前检查表达式的语法吗?
另一种方法是使用Lepton库(或类似的),但我不想包含其他第三方组件。
答案 0 :(得分:0)
不幸的是有一个配置/ Qt问题。更新到最新的Qt5.5&amp;重建项目解决了这个问题。谢谢@hyde。