@light0x00/parser-generator
Version:
A Parser Generator
44 lines (31 loc) • 4.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.buildSLRParser = buildSLRParser;
exports.buildLR1Parser = buildLR1Parser;
var _Follow = require("../Follow");
var _First = require("../First");
var _Parser = require("./Parser");
var _Automata = require("./SLR/Automata");
var _ParsingTable = require("./SLR/ParsingTable");
var _Automata2 = require("./LR1/Automata");
var _ParsingTable2 = require("./LR1/ParsingTable");
/* SLR API */
/* LR1 API */
function buildSLRParser(grammar) {
//状态自动机
let stateAutomata = (0, _Automata.constructStateSet_SLR)(grammar);
let firstSetCal = new _First.FirstSetCalculator(grammar);
let followSetCal = new _Follow.FollowSetCalculator(grammar, firstSetCal); //分析表
let parsingTable = (0, _ParsingTable.getParsingTable_SLR)(stateAutomata, grammar, nt => followSetCal.getFollowSet(nt));
return new _Parser.LRParser(stateAutomata, parsingTable);
}
function buildLR1Parser(grammar) {
//状态自动机
let first = new _First.FirstSetCalculator(grammar);
let stateAutomata = (0, _Automata2.getStateSet_LR)(grammar, i => first.getFirstSet(i)); //分析表
let parsingTable = (0, _ParsingTable2.getParsingTable_LR)(stateAutomata, grammar);
return new _Parser.LRParser(stateAutomata, parsingTable);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MUi9QYXJzZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbImJ1aWxkU0xSUGFyc2VyIiwiZ3JhbW1hciIsInN0YXRlQXV0b21hdGEiLCJmaXJzdFNldENhbCIsIkZpcnN0U2V0Q2FsY3VsYXRvciIsImZvbGxvd1NldENhbCIsIkZvbGxvd1NldENhbGN1bGF0b3IiLCJwYXJzaW5nVGFibGUiLCJudCIsImdldEZvbGxvd1NldCIsIkxSUGFyc2VyIiwiYnVpbGRMUjFQYXJzZXIiLCJmaXJzdCIsImkiLCJnZXRGaXJzdFNldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFMQTs7QUFHQTtBQUtPLFNBQVNBLGNBQVQsQ0FBd0JDLE9BQXhCLEVBQTREO0FBQ2xFO0FBQ0EsTUFBSUMsYUFBYSxHQUFHLHFDQUFzQkQsT0FBdEIsQ0FBcEI7QUFDQSxNQUFJRSxXQUFXLEdBQUcsSUFBSUMseUJBQUosQ0FBdUJILE9BQXZCLENBQWxCO0FBQ0EsTUFBSUksWUFBWSxHQUFHLElBQUlDLDJCQUFKLENBQXdCTCxPQUF4QixFQUFpQ0UsV0FBakMsQ0FBbkIsQ0FKa0UsQ0FLbEU7O0FBQ0EsTUFBSUksWUFBWSxHQUFHLHVDQUFvQkwsYUFBcEIsRUFBbUNELE9BQW5DLEVBQTRDTyxFQUFELElBQU1ILFlBQVksQ0FBQ0ksWUFBYixDQUEwQkQsRUFBMUIsQ0FBakQsQ0FBbkI7QUFDQSxTQUFPLElBQUlFLGdCQUFKLENBQWFSLGFBQWIsRUFBNEJLLFlBQTVCLENBQVA7QUFDQTs7QUFFTSxTQUFTSSxjQUFULENBQXdCVixPQUF4QixFQUFtRDtBQUN6RDtBQUNBLE1BQUlXLEtBQUssR0FBSSxJQUFJUix5QkFBSixDQUF1QkgsT0FBdkIsQ0FBYjtBQUNBLE1BQUlDLGFBQWEsR0FBRywrQkFBZUQsT0FBZixFQUF3QlksQ0FBRCxJQUFLRCxLQUFLLENBQUNFLFdBQU4sQ0FBa0JELENBQWxCLENBQTVCLENBQXBCLENBSHlELENBSXpEOztBQUNBLE1BQUlOLFlBQVksR0FBRyx1Q0FBbUJMLGFBQW5CLEVBQWtDRCxPQUFsQyxDQUFuQjtBQUNBLFNBQU8sSUFBSVMsZ0JBQUosQ0FBYVIsYUFBYixFQUEyQkssWUFBM0IsQ0FBUDtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9sbG93U2V0Q2FsY3VsYXRvciB9IGZyb20gXCJAL0ZvbGxvd1wiO1xuaW1wb3J0IHsgRmlyc3RTZXRDYWxjdWxhdG9yIH0gZnJvbSBcIkAvRmlyc3RcIjtcbmltcG9ydCB7IEF1Z21lbnRlZEdyYW1tYXIsIElQYXJzZXIgfSBmcm9tIFwiQC9MUi9EZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBMUlBhcnNlciB9IGZyb20gXCJAL0xSL1BhcnNlclwiO1xuLyogU0xSIEFQSSAqL1xuaW1wb3J0IHsgY29uc3RydWN0U3RhdGVTZXRfU0xSIH0gZnJvbSBcIkAvTFIvU0xSL0F1dG9tYXRhXCI7XG5pbXBvcnQgeyBnZXRQYXJzaW5nVGFibGVfU0xSIH0gZnJvbSBcIkAvTFIvU0xSL1BhcnNpbmdUYWJsZVwiO1xuLyogTFIxIEFQSSAqL1xuaW1wb3J0IHsgZ2V0U3RhdGVTZXRfTFIgfSBmcm9tIFwiQC9MUi9MUjEvQXV0b21hdGFcIjtcbmltcG9ydCB7IGdldFBhcnNpbmdUYWJsZV9MUiB9IGZyb20gXCJAL0xSL0xSMS9QYXJzaW5nVGFibGVcIjtcbmltcG9ydCB7IFRyYWl0c1RhYmxlIH0gZnJvbSBcIkAvRGVmaW5pdGlvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTTFJQYXJzZXIoZ3JhbW1hcjogQXVnbWVudGVkR3JhbW1hcik6IElQYXJzZXIge1xuXHQvL+eKtuaAgeiHquWKqOaculxuXHRsZXQgc3RhdGVBdXRvbWF0YSA9IGNvbnN0cnVjdFN0YXRlU2V0X1NMUihncmFtbWFyKTtcblx0bGV0IGZpcnN0U2V0Q2FsID0gbmV3IEZpcnN0U2V0Q2FsY3VsYXRvcihncmFtbWFyKTtcblx0bGV0IGZvbGxvd1NldENhbCA9IG5ldyBGb2xsb3dTZXRDYWxjdWxhdG9yKGdyYW1tYXIsIGZpcnN0U2V0Q2FsKTtcblx0Ly/liIbmnpDooahcblx0bGV0IHBhcnNpbmdUYWJsZSA9IGdldFBhcnNpbmdUYWJsZV9TTFIoc3RhdGVBdXRvbWF0YSwgZ3JhbW1hciwobnQpPT5mb2xsb3dTZXRDYWwuZ2V0Rm9sbG93U2V0KG50KSk7XG5cdHJldHVybiBuZXcgTFJQYXJzZXIoc3RhdGVBdXRvbWF0YSwgcGFyc2luZ1RhYmxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTFIxUGFyc2VyKGdyYW1tYXI6IEF1Z21lbnRlZEdyYW1tYXIpIHtcblx0Ly/nirbmgIHoh6rliqjmnLpcblx0bGV0IGZpcnN0ICA9IG5ldyBGaXJzdFNldENhbGN1bGF0b3IoZ3JhbW1hcik7XG5cdGxldCBzdGF0ZUF1dG9tYXRhID0gZ2V0U3RhdGVTZXRfTFIoZ3JhbW1hciwoaSk9PmZpcnN0LmdldEZpcnN0U2V0KGkpKTtcblx0Ly/liIbmnpDooahcblx0bGV0IHBhcnNpbmdUYWJsZSA9IGdldFBhcnNpbmdUYWJsZV9MUihzdGF0ZUF1dG9tYXRhLCBncmFtbWFyKTtcblx0cmV0dXJuIG5ldyBMUlBhcnNlcihzdGF0ZUF1dG9tYXRhLHBhcnNpbmdUYWJsZSk7XG59XG5cbiJdfQ==