我已经在PegJS中定义了一个基本的函数表达语法。我有两个问题:
它具有我在调用parser.parse
时想要提供的外部变量和函数。类似于myParser.parse("x + y", {x: 1, y: 2})
。我使用全局变量破解了一个解决方案,但是有更好的方法吗?
现在,我想实现两种类型的访问者,以使用从Javascript传入的变量输出表达式的结果,或输出SQL表达式以在数据库中执行它。像这样:
myParser.parse("MEAN(x, y)", "JavaScript", {x: 1, y: 2, MEAN: (args) => Math.mean(...args) })
将返回1.5
,但是:
myParser.parse("MEAN(x, y)", "SQL", {})
将返回一个SQL表达式AVG(x, y)
。
PegJS中有一个visitor
概念。我想我可以写2个访问者MathVisitor
和SqlVisitor
,并用不同的依赖项对其进行配置,以遍历解析树并输出所需的内容。但是到目前为止,我仍无法弄清这是否是我需要的以及如何使用它。