UNPKG

@parser-generator/core

Version:

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

67 lines 2.19 kB
import "mocha"; import "should"; import { FirstCalculator } from "../first-follow"; import { NonTerminal } from "@parser-generator/definition"; import { SimpleGrammar } from "./toolkit"; import should from "should"; describe("============The calculation of first set============", function () { describe(` 循环依赖 `, function () { it(` A->B B->A `, function () { let A = new NonTerminal("A"); let B = new NonTerminal("B"); let grammar = new SimpleGrammar([ [A, [B]], [B, [A]] ]); let firstSetCalculator = new FirstCalculator(grammar); should(firstSetCalculator.getFirstSet(A)).size(0); should(firstSetCalculator.getFirstSet(B)).size(0); }); it(` A->B B->A | b `, function () { let A = new NonTerminal("A"); let B = new NonTerminal("B"); let grammar = new SimpleGrammar([ [A, [B]], [B, [A], ["b"]] ]); let firstSetCalculator = new FirstCalculator(grammar); should(firstSetCalculator.getFirstSet(A)).eql(new Set(["b"])); should(firstSetCalculator.getFirstSet(B)).eql(new Set(["b"])); }); it(` A->B B->C C->D D->E E->A `, function () { let A = new NonTerminal("A"); let B = new NonTerminal("B"); let C = new NonTerminal("C"); let D = new NonTerminal("D"); let E = new NonTerminal("E"); let grammar = new SimpleGrammar([ [A, [B]], [B, [C]], [C, [D]], [D, [E]], [E, [A]], ]); let firstSetCalculator = new FirstCalculator(grammar); should(firstSetCalculator.getFirstSet(A)).size(0); should(firstSetCalculator.getFirstSet(B)).size(0); should(firstSetCalculator.getFirstSet(C)).size(0); should(firstSetCalculator.getFirstSet(D)).size(0); should(firstSetCalculator.getFirstSet(E)).size(0); }); }); }); //# sourceMappingURL=first.test.js.map