regexp-tree.js 61 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351
  1. /**
  2. * LR parser generated by the Syntax tool.
  3. *
  4. * https://www.npmjs.com/package/syntax-cli
  5. *
  6. * npm install -g syntax-cli
  7. *
  8. * syntax-cli --help
  9. *
  10. * To regenerate run:
  11. *
  12. * syntax-cli \
  13. * --grammar ~/path-to-grammar-file \
  14. * --mode <parsing-mode> \
  15. * --output ~/path-to-output-parser-file.js
  16. */
  17. 'use strict';
  18. /**
  19. * Matched token text.
  20. */
  21. 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"); } }; }();
  22. 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); } }
  23. var yytext = void 0;
  24. /**
  25. * Length of the matched token text.
  26. */
  27. var yyleng = void 0;
  28. /**
  29. * Storage object.
  30. */
  31. var yy = {};
  32. /**
  33. * Result of semantic action.
  34. */
  35. var __ = void 0;
  36. /**
  37. * Result location object.
  38. */
  39. var __loc = void 0;
  40. function yyloc(start, end) {
  41. if (!yy.options.captureLocations) {
  42. return null;
  43. }
  44. // Epsilon doesn't produce location.
  45. if (!start || !end) {
  46. return start || end;
  47. }
  48. return {
  49. startOffset: start.startOffset,
  50. endOffset: end.endOffset,
  51. startLine: start.startLine,
  52. endLine: end.endLine,
  53. startColumn: start.startColumn,
  54. endColumn: end.endColumn
  55. };
  56. }
  57. var EOF = '$';
  58. /**
  59. * List of productions (generated by Syntax tool).
  60. */
  61. var productions = [[-1, 1, function (_1, _1loc) {
  62. __loc = yyloc(_1loc, _1loc);__ = _1;
  63. }], [0, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {
  64. __loc = yyloc(_1loc, _4loc);
  65. __ = Node({
  66. type: 'RegExp',
  67. body: _2,
  68. flags: checkFlags(_4)
  69. }, loc(_1loc, _4loc || _3loc));
  70. }], [1, 1, function (_1, _1loc) {
  71. __loc = yyloc(_1loc, _1loc);__ = _1;
  72. }], [1, 0, function () {
  73. __loc = null;__ = '';
  74. }], [2, 1, function (_1, _1loc) {
  75. __loc = yyloc(_1loc, _1loc);__ = _1;
  76. }], [2, 2, function (_1, _2, _1loc, _2loc) {
  77. __loc = yyloc(_1loc, _2loc);__ = _1 + _2;
  78. }], [3, 1, function (_1, _1loc) {
  79. __loc = yyloc(_1loc, _1loc);__ = _1;
  80. }], [4, 1, function (_1, _1loc) {
  81. __loc = yyloc(_1loc, _1loc);__ = _1;
  82. }], [4, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
  83. __loc = yyloc(_1loc, _3loc);
  84. // Location for empty disjunction: /|/
  85. var _loc = null;
  86. if (_2loc) {
  87. _loc = loc(_1loc || _2loc, _3loc || _2loc);
  88. };
  89. __ = Node({
  90. type: 'Disjunction',
  91. left: _1,
  92. right: _3
  93. }, _loc);
  94. }], [5, 1, function (_1, _1loc) {
  95. __loc = yyloc(_1loc, _1loc);
  96. if (_1.length === 0) {
  97. __ = null;
  98. return;
  99. }
  100. if (_1.length === 1) {
  101. __ = Node(_1[0], __loc);
  102. } else {
  103. __ = Node({
  104. type: 'Alternative',
  105. expressions: _1
  106. }, __loc);
  107. }
  108. }], [6, 0, function () {
  109. __loc = null;__ = [];
  110. }], [6, 2, function (_1, _2, _1loc, _2loc) {
  111. __loc = yyloc(_1loc, _2loc);__ = _1.concat(_2);
  112. }], [7, 1, function (_1, _1loc) {
  113. __loc = yyloc(_1loc, _1loc);__ = Node(Object.assign({ type: 'Assertion' }, _1), __loc);
  114. }], [7, 2, function (_1, _2, _1loc, _2loc) {
  115. __loc = yyloc(_1loc, _2loc);
  116. __ = _1;
  117. if (_2) {
  118. __ = Node({
  119. type: 'Repetition',
  120. expression: _1,
  121. quantifier: _2
  122. }, __loc);
  123. }
  124. }], [8, 1, function (_1, _1loc) {
  125. __loc = yyloc(_1loc, _1loc);__ = { kind: '^' };
  126. }], [8, 1, function (_1, _1loc) {
  127. __loc = yyloc(_1loc, _1loc);__ = { kind: '$' };
  128. }], [8, 1, function (_1, _1loc) {
  129. __loc = yyloc(_1loc, _1loc);__ = { kind: '\\b' };
  130. }], [8, 1, function (_1, _1loc) {
  131. __loc = yyloc(_1loc, _1loc);__ = { kind: '\\B' };
  132. }], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
  133. __loc = yyloc(_1loc, _3loc);
  134. __ = {
  135. kind: 'Lookahead',
  136. assertion: _2
  137. };
  138. }], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
  139. __loc = yyloc(_1loc, _3loc);
  140. __ = {
  141. kind: 'Lookahead',
  142. negative: true,
  143. assertion: _2
  144. };
  145. }], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
  146. __loc = yyloc(_1loc, _3loc);
  147. __ = {
  148. kind: 'Lookbehind',
  149. assertion: _2
  150. };
  151. }], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
  152. __loc = yyloc(_1loc, _3loc);
  153. __ = {
  154. kind: 'Lookbehind',
  155. negative: true,
  156. assertion: _2
  157. };
  158. }], [9, 1, function (_1, _1loc) {
  159. __loc = yyloc(_1loc, _1loc);__ = _1;
  160. }], [9, 1, function (_1, _1loc) {
  161. __loc = yyloc(_1loc, _1loc);__ = _1;
  162. }], [9, 1, function (_1, _1loc) {
  163. __loc = yyloc(_1loc, _1loc);__ = _1;
  164. }], [10, 1, function (_1, _1loc) {
  165. __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc);
  166. }], [10, 1, function (_1, _1loc) {
  167. __loc = yyloc(_1loc, _1loc);__ = Char(_1.slice(1), 'simple', __loc);__.escaped = true;
  168. }], [10, 1, function (_1, _1loc) {
  169. __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);__.isSurrogatePair = true;
  170. }], [10, 1, function (_1, _1loc) {
  171. __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);
  172. }], [10, 1, function (_1, _1loc) {
  173. __loc = yyloc(_1loc, _1loc);__ = UnicodeProperty(_1, __loc);
  174. }], [10, 1, function (_1, _1loc) {
  175. __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'control', __loc);
  176. }], [10, 1, function (_1, _1loc) {
  177. __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'hex', __loc);
  178. }], [10, 1, function (_1, _1loc) {
  179. __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'oct', __loc);
  180. }], [10, 1, function (_1, _1loc) {
  181. __loc = yyloc(_1loc, _1loc);__ = GroupRefOrDecChar(_1, __loc);
  182. }], [10, 1, function (_1, _1loc) {
  183. __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);
  184. }], [10, 1, function (_1, _1loc) {
  185. __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);
  186. }], [10, 1, function (_1, _1loc) {
  187. __loc = yyloc(_1loc, _1loc);__ = NamedGroupRefOrChars(_1, _1loc);
  188. }], [11, 1, function (_1, _1loc) {
  189. __loc = yyloc(_1loc, _1loc);__ = _1;
  190. }], [11, 0], [12, 1, function (_1, _1loc) {
  191. __loc = yyloc(_1loc, _1loc);__ = _1;
  192. }], [12, 2, function (_1, _2, _1loc, _2loc) {
  193. __loc = yyloc(_1loc, _2loc);
  194. _1.greedy = false;
  195. __ = _1;
  196. }], [13, 1, function (_1, _1loc) {
  197. __loc = yyloc(_1loc, _1loc);
  198. __ = Node({
  199. type: 'Quantifier',
  200. kind: _1,
  201. greedy: true
  202. }, __loc);
  203. }], [13, 1, function (_1, _1loc) {
  204. __loc = yyloc(_1loc, _1loc);
  205. __ = Node({
  206. type: 'Quantifier',
  207. kind: _1,
  208. greedy: true
  209. }, __loc);
  210. }], [13, 1, function (_1, _1loc) {
  211. __loc = yyloc(_1loc, _1loc);
  212. __ = Node({
  213. type: 'Quantifier',
  214. kind: _1,
  215. greedy: true
  216. }, __loc);
  217. }], [13, 1, function (_1, _1loc) {
  218. __loc = yyloc(_1loc, _1loc);
  219. var range = getRange(_1);
  220. __ = Node({
  221. type: 'Quantifier',
  222. kind: 'Range',
  223. from: range[0],
  224. to: range[0],
  225. greedy: true
  226. }, __loc);
  227. }], [13, 1, function (_1, _1loc) {
  228. __loc = yyloc(_1loc, _1loc);
  229. __ = Node({
  230. type: 'Quantifier',
  231. kind: 'Range',
  232. from: getRange(_1)[0],
  233. greedy: true
  234. }, __loc);
  235. }], [13, 1, function (_1, _1loc) {
  236. __loc = yyloc(_1loc, _1loc);
  237. var range = getRange(_1);
  238. __ = Node({
  239. type: 'Quantifier',
  240. kind: 'Range',
  241. from: range[0],
  242. to: range[1],
  243. greedy: true
  244. }, __loc);
  245. }], [14, 1, function (_1, _1loc) {
  246. __loc = yyloc(_1loc, _1loc);__ = _1;
  247. }], [14, 1, function (_1, _1loc) {
  248. __loc = yyloc(_1loc, _1loc);__ = _1;
  249. }], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
  250. __loc = yyloc(_1loc, _3loc);
  251. if (namedGroups.hasOwnProperty(_1)) {
  252. throw new SyntaxError('Duplicate of the named group "' + _1 + '".');
  253. }
  254. namedGroups[_1] = _1.groupNumber;
  255. __ = Node({
  256. type: 'Group',
  257. capturing: true,
  258. name: _1,
  259. number: _1.groupNumber,
  260. expression: _2
  261. }, __loc);
  262. }], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
  263. __loc = yyloc(_1loc, _3loc);
  264. __ = Node({
  265. type: 'Group',
  266. capturing: true,
  267. number: _1.groupNumber,
  268. expression: _2
  269. }, __loc);
  270. }], [16, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
  271. __loc = yyloc(_1loc, _3loc);
  272. __ = Node({
  273. type: 'Group',
  274. capturing: false,
  275. expression: _2
  276. }, __loc);
  277. }], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
  278. __loc = yyloc(_1loc, _3loc);
  279. __ = Node({
  280. type: 'CharacterClass',
  281. negative: true,
  282. expressions: _2
  283. }, __loc);
  284. }], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
  285. __loc = yyloc(_1loc, _3loc);
  286. __ = Node({
  287. type: 'CharacterClass',
  288. expressions: _2
  289. }, __loc);
  290. }], [18, 0, function () {
  291. __loc = null;__ = [];
  292. }], [18, 1, function (_1, _1loc) {
  293. __loc = yyloc(_1loc, _1loc);__ = _1;
  294. }], [19, 1, function (_1, _1loc) {
  295. __loc = yyloc(_1loc, _1loc);__ = [_1];
  296. }], [19, 2, function (_1, _2, _1loc, _2loc) {
  297. __loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2);
  298. }], [19, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {
  299. __loc = yyloc(_1loc, _4loc);
  300. checkClassRange(_1, _3);
  301. __ = [Node({
  302. type: 'ClassRange',
  303. from: _1,
  304. to: _3
  305. }, loc(_1loc, _3loc))];
  306. if (_4) {
  307. __ = __.concat(_4);
  308. }
  309. }], [20, 1, function (_1, _1loc) {
  310. __loc = yyloc(_1loc, _1loc);__ = _1;
  311. }], [20, 2, function (_1, _2, _1loc, _2loc) {
  312. __loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2);
  313. }], [20, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {
  314. __loc = yyloc(_1loc, _4loc);
  315. checkClassRange(_1, _3);
  316. __ = [Node({
  317. type: 'ClassRange',
  318. from: _1,
  319. to: _3
  320. }, loc(_1loc, _3loc))];
  321. if (_4) {
  322. __ = __.concat(_4);
  323. }
  324. }], [21, 1, function (_1, _1loc) {
  325. __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc);
  326. }], [21, 1, function (_1, _1loc) {
  327. __loc = yyloc(_1loc, _1loc);__ = _1;
  328. }], [22, 1, function (_1, _1loc) {
  329. __loc = yyloc(_1loc, _1loc);__ = _1;
  330. }], [22, 1, function (_1, _1loc) {
  331. __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);
  332. }]];
  333. /**
  334. * Encoded tokens map.
  335. */
  336. 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" };
  337. /**
  338. * Parsing table (generated by Syntax tool).
  339. */
  340. 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" }];
  341. /**
  342. * Parsing stack.
  343. */
  344. var stack = [];
  345. /**
  346. * Tokenizer instance.
  347. */
  348. var tokenizer = void 0;
  349. /**
  350. * Generic tokenizer used by the parser in the Syntax tool.
  351. *
  352. * https://www.npmjs.com/package/syntax-cli
  353. *
  354. * See `--custom-tokinzer` to skip this generation, and use a custom one.
  355. */
  356. var lexRules = [[/^#[^\n]+/, function () {/* skip comments */}], [/^\s+/, function () {/* skip whitespace */}], [/^\\-/, function () {
  357. return 'ESC_CHAR';
  358. }], [/^-/, function () {
  359. return 'DASH';
  360. }], [/^\//, function () {
  361. return 'CHAR';
  362. }], [/^#/, function () {
  363. return 'CHAR';
  364. }], [/^\|/, function () {
  365. return 'CHAR';
  366. }], [/^\./, function () {
  367. return 'CHAR';
  368. }], [/^\{/, function () {
  369. return 'CHAR';
  370. }], [/^\{\d+\}/, function () {
  371. return 'RANGE_EXACT';
  372. }], [/^\{\d+,\}/, function () {
  373. return 'RANGE_OPEN';
  374. }], [/^\{\d+,\d+\}/, function () {
  375. return 'RANGE_CLOSED';
  376. }], [/^\\k<([\w$]|\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\})+>/, function () {
  377. var groupName = yytext.slice(3, -1);
  378. validateUnicodeGroupName(groupName, this.getCurrentState());
  379. return 'NAMED_GROUP_REF';
  380. }], [/^\\b/, function () {
  381. return 'ESC_b';
  382. }], [/^\\B/, function () {
  383. return 'ESC_B';
  384. }], [/^\\c[a-zA-Z]/, function () {
  385. return 'CTRL_CH';
  386. }], [/^\\0\d{1,2}/, function () {
  387. return 'OCT_CODE';
  388. }], [/^\\0/, function () {
  389. return 'DEC_CODE';
  390. }], [/^\\\d{1,3}/, function () {
  391. return 'DEC_CODE';
  392. }], [/^\\u[dD][89abAB][0-9a-fA-F]{2}\\u[dD][c-fC-F][0-9a-fA-F]{2}/, function () {
  393. return 'U_CODE_SURROGATE';
  394. }], [/^\\u\{[0-9a-fA-F]{1,}\}/, function () {
  395. return 'U_CODE';
  396. }], [/^\\u[0-9a-fA-F]{4}/, function () {
  397. return 'U_CODE';
  398. }], [/^\\[pP]\{\w+(?:=\w+)?\}/, function () {
  399. return 'U_PROP_VALUE_EXP';
  400. }], [/^\\x[0-9a-fA-F]{2}/, function () {
  401. return 'HEX_CODE';
  402. }], [/^\\[tnrdDsSwWvf]/, function () {
  403. return 'META_CHAR';
  404. }], [/^\\\//, function () {
  405. return 'ESC_CHAR';
  406. }], [/^\\[ #]/, function () {
  407. return 'ESC_CHAR';
  408. }], [/^\\[^*?+\[()\\|]/, function () {
  409. var s = this.getCurrentState();
  410. if (s === 'u' || s === 'xu' || s === 'u_class') {
  411. throw new SyntaxError('invalid Unicode escape ' + yytext);
  412. }
  413. return 'ESC_CHAR';
  414. }], [/^\\[*?+\[()\\|]/, function () {
  415. return 'ESC_CHAR';
  416. }], [/^\(/, function () {
  417. return 'CHAR';
  418. }], [/^\)/, function () {
  419. return 'CHAR';
  420. }], [/^\(\?=/, function () {
  421. return 'POS_LA_ASSERT';
  422. }], [/^\(\?!/, function () {
  423. return 'NEG_LA_ASSERT';
  424. }], [/^\(\?<=/, function () {
  425. return 'POS_LB_ASSERT';
  426. }], [/^\(\?<!/, function () {
  427. return 'NEG_LB_ASSERT';
  428. }], [/^\(\?:/, function () {
  429. return 'NON_CAPTURE_GROUP';
  430. }], [/^\(\?<([\w$]|\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\})+>/, function () {
  431. yytext = yytext.slice(3, -1);
  432. validateUnicodeGroupName(yytext, this.getCurrentState());
  433. return 'NAMED_CAPTURE_GROUP';
  434. }], [/^\(/, function () {
  435. return 'L_PAREN';
  436. }], [/^\)/, function () {
  437. return 'R_PAREN';
  438. }], [/^[*?+[^$]/, function () {
  439. return 'CHAR';
  440. }], [/^\\\]/, function () {
  441. return 'ESC_CHAR';
  442. }], [/^\]/, function () {
  443. this.popState();return 'R_BRACKET';
  444. }], [/^\^/, function () {
  445. return 'BOS';
  446. }], [/^\$/, function () {
  447. return 'EOS';
  448. }], [/^\*/, function () {
  449. return 'STAR';
  450. }], [/^\?/, function () {
  451. return 'Q_MARK';
  452. }], [/^\+/, function () {
  453. return 'PLUS';
  454. }], [/^\|/, function () {
  455. return 'BAR';
  456. }], [/^\./, function () {
  457. return 'ANY';
  458. }], [/^\//, function () {
  459. return 'SLASH';
  460. }], [/^[^*?+\[()\\|]/, function () {
  461. return 'CHAR';
  462. }], [/^\[\^/, function () {
  463. var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'NEG_CLASS';
  464. }], [/^\[/, function () {
  465. var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'L_BRACKET';
  466. }]];
  467. 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] };
  468. var EOF_TOKEN = {
  469. type: EOF,
  470. value: ''
  471. };
  472. tokenizer = {
  473. initString: function initString(string) {
  474. this._string = string;
  475. this._cursor = 0;
  476. this._states = ['INITIAL'];
  477. this._tokensQueue = [];
  478. this._currentLine = 1;
  479. this._currentColumn = 0;
  480. this._currentLineBeginOffset = 0;
  481. /**
  482. * Matched token location data.
  483. */
  484. this._tokenStartOffset = 0;
  485. this._tokenEndOffset = 0;
  486. this._tokenStartLine = 1;
  487. this._tokenEndLine = 1;
  488. this._tokenStartColumn = 0;
  489. this._tokenEndColumn = 0;
  490. return this;
  491. },
  492. /**
  493. * Returns tokenizer states.
  494. */
  495. getStates: function getStates() {
  496. return this._states;
  497. },
  498. getCurrentState: function getCurrentState() {
  499. return this._states[this._states.length - 1];
  500. },
  501. pushState: function pushState(state) {
  502. this._states.push(state);
  503. },
  504. begin: function begin(state) {
  505. this.pushState(state);
  506. },
  507. popState: function popState() {
  508. if (this._states.length > 1) {
  509. return this._states.pop();
  510. }
  511. return this._states[0];
  512. },
  513. getNextToken: function getNextToken() {
  514. // Something was queued, return it.
  515. if (this._tokensQueue.length > 0) {
  516. return this.onToken(this._toToken(this._tokensQueue.shift()));
  517. }
  518. if (!this.hasMoreTokens()) {
  519. return this.onToken(EOF_TOKEN);
  520. }
  521. var string = this._string.slice(this._cursor);
  522. var lexRulesForState = lexRulesByConditions[this.getCurrentState()];
  523. for (var i = 0; i < lexRulesForState.length; i++) {
  524. var lexRuleIndex = lexRulesForState[i];
  525. var lexRule = lexRules[lexRuleIndex];
  526. var matched = this._match(string, lexRule[0]);
  527. // Manual handling of EOF token (the end of string). Return it
  528. // as `EOF` symbol.
  529. if (string === '' && matched === '') {
  530. this._cursor++;
  531. }
  532. if (matched !== null) {
  533. yytext = matched;
  534. yyleng = yytext.length;
  535. var token = lexRule[1].call(this);
  536. if (!token) {
  537. return this.getNextToken();
  538. }
  539. // If multiple tokens are returned, save them to return
  540. // on next `getNextToken` call.
  541. if (Array.isArray(token)) {
  542. var tokensToQueue = token.slice(1);
  543. token = token[0];
  544. if (tokensToQueue.length > 0) {
  545. var _tokensQueue;
  546. (_tokensQueue = this._tokensQueue).unshift.apply(_tokensQueue, _toConsumableArray(tokensToQueue));
  547. }
  548. }
  549. return this.onToken(this._toToken(token, yytext));
  550. }
  551. }
  552. if (this.isEOF()) {
  553. this._cursor++;
  554. return EOF_TOKEN;
  555. }
  556. this.throwUnexpectedToken(string[0], this._currentLine, this._currentColumn);
  557. },
  558. /**
  559. * Throws default "Unexpected token" exception, showing the actual
  560. * line from the source, pointing with the ^ marker to the bad token.
  561. * In addition, shows `line:column` location.
  562. */
  563. throwUnexpectedToken: function throwUnexpectedToken(symbol, line, column) {
  564. var lineSource = this._string.split('\n')[line - 1];
  565. var lineData = '';
  566. if (lineSource) {
  567. var pad = ' '.repeat(column);
  568. lineData = '\n\n' + lineSource + '\n' + pad + '^\n';
  569. }
  570. throw new SyntaxError(lineData + 'Unexpected token: "' + symbol + '" ' + ('at ' + line + ':' + column + '.'));
  571. },
  572. getCursor: function getCursor() {
  573. return this._cursor;
  574. },
  575. getCurrentLine: function getCurrentLine() {
  576. return this._currentLine;
  577. },
  578. getCurrentColumn: function getCurrentColumn() {
  579. return this._currentColumn;
  580. },
  581. _captureLocation: function _captureLocation(matched) {
  582. var nlRe = /\n/g;
  583. // Absolute offsets.
  584. this._tokenStartOffset = this._cursor;
  585. // Line-based locations, start.
  586. this._tokenStartLine = this._currentLine;
  587. this._tokenStartColumn = this._tokenStartOffset - this._currentLineBeginOffset;
  588. // Extract `\n` in the matched token.
  589. var nlMatch = void 0;
  590. while ((nlMatch = nlRe.exec(matched)) !== null) {
  591. this._currentLine++;
  592. this._currentLineBeginOffset = this._tokenStartOffset + nlMatch.index + 1;
  593. }
  594. this._tokenEndOffset = this._cursor + matched.length;
  595. // Line-based locations, end.
  596. this._tokenEndLine = this._currentLine;
  597. this._tokenEndColumn = this._currentColumn = this._tokenEndOffset - this._currentLineBeginOffset;
  598. },
  599. _toToken: function _toToken(tokenType) {
  600. var yytext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
  601. return {
  602. // Basic data.
  603. type: tokenType,
  604. value: yytext,
  605. // Location data.
  606. startOffset: this._tokenStartOffset,
  607. endOffset: this._tokenEndOffset,
  608. startLine: this._tokenStartLine,
  609. endLine: this._tokenEndLine,
  610. startColumn: this._tokenStartColumn,
  611. endColumn: this._tokenEndColumn
  612. };
  613. },
  614. isEOF: function isEOF() {
  615. return this._cursor === this._string.length;
  616. },
  617. hasMoreTokens: function hasMoreTokens() {
  618. return this._cursor <= this._string.length;
  619. },
  620. _match: function _match(string, regexp) {
  621. var matched = string.match(regexp);
  622. if (matched) {
  623. // Handle `\n` in the matched token to track line numbers.
  624. this._captureLocation(matched[0]);
  625. this._cursor += matched[0].length;
  626. return matched[0];
  627. }
  628. return null;
  629. },
  630. /**
  631. * Allows analyzing, and transforming token. Default implementation
  632. * just passes the token through.
  633. */
  634. onToken: function onToken(token) {
  635. return token;
  636. }
  637. };
  638. /**
  639. * Expose tokenizer so it can be accessed in semantic actions.
  640. */
  641. yy.lexer = tokenizer;
  642. yy.tokenizer = tokenizer;
  643. /**
  644. * Global parsing options. Some options can be shadowed per
  645. * each `parse` call, if the optations are passed.
  646. *
  647. * Initalized to the `captureLocations` which is passed
  648. * from the generator. Other options can be added at runtime.
  649. */
  650. yy.options = {
  651. captureLocations: true
  652. };
  653. /**
  654. * Parsing module.
  655. */
  656. var yyparse = {
  657. /**
  658. * Sets global parsing options.
  659. */
  660. setOptions: function setOptions(options) {
  661. yy.options = options;
  662. return this;
  663. },
  664. /**
  665. * Returns parsing options.
  666. */
  667. getOptions: function getOptions() {
  668. return yy.options;
  669. },
  670. /**
  671. * Parses a string.
  672. */
  673. parse: function parse(string, parseOptions) {
  674. if (!tokenizer) {
  675. throw new Error('Tokenizer instance wasn\'t specified.');
  676. }
  677. tokenizer.initString(string);
  678. /**
  679. * If parse options are passed, override global parse options for
  680. * this call, and later restore global options.
  681. */
  682. var globalOptions = yy.options;
  683. if (parseOptions) {
  684. yy.options = Object.assign({}, yy.options, parseOptions);
  685. }
  686. /**
  687. * Allow callers to do setup work based on the
  688. * parsing string, and passed options.
  689. */
  690. yyparse.onParseBegin(string, tokenizer, yy.options);
  691. stack.length = 0;
  692. stack.push(0);
  693. var token = tokenizer.getNextToken();
  694. var shiftedToken = null;
  695. do {
  696. if (!token) {
  697. // Restore options.
  698. yy.options = globalOptions;
  699. unexpectedEndOfInput();
  700. }
  701. var state = stack[stack.length - 1];
  702. var column = tokens[token.type];
  703. if (!table[state].hasOwnProperty(column)) {
  704. yy.options = globalOptions;
  705. unexpectedToken(token);
  706. }
  707. var entry = table[state][column];
  708. // Shift action.
  709. if (entry[0] === 's') {
  710. var _loc2 = null;
  711. if (yy.options.captureLocations) {
  712. _loc2 = {
  713. startOffset: token.startOffset,
  714. endOffset: token.endOffset,
  715. startLine: token.startLine,
  716. endLine: token.endLine,
  717. startColumn: token.startColumn,
  718. endColumn: token.endColumn
  719. };
  720. }
  721. shiftedToken = this.onShift(token);
  722. stack.push({ symbol: tokens[shiftedToken.type], semanticValue: shiftedToken.value, loc: _loc2 }, Number(entry.slice(1)));
  723. token = tokenizer.getNextToken();
  724. }
  725. // Reduce action.
  726. else if (entry[0] === 'r') {
  727. var productionNumber = entry.slice(1);
  728. var production = productions[productionNumber];
  729. var hasSemanticAction = typeof production[2] === 'function';
  730. var semanticValueArgs = hasSemanticAction ? [] : null;
  731. var locationArgs = hasSemanticAction && yy.options.captureLocations ? [] : null;
  732. if (production[1] !== 0) {
  733. var rhsLength = production[1];
  734. while (rhsLength-- > 0) {
  735. stack.pop();
  736. var stackEntry = stack.pop();
  737. if (hasSemanticAction) {
  738. semanticValueArgs.unshift(stackEntry.semanticValue);
  739. if (locationArgs) {
  740. locationArgs.unshift(stackEntry.loc);
  741. }
  742. }
  743. }
  744. }
  745. var reduceStackEntry = { symbol: production[0] };
  746. if (hasSemanticAction) {
  747. yytext = shiftedToken ? shiftedToken.value : null;
  748. yyleng = shiftedToken ? shiftedToken.value.length : null;
  749. var semanticActionArgs = locationArgs !== null ? semanticValueArgs.concat(locationArgs) : semanticValueArgs;
  750. production[2].apply(production, _toConsumableArray(semanticActionArgs));
  751. reduceStackEntry.semanticValue = __;
  752. if (locationArgs) {
  753. reduceStackEntry.loc = __loc;
  754. }
  755. }
  756. var nextState = stack[stack.length - 1];
  757. var symbolToReduceWith = production[0];
  758. stack.push(reduceStackEntry, table[nextState][symbolToReduceWith]);
  759. }
  760. // Accept.
  761. else if (entry === 'acc') {
  762. stack.pop();
  763. var parsed = stack.pop();
  764. if (stack.length !== 1 || stack[0] !== 0 || tokenizer.hasMoreTokens()) {
  765. // Restore options.
  766. yy.options = globalOptions;
  767. unexpectedToken(token);
  768. }
  769. if (parsed.hasOwnProperty('semanticValue')) {
  770. yy.options = globalOptions;
  771. yyparse.onParseEnd(parsed.semanticValue);
  772. return parsed.semanticValue;
  773. }
  774. yyparse.onParseEnd();
  775. // Restore options.
  776. yy.options = globalOptions;
  777. return true;
  778. }
  779. } while (tokenizer.hasMoreTokens() || stack.length > 1);
  780. },
  781. setTokenizer: function setTokenizer(customTokenizer) {
  782. tokenizer = customTokenizer;
  783. return yyparse;
  784. },
  785. getTokenizer: function getTokenizer() {
  786. return tokenizer;
  787. },
  788. onParseBegin: function onParseBegin(string, tokenizer, options) {},
  789. onParseEnd: function onParseEnd(parsed) {},
  790. /**
  791. * Allows analyzing, and transforming shifted token. Default implementation
  792. * just passes the token through.
  793. */
  794. onShift: function onShift(token) {
  795. return token;
  796. }
  797. };
  798. /**
  799. * Tracks capturing groups.
  800. */
  801. var capturingGroupsCount = 0;
  802. /**
  803. * Tracks named groups.
  804. */
  805. var namedGroups = {};
  806. /**
  807. * Parsing string.
  808. */
  809. var parsingString = '';
  810. yyparse.onParseBegin = function (string, lexer) {
  811. parsingString = string;
  812. capturingGroupsCount = 0;
  813. namedGroups = {};
  814. var lastSlash = string.lastIndexOf('/');
  815. var flags = string.slice(lastSlash);
  816. if (flags.includes('x') && flags.includes('u')) {
  817. lexer.pushState('xu');
  818. } else {
  819. if (flags.includes('x')) {
  820. lexer.pushState('x');
  821. }
  822. if (flags.includes('u')) {
  823. lexer.pushState('u');
  824. }
  825. }
  826. };
  827. /**
  828. * On shifting `(` remember its number to used on reduce.
  829. */
  830. yyparse.onShift = function (token) {
  831. if (token.type === 'L_PAREN' || token.type === 'NAMED_CAPTURE_GROUP') {
  832. token.value = new String(token.value);
  833. token.value.groupNumber = ++capturingGroupsCount;
  834. }
  835. return token;
  836. };
  837. /**
  838. * Extracts ranges from the range string.
  839. */
  840. function getRange(text) {
  841. var range = text.match(/\d+/g).map(Number);
  842. if (Number.isFinite(range[1]) && range[1] < range[0]) {
  843. throw new SyntaxError('Numbers out of order in ' + text + ' quantifier');
  844. }
  845. return range;
  846. }
  847. /**
  848. * Checks class range
  849. */
  850. function checkClassRange(from, to) {
  851. if (from.kind === 'control' || to.kind === 'control' || !isNaN(from.codePoint) && !isNaN(to.codePoint) && from.codePoint > to.codePoint) {
  852. throw new SyntaxError('Range ' + from.value + '-' + to.value + ' out of order in character class');
  853. }
  854. }
  855. // ---------------------- Unicode property -------------------------------------------
  856. var unicodeProperties = require('../unicode/parser-unicode-properties.js');
  857. /**
  858. * Unicode property.
  859. */
  860. function UnicodeProperty(matched, loc) {
  861. var negative = matched[1] === 'P';
  862. var separatorIdx = matched.indexOf('=');
  863. var name = matched.slice(3, separatorIdx !== -1 ? separatorIdx : -1);
  864. var value = void 0;
  865. // General_Category allows using only value as a shorthand.
  866. var isShorthand = separatorIdx === -1 && unicodeProperties.isGeneralCategoryValue(name);
  867. // Binary propery name.
  868. var isBinaryProperty = separatorIdx === -1 && unicodeProperties.isBinaryPropertyName(name);
  869. if (isShorthand) {
  870. value = name;
  871. name = 'General_Category';
  872. } else if (isBinaryProperty) {
  873. value = name;
  874. } else {
  875. if (!unicodeProperties.isValidName(name)) {
  876. throw new SyntaxError('Invalid unicode property name: ' + name + '.');
  877. }
  878. value = matched.slice(separatorIdx + 1, -1);
  879. if (!unicodeProperties.isValidValue(name, value)) {
  880. throw new SyntaxError('Invalid ' + name + ' unicode property value: ' + value + '.');
  881. }
  882. }
  883. return Node({
  884. type: 'UnicodeProperty',
  885. name: name,
  886. value: value,
  887. negative: negative,
  888. shorthand: isShorthand,
  889. binary: isBinaryProperty,
  890. canonicalName: unicodeProperties.getCanonicalName(name) || name,
  891. canonicalValue: unicodeProperties.getCanonicalValue(value) || value
  892. }, loc);
  893. }
  894. // ----------------------------------------------------------------------------------
  895. /**
  896. * Creates a character node.
  897. */
  898. function Char(value, kind, loc) {
  899. var symbol = void 0;
  900. var codePoint = void 0;
  901. switch (kind) {
  902. case 'decimal':
  903. {
  904. codePoint = Number(value.slice(1));
  905. symbol = String.fromCodePoint(codePoint);
  906. break;
  907. }
  908. case 'oct':
  909. {
  910. codePoint = parseInt(value.slice(1), 8);
  911. symbol = String.fromCodePoint(codePoint);
  912. break;
  913. }
  914. case 'hex':
  915. case 'unicode':
  916. {
  917. if (value.lastIndexOf('\\u') > 0) {
  918. var _value$split$slice = value.split('\\u').slice(1),
  919. _value$split$slice2 = _slicedToArray(_value$split$slice, 2),
  920. lead = _value$split$slice2[0],
  921. trail = _value$split$slice2[1];
  922. lead = parseInt(lead, 16);
  923. trail = parseInt(trail, 16);
  924. codePoint = (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000;
  925. symbol = String.fromCodePoint(codePoint);
  926. } else {
  927. var hex = value.slice(2).replace('{', '');
  928. codePoint = parseInt(hex, 16);
  929. if (codePoint > 0x10ffff) {
  930. throw new SyntaxError('Bad character escape sequence: ' + value);
  931. }
  932. symbol = String.fromCodePoint(codePoint);
  933. }
  934. break;
  935. }
  936. case 'meta':
  937. {
  938. switch (value) {
  939. case '\\t':
  940. symbol = '\t';
  941. codePoint = symbol.codePointAt(0);
  942. break;
  943. case '\\n':
  944. symbol = '\n';
  945. codePoint = symbol.codePointAt(0);
  946. break;
  947. case '\\r':
  948. symbol = '\r';
  949. codePoint = symbol.codePointAt(0);
  950. break;
  951. case '\\v':
  952. symbol = '\v';
  953. codePoint = symbol.codePointAt(0);
  954. break;
  955. case '\\f':
  956. symbol = '\f';
  957. codePoint = symbol.codePointAt(0);
  958. break;
  959. case '\\b':
  960. symbol = '\b';
  961. codePoint = symbol.codePointAt(0);
  962. case '\\0':
  963. symbol = '\0';
  964. codePoint = 0;
  965. case '.':
  966. symbol = '.';
  967. codePoint = NaN;
  968. break;
  969. default:
  970. codePoint = NaN;
  971. }
  972. break;
  973. }
  974. case 'simple':
  975. {
  976. symbol = value;
  977. codePoint = symbol.codePointAt(0);
  978. break;
  979. }
  980. }
  981. return Node({
  982. type: 'Char',
  983. value: value,
  984. kind: kind,
  985. symbol: symbol,
  986. codePoint: codePoint
  987. }, loc);
  988. }
  989. /**
  990. * Valid flags per current ECMAScript spec and
  991. * stage 3+ proposals.
  992. */
  993. var validFlags = 'gimsuxy';
  994. /**
  995. * Checks the flags are valid, and that
  996. * we don't duplicate flags.
  997. */
  998. function checkFlags(flags) {
  999. var seen = new Set();
  1000. var _iteratorNormalCompletion = true;
  1001. var _didIteratorError = false;
  1002. var _iteratorError = undefined;
  1003. try {
  1004. for (var _iterator = flags[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  1005. var flag = _step.value;
  1006. if (seen.has(flag) || !validFlags.includes(flag)) {
  1007. throw new SyntaxError('Invalid flags: ' + flags);
  1008. }
  1009. seen.add(flag);
  1010. }
  1011. } catch (err) {
  1012. _didIteratorError = true;
  1013. _iteratorError = err;
  1014. } finally {
  1015. try {
  1016. if (!_iteratorNormalCompletion && _iterator.return) {
  1017. _iterator.return();
  1018. }
  1019. } finally {
  1020. if (_didIteratorError) {
  1021. throw _iteratorError;
  1022. }
  1023. }
  1024. }
  1025. return flags.split('').sort().join('');
  1026. }
  1027. /**
  1028. * Parses patterns like \1, \2, etc. either as a backreference
  1029. * to a group, or a deciaml char code.
  1030. */
  1031. function GroupRefOrDecChar(text, textLoc) {
  1032. var reference = Number(text.slice(1));
  1033. if (reference > 0 && reference <= capturingGroupsCount) {
  1034. return Node({
  1035. type: 'Backreference',
  1036. kind: 'number',
  1037. number: reference,
  1038. reference: reference
  1039. }, textLoc);
  1040. }
  1041. return Char(text, 'decimal', textLoc);
  1042. }
  1043. /**
  1044. * Unicode names.
  1045. */
  1046. var uRe = /^\\u[0-9a-fA-F]{4}/;
  1047. var ucpRe = /^\\u\{[0-9a-fA-F]{1,}\}/;
  1048. /**
  1049. * Validates Unicode group name.
  1050. */
  1051. function validateUnicodeGroupName(name, state) {
  1052. var isUnicodeName = uRe.test(name) || ucpRe.test(name);
  1053. var isUnicodeState = state === 'u' || state === 'xu' || state === 'u_class';
  1054. if (isUnicodeName && !isUnicodeState) {
  1055. throw new SyntaxError('invalid group Unicode name "' + name + '", use `u` flag.');
  1056. }
  1057. }
  1058. /**
  1059. * Extracts from `\k<foo>` pattern either a backreference
  1060. * to a named capturing group (if it presents), or parses it
  1061. * as a list of char: `\k`, `<`, `f`, etc.
  1062. */
  1063. function NamedGroupRefOrChars(text, textLoc) {
  1064. var groupName = text.slice(3, -1);
  1065. if (namedGroups.hasOwnProperty(groupName)) {
  1066. return Node({
  1067. type: 'Backreference',
  1068. kind: 'name',
  1069. number: namedGroups[groupName],
  1070. reference: groupName
  1071. }, textLoc);
  1072. }
  1073. // Else `\k<foo>` should be parsed as a list of `Char`s.
  1074. // This is really a 0.01% edge case, but we should handle it.
  1075. var startOffset = null;
  1076. var startLine = null;
  1077. var endLine = null;
  1078. var startColumn = null;
  1079. if (textLoc) {
  1080. startOffset = textLoc.startOffset;
  1081. startLine = textLoc.startLine;
  1082. endLine = textLoc.endLine;
  1083. startColumn = textLoc.startColumn;
  1084. }
  1085. var charRe = /^[\w$<>]/;
  1086. var loc = void 0;
  1087. var chars = [
  1088. // Init to first \k, taking 2 symbols.
  1089. Char(text.slice(1, 2), 'simple', startOffset ? {
  1090. startLine: startLine,
  1091. endLine: endLine,
  1092. startColumn: startColumn,
  1093. startOffset: startOffset,
  1094. endOffset: startOffset += 2,
  1095. endColumn: startColumn += 2
  1096. } : null)];
  1097. // For \k
  1098. chars[0].escaped = true;
  1099. // Other symbols.
  1100. text = text.slice(2);
  1101. while (text.length > 0) {
  1102. var matched = null;
  1103. // Unicode, \u003B or \u{003B}
  1104. if ((matched = text.match(uRe)) || (matched = text.match(ucpRe))) {
  1105. if (startOffset) {
  1106. loc = {
  1107. startLine: startLine,
  1108. endLine: endLine,
  1109. startColumn: startColumn,
  1110. startOffset: startOffset,
  1111. endOffset: startOffset += matched[0].length,
  1112. endColumn: startColumn += matched[0].length
  1113. };
  1114. }
  1115. chars.push(Char(matched[0], 'unicode', loc));
  1116. text = text.slice(matched[0].length);
  1117. }
  1118. // Simple char.
  1119. else if (matched = text.match(charRe)) {
  1120. if (startOffset) {
  1121. loc = {
  1122. startLine: startLine,
  1123. endLine: endLine,
  1124. startColumn: startColumn,
  1125. startOffset: startOffset,
  1126. endOffset: ++startOffset,
  1127. endColumn: ++startColumn
  1128. };
  1129. }
  1130. chars.push(Char(matched[0], 'simple', loc));
  1131. text = text.slice(1);
  1132. }
  1133. }
  1134. return chars;
  1135. }
  1136. /**
  1137. * Creates an AST node with a location.
  1138. */
  1139. function Node(node, loc) {
  1140. if (yy.options.captureLocations) {
  1141. node.loc = {
  1142. source: parsingString.slice(loc.startOffset, loc.endOffset),
  1143. start: {
  1144. line: loc.startLine,
  1145. column: loc.startColumn,
  1146. offset: loc.startOffset
  1147. },
  1148. end: {
  1149. line: loc.endLine,
  1150. column: loc.endColumn,
  1151. offset: loc.endOffset
  1152. }
  1153. };
  1154. }
  1155. return node;
  1156. }
  1157. /**
  1158. * Creates location node.
  1159. */
  1160. function loc(start, end) {
  1161. if (!yy.options.captureLocations) {
  1162. return null;
  1163. }
  1164. return {
  1165. startOffset: start.startOffset,
  1166. endOffset: end.endOffset,
  1167. startLine: start.startLine,
  1168. endLine: end.endLine,
  1169. startColumn: start.startColumn,
  1170. endColumn: end.endColumn
  1171. };
  1172. }
  1173. function unexpectedToken(token) {
  1174. if (token.type === EOF) {
  1175. unexpectedEndOfInput();
  1176. }
  1177. tokenizer.throwUnexpectedToken(token.value, token.startLine, token.startColumn);
  1178. }
  1179. function unexpectedEndOfInput() {
  1180. parseError('Unexpected end of input.');
  1181. }
  1182. function parseError(message) {
  1183. throw new SyntaxError(message);
  1184. }
  1185. module.exports = yyparse;