/** * 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 \ * --output ~/path-to-output-parser-file.js */ 'use strict'; /** * Matched token text. */ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); 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, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [0, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) { __loc = yyloc(_1loc, _4loc); __ = Node({ type: 'RegExp', body: _2, flags: checkFlags(_4) }, loc(_1loc, _4loc || _3loc)); }], [1, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [1, 0, function () { __loc = null;__ = ''; }], [2, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [2, 2, function (_1, _2, _1loc, _2loc) { __loc = yyloc(_1loc, _2loc);__ = _1 + _2; }], [3, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [4, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [4, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { __loc = yyloc(_1loc, _3loc); // Location for empty disjunction: /|/ var _loc = null; if (_2loc) { _loc = loc(_1loc || _2loc, _3loc || _2loc); }; __ = Node({ type: 'Disjunction', left: _1, right: _3 }, _loc); }], [5, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc); if (_1.length === 0) { __ = null; return; } if (_1.length === 1) { __ = Node(_1[0], __loc); } else { __ = Node({ type: 'Alternative', expressions: _1 }, __loc); } }], [6, 0, function () { __loc = null;__ = []; }], [6, 2, function (_1, _2, _1loc, _2loc) { __loc = yyloc(_1loc, _2loc);__ = _1.concat(_2); }], [7, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = Node(Object.assign({ type: 'Assertion' }, _1), __loc); }], [7, 2, function (_1, _2, _1loc, _2loc) { __loc = yyloc(_1loc, _2loc); __ = _1; if (_2) { __ = Node({ type: 'Repetition', expression: _1, quantifier: _2 }, __loc); } }], [8, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = { kind: '^' }; }], [8, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = { kind: '$' }; }], [8, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = { kind: '\\b' }; }], [8, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = { kind: '\\B' }; }], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { __loc = yyloc(_1loc, _3loc); __ = { kind: 'Lookahead', assertion: _2 }; }], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { __loc = yyloc(_1loc, _3loc); __ = { kind: 'Lookahead', negative: true, assertion: _2 }; }], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { __loc = yyloc(_1loc, _3loc); __ = { kind: 'Lookbehind', assertion: _2 }; }], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { __loc = yyloc(_1loc, _3loc); __ = { kind: 'Lookbehind', negative: true, assertion: _2 }; }], [9, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [9, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [9, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [10, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc); }], [10, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = Char(_1.slice(1), 'simple', __loc);__.escaped = true; }], [10, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);__.isSurrogatePair = true; }], [10, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc); }], [10, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = UnicodeProperty(_1, __loc); }], [10, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'control', __loc); }], [10, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'hex', __loc); }], [10, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'oct', __loc); }], [10, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = GroupRefOrDecChar(_1, __loc); }], [10, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc); }], [10, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc); }], [10, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = NamedGroupRefOrChars(_1, _1loc); }], [11, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [11, 0], [12, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [12, 2, function (_1, _2, _1loc, _2loc) { __loc = yyloc(_1loc, _2loc); _1.greedy = false; __ = _1; }], [13, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc); __ = Node({ type: 'Quantifier', kind: _1, greedy: true }, __loc); }], [13, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc); __ = Node({ type: 'Quantifier', kind: _1, greedy: true }, __loc); }], [13, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc); __ = Node({ type: 'Quantifier', kind: _1, greedy: true }, __loc); }], [13, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc); var range = getRange(_1); __ = Node({ type: 'Quantifier', kind: 'Range', from: range[0], to: range[0], greedy: true }, __loc); }], [13, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc); __ = Node({ type: 'Quantifier', kind: 'Range', from: getRange(_1)[0], greedy: true }, __loc); }], [13, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc); var range = getRange(_1); __ = Node({ type: 'Quantifier', kind: 'Range', from: range[0], to: range[1], greedy: true }, __loc); }], [14, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [14, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { __loc = yyloc(_1loc, _3loc); if (namedGroups.hasOwnProperty(_1)) { throw new SyntaxError('Duplicate of the named group "' + _1 + '".'); } var name = String(_1); namedGroups[name] = _1.groupNumber; __ = Node({ type: 'Group', capturing: true, name: name, number: _1.groupNumber, expression: _2 }, __loc); }], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { __loc = yyloc(_1loc, _3loc); __ = Node({ type: 'Group', capturing: true, number: _1.groupNumber, expression: _2 }, __loc); }], [16, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { __loc = yyloc(_1loc, _3loc); __ = Node({ type: 'Group', capturing: false, expression: _2 }, __loc); }], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { __loc = yyloc(_1loc, _3loc); __ = Node({ type: 'CharacterClass', negative: true, expressions: _2 }, __loc); }], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { __loc = yyloc(_1loc, _3loc); __ = Node({ type: 'CharacterClass', expressions: _2 }, __loc); }], [18, 0, function () { __loc = null;__ = []; }], [18, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [19, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = [_1]; }], [19, 2, function (_1, _2, _1loc, _2loc) { __loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2); }], [19, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) { __loc = yyloc(_1loc, _4loc); checkClassRange(_1, _3); __ = [Node({ type: 'ClassRange', from: _1, to: _3 }, loc(_1loc, _3loc))]; if (_4) { __ = __.concat(_4); } }], [20, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [20, 2, function (_1, _2, _1loc, _2loc) { __loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2); }], [20, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) { __loc = yyloc(_1loc, _4loc); checkClassRange(_1, _3); __ = [Node({ type: 'ClassRange', from: _1, to: _3 }, loc(_1loc, _3loc))]; if (_4) { __ = __.concat(_4); } }], [21, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc); }], [21, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [22, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = _1; }], [22, 1, function (_1, _1loc) { __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc); }]]; /** * Encoded tokens map. */ var tokens = { "SLASH": "23", "CHAR": "24", "BAR": "25", "BOS": "26", "EOS": "27", "ESC_b": "28", "ESC_B": "29", "POS_LA_ASSERT": "30", "R_PAREN": "31", "NEG_LA_ASSERT": "32", "POS_LB_ASSERT": "33", "NEG_LB_ASSERT": "34", "ESC_CHAR": "35", "U_CODE_SURROGATE": "36", "U_CODE": "37", "U_PROP_VALUE_EXP": "38", "CTRL_CH": "39", "HEX_CODE": "40", "OCT_CODE": "41", "DEC_CODE": "42", "META_CHAR": "43", "ANY": "44", "NAMED_GROUP_REF": "45", "Q_MARK": "46", "STAR": "47", "PLUS": "48", "RANGE_EXACT": "49", "RANGE_OPEN": "50", "RANGE_CLOSED": "51", "NAMED_CAPTURE_GROUP": "52", "L_PAREN": "53", "NON_CAPTURE_GROUP": "54", "NEG_CLASS": "55", "R_BRACKET": "56", "L_BRACKET": "57", "DASH": "58", "$": "59" }; /** * Parsing table (generated by Syntax tool). */ var table = [{ "0": 1, "23": "s2" }, { "59": "acc" }, { "3": 3, "4": 4, "5": 5, "6": 6, "23": "r10", "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "s7" }, { "23": "r6", "25": "s12" }, { "23": "r7", "25": "r7", "31": "r7" }, { "7": 14, "8": 15, "9": 16, "10": 25, "14": 27, "15": 42, "16": 43, "17": 26, "23": "r9", "24": "s28", "25": "r9", "26": "s17", "27": "s18", "28": "s19", "29": "s20", "30": "s21", "31": "r9", "32": "s22", "33": "s23", "34": "s24", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "52": "s44", "53": "s45", "54": "s46", "55": "s40", "57": "s41" }, { "1": 8, "2": 9, "24": "s10", "59": "r3" }, { "59": "r1" }, { "24": "s11", "59": "r2" }, { "24": "r4", "59": "r4" }, { "24": "r5", "59": "r5" }, { "5": 13, "6": 6, "23": "r10", "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "r8", "25": "r8", "31": "r8" }, { "23": "r11", "24": "r11", "25": "r11", "26": "r11", "27": "r11", "28": "r11", "29": "r11", "30": "r11", "31": "r11", "32": "r11", "33": "r11", "34": "r11", "35": "r11", "36": "r11", "37": "r11", "38": "r11", "39": "r11", "40": "r11", "41": "r11", "42": "r11", "43": "r11", "44": "r11", "45": "r11", "52": "r11", "53": "r11", "54": "r11", "55": "r11", "57": "r11" }, { "23": "r12", "24": "r12", "25": "r12", "26": "r12", "27": "r12", "28": "r12", "29": "r12", "30": "r12", "31": "r12", "32": "r12", "33": "r12", "34": "r12", "35": "r12", "36": "r12", "37": "r12", "38": "r12", "39": "r12", "40": "r12", "41": "r12", "42": "r12", "43": "r12", "44": "r12", "45": "r12", "52": "r12", "53": "r12", "54": "r12", "55": "r12", "57": "r12" }, { "11": 47, "12": 48, "13": 49, "23": "r38", "24": "r38", "25": "r38", "26": "r38", "27": "r38", "28": "r38", "29": "r38", "30": "r38", "31": "r38", "32": "r38", "33": "r38", "34": "r38", "35": "r38", "36": "r38", "37": "r38", "38": "r38", "39": "r38", "40": "r38", "41": "r38", "42": "r38", "43": "r38", "44": "r38", "45": "r38", "46": "s52", "47": "s50", "48": "s51", "49": "s53", "50": "s54", "51": "s55", "52": "r38", "53": "r38", "54": "r38", "55": "r38", "57": "r38" }, { "23": "r14", "24": "r14", "25": "r14", "26": "r14", "27": "r14", "28": "r14", "29": "r14", "30": "r14", "31": "r14", "32": "r14", "33": "r14", "34": "r14", "35": "r14", "36": "r14", "37": "r14", "38": "r14", "39": "r14", "40": "r14", "41": "r14", "42": "r14", "43": "r14", "44": "r14", "45": "r14", "52": "r14", "53": "r14", "54": "r14", "55": "r14", "57": "r14" }, { "23": "r15", "24": "r15", "25": "r15", "26": "r15", "27": "r15", "28": "r15", "29": "r15", "30": "r15", "31": "r15", "32": "r15", "33": "r15", "34": "r15", "35": "r15", "36": "r15", "37": "r15", "38": "r15", "39": "r15", "40": "r15", "41": "r15", "42": "r15", "43": "r15", "44": "r15", "45": "r15", "52": "r15", "53": "r15", "54": "r15", "55": "r15", "57": "r15" }, { "23": "r16", "24": "r16", "25": "r16", "26": "r16", "27": "r16", "28": "r16", "29": "r16", "30": "r16", "31": "r16", "32": "r16", "33": "r16", "34": "r16", "35": "r16", "36": "r16", "37": "r16", "38": "r16", "39": "r16", "40": "r16", "41": "r16", "42": "r16", "43": "r16", "44": "r16", "45": "r16", "52": "r16", "53": "r16", "54": "r16", "55": "r16", "57": "r16" }, { "23": "r17", "24": "r17", "25": "r17", "26": "r17", "27": "r17", "28": "r17", "29": "r17", "30": "r17", "31": "r17", "32": "r17", "33": "r17", "34": "r17", "35": "r17", "36": "r17", "37": "r17", "38": "r17", "39": "r17", "40": "r17", "41": "r17", "42": "r17", "43": "r17", "44": "r17", "45": "r17", "52": "r17", "53": "r17", "54": "r17", "55": "r17", "57": "r17" }, { "4": 57, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 59, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 61, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 63, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "r22", "24": "r22", "25": "r22", "26": "r22", "27": "r22", "28": "r22", "29": "r22", "30": "r22", "31": "r22", "32": "r22", "33": "r22", "34": "r22", "35": "r22", "36": "r22", "37": "r22", "38": "r22", "39": "r22", "40": "r22", "41": "r22", "42": "r22", "43": "r22", "44": "r22", "45": "r22", "46": "r22", "47": "r22", "48": "r22", "49": "r22", "50": "r22", "51": "r22", "52": "r22", "53": "r22", "54": "r22", "55": "r22", "57": "r22" }, { "23": "r23", "24": "r23", "25": "r23", "26": "r23", "27": "r23", "28": "r23", "29": "r23", "30": "r23", "31": "r23", "32": "r23", "33": "r23", "34": "r23", "35": "r23", "36": "r23", "37": "r23", "38": "r23", "39": "r23", "40": "r23", "41": "r23", "42": "r23", "43": "r23", "44": "r23", "45": "r23", "46": "r23", "47": "r23", "48": "r23", "49": "r23", "50": "r23", "51": "r23", "52": "r23", "53": "r23", "54": "r23", "55": "r23", "57": "r23" }, { "23": "r24", "24": "r24", "25": "r24", "26": "r24", "27": "r24", "28": "r24", "29": "r24", "30": "r24", "31": "r24", "32": "r24", "33": "r24", "34": "r24", "35": "r24", "36": "r24", "37": "r24", "38": "r24", "39": "r24", "40": "r24", "41": "r24", "42": "r24", "43": "r24", "44": "r24", "45": "r24", "46": "r24", "47": "r24", "48": "r24", "49": "r24", "50": "r24", "51": "r24", "52": "r24", "53": "r24", "54": "r24", "55": "r24", "57": "r24" }, { "23": "r25", "24": "r25", "25": "r25", "26": "r25", "27": "r25", "28": "r25", "29": "r25", "30": "r25", "31": "r25", "32": "r25", "33": "r25", "34": "r25", "35": "r25", "36": "r25", "37": "r25", "38": "r25", "39": "r25", "40": "r25", "41": "r25", "42": "r25", "43": "r25", "44": "r25", "45": "r25", "46": "r25", "47": "r25", "48": "r25", "49": "r25", "50": "r25", "51": "r25", "52": "r25", "53": "r25", "54": "r25", "55": "r25", "56": "r25", "57": "r25", "58": "r25" }, { "23": "r26", "24": "r26", "25": "r26", "26": "r26", "27": "r26", "28": "r26", "29": "r26", "30": "r26", "31": "r26", "32": "r26", "33": "r26", "34": "r26", "35": "r26", "36": "r26", "37": "r26", "38": "r26", "39": "r26", "40": "r26", "41": "r26", "42": "r26", "43": "r26", "44": "r26", "45": "r26", "46": "r26", "47": "r26", "48": "r26", "49": "r26", "50": "r26", "51": "r26", "52": "r26", "53": "r26", "54": "r26", "55": "r26", "56": "r26", "57": "r26", "58": "r26" }, { "23": "r27", "24": "r27", "25": "r27", "26": "r27", "27": "r27", "28": "r27", "29": "r27", "30": "r27", "31": "r27", "32": "r27", "33": "r27", "34": "r27", "35": "r27", "36": "r27", "37": "r27", "38": "r27", "39": "r27", "40": "r27", "41": "r27", "42": "r27", "43": "r27", "44": "r27", "45": "r27", "46": "r27", "47": "r27", "48": "r27", "49": "r27", "50": "r27", "51": "r27", "52": "r27", "53": "r27", "54": "r27", "55": "r27", "56": "r27", "57": "r27", "58": "r27" }, { "23": "r28", "24": "r28", "25": "r28", "26": "r28", "27": "r28", "28": "r28", "29": "r28", "30": "r28", "31": "r28", "32": "r28", "33": "r28", "34": "r28", "35": "r28", "36": "r28", "37": "r28", "38": "r28", "39": "r28", "40": "r28", "41": "r28", "42": "r28", "43": "r28", "44": "r28", "45": "r28", "46": "r28", "47": "r28", "48": "r28", "49": "r28", "50": "r28", "51": "r28", "52": "r28", "53": "r28", "54": "r28", "55": "r28", "56": "r28", "57": "r28", "58": "r28" }, { "23": "r29", "24": "r29", "25": "r29", "26": "r29", "27": "r29", "28": "r29", "29": "r29", "30": "r29", "31": "r29", "32": "r29", "33": "r29", "34": "r29", "35": "r29", "36": "r29", "37": "r29", "38": "r29", "39": "r29", "40": "r29", "41": "r29", "42": "r29", "43": "r29", "44": "r29", "45": "r29", "46": "r29", "47": "r29", "48": "r29", "49": "r29", "50": "r29", "51": "r29", "52": "r29", "53": "r29", "54": "r29", "55": "r29", "56": "r29", "57": "r29", "58": "r29" }, { "23": "r30", "24": "r30", "25": "r30", "26": "r30", "27": "r30", "28": "r30", "29": "r30", "30": "r30", "31": "r30", "32": "r30", "33": "r30", "34": "r30", "35": "r30", "36": "r30", "37": "r30", "38": "r30", "39": "r30", "40": "r30", "41": "r30", "42": "r30", "43": "r30", "44": "r30", "45": "r30", "46": "r30", "47": "r30", "48": "r30", "49": "r30", "50": "r30", "51": "r30", "52": "r30", "53": "r30", "54": "r30", "55": "r30", "56": "r30", "57": "r30", "58": "r30" }, { "23": "r31", "24": "r31", "25": "r31", "26": "r31", "27": "r31", "28": "r31", "29": "r31", "30": "r31", "31": "r31", "32": "r31", "33": "r31", "34": "r31", "35": "r31", "36": "r31", "37": "r31", "38": "r31", "39": "r31", "40": "r31", "41": "r31", "42": "r31", "43": "r31", "44": "r31", "45": "r31", "46": "r31", "47": "r31", "48": "r31", "49": "r31", "50": "r31", "51": "r31", "52": "r31", "53": "r31", "54": "r31", "55": "r31", "56": "r31", "57": "r31", "58": "r31" }, { "23": "r32", "24": "r32", "25": "r32", "26": "r32", "27": "r32", "28": "r32", "29": "r32", "30": "r32", "31": "r32", "32": "r32", "33": "r32", "34": "r32", "35": "r32", "36": "r32", "37": "r32", "38": "r32", "39": "r32", "40": "r32", "41": "r32", "42": "r32", "43": "r32", "44": "r32", "45": "r32", "46": "r32", "47": "r32", "48": "r32", "49": "r32", "50": "r32", "51": "r32", "52": "r32", "53": "r32", "54": "r32", "55": "r32", "56": "r32", "57": "r32", "58": "r32" }, { "23": "r33", "24": "r33", "25": "r33", "26": "r33", "27": "r33", "28": "r33", "29": "r33", "30": "r33", "31": "r33", "32": "r33", "33": "r33", "34": "r33", "35": "r33", "36": "r33", "37": "r33", "38": "r33", "39": "r33", "40": "r33", "41": "r33", "42": "r33", "43": "r33", "44": "r33", "45": "r33", "46": "r33", "47": "r33", "48": "r33", "49": "r33", "50": "r33", "51": "r33", "52": "r33", "53": "r33", "54": "r33", "55": "r33", "56": "r33", "57": "r33", "58": "r33" }, { "23": "r34", "24": "r34", "25": "r34", "26": "r34", "27": "r34", "28": "r34", "29": "r34", "30": "r34", "31": "r34", "32": "r34", "33": "r34", "34": "r34", "35": "r34", "36": "r34", "37": "r34", "38": "r34", "39": "r34", "40": "r34", "41": "r34", "42": "r34", "43": "r34", "44": "r34", "45": "r34", "46": "r34", "47": "r34", "48": "r34", "49": "r34", "50": "r34", "51": "r34", "52": "r34", "53": "r34", "54": "r34", "55": "r34", "56": "r34", "57": "r34", "58": "r34" }, { "23": "r35", "24": "r35", "25": "r35", "26": "r35", "27": "r35", "28": "r35", "29": "r35", "30": "r35", "31": "r35", "32": "r35", "33": "r35", "34": "r35", "35": "r35", "36": "r35", "37": "r35", "38": "r35", "39": "r35", "40": "r35", "41": "r35", "42": "r35", "43": "r35", "44": "r35", "45": "r35", "46": "r35", "47": "r35", "48": "r35", "49": "r35", "50": "r35", "51": "r35", "52": "r35", "53": "r35", "54": "r35", "55": "r35", "56": "r35", "57": "r35", "58": "r35" }, { "23": "r36", "24": "r36", "25": "r36", "26": "r36", "27": "r36", "28": "r36", "29": "r36", "30": "r36", "31": "r36", "32": "r36", "33": "r36", "34": "r36", "35": "r36", "36": "r36", "37": "r36", "38": "r36", "39": "r36", "40": "r36", "41": "r36", "42": "r36", "43": "r36", "44": "r36", "45": "r36", "46": "r36", "47": "r36", "48": "r36", "49": "r36", "50": "r36", "51": "r36", "52": "r36", "53": "r36", "54": "r36", "55": "r36", "56": "r36", "57": "r36", "58": "r36" }, { "10": 70, "18": 65, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "10": 70, "18": 83, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "23": "r47", "24": "r47", "25": "r47", "26": "r47", "27": "r47", "28": "r47", "29": "r47", "30": "r47", "31": "r47", "32": "r47", "33": "r47", "34": "r47", "35": "r47", "36": "r47", "37": "r47", "38": "r47", "39": "r47", "40": "r47", "41": "r47", "42": "r47", "43": "r47", "44": "r47", "45": "r47", "46": "r47", "47": "r47", "48": "r47", "49": "r47", "50": "r47", "51": "r47", "52": "r47", "53": "r47", "54": "r47", "55": "r47", "57": "r47" }, { "23": "r48", "24": "r48", "25": "r48", "26": "r48", "27": "r48", "28": "r48", "29": "r48", "30": "r48", "31": "r48", "32": "r48", "33": "r48", "34": "r48", "35": "r48", "36": "r48", "37": "r48", "38": "r48", "39": "r48", "40": "r48", "41": "r48", "42": "r48", "43": "r48", "44": "r48", "45": "r48", "46": "r48", "47": "r48", "48": "r48", "49": "r48", "50": "r48", "51": "r48", "52": "r48", "53": "r48", "54": "r48", "55": "r48", "57": "r48" }, { "4": 85, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 87, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 89, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "r13", "24": "r13", "25": "r13", "26": "r13", "27": "r13", "28": "r13", "29": "r13", "30": "r13", "31": "r13", "32": "r13", "33": "r13", "34": "r13", "35": "r13", "36": "r13", "37": "r13", "38": "r13", "39": "r13", "40": "r13", "41": "r13", "42": "r13", "43": "r13", "44": "r13", "45": "r13", "52": "r13", "53": "r13", "54": "r13", "55": "r13", "57": "r13" }, { "23": "r37", "24": "r37", "25": "r37", "26": "r37", "27": "r37", "28": "r37", "29": "r37", "30": "r37", "31": "r37", "32": "r37", "33": "r37", "34": "r37", "35": "r37", "36": "r37", "37": "r37", "38": "r37", "39": "r37", "40": "r37", "41": "r37", "42": "r37", "43": "r37", "44": "r37", "45": "r37", "52": "r37", "53": "r37", "54": "r37", "55": "r37", "57": "r37" }, { "23": "r39", "24": "r39", "25": "r39", "26": "r39", "27": "r39", "28": "r39", "29": "r39", "30": "r39", "31": "r39", "32": "r39", "33": "r39", "34": "r39", "35": "r39", "36": "r39", "37": "r39", "38": "r39", "39": "r39", "40": "r39", "41": "r39", "42": "r39", "43": "r39", "44": "r39", "45": "r39", "46": "s56", "52": "r39", "53": "r39", "54": "r39", "55": "r39", "57": "r39" }, { "23": "r41", "24": "r41", "25": "r41", "26": "r41", "27": "r41", "28": "r41", "29": "r41", "30": "r41", "31": "r41", "32": "r41", "33": "r41", "34": "r41", "35": "r41", "36": "r41", "37": "r41", "38": "r41", "39": "r41", "40": "r41", "41": "r41", "42": "r41", "43": "r41", "44": "r41", "45": "r41", "46": "r41", "52": "r41", "53": "r41", "54": "r41", "55": "r41", "57": "r41" }, { "23": "r42", "24": "r42", "25": "r42", "26": "r42", "27": "r42", "28": "r42", "29": "r42", "30": "r42", "31": "r42", "32": "r42", "33": "r42", "34": "r42", "35": "r42", "36": "r42", "37": "r42", "38": "r42", "39": "r42", "40": "r42", "41": "r42", "42": "r42", "43": "r42", "44": "r42", "45": "r42", "46": "r42", "52": "r42", "53": "r42", "54": "r42", "55": "r42", "57": "r42" }, { "23": "r43", "24": "r43", "25": "r43", "26": "r43", "27": "r43", "28": "r43", "29": "r43", "30": "r43", "31": "r43", "32": "r43", "33": "r43", "34": "r43", "35": "r43", "36": "r43", "37": "r43", "38": "r43", "39": "r43", "40": "r43", "41": "r43", "42": "r43", "43": "r43", "44": "r43", "45": "r43", "46": "r43", "52": "r43", "53": "r43", "54": "r43", "55": "r43", "57": "r43" }, { "23": "r44", "24": "r44", "25": "r44", "26": "r44", "27": "r44", "28": "r44", "29": "r44", "30": "r44", "31": "r44", "32": "r44", "33": "r44", "34": "r44", "35": "r44", "36": "r44", "37": "r44", "38": "r44", "39": "r44", "40": "r44", "41": "r44", "42": "r44", "43": "r44", "44": "r44", "45": "r44", "46": "r44", "52": "r44", "53": "r44", "54": "r44", "55": "r44", "57": "r44" }, { "23": "r45", "24": "r45", "25": "r45", "26": "r45", "27": "r45", "28": "r45", "29": "r45", "30": "r45", "31": "r45", "32": "r45", "33": "r45", "34": "r45", "35": "r45", "36": "r45", "37": "r45", "38": "r45", "39": "r45", "40": "r45", "41": "r45", "42": "r45", "43": "r45", "44": "r45", "45": "r45", "46": "r45", "52": "r45", "53": "r45", "54": "r45", "55": "r45", "57": "r45" }, { "23": "r46", "24": "r46", "25": "r46", "26": "r46", "27": "r46", "28": "r46", "29": "r46", "30": "r46", "31": "r46", "32": "r46", "33": "r46", "34": "r46", "35": "r46", "36": "r46", "37": "r46", "38": "r46", "39": "r46", "40": "r46", "41": "r46", "42": "r46", "43": "r46", "44": "r46", "45": "r46", "46": "r46", "52": "r46", "53": "r46", "54": "r46", "55": "r46", "57": "r46" }, { "23": "r40", "24": "r40", "25": "r40", "26": "r40", "27": "r40", "28": "r40", "29": "r40", "30": "r40", "31": "r40", "32": "r40", "33": "r40", "34": "r40", "35": "r40", "36": "r40", "37": "r40", "38": "r40", "39": "r40", "40": "r40", "41": "r40", "42": "r40", "43": "r40", "44": "r40", "45": "r40", "52": "r40", "53": "r40", "54": "r40", "55": "r40", "57": "r40" }, { "25": "s12", "31": "s58" }, { "23": "r18", "24": "r18", "25": "r18", "26": "r18", "27": "r18", "28": "r18", "29": "r18", "30": "r18", "31": "r18", "32": "r18", "33": "r18", "34": "r18", "35": "r18", "36": "r18", "37": "r18", "38": "r18", "39": "r18", "40": "r18", "41": "r18", "42": "r18", "43": "r18", "44": "r18", "45": "r18", "52": "r18", "53": "r18", "54": "r18", "55": "r18", "57": "r18" }, { "25": "s12", "31": "s60" }, { "23": "r19", "24": "r19", "25": "r19", "26": "r19", "27": "r19", "28": "r19", "29": "r19", "30": "r19", "31": "r19", "32": "r19", "33": "r19", "34": "r19", "35": "r19", "36": "r19", "37": "r19", "38": "r19", "39": "r19", "40": "r19", "41": "r19", "42": "r19", "43": "r19", "44": "r19", "45": "r19", "52": "r19", "53": "r19", "54": "r19", "55": "r19", "57": "r19" }, { "25": "s12", "31": "s62" }, { "23": "r20", "24": "r20", "25": "r20", "26": "r20", "27": "r20", "28": "r20", "29": "r20", "30": "r20", "31": "r20", "32": "r20", "33": "r20", "34": "r20", "35": "r20", "36": "r20", "37": "r20", "38": "r20", "39": "r20", "40": "r20", "41": "r20", "42": "r20", "43": "r20", "44": "r20", "45": "r20", "52": "r20", "53": "r20", "54": "r20", "55": "r20", "57": "r20" }, { "25": "s12", "31": "s64" }, { "23": "r21", "24": "r21", "25": "r21", "26": "r21", "27": "r21", "28": "r21", "29": "r21", "30": "r21", "31": "r21", "32": "r21", "33": "r21", "34": "r21", "35": "r21", "36": "r21", "37": "r21", "38": "r21", "39": "r21", "40": "r21", "41": "r21", "42": "r21", "43": "r21", "44": "r21", "45": "r21", "52": "r21", "53": "r21", "54": "r21", "55": "r21", "57": "r21" }, { "56": "s72" }, { "56": "r55" }, { "10": 70, "20": 73, "21": 75, "22": 76, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r56", "58": "s74" }, { "24": "r62", "28": "r62", "35": "r62", "36": "r62", "37": "r62", "38": "r62", "39": "r62", "40": "r62", "41": "r62", "42": "r62", "43": "r62", "44": "r62", "45": "r62", "56": "r62", "58": "r62" }, { "24": "r63", "28": "r63", "35": "r63", "36": "r63", "37": "r63", "38": "r63", "39": "r63", "40": "r63", "41": "r63", "42": "r63", "43": "r63", "44": "r63", "45": "r63", "56": "r63", "58": "r63" }, { "24": "r64", "28": "r64", "35": "r64", "36": "r64", "37": "r64", "38": "r64", "39": "r64", "40": "r64", "41": "r64", "42": "r64", "43": "r64", "44": "r64", "45": "r64", "56": "r64", "58": "r64" }, { "24": "r65", "28": "r65", "35": "r65", "36": "r65", "37": "r65", "38": "r65", "39": "r65", "40": "r65", "41": "r65", "42": "r65", "43": "r65", "44": "r65", "45": "r65", "56": "r65", "58": "r65" }, { "23": "r52", "24": "r52", "25": "r52", "26": "r52", "27": "r52", "28": "r52", "29": "r52", "30": "r52", "31": "r52", "32": "r52", "33": "r52", "34": "r52", "35": "r52", "36": "r52", "37": "r52", "38": "r52", "39": "r52", "40": "r52", "41": "r52", "42": "r52", "43": "r52", "44": "r52", "45": "r52", "46": "r52", "47": "r52", "48": "r52", "49": "r52", "50": "r52", "51": "r52", "52": "r52", "53": "r52", "54": "r52", "55": "r52", "57": "r52" }, { "56": "r57" }, { "10": 70, "21": 77, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r62", "58": "s68" }, { "56": "r59" }, { "10": 70, "20": 79, "21": 75, "22": 76, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r63", "58": "s80" }, { "10": 70, "18": 78, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "56": "r58" }, { "56": "r60" }, { "10": 70, "21": 81, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r62", "58": "s68" }, { "10": 70, "18": 82, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "56": "r61" }, { "56": "s84" }, { "23": "r53", "24": "r53", "25": "r53", "26": "r53", "27": "r53", "28": "r53", "29": "r53", "30": "r53", "31": "r53", "32": "r53", "33": "r53", "34": "r53", "35": "r53", "36": "r53", "37": "r53", "38": "r53", "39": "r53", "40": "r53", "41": "r53", "42": "r53", "43": "r53", "44": "r53", "45": "r53", "46": "r53", "47": "r53", "48": "r53", "49": "r53", "50": "r53", "51": "r53", "52": "r53", "53": "r53", "54": "r53", "55": "r53", "57": "r53" }, { "25": "s12", "31": "s86" }, { "23": "r49", "24": "r49", "25": "r49", "26": "r49", "27": "r49", "28": "r49", "29": "r49", "30": "r49", "31": "r49", "32": "r49", "33": "r49", "34": "r49", "35": "r49", "36": "r49", "37": "r49", "38": "r49", "39": "r49", "40": "r49", "41": "r49", "42": "r49", "43": "r49", "44": "r49", "45": "r49", "46": "r49", "47": "r49", "48": "r49", "49": "r49", "50": "r49", "51": "r49", "52": "r49", "53": "r49", "54": "r49", "55": "r49", "57": "r49" }, { "25": "s12", "31": "s88" }, { "23": "r50", "24": "r50", "25": "r50", "26": "r50", "27": "r50", "28": "r50", "29": "r50", "30": "r50", "31": "r50", "32": "r50", "33": "r50", "34": "r50", "35": "r50", "36": "r50", "37": "r50", "38": "r50", "39": "r50", "40": "r50", "41": "r50", "42": "r50", "43": "r50", "44": "r50", "45": "r50", "46": "r50", "47": "r50", "48": "r50", "49": "r50", "50": "r50", "51": "r50", "52": "r50", "53": "r50", "54": "r50", "55": "r50", "57": "r50" }, { "25": "s12", "31": "s90" }, { "23": "r51", "24": "r51", "25": "r51", "26": "r51", "27": "r51", "28": "r51", "29": "r51", "30": "r51", "31": "r51", "32": "r51", "33": "r51", "34": "r51", "35": "r51", "36": "r51", "37": "r51", "38": "r51", "39": "r51", "40": "r51", "41": "r51", "42": "r51", "43": "r51", "44": "r51", "45": "r51", "46": "r51", "47": "r51", "48": "r51", "49": "r51", "50": "r51", "51": "r51", "52": "r51", "53": "r51", "54": "r51", "55": "r51", "57": "r51" }]; /** * 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 = [[/^#[^\n]+/, function () {/* skip comments */}], [/^\s+/, function () {/* skip whitespace */}], [/^\\-/, function () { return 'ESC_CHAR'; }], [/^-/, function () { return 'DASH'; }], [/^\//, function () { return 'CHAR'; }], [/^#/, function () { return 'CHAR'; }], [/^\|/, function () { return 'CHAR'; }], [/^\./, function () { return 'CHAR'; }], [/^\{/, function () { return 'CHAR'; }], [/^\{\d+\}/, function () { return 'RANGE_EXACT'; }], [/^\{\d+,\}/, function () { return 'RANGE_OPEN'; }], [/^\{\d+,\d+\}/, function () { return 'RANGE_CLOSED'; }], [/^\\k<([\w$]|\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\})+>/, function () { var groupName = yytext.slice(3, -1); validateUnicodeGroupName(groupName, this.getCurrentState()); return 'NAMED_GROUP_REF'; }], [/^\\b/, function () { return 'ESC_b'; }], [/^\\B/, function () { return 'ESC_B'; }], [/^\\c[a-zA-Z]/, function () { return 'CTRL_CH'; }], [/^\\0\d{1,2}/, function () { return 'OCT_CODE'; }], [/^\\0/, function () { return 'DEC_CODE'; }], [/^\\\d{1,3}/, function () { return 'DEC_CODE'; }], [/^\\u[dD][89abAB][0-9a-fA-F]{2}\\u[dD][c-fC-F][0-9a-fA-F]{2}/, function () { return 'U_CODE_SURROGATE'; }], [/^\\u\{[0-9a-fA-F]{1,}\}/, function () { return 'U_CODE'; }], [/^\\u[0-9a-fA-F]{4}/, function () { return 'U_CODE'; }], [/^\\[pP]\{\w+(?:=\w+)?\}/, function () { return 'U_PROP_VALUE_EXP'; }], [/^\\x[0-9a-fA-F]{2}/, function () { return 'HEX_CODE'; }], [/^\\[tnrdDsSwWvf]/, function () { return 'META_CHAR'; }], [/^\\\//, function () { return 'ESC_CHAR'; }], [/^\\[ #]/, function () { return 'ESC_CHAR'; }], [/^\\[^*?+\[()\\|]/, function () { var s = this.getCurrentState(); if (s === 'u' || s === 'xu' || s === 'u_class') { throw new SyntaxError('invalid Unicode escape ' + yytext); } return 'ESC_CHAR'; }], [/^\\[*?+\[()\\|]/, function () { return 'ESC_CHAR'; }], [/^\(/, function () { return 'CHAR'; }], [/^\)/, function () { return 'CHAR'; }], [/^\(\?=/, function () { return 'POS_LA_ASSERT'; }], [/^\(\?!/, function () { return 'NEG_LA_ASSERT'; }], [/^\(\?<=/, function () { return 'POS_LB_ASSERT'; }], [/^\(\?/, function () { yytext = yytext.slice(3, -1); validateUnicodeGroupName(yytext, this.getCurrentState()); return 'NAMED_CAPTURE_GROUP'; }], [/^\(/, function () { return 'L_PAREN'; }], [/^\)/, function () { return 'R_PAREN'; }], [/^[*?+[^$]/, function () { return 'CHAR'; }], [/^\\\]/, function () { return 'ESC_CHAR'; }], [/^\]/, function () { this.popState();return 'R_BRACKET'; }], [/^\^/, function () { return 'BOS'; }], [/^\$/, function () { return 'EOS'; }], [/^\*/, function () { return 'STAR'; }], [/^\?/, function () { return 'Q_MARK'; }], [/^\+/, function () { return 'PLUS'; }], [/^\|/, function () { return 'BAR'; }], [/^\./, function () { return 'ANY'; }], [/^\//, function () { return 'SLASH'; }], [/^[^*?+\[()\\|]/, function () { return 'CHAR'; }], [/^\[\^/, function () { var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'NEG_CLASS'; }], [/^\[/, function () { var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'L_BRACKET'; }]]; var lexRulesByConditions = { "INITIAL": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21, 23, 24, 25, 27, 28, 31, 32, 33, 34, 35, 36, 37, 38, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "u": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 31, 32, 33, 34, 35, 36, 37, 38, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "xu": [0, 1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 31, 32, 33, 34, 35, 36, 37, 38, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "x": [0, 1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21, 23, 24, 25, 27, 28, 31, 32, 33, 34, 35, 36, 37, 38, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "u_class": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 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], "class": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21, 23, 24, 25, 27, 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] }; 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: true }; /** * 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 _loc2 = null; if (yy.options.captureLocations) { _loc2 = { 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: _loc2 }, 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; } }; /** * Tracks capturing groups. */ var capturingGroupsCount = 0; /** * Tracks named groups. */ var namedGroups = {}; /** * Parsing string. */ var parsingString = ''; yyparse.onParseBegin = function (string, lexer) { parsingString = string; capturingGroupsCount = 0; namedGroups = {}; var lastSlash = string.lastIndexOf('/'); var flags = string.slice(lastSlash); if (flags.includes('x') && flags.includes('u')) { lexer.pushState('xu'); } else { if (flags.includes('x')) { lexer.pushState('x'); } if (flags.includes('u')) { lexer.pushState('u'); } } }; /** * On shifting `(` remember its number to used on reduce. */ yyparse.onShift = function (token) { if (token.type === 'L_PAREN' || token.type === 'NAMED_CAPTURE_GROUP') { token.value = new String(token.value); token.value.groupNumber = ++capturingGroupsCount; } return token; }; /** * Extracts ranges from the range string. */ function getRange(text) { var range = text.match(/\d+/g).map(Number); if (Number.isFinite(range[1]) && range[1] < range[0]) { throw new SyntaxError('Numbers out of order in ' + text + ' quantifier'); } return range; } /** * Checks class range */ function checkClassRange(from, to) { if (from.kind === 'control' || to.kind === 'control' || !isNaN(from.codePoint) && !isNaN(to.codePoint) && from.codePoint > to.codePoint) { throw new SyntaxError('Range ' + from.value + '-' + to.value + ' out of order in character class'); } } // ---------------------- Unicode property ------------------------------------------- var unicodeProperties = require('../unicode/parser-unicode-properties.js'); /** * Unicode property. */ function UnicodeProperty(matched, loc) { var negative = matched[1] === 'P'; var separatorIdx = matched.indexOf('='); var name = matched.slice(3, separatorIdx !== -1 ? separatorIdx : -1); var value = void 0; // General_Category allows using only value as a shorthand. var isShorthand = separatorIdx === -1 && unicodeProperties.isGeneralCategoryValue(name); // Binary propery name. var isBinaryProperty = separatorIdx === -1 && unicodeProperties.isBinaryPropertyName(name); if (isShorthand) { value = name; name = 'General_Category'; } else if (isBinaryProperty) { value = name; } else { if (!unicodeProperties.isValidName(name)) { throw new SyntaxError('Invalid unicode property name: ' + name + '.'); } value = matched.slice(separatorIdx + 1, -1); if (!unicodeProperties.isValidValue(name, value)) { throw new SyntaxError('Invalid ' + name + ' unicode property value: ' + value + '.'); } } return Node({ type: 'UnicodeProperty', name: name, value: value, negative: negative, shorthand: isShorthand, binary: isBinaryProperty, canonicalName: unicodeProperties.getCanonicalName(name) || name, canonicalValue: unicodeProperties.getCanonicalValue(value) || value }, loc); } // ---------------------------------------------------------------------------------- /** * Creates a character node. */ function Char(value, kind, loc) { var symbol = void 0; var codePoint = void 0; switch (kind) { case 'decimal': { codePoint = Number(value.slice(1)); symbol = String.fromCodePoint(codePoint); break; } case 'oct': { codePoint = parseInt(value.slice(1), 8); symbol = String.fromCodePoint(codePoint); break; } case 'hex': case 'unicode': { if (value.lastIndexOf('\\u') > 0) { var _value$split$slice = value.split('\\u').slice(1), _value$split$slice2 = _slicedToArray(_value$split$slice, 2), lead = _value$split$slice2[0], trail = _value$split$slice2[1]; lead = parseInt(lead, 16); trail = parseInt(trail, 16); codePoint = (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000; symbol = String.fromCodePoint(codePoint); } else { var hex = value.slice(2).replace('{', ''); codePoint = parseInt(hex, 16); if (codePoint > 0x10ffff) { throw new SyntaxError('Bad character escape sequence: ' + value); } symbol = String.fromCodePoint(codePoint); } break; } case 'meta': { switch (value) { case '\\t': symbol = '\t'; codePoint = symbol.codePointAt(0); break; case '\\n': symbol = '\n'; codePoint = symbol.codePointAt(0); break; case '\\r': symbol = '\r'; codePoint = symbol.codePointAt(0); break; case '\\v': symbol = '\v'; codePoint = symbol.codePointAt(0); break; case '\\f': symbol = '\f'; codePoint = symbol.codePointAt(0); break; case '\\b': symbol = '\b'; codePoint = symbol.codePointAt(0); case '\\0': symbol = '\0'; codePoint = 0; case '.': symbol = '.'; codePoint = NaN; break; default: codePoint = NaN; } break; } case 'simple': { symbol = value; codePoint = symbol.codePointAt(0); break; } } return Node({ type: 'Char', value: value, kind: kind, symbol: symbol, codePoint: codePoint }, loc); } /** * Valid flags per current ECMAScript spec and * stage 3+ proposals. */ var validFlags = 'gimsuxy'; /** * Checks the flags are valid, and that * we don't duplicate flags. */ function checkFlags(flags) { var seen = new Set(); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = flags[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var flag = _step.value; if (seen.has(flag) || !validFlags.includes(flag)) { throw new SyntaxError('Invalid flags: ' + flags); } seen.add(flag); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return flags.split('').sort().join(''); } /** * Parses patterns like \1, \2, etc. either as a backreference * to a group, or a deciaml char code. */ function GroupRefOrDecChar(text, textLoc) { var reference = Number(text.slice(1)); if (reference > 0 && reference <= capturingGroupsCount) { return Node({ type: 'Backreference', kind: 'number', number: reference, reference: reference }, textLoc); } return Char(text, 'decimal', textLoc); } /** * Unicode names. */ var uRe = /^\\u[0-9a-fA-F]{4}/; var ucpRe = /^\\u\{[0-9a-fA-F]{1,}\}/; /** * Validates Unicode group name. */ function validateUnicodeGroupName(name, state) { var isUnicodeName = uRe.test(name) || ucpRe.test(name); var isUnicodeState = state === 'u' || state === 'xu' || state === 'u_class'; if (isUnicodeName && !isUnicodeState) { throw new SyntaxError('invalid group Unicode name "' + name + '", use `u` flag.'); } } /** * Extracts from `\k` pattern either a backreference * to a named capturing group (if it presents), or parses it * as a list of char: `\k`, `<`, `f`, etc. */ function NamedGroupRefOrChars(text, textLoc) { var groupName = text.slice(3, -1); if (namedGroups.hasOwnProperty(groupName)) { return Node({ type: 'Backreference', kind: 'name', number: namedGroups[groupName], reference: groupName }, textLoc); } // Else `\k` should be parsed as a list of `Char`s. // This is really a 0.01% edge case, but we should handle it. var startOffset = null; var startLine = null; var endLine = null; var startColumn = null; if (textLoc) { startOffset = textLoc.startOffset; startLine = textLoc.startLine; endLine = textLoc.endLine; startColumn = textLoc.startColumn; } var charRe = /^[\w$<>]/; var loc = void 0; var chars = [ // Init to first \k, taking 2 symbols. Char(text.slice(1, 2), 'simple', startOffset ? { startLine: startLine, endLine: endLine, startColumn: startColumn, startOffset: startOffset, endOffset: startOffset += 2, endColumn: startColumn += 2 } : null)]; // For \k chars[0].escaped = true; // Other symbols. text = text.slice(2); while (text.length > 0) { var matched = null; // Unicode, \u003B or \u{003B} if ((matched = text.match(uRe)) || (matched = text.match(ucpRe))) { if (startOffset) { loc = { startLine: startLine, endLine: endLine, startColumn: startColumn, startOffset: startOffset, endOffset: startOffset += matched[0].length, endColumn: startColumn += matched[0].length }; } chars.push(Char(matched[0], 'unicode', loc)); text = text.slice(matched[0].length); } // Simple char. else if (matched = text.match(charRe)) { if (startOffset) { loc = { startLine: startLine, endLine: endLine, startColumn: startColumn, startOffset: startOffset, endOffset: ++startOffset, endColumn: ++startColumn }; } chars.push(Char(matched[0], 'simple', loc)); text = text.slice(1); } } return chars; } /** * Creates an AST node with a location. */ function Node(node, loc) { if (yy.options.captureLocations) { node.loc = { source: parsingString.slice(loc.startOffset, loc.endOffset), start: { line: loc.startLine, column: loc.startColumn, offset: loc.startOffset }, end: { line: loc.endLine, column: loc.endColumn, offset: loc.endOffset } }; } return node; } /** * Creates location node. */ function loc(start, end) { if (!yy.options.captureLocations) { return null; } return { startOffset: start.startOffset, endOffset: end.endOffset, startLine: start.startLine, endLine: end.endLine, startColumn: start.startColumn, endColumn: end.endColumn }; } 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;