我正在尝试扩展PEG.js的示例语法,以使用我的在线 BASIC 解释器实验的所有 4 个运算符解析数学表达式:
http://www.dantonag.it/basicjs/basicjs.html
但并非所有表达式都被正确解析。
这是我的 PEG 语法:
expression = additive
additive = left:multiplicative atag:("+" / "-") right:additive { return {tag: atag, left:left, right:right}; } / multiplicative
multiplicative = left:primary atag:("*" / "/") right:multiplicative { return {tag: atag, left:left, right:right}; } / primary
primary = number / "(" additive:additive ")" { return additive; }
number = digits:[0-9]+ { return parseInt(digits.join(""), 10); }
它可以正确解析像 2*3+1(给出 7)这样的表达式,但不能正确解析像 2-1-1 这样给出 2 而不是 0 的表达式。
你能帮我改进和调试吗?
提前致谢。
编辑:我在语法中添加了“数字”规则。是的,我的语法给出了一个类似于解析树的递归结构作为输出。