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