UNPKG

@parser-generator/grammar-interpreter

Version:

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

55 lines 2.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const definition_1 = require("@parser-generator/definition"); const ast_1 = require("./ast"); exports.digit = new definition_1.TokenPro("digit"); let E = new definition_1.NonTerminal("E"); let T = new definition_1.NonTerminal("T"); let F = new definition_1.NonTerminal("F"); /* (0) E->FT<%(e)=>new Expr(e)%> */ let p0 = new definition_1.Production(0, E, [ new definition_1.SymbolWrapper(F), new definition_1.SymbolWrapper(T) ], undefined, (e) => new ast_1.Expr(e)); /* (1) T->+FT<%(e)=>new Term(e)%> */ let p1 = new definition_1.Production(1, T, [ new definition_1.SymbolWrapper("+"), new definition_1.SymbolWrapper(F), new definition_1.SymbolWrapper(T) ], undefined, (e) => new ast_1.Term(e)); /* (2) T->-FT<%(e)=>new Term(e)%> */ let p2 = new definition_1.Production(2, T, [ new definition_1.SymbolWrapper("-"), new definition_1.SymbolWrapper(F), new definition_1.SymbolWrapper(T) ], undefined, (e) => new ast_1.Term(e)); /* (3) T->NIL<%(e)=>new Term(e)%> */ let p3 = new definition_1.Production(3, T, [ new definition_1.SymbolWrapper(definition_1.NIL) ], undefined, (e) => new ast_1.Term(e)); /* (4) F->digit<%(e)=>new Factor(e)%> */ let p4 = new definition_1.Production(4, F, [ new definition_1.SymbolWrapper(exports.digit) ], undefined, (e) => new ast_1.Factor(e)); /* (5) F->(E)<%(e)=>new Factor(e)%> */ let p5 = new definition_1.Production(5, F, [ new definition_1.SymbolWrapper("("), new definition_1.SymbolWrapper(E), new definition_1.SymbolWrapper(")") ], undefined, (e) => new ast_1.Factor(e)); E.prods = [p0]; T.prods = [p1, p2, p3]; F.prods = [p4, p5]; /* first set */ let first = new Map(); first.set(E, new Map([[exports.digit, p0], ["(", p0]])); first.set(T, new Map([["+", p1], ["-", p2], [definition_1.NIL, p3]])); first.set(F, new Map([[exports.digit, p4], ["(", p5]])); /* follow set */ let follow = new Map(); follow.set(E, new Set([definition_1.EOF, ")"])); follow.set(T, new Set([definition_1.EOF, ")"])); follow.set(F, new Set(["+", "-", definition_1.EOF, ")"])); const core_1 = require("@parser-generator/core"); exports.parser = new core_1.LLParser(E, first, follow); //# sourceMappingURL=parser.tmp.js.map