syntax-cli-prog
Version:
Syntactic analysis toolkit, language agnostic parsers generator.
802 lines (694 loc) • 35.2 kB
JavaScript
/**
* LR parser generated by the Syntax tool.
*
* https://www.npmjs.com/package/syntax-cli
*
* npm install -g syntax-cli
*
* syntax-cli --help
*
* To regenerate run:
*
* syntax-cli \
* --grammar ~/path-to-grammar-file \
* --mode <parsing-mode> \
* --output ~/path-to-output-parser-file.js
*/
;
/**
* Matched token text.
*/
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
var yytext = void 0;
/**
* Length of the matched token text.
*/
var yyleng = void 0;
/**
* Storage object.
*/
var yy = {};
/**
* Result of semantic action.
*/
var __ = void 0;
/**
* Result location object.
*/
var __loc = void 0;
function yyloc(start, end) {
if (!yy.options.captureLocations) {
return null;
}
// Epsilon doesn't produce location.
if (!start || !end) {
return start || end;
}
return {
startOffset: start.startOffset,
endOffset: end.endOffset,
startLine: start.startLine,
endLine: end.endLine,
startColumn: start.startColumn,
endColumn: end.endColumn
};
}
var EOF = '$';
/**
* List of productions (generated by Syntax tool).
*/
var productions = [[-1, 1, function (_1) {
__ = _1;
}], [0, 4, function (_1, _2, _3, _4) {
__ = { rules: _3 };
if (_1[0]) {
__.macros = _1[0];
}
if (_1[1]) {
__.startConditions = _1[1];
}
if (_4 && _4.trim() !== '') {
__.moduleInclude = _4;
}
if (yy.options) {
__.options = yy.options;
}
delete yy.options;
delete yy.actionInclude;
}], [1, 1, function (_1) {
__ = null;
}], [1, 2, function (_1, _2) {
__ = null;
}], [1, 3, function (_1, _2, _3) {
__ = _2;
}], [2, 2, function (_1, _2) {
__ = _2;
if ('length' in _1) {
__[0] = __[0] || {};
__[0][_1[0]] = _1[1];
} else {
__[1] = __[1] || {};
for (var name in _1) {
__[1][name] = _1[name];
}
}
}], [2, 0, function () {
__ = [null, null];
}], [3, 2, function (_1, _2) {
__ = [_1, _2];
}], [3, 2, function (_1, _2) {
__ = _2;
}], [3, 2, function (_1, _2) {
__ = _2;
}], [4, 1, function (_1) {
__ = {};__[_1] = 0;
}], [4, 2, function (_1, _2) {
__ = _1;__[_2] = 0;
}], [5, 1, function (_1) {
__ = {};__[_1] = 1;
}], [5, 2, function (_1, _2) {
__ = _1;__[_2] = 1;
}], [6, 1, function (_1) {
__ = [_1];
}], [6, 2, function (_1, _2) {
__ = _1;__.push(_2);
}], [7, 3, function (_1, _2, _3) {
__ = _1 ? [_1, _2, _3] : [_2, _3];
}], [8, 3, function (_1, _2, _3) {
__ = _2;
}], [8, 1, function (_1) {
__ = _1;
}], [9, 0, function () {
__ = '';
}], [9, 1, function (_1) {
__ = _1;
}], [9, 5, function (_1, _2, _3, _4, _5) {
__ = _1 + _2 + _3 + _4 + _5;
}], [9, 4, function (_1, _2, _3, _4) {
__ = _1 + _2 + _3 + _4;
}], [10, 1, function (_1) {
__ = yytext;
}], [10, 2, function (_1, _2) {
__ = _1 + _2;
}], [11, 3, function (_1, _2, _3) {
__ = _2;
}], [11, 3, function (_1, _2, _3) {
__ = ['*'];
}], [11, 0], [12, 1, function (_1) {
__ = [_1];
}], [12, 3, function (_1, _2, _3) {
__ = _1;__.push(_3);
}], [13, 1, function (_1) {
__ = _1;
}], [14, 3, function (_1, _2, _3) {
__ = _1 + '|' + _3;
}], [14, 2, function (_1, _2) {
__ = _1 + '|';
}], [14, 1, function (_1) {
__ = _1;
}], [14, 0, function () {
__ = '';
}], [15, 2, function (_1, _2) {
__ = _1 + _2;
}], [15, 1, function (_1) {
__ = _1;
}], [16, 3, function (_1, _2, _3) {
__ = '(' + _2 + ')';
}], [16, 3, function (_1, _2, _3) {
__ = _1 + _2 + ')';
}], [16, 2, function (_1, _2) {
__ = _1 + '+';
}], [16, 2, function (_1, _2) {
__ = _1 + '*';
}], [16, 2, function (_1, _2) {
__ = _1 + '?';
}], [16, 2, function (_1, _2) {
__ = '(?=' + _2 + ')';
}], [16, 2, function (_1, _2) {
__ = '(?!' + _2 + ')';
}], [16, 1, function (_1) {
__ = _1;
}], [16, 2, function (_1, _2) {
__ = _1 + _2;
}], [16, 1, function (_1) {
__ = _1;
}], [16, 1, function (_1) {
__ = '.';
}], [16, 1, function (_1) {
__ = '^';
}], [16, 1, function (_1) {
__ = '$';
}], [16, 1, function (_1) {
__ = _1;
}], [16, 1, function (_1) {
__ = _1;
}], [17, 1, function (_1) {
__ = _1;
}], [18, 1, function (_1) {
__ = yytext;
}], [19, 1, function (_1) {
__ = yytext;
}], [20, 1, function (_1) {
__ = yytext;
}], [21, 1, function (_1) {
__ = prepareString(yytext.slice(1, -1));
}], [21, 1, function (_1) {
__ = _1;
}]];
/**
* Encoded tokens map.
*/
var tokens = { "%%": "22", "EOF": "23", "CODE": "24", "NAME": "25", "START_INC": "26", "START_EXC": "27", "START_COND": "28", "{": "29", "}": "30", "ACTION": "31", "ACTION_BODY": "32", "<": "33", ">": "34", "*": "35", ",": "36", "|": "37", "(": "38", ")": "39", "SPECIAL_GROUP": "40", "+": "41", "?": "42", "/": "43", "/!": "44", ".": "45", "^": "46", "$": "54", "NAME_BRACE": "48", "ANY_GROUP_REGEX": "49", "ESCAPE_CHAR": "50", "RANGE_REGEX": "51", "STRING_LIT": "52", "CHARACTER_LIT": "53" };
/**
* Parsing table (generated by Syntax tool).
*/
var table = [{ "0": 1, "2": 2, "3": 3, "22": "r6", "25": "s4", "26": "s5", "27": "s6" }, { "54": "acc" }, { "22": "s7" }, { "2": 72, "3": 3, "22": "r6", "25": "s4", "26": "s5", "27": "s6" }, { "13": 73, "14": 20, "15": 21, "16": 22, "17": 27, "18": 28, "19": 33, "21": 32, "22": "r34", "25": "r34", "26": "r34", "27": "r34", "37": "r34", "38": "s23", "40": "s24", "43": "s25", "44": "s26", "45": "s29", "46": "s30", "48": "s34", "49": "s35", "50": "s38", "52": "s36", "53": "s37", "54": "s31" }, { "4": 74, "28": "s75" }, { "5": 77, "28": "s78" }, { "6": 8, "7": 9, "11": 10, "29": "r27", "31": "r27", "33": "s11", "38": "r27", "40": "r27", "43": "r27", "44": "r27", "45": "r27", "46": "r27", "48": "r27", "49": "r27", "50": "r27", "52": "r27", "53": "r27", "54": "r27" }, { "1": 12, "7": 13, "11": 10, "22": "s15", "23": "s14", "29": "r27", "31": "r27", "33": "s11", "38": "r27", "40": "r27", "43": "r27", "44": "r27", "45": "r27", "46": "r27", "48": "r27", "49": "r27", "50": "r27", "52": "r27", "53": "r27", "54": "r27" }, { "22": "r14", "23": "r14", "29": "r14", "31": "r14", "33": "r14", "38": "r14", "40": "r14", "43": "r14", "44": "r14", "45": "r14", "46": "r14", "48": "r14", "49": "r14", "50": "r14", "52": "r14", "53": "r14", "54": "r14" }, { "13": 19, "14": 20, "15": 21, "16": 22, "17": 27, "18": 28, "19": 33, "21": 32, "29": "r34", "31": "r34", "37": "r34", "38": "s23", "40": "s24", "43": "s25", "44": "s26", "45": "s29", "46": "s30", "48": "s34", "49": "s35", "50": "s38", "52": "s36", "53": "s37", "54": "s31" }, { "12": 65, "25": "s67", "35": "s66" }, { "54": "r1" }, { "22": "r15", "23": "r15", "29": "r15", "31": "r15", "33": "r15", "38": "r15", "40": "r15", "43": "r15", "44": "r15", "45": "r15", "46": "r15", "48": "r15", "49": "r15", "50": "r15", "52": "r15", "53": "r15", "54": "r15" }, { "54": "r2" }, { "23": "s16", "24": "s17" }, { "54": "r3" }, { "23": "s18" }, { "54": "r4" }, { "8": 39, "29": "s40", "31": "s41" }, { "22": "r30", "25": "r30", "26": "r30", "27": "r30", "29": "r30", "31": "r30", "37": "s51" }, { "16": 53, "17": 27, "18": 28, "19": 33, "21": 32, "22": "r33", "25": "r33", "26": "r33", "27": "r33", "29": "r33", "31": "r33", "37": "r33", "38": "s23", "39": "r33", "40": "s24", "43": "s25", "44": "s26", "45": "s29", "46": "s30", "48": "s34", "49": "s35", "50": "s38", "52": "s36", "53": "s37", "54": "s31" }, { "20": 57, "22": "r36", "25": "r36", "26": "r36", "27": "r36", "29": "r36", "31": "r36", "35": "s55", "37": "r36", "38": "r36", "39": "r36", "40": "r36", "41": "s54", "42": "s56", "43": "r36", "44": "r36", "45": "r36", "46": "r36", "48": "r36", "49": "r36", "50": "r36", "51": "s58", "52": "r36", "53": "r36", "54": "r36" }, { "14": 59, "15": 21, "16": 22, "17": 27, "18": 28, "19": 33, "21": 32, "37": "r34", "38": "s23", "39": "r34", "40": "s24", "43": "s25", "44": "s26", "45": "s29", "46": "s30", "48": "s34", "49": "s35", "50": "s38", "52": "s36", "53": "s37", "54": "s31" }, { "14": 61, "15": 21, "16": 22, "17": 27, "18": 28, "19": 33, "21": 32, "37": "r34", "38": "s23", "39": "r34", "40": "s24", "43": "s25", "44": "s26", "45": "s29", "46": "s30", "48": "s34", "49": "s35", "50": "s38", "52": "s36", "53": "s37", "54": "s31" }, { "16": 63, "17": 27, "18": 28, "19": 33, "21": 32, "38": "s23", "40": "s24", "43": "s25", "44": "s26", "45": "s29", "46": "s30", "48": "s34", "49": "s35", "50": "s38", "52": "s36", "53": "s37", "54": "s31" }, { "16": 64, "17": 27, "18": 28, "19": 33, "21": 32, "38": "s23", "40": "s24", "43": "s25", "44": "s26", "45": "s29", "46": "s30", "48": "s34", "49": "s35", "50": "s38", "52": "s36", "53": "s37", "54": "s31" }, { "22": "r44", "25": "r44", "26": "r44", "27": "r44", "29": "r44", "31": "r44", "35": "r44", "37": "r44", "38": "r44", "39": "r44", "40": "r44", "41": "r44", "42": "r44", "43": "r44", "44": "r44", "45": "r44", "46": "r44", "48": "r44", "49": "r44", "50": "r44", "51": "r44", "52": "r44", "53": "r44", "54": "r44" }, { "22": "r46", "25": "r46", "26": "r46", "27": "r46", "29": "r46", "31": "r46", "35": "r46", "37": "r46", "38": "r46", "39": "r46", "40": "r46", "41": "r46", "42": "r46", "43": "r46", "44": "r46", "45": "r46", "46": "r46", "48": "r46", "49": "r46", "50": "r46", "51": "r46", "52": "r46", "53": "r46", "54": "r46" }, { "22": "r47", "25": "r47", "26": "r47", "27": "r47", "29": "r47", "31": "r47", "35": "r47", "37": "r47", "38": "r47", "39": "r47", "40": "r47", "41": "r47", "42": "r47", "43": "r47", "44": "r47", "45": "r47", "46": "r47", "48": "r47", "49": "r47", "50": "r47", "51": "r47", "52": "r47", "53": "r47", "54": "r47" }, { "22": "r48", "25": "r48", "26": "r48", "27": "r48", "29": "r48", "31": "r48", "35": "r48", "37": "r48", "38": "r48", "39": "r48", "40": "r48", "41": "r48", "42": "r48", "43": "r48", "44": "r48", "45": "r48", "46": "r48", "48": "r48", "49": "r48", "50": "r48", "51": "r48", "52": "r48", "53": "r48", "54": "r48" }, { "22": "r49", "25": "r49", "26": "r49", "27": "r49", "29": "r49", "31": "r49", "35": "r49", "37": "r49", "38": "r49", "39": "r49", "40": "r49", "41": "r49", "42": "r49", "43": "r49", "44": "r49", "45": "r49", "46": "r49", "48": "r49", "49": "r49", "50": "r49", "51": "r49", "52": "r49", "53": "r49", "54": "r49" }, { "22": "r50", "25": "r50", "26": "r50", "27": "r50", "29": "r50", "31": "r50", "35": "r50", "37": "r50", "38": "r50", "39": "r50", "40": "r50", "41": "r50", "42": "r50", "43": "r50", "44": "r50", "45": "r50", "46": "r50", "48": "r50", "49": "r50", "50": "r50", "51": "r50", "52": "r50", "53": "r50", "54": "r50" }, { "22": "r51", "25": "r51", "26": "r51", "27": "r51", "29": "r51", "31": "r51", "35": "r51", "37": "r51", "38": "r51", "39": "r51", "40": "r51", "41": "r51", "42": "r51", "43": "r51", "44": "r51", "45": "r51", "46": "r51", "48": "r51", "49": "r51", "50": "r51", "51": "r51", "52": "r51", "53": "r51", "54": "r51" }, { "22": "r52", "25": "r52", "26": "r52", "27": "r52", "29": "r52", "31": "r52", "35": "r52", "37": "r52", "38": "r52", "39": "r52", "40": "r52", "41": "r52", "42": "r52", "43": "r52", "44": "r52", "45": "r52", "46": "r52", "48": "r52", "49": "r52", "50": "r52", "51": "r52", "52": "r52", "53": "r52", "54": "r52" }, { "22": "r53", "25": "r53", "26": "r53", "27": "r53", "29": "r53", "31": "r53", "35": "r53", "37": "r53", "38": "r53", "39": "r53", "40": "r53", "41": "r53", "42": "r53", "43": "r53", "44": "r53", "45": "r53", "46": "r53", "48": "r53", "49": "r53", "50": "r53", "51": "r53", "52": "r53", "53": "r53", "54": "r53" }, { "22": "r56", "25": "r56", "26": "r56", "27": "r56", "29": "r56", "31": "r56", "35": "r56", "37": "r56", "38": "r56", "39": "r56", "40": "r56", "41": "r56", "42": "r56", "43": "r56", "44": "r56", "45": "r56", "46": "r56", "48": "r56", "49": "r56", "50": "r56", "51": "r56", "52": "r56", "53": "r56", "54": "r56" }, { "22": "r57", "25": "r57", "26": "r57", "27": "r57", "29": "r57", "31": "r57", "35": "r57", "37": "r57", "38": "r57", "39": "r57", "40": "r57", "41": "r57", "42": "r57", "43": "r57", "44": "r57", "45": "r57", "46": "r57", "48": "r57", "49": "r57", "50": "r57", "51": "r57", "52": "r57", "53": "r57", "54": "r57" }, { "22": "r54", "25": "r54", "26": "r54", "27": "r54", "29": "r54", "31": "r54", "35": "r54", "37": "r54", "38": "r54", "39": "r54", "40": "r54", "41": "r54", "42": "r54", "43": "r54", "44": "r54", "45": "r54", "46": "r54", "48": "r54", "49": "r54", "50": "r54", "51": "r54", "52": "r54", "53": "r54", "54": "r54" }, { "22": "r16", "23": "r16", "29": "r16", "31": "r16", "33": "r16", "38": "r16", "40": "r16", "43": "r16", "44": "r16", "45": "r16", "46": "r16", "48": "r16", "49": "r16", "50": "r16", "52": "r16", "53": "r16", "54": "r16" }, { "9": 42, "10": 43, "29": "r19", "30": "r19", "32": "s44" }, { "22": "r18", "23": "r18", "29": "r18", "31": "r18", "33": "r18", "38": "r18", "40": "r18", "43": "r18", "44": "r18", "45": "r18", "46": "r18", "48": "r18", "49": "r18", "50": "r18", "52": "r18", "53": "r18", "54": "r18" }, { "29": "s46", "30": "s45" }, { "29": "r20", "30": "r20", "32": "s50" }, { "29": "r23", "30": "r23", "32": "r23" }, { "22": "r17", "23": "r17", "29": "r17", "31": "r17", "33": "r17", "38": "r17", "40": "r17", "43": "r17", "44": "r17", "45": "r17", "46": "r17", "48": "r17", "49": "r17", "50": "r17", "52": "r17", "53": "r17", "54": "r17" }, { "9": 47, "10": 43, "29": "r19", "30": "r19", "32": "s44" }, { "29": "s46", "30": "s48" }, { "10": 49, "29": "r22", "30": "r22", "32": "s44" }, { "29": "r21", "30": "r21", "32": "s50" }, { "29": "r24", "30": "r24", "32": "r24" }, { "15": 52, "16": 22, "17": 27, "18": 28, "19": 33, "21": 32, "22": "r32", "25": "r32", "26": "r32", "27": "r32", "29": "r32", "31": "r32", "37": "r32", "38": "s23", "39": "r32", "40": "s24", "43": "s25", "44": "s26", "45": "s29", "46": "s30", "48": "s34", "49": "s35", "50": "s38", "52": "s36", "53": "s37", "54": "s31" }, { "16": 53, "17": 27, "18": 28, "19": 33, "21": 32, "22": "r31", "25": "r31", "26": "r31", "27": "r31", "29": "r31", "31": "r31", "37": "r31", "38": "s23", "39": "r31", "40": "s24", "43": "s25", "44": "s26", "45": "s29", "46": "s30", "48": "s34", "49": "s35", "50": "s38", "52": "s36", "53": "s37", "54": "s31" }, { "20": 57, "22": "r35", "25": "r35", "26": "r35", "27": "r35", "29": "r35", "31": "r35", "35": "s55", "37": "r35", "38": "r35", "39": "r35", "40": "r35", "41": "s54", "42": "s56", "43": "r35", "44": "r35", "45": "r35", "46": "r35", "48": "r35", "49": "r35", "50": "r35", "51": "s58", "52": "r35", "53": "r35", "54": "r35" }, { "22": "r39", "25": "r39", "26": "r39", "27": "r39", "29": "r39", "31": "r39", "35": "r39", "37": "r39", "38": "r39", "39": "r39", "40": "r39", "41": "r39", "42": "r39", "43": "r39", "44": "r39", "45": "r39", "46": "r39", "48": "r39", "49": "r39", "50": "r39", "51": "r39", "52": "r39", "53": "r39", "54": "r39" }, { "22": "r40", "25": "r40", "26": "r40", "27": "r40", "29": "r40", "31": "r40", "35": "r40", "37": "r40", "38": "r40", "39": "r40", "40": "r40", "41": "r40", "42": "r40", "43": "r40", "44": "r40", "45": "r40", "46": "r40", "48": "r40", "49": "r40", "50": "r40", "51": "r40", "52": "r40", "53": "r40", "54": "r40" }, { "22": "r41", "25": "r41", "26": "r41", "27": "r41", "29": "r41", "31": "r41", "35": "r41", "37": "r41", "38": "r41", "39": "r41", "40": "r41", "41": "r41", "42": "r41", "43": "r41", "44": "r41", "45": "r41", "46": "r41", "48": "r41", "49": "r41", "50": "r41", "51": "r41", "52": "r41", "53": "r41", "54": "r41" }, { "22": "r45", "25": "r45", "26": "r45", "27": "r45", "29": "r45", "31": "r45", "35": "r45", "37": "r45", "38": "r45", "39": "r45", "40": "r45", "41": "r45", "42": "r45", "43": "r45", "44": "r45", "45": "r45", "46": "r45", "48": "r45", "49": "r45", "50": "r45", "51": "r45", "52": "r45", "53": "r45", "54": "r45" }, { "22": "r55", "25": "r55", "26": "r55", "27": "r55", "29": "r55", "31": "r55", "35": "r55", "37": "r55", "38": "r55", "39": "r55", "40": "r55", "41": "r55", "42": "r55", "43": "r55", "44": "r55", "45": "r55", "46": "r55", "48": "r55", "49": "r55", "50": "r55", "51": "r55", "52": "r55", "53": "r55", "54": "r55" }, { "37": "s51", "39": "s60" }, { "22": "r37", "25": "r37", "26": "r37", "27": "r37", "29": "r37", "31": "r37", "35": "r37", "37": "r37", "38": "r37", "39": "r37", "40": "r37", "41": "r37", "42": "r37", "43": "r37", "44": "r37", "45": "r37", "46": "r37", "48": "r37", "49": "r37", "50": "r37", "51": "r37", "52": "r37", "53": "r37", "54": "r37" }, { "37": "s51", "39": "s62" }, { "22": "r38", "25": "r38", "26": "r38", "27": "r38", "29": "r38", "31": "r38", "35": "r38", "37": "r38", "38": "r38", "39": "r38", "40": "r38", "41": "r38", "42": "r38", "43": "r38", "44": "r38", "45": "r38", "46": "r38", "48": "r38", "49": "r38", "50": "r38", "51": "r38", "52": "r38", "53": "r38", "54": "r38" }, { "20": 57, "22": "r42", "25": "r42", "26": "r42", "27": "r42", "29": "r42", "31": "r42", "35": "s55", "37": "r42", "38": "r42", "39": "r42", "40": "r42", "41": "s54", "42": "s56", "43": "r42", "44": "r42", "45": "r42", "46": "r42", "48": "r42", "49": "r42", "50": "r42", "51": "s58", "52": "r42", "53": "r42", "54": "r42" }, { "20": 57, "22": "r43", "25": "r43", "26": "r43", "27": "r43", "29": "r43", "31": "r43", "35": "s55", "37": "r43", "38": "r43", "39": "r43", "40": "r43", "41": "s54", "42": "s56", "43": "r43", "44": "r43", "45": "r43", "46": "r43", "48": "r43", "49": "r43", "50": "r43", "51": "s58", "52": "r43", "53": "r43", "54": "r43" }, { "34": "s68", "36": "s69" }, { "34": "s71" }, { "34": "r28", "36": "r28" }, { "29": "r25", "31": "r25", "38": "r25", "40": "r25", "43": "r25", "44": "r25", "45": "r25", "46": "r25", "48": "r25", "49": "r25", "50": "r25", "52": "r25", "53": "r25", "54": "r25" }, { "25": "s70" }, { "34": "r29", "36": "r29" }, { "29": "r26", "31": "r26", "38": "r26", "40": "r26", "43": "r26", "44": "r26", "45": "r26", "46": "r26", "48": "r26", "49": "r26", "50": "r26", "52": "r26", "53": "r26", "54": "r26" }, { "22": "r5" }, { "22": "r7", "25": "r7", "26": "r7", "27": "r7" }, { "22": "r8", "25": "r8", "26": "r8", "27": "r8", "28": "s76" }, { "22": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10" }, { "22": "r11", "25": "r11", "26": "r11", "27": "r11", "28": "r11" }, { "22": "r9", "25": "r9", "26": "r9", "27": "r9", "28": "s79" }, { "22": "r12", "25": "r12", "26": "r12", "27": "r12", "28": "r12" }, { "22": "r13", "25": "r13", "26": "r13", "27": "r13", "28": "r13" }];
/**
* Parsing stack.
*/
var stack = [];
/**
* Tokenizer instance.
*/
var tokenizer = void 0;
/**
* Generic tokenizer used by the parser in the Syntax tool.
*
* https://www.npmjs.com/package/syntax-cli
*
* See `--custom-tokinzer` to skip this generation, and use a custom one.
*/
var lexRules = [[/^$/, function () {
return 'EOF';
}], [/^\/\*(.|\n|\r)*?\*\//, function () {
return 'ACTION_BODY';
}], [/^\/\/.*/, function () {
return 'ACTION_BODY';
}], [/^\/[^ \/]*?['"{}'][^ ]*?\//, function () {
return 'ACTION_BODY';
}], [/^"(\\\\|\\"|[^"])*"/, function () {
return 'ACTION_BODY';
}], [/^'(\\\\|\\'|[^'])*'/, function () {
return 'ACTION_BODY';
}], [/^[\/"'][^{}\/"']+/, function () {
return 'ACTION_BODY';
}], [/^[^{}\/"']+/, function () {
return 'ACTION_BODY';
}], [/^\{/, function () {
yy.depth++;return '{';
}], [/^\}/, function () {
yy.depth == 0 ? this.begin('trail') : yy.depth--;return '}';
}], [/^[a-zA-Z_][a-zA-Z0-9_-]*/, function () {
return 'NAME';
}], [/^>/, function () {
this.popState();return '>';
}], [/^,/, function () {
return ',';
}], [/^\*/, function () {
return '*';
}], [/^(?:\r?\n)+/, function () {/* */}], [/^\s+(?:\r?\n)+/, function () {/* */}], [/^\s+/, function () {
this.begin('indented');
}], [/^%%/, function () {
this.begin('code');return '%%';
}], [/^[a-zA-Z0-9_]+/, function () {
return 'CHARACTER_LIT';
}], [/^[a-zA-Z_][a-zA-Z0-9_-]*/, function () {
yy.options[yytext] = true;
}], [/^(?:\r?\n)+/, function () {
this.begin('INITIAL');
}], [/^\s+(?:\r?\n)+/, function () {
this.begin('INITIAL');
}], [/^\s+/, function () {/* empty */}], [/^[a-zA-Z_][a-zA-Z0-9_-]*/, function () {
return 'START_COND';
}], [/^(?:\r?\n)+/, function () {
this.begin('INITIAL');
}], [/^\s+(?:\r?\n)+/, function () {
this.begin('INITIAL');
}], [/^\s+/, function () {/* empty */}], [/^.*(?:\r?\n)+/, function () {
this.begin('rules');
}], [/^\{/, function () {
yy.depth = 0;this.begin('action');return '{';
}], [/^%\{(.|(?:\r?\n))*?%\}/, function () {
this.begin('trail');yytext = yytext.slice(2, -2);return 'ACTION';
}], [/^%\{(.|(?:\r?\n))*?%\}/, function () {
yytext = yytext.slice(2, -2);return 'ACTION';
}], [/^.+/, function () {
this.begin('rules');return 'ACTION';
}], [/^.+/, function () {
this.begin('rules');return 'ACTION';
}], [/^\/\*(.|\n|\r)*?\*\//, function () {/* ignore */}], [/^\/\/.*/, function () {/* ignore */}], [/^(?:\r?\n)+/, function () {/* */}], [/^\s+/, function () {/* */}], [/^[a-zA-Z_][a-zA-Z0-9_-]*/, function () {
return 'NAME';
}], [/^"(\\\\|\\"|[^"])*"/, function () {
yytext = yytext.replace(/\\"/g, '"');return 'STRING_LIT';
}], [/^'(\\\\|\\'|[^'])*'/, function () {
yytext = yytext.replace(/\\'/g, "'");return 'STRING_LIT';
}], [/^\|/, function () {
return '|';
}], [/^\[(\\\\|\\\]|[^\]])*\]/, function () {
return 'ANY_GROUP_REGEX';
}], [/^\(\?:/, function () {
return 'SPECIAL_GROUP';
}], [/^\(\?=/, function () {
return 'SPECIAL_GROUP';
}], [/^\(\?!/, function () {
return 'SPECIAL_GROUP';
}], [/^\(/, function () {
return '(';
}], [/^\)/, function () {
return ')';
}], [/^\+/, function () {
return '+';
}], [/^\*/, function () {
return '*';
}], [/^\?/, function () {
return '?';
}], [/^\^/, function () {
return '^';
}], [/^,/, function () {
return ',';
}], [/^</, function () {
this.begin('conditions');return '<';
}], [/^\/!/, function () {
return '/!';
}], [/^\//, function () {
return '/';
}], [/^\\([0-7]{1,3}|[rfntvsSbBwWdD\\*+()$\{\}|[\]\/.^?]|c[A-Z]|x[0-9A-F]{2}|u[a-fA-F0-9]{4})/, function () {
return 'ESCAPE_CHAR';
}], [/^\\./, function () {
yytext = yytext.replace(/^\\/g, '');return 'ESCAPE_CHAR';
}], [/^\$/, function () {
return '$';
}], [/^\./, function () {
return '.';
}], [/^%options\b/, function () {
yy.options = {};this.begin('options');
}], [/^%s\b/, function () {
this.begin('start_condition');return 'START_INC';
}], [/^%x\b/, function () {
this.begin('start_condition');return 'START_EXC';
}], [/^%%/, function () {
this.begin('rules');return '%%';
}], [/^\{\d+(,\s?\d+|,)?\}/, function () {
return 'RANGE_REGEX';
}], [/^\{[a-zA-Z_][a-zA-Z0-9_-]*\}/, function () {
return 'NAME_BRACE';
}], [/^\{/, function () {
return '{';
}], [/^\}/, function () {
return '}';
}], [/^./, function () {/* ignore bad characters */}], [/^(.|(?:\r?\n))+/, function () {
return 'CODE';
}]];
var lexRulesByConditions = { "INITIAL": [0, 30, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67], "indented": [0, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67], "trail": [0, 27, 30, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67], "rules": [0, 14, 15, 16, 17, 18, 30, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67], "code": [0, 68], "start_condition": [0, 23, 24, 25, 26], "options": [0, 19, 20, 21, 22], "conditions": [0, 10, 11, 12, 13], "action": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] };
var EOF_TOKEN = {
type: EOF,
value: ''
};
tokenizer = {
initString: function initString(string) {
this._string = string;
this._cursor = 0;
this._states = ['INITIAL'];
this._tokensQueue = [];
this._currentLine = 1;
this._currentColumn = 0;
this._currentLineBeginOffset = 0;
/**
* Matched token location data.
*/
this._tokenStartOffset = 0;
this._tokenEndOffset = 0;
this._tokenStartLine = 1;
this._tokenEndLine = 1;
this._tokenStartColumn = 0;
this._tokenEndColumn = 0;
return this;
},
/**
* Returns tokenizer states.
*/
getStates: function getStates() {
return this._states;
},
getCurrentState: function getCurrentState() {
return this._states[this._states.length - 1];
},
pushState: function pushState(state) {
this._states.push(state);
},
begin: function begin(state) {
this.pushState(state);
},
popState: function popState() {
if (this._states.length > 1) {
return this._states.pop();
}
return this._states[0];
},
getNextToken: function getNextToken() {
// Something was queued, return it.
if (this._tokensQueue.length > 0) {
return this.onToken(this._toToken(this._tokensQueue.shift()));
}
if (!this.hasMoreTokens()) {
return this.onToken(EOF_TOKEN);
}
var string = this._string.slice(this._cursor);
var lexRulesForState = lexRulesByConditions[this.getCurrentState()];
for (var i = 0; i < lexRulesForState.length; i++) {
var lexRuleIndex = lexRulesForState[i];
var lexRule = lexRules[lexRuleIndex];
var matched = this._match(string, lexRule[0]);
// Manual handling of EOF token (the end of string). Return it
// as `EOF` symbol.
if (string === '' && matched === '') {
this._cursor++;
}
if (matched !== null) {
yytext = matched;
yyleng = yytext.length;
var token = lexRule[1].call(this);
if (!token) {
return this.getNextToken();
}
// If multiple tokens are returned, save them to return
// on next `getNextToken` call.
if (Array.isArray(token)) {
var tokensToQueue = token.slice(1);
token = token[0];
if (tokensToQueue.length > 0) {
var _tokensQueue;
(_tokensQueue = this._tokensQueue).unshift.apply(_tokensQueue, _toConsumableArray(tokensToQueue));
}
}
return this.onToken(this._toToken(token, yytext));
}
}
if (this.isEOF()) {
this._cursor++;
return EOF_TOKEN;
}
this.throwUnexpectedToken(string[0], this._currentLine, this._currentColumn);
},
/**
* Throws default "Unexpected token" exception, showing the actual
* line from the source, pointing with the ^ marker to the bad token.
* In addition, shows `line:column` location.
*/
throwUnexpectedToken: function throwUnexpectedToken(symbol, line, column) {
var lineSource = this._string.split('\n')[line - 1];
var lineData = '';
if (lineSource) {
var pad = ' '.repeat(column);
lineData = '\n\n' + lineSource + '\n' + pad + '^\n';
}
throw new SyntaxError(lineData + 'Unexpected token: "' + symbol + '" ' + ('at ' + line + ':' + column + '.'));
},
getCursor: function getCursor() {
return this._cursor;
},
getCurrentLine: function getCurrentLine() {
return this._currentLine;
},
getCurrentColumn: function getCurrentColumn() {
return this._currentColumn;
},
_captureLocation: function _captureLocation(matched) {
var nlRe = /\n/g;
// Absolute offsets.
this._tokenStartOffset = this._cursor;
// Line-based locations, start.
this._tokenStartLine = this._currentLine;
this._tokenStartColumn = this._tokenStartOffset - this._currentLineBeginOffset;
// Extract `\n` in the matched token.
var nlMatch = void 0;
while ((nlMatch = nlRe.exec(matched)) !== null) {
this._currentLine++;
this._currentLineBeginOffset = this._tokenStartOffset + nlMatch.index + 1;
}
this._tokenEndOffset = this._cursor + matched.length;
// Line-based locations, end.
this._tokenEndLine = this._currentLine;
this._tokenEndColumn = this._currentColumn = this._tokenEndOffset - this._currentLineBeginOffset;
},
_toToken: function _toToken(tokenType) {
var yytext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
return {
// Basic data.
type: tokenType,
value: yytext,
// Location data.
startOffset: this._tokenStartOffset,
endOffset: this._tokenEndOffset,
startLine: this._tokenStartLine,
endLine: this._tokenEndLine,
startColumn: this._tokenStartColumn,
endColumn: this._tokenEndColumn
};
},
isEOF: function isEOF() {
return this._cursor === this._string.length;
},
hasMoreTokens: function hasMoreTokens() {
return this._cursor <= this._string.length;
},
_match: function _match(string, regexp) {
var matched = string.match(regexp);
if (matched) {
// Handle `\n` in the matched token to track line numbers.
this._captureLocation(matched[0]);
this._cursor += matched[0].length;
return matched[0];
}
return null;
},
/**
* Allows analyzing, and transforming token. Default implementation
* just passes the token through.
*/
onToken: function onToken(token) {
return token;
}
};
/**
* Expose tokenizer so it can be accessed in semantic actions.
*/
yy.lexer = tokenizer;
yy.tokenizer = tokenizer;
/**
* Global parsing options. Some options can be shadowed per
* each `parse` call, if the optations are passed.
*
* Initalized to the `captureLocations` which is passed
* from the generator. Other options can be added at runtime.
*/
yy.options = {
captureLocations: false
};
/**
* Parsing module.
*/
var yyparse = {
/**
* Sets global parsing options.
*/
setOptions: function setOptions(options) {
yy.options = options;
return this;
},
/**
* Returns parsing options.
*/
getOptions: function getOptions() {
return yy.options;
},
/**
* Parses a string.
*/
parse: function parse(string, parseOptions) {
if (!tokenizer) {
throw new Error('Tokenizer instance wasn\'t specified.');
}
tokenizer.initString(string);
/**
* If parse options are passed, override global parse options for
* this call, and later restore global options.
*/
var globalOptions = yy.options;
if (parseOptions) {
yy.options = Object.assign({}, yy.options, parseOptions);
}
/**
* Allow callers to do setup work based on the
* parsing string, and passed options.
*/
yyparse.onParseBegin(string, tokenizer, yy.options);
stack.length = 0;
stack.push(0);
var token = tokenizer.getNextToken();
var shiftedToken = null;
do {
if (!token) {
// Restore options.
yy.options = globalOptions;
unexpectedEndOfInput();
}
var state = stack[stack.length - 1];
var column = tokens[token.type];
if (!table[state].hasOwnProperty(column)) {
yy.options = globalOptions;
unexpectedToken(token);
}
var entry = table[state][column];
// Shift action.
if (entry[0] === 's') {
var loc = null;
if (yy.options.captureLocations) {
loc = {
startOffset: token.startOffset,
endOffset: token.endOffset,
startLine: token.startLine,
endLine: token.endLine,
startColumn: token.startColumn,
endColumn: token.endColumn
};
}
shiftedToken = this.onShift(token);
stack.push({ symbol: tokens[shiftedToken.type], semanticValue: shiftedToken.value, loc: loc }, Number(entry.slice(1)));
token = tokenizer.getNextToken();
}
// Reduce action.
else if (entry[0] === 'r') {
var productionNumber = entry.slice(1);
var production = productions[productionNumber];
var hasSemanticAction = typeof production[2] === 'function';
var semanticValueArgs = hasSemanticAction ? [] : null;
var locationArgs = hasSemanticAction && yy.options.captureLocations ? [] : null;
if (production[1] !== 0) {
var rhsLength = production[1];
while (rhsLength-- > 0) {
stack.pop();
var stackEntry = stack.pop();
if (hasSemanticAction) {
semanticValueArgs.unshift(stackEntry.semanticValue);
if (locationArgs) {
locationArgs.unshift(stackEntry.loc);
}
}
}
}
var reduceStackEntry = { symbol: production[0] };
if (hasSemanticAction) {
yytext = shiftedToken ? shiftedToken.value : null;
yyleng = shiftedToken ? shiftedToken.value.length : null;
var semanticActionArgs = locationArgs !== null ? semanticValueArgs.concat(locationArgs) : semanticValueArgs;
production[2].apply(production, _toConsumableArray(semanticActionArgs));
reduceStackEntry.semanticValue = __;
if (locationArgs) {
reduceStackEntry.loc = __loc;
}
}
var nextState = stack[stack.length - 1];
var symbolToReduceWith = production[0];
stack.push(reduceStackEntry, table[nextState][symbolToReduceWith]);
}
// Accept.
else if (entry === 'acc') {
stack.pop();
var parsed = stack.pop();
if (stack.length !== 1 || stack[0] !== 0 || tokenizer.hasMoreTokens()) {
// Restore options.
yy.options = globalOptions;
unexpectedToken(token);
}
if (parsed.hasOwnProperty('semanticValue')) {
yy.options = globalOptions;
yyparse.onParseEnd(parsed.semanticValue);
return parsed.semanticValue;
}
yyparse.onParseEnd();
// Restore options.
yy.options = globalOptions;
return true;
}
} while (tokenizer.hasMoreTokens() || stack.length > 1);
},
setTokenizer: function setTokenizer(customTokenizer) {
tokenizer = customTokenizer;
return yyparse;
},
getTokenizer: function getTokenizer() {
return tokenizer;
},
onParseBegin: function onParseBegin(string, tokenizer, options) {},
onParseEnd: function onParseEnd(parsed) {},
/**
* Allows analyzing, and transforming shifted token. Default implementation
* just passes the token through.
*/
onShift: function onShift(token) {
return token;
}
};
function encodeRE(string) {
return string.replace(/([.*+?^$\{\}()|[\]\/\\])/g, '\\$1').replace(/\\\\u([a-fA-F0-9]{4})/g, '\\u$1');
}
function prepareString(string) {
// unescape slashes
string = string.replace(/\\\\/g, '\\');
string = encodeRE(string);
return string;
}
function unexpectedToken(token) {
if (token.type === EOF) {
unexpectedEndOfInput();
}
tokenizer.throwUnexpectedToken(token.value, token.startLine, token.startColumn);
}
function unexpectedEndOfInput() {
parseError('Unexpected end of input.');
}
function parseError(message) {
throw new SyntaxError(message);
}
module.exports = yyparse;