我试图使用peg.js库来解析数学表达式。我在在线peg.js中添加了以下语法:
start
= any
additive
= left:primary "+" right:any { return left + right; }
multiplicative
= left:primary "*" right:any { return left * right; }
any
= multiplicative
/ additive
/ primary
primary
= float
/ integer
/ "(" any:any ")" { return any; }
/ "" { return 0; }
float "float"
= left:[0-9]+ "." right:[0-9]+ { return parseFloat(left.join("") + "." + right.join("")); }
integer "integer"
= digits:[0-9]+ { return parseInt(digits.join(""), 10); }但是当我试图计算:3*5+1时,我得到了18
发布于 2016-02-19 13:20:30
我想下面的代码就是你想要的。
诀窍是让最弱的操作符(+)有一个引用乘法规则的规则,以便在乘法匹配之后才能进行加法,而在主表达式匹配后才能进行加法。
start
= any
any
= additive
additive
= left:multiplicative "+" right:additive { return left + right; }
/ multiplicative
multiplicative
= left:primary "*" right:multiplicative { return left * right; }
/ primary
primary
= float
/ integer
/ "(" any:any ")" { return any; }
/ "" { return 0; }
float "float"
= left:[0-9]+ "." right:[0-9]+ { return parseFloat(left.join("") + "." + right.join("")); }
integer "integer"
= digits:[0-9]+ { return parseInt(digits.join(""), 10); }https://stackoverflow.com/questions/35435500
复制相似问题