@jkearl/pratt
Version:
Pratt parser builder (along with simple tokenizer)
25 lines • 1.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const parse_1 = require("./parse");
const tokenize_1 = require("./tokenize");
const { tokenize } = new tokenize_1.Tokenizer([
{ pattern: "+" },
{ pattern: "-" },
{ pattern: "*" },
{ pattern: "/" },
{ pattern: "^" },
{ pattern: "(" },
{ pattern: ")" },
{ pattern: /\d+/, id: "NUMBER" },
]);
exports.calculate = new parse_1.ParserBuilder(tokenize)
.registerPrefix("NUMBER", { parse: (_, token) => +token.value })
.registerPrefix("(", parse_1.PARENTHESES_PARSELET)
.prefix("-", 4 /* Negate */, (_, right) => -right)
.infixRight("^", 3 /* Exp */, (left, _, right) => left ** right)
.infixLeft("/", 2 /* MulDiv */, (left, _, right) => left / right)
.infixLeft("*", 2 /* MulDiv */, (left, _, right) => left * right)
.infixLeft("+", 1 /* AddSub */, (left, _, right) => left + right)
.infixLeft("-", 1 /* AddSub */, (left, _, right) => left - right)
.construct();
//# sourceMappingURL=calculator.demo.js.map