UNPKG

@parser-generator/core

Version:

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

72 lines 2.71 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); require("mocha"); require("should"); const first_follow_1 = require("../first-follow"); const definition_1 = require("@parser-generator/definition"); const toolkit_1 = require("./toolkit"); const should_1 = __importDefault(require("should")); describe("============The calculation of first set============", function () { describe(` 循环依赖 `, function () { it(` A->B B->A `, function () { let A = new definition_1.NonTerminal("A"); let B = new definition_1.NonTerminal("B"); let grammar = new toolkit_1.SimpleGrammar([ [A, [B]], [B, [A]] ]); let firstSetCalculator = new first_follow_1.FirstCalculator(grammar); should_1.default(firstSetCalculator.getFirstSet(A)).size(0); should_1.default(firstSetCalculator.getFirstSet(B)).size(0); }); it(` A->B B->A | b `, function () { let A = new definition_1.NonTerminal("A"); let B = new definition_1.NonTerminal("B"); let grammar = new toolkit_1.SimpleGrammar([ [A, [B]], [B, [A], ["b"]] ]); let firstSetCalculator = new first_follow_1.FirstCalculator(grammar); should_1.default(firstSetCalculator.getFirstSet(A)).eql(new Set(["b"])); should_1.default(firstSetCalculator.getFirstSet(B)).eql(new Set(["b"])); }); it(` A->B B->C C->D D->E E->A `, function () { let A = new definition_1.NonTerminal("A"); let B = new definition_1.NonTerminal("B"); let C = new definition_1.NonTerminal("C"); let D = new definition_1.NonTerminal("D"); let E = new definition_1.NonTerminal("E"); let grammar = new toolkit_1.SimpleGrammar([ [A, [B]], [B, [C]], [C, [D]], [D, [E]], [E, [A]], ]); let firstSetCalculator = new first_follow_1.FirstCalculator(grammar); should_1.default(firstSetCalculator.getFirstSet(A)).size(0); should_1.default(firstSetCalculator.getFirstSet(B)).size(0); should_1.default(firstSetCalculator.getFirstSet(C)).size(0); should_1.default(firstSetCalculator.getFirstSet(D)).size(0); should_1.default(firstSetCalculator.getFirstSet(E)).size(0); }); }); }); //# sourceMappingURL=first.test.js.map