@parser-generator/grammar-interpreter
Version:
A Parser Generator that supports LL,SLR,LR1,LALR
55 lines • 2.26 kB
JavaScript
;
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