UNPKG

@light0x00/parser-generator

Version:

A Parser Generator

44 lines (31 loc) 4.54 kB
"use strict"; 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==