3 ms·
A Pratt-style parser makes expression precedence easy in a recursive descent parser: "use strict"; var tokens = [2, '+', 5, '+', 9, '+', 4]; var PR
by judofyr 10y ago
A Pratt-style parser makes expression precedence easy in a recursive descent parser:
"use strict";
var tokens = [2, '+', 5, '+', 9, '+', 4];
var PREC = {'+': 1, '-': 1, '*': 2, '/': 2};
function expr(prec) {
var value = tokens.shift();
while (true) {
var nextToken = tokens[0];
var nextPrec = PREC[nextToken];
if (!nextPrec) break; // not an operator
if (nextPrec <= prec) break;
tokens.shift();
var rest = expr(nextPrec);
value = [nextToken, value, rest];
}
return value;
}
console.log(expr(0));
I find this technique useful because I can implement it in any language without being dependent on a parser generator.