@parser-generator/grammar-interpreter
Version:
A Parser Generator that supports LL,SLR,LR1,LALR
53 lines • 1.82 kB
JavaScript
import { NonTerminal, TokenPro, Production, SymbolWrapper, NIL, EOF } from "@parser-generator/definition";
import { Expr, Term, Factor } from "./ast";
export let digit = new TokenPro("digit");
let E = new NonTerminal("E");
let T = new NonTerminal("T");
let F = new NonTerminal("F");
/* (0) E->FT<%(e)=>new Expr(e)%> */
let p0 = new Production(0, E, [
new SymbolWrapper(F),
new SymbolWrapper(T)
], undefined, (e) => new Expr(e));
/* (1) T->+FT<%(e)=>new Term(e)%> */
let p1 = new Production(1, T, [
new SymbolWrapper("+"),
new SymbolWrapper(F),
new SymbolWrapper(T)
], undefined, (e) => new Term(e));
/* (2) T->-FT<%(e)=>new Term(e)%> */
let p2 = new Production(2, T, [
new SymbolWrapper("-"),
new SymbolWrapper(F),
new SymbolWrapper(T)
], undefined, (e) => new Term(e));
/* (3) T->NIL<%(e)=>new Term(e)%> */
let p3 = new Production(3, T, [
new SymbolWrapper(NIL)
], undefined, (e) => new Term(e));
/* (4) F->digit<%(e)=>new Factor(e)%> */
let p4 = new Production(4, F, [
new SymbolWrapper(digit)
], undefined, (e) => new Factor(e));
/* (5) F->(E)<%(e)=>new Factor(e)%> */
let p5 = new Production(5, F, [
new SymbolWrapper("("),
new SymbolWrapper(E),
new SymbolWrapper(")")
], undefined, (e) => new 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([[digit, p0], ["(", p0]]));
first.set(T, new Map([["+", p1], ["-", p2], [NIL, p3]]));
first.set(F, new Map([[digit, p4], ["(", p5]]));
/* follow set */
let follow = new Map();
follow.set(E, new Set([EOF, ")"]));
follow.set(T, new Set([EOF, ")"]));
follow.set(F, new Set(["+", "-", EOF, ")"]));
import { LLParser } from "@parser-generator/core";
export let parser = new LLParser(E, first, follow);
//# sourceMappingURL=parser.tmp.js.map