UNPKG

@parser-generator/grammar-interpreter

Version:

A Parser Generator that supports LL,SLR,LR1,LALR

51 lines (50 loc) 2.04 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const should_1 = __importDefault(require("should")); const lexer_1 = require("../lexer"); const interp_1 = require("../../../interp"); const shim_1 = require("@light0x00/shim"); const definition_1 = require("@parser-generator/definition"); const fs_1 = __importDefault(require("fs")); const core_1 = require("@parser-generator/core"); describe(`LL Arithmetic Parser Test`, () => { let parser, digit; it(`fuck`, async () => { let { code } = interp_1.genParser(` <% import { Expr,Term, Factor } from "./ast"; %> #TOKEN_PROTOTYPES digit #GRAMMAR E->F T <% (e)=>new Expr(e) %>; T-> "+"F T| '-'F T | NIL <% (e)=>new Term(e) %>; F->digit | '('E')' <% (e)=>new Factor(e)%>; `, { parser: "LL", lang: "TS" }); fs_1.default.writeFileSync(__dirname + "/parser.tmp.ts", code, { encoding: "utf-8", flag: "w+" }); let exp = await Promise.resolve().then(() => __importStar(require("./parser.tmp"))); parser = exp.parser; digit = exp.digit; shim_1.assert(parser instanceof core_1.LLParser); shim_1.assert(digit instanceof definition_1.TokenPro); }); it(`1+2-3*5/4`, function () { let ast = parser.parse(lexer_1.getLexer("1+2-3*5/a 4", digit)); let r = ast.eval(); should_1.default(r).eql(-0.75); }); it(`(1+2-3*4/5)+(6)-(7/8)`, function () { let ast = parser.parse(lexer_1.getLexer("(1+2-3*4/5)+(6)-(7/8)", digit)); let r = ast.eval(); should_1.default(r).eql(5.725); }); }); //# sourceMappingURL=test.js.map