首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MySQL解析器测试Math.js语法

如何使用MySQL解析器测试Math.js语法
EN

Stack Overflow用户
提问于 2014-12-02 04:42:05
回答 1查看 68关注 0票数 0

我允许用户在web表单字段中指定一个MySQL计算字段,该字段可能读取如下内容:

代码语言:javascript
复制
(bldgFuelCostElectricity * assetMotorSize) * if(bldgField1>bldgField2,bldgField1-bldgField2,0) * 24

在运行时,我将用其他表列替换camelcase参数,但在让用户将此表达式保存为报表模板的一部分之前,我希望使用Math.js测试函数的有效性,但它不喜欢IF()构造。Math.js确实允许函数名重写,但我不能让它处理特定的IF情况,因为这是一个保留字。

当MySQL函数的某些函数已经具有JavaScript等价物时,如何使用Math.js测试MySQL函数是否有效?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-02 09:21:20

您需要小心地使用math.js的解析器测试math.js语法,因为它们的语法不同。您必须仔细定义所支持的语法,并对其进行明确的测试。

您可以使用math.js将表达式解析为表达式树并对它们进行分析。通过遍历树,可以验证语法。例如:

代码语言:javascript
复制
var node = math.parse('3 * x + 2');
node.traverse(function (node, path, parent) {
  switch (node.type) {
    case 'OperatorNode': console.log(node.type, node.op);    break;
    case 'ConstantNode': console.log(node.type, node.value); break;
    case 'SymbolNode':   console.log(node.type, node.name);  break;
    default:             console.log(node.type);
  }
});
// outputs:
//   OperatorNode +
//   OperatorNode *
//   ConstantNode 3
//   SymbolNode x
//   ConstantNode 2

因此,在您的示例中,您只需解析表达式,然后分析返回的树:

代码语言:javascript
复制
var node = math.parse('(bldgFuelCostElectricity * assetMotorSize) * if(bldgField1>bldgField2,bldgField1-bldgField2,0) * 24');
// node.traverse(...)

有关更多信息,请参见文档:trees.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27241995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档