Я пытаюсь использовать библиотеку peg.js для анализа математических выражений. я ставлю в online 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
Вы сделали правильную ассоциативную грамматику, и вы сделали умножение и добавление с одинаковым приоритетом. – Pointy
Как сделать правильный приоритет оператора? – Joe
Вам нужен еще один нетерминальный «слой», так что умножения анализируются как группы на более низком уровне, чем дополнительные операнды. – Pointy