UNPKG

@jkearl/pratt

Version:

Pratt parser builder (along with simple tokenizer)

25 lines 1.04 kB
"use strict"; 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