PEG.grammarParser = (function(){ /* Generated by PEG.js (http://pegjs.majda.cz/). */ var result = { /* * Parses the input with a generated parser. If the parsing is successfull, * returns a value explicitly or implicitly specified by the grammar from * which the parser was generated (see |PEG.buildParser|). If the parsing is * unsuccessful, throws |PEG.grammarParser.SyntaxError| describing the error. */ parse: function(input) { var pos = 0; var rightmostMatchFailuresPos = 0; var rightmostMatchFailuresExpected = []; var cache = {}; function quoteString(s) { /* * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a * string literal except for the closing quote character, backslash, * carriage return, line separator, paragraph separator, and line feed. * Any character may appear in the form of an escape sequence. */ return '"' + s .replace(/\\/g, '\\\\') // backslash .replace(/"/g, '\\"') // closing quote character .replace(/\r/g, '\\r') // carriage return .replace(/\u2028/g, '\\u2028') // line separator .replace(/\u2029/g, '\\u2029') // paragraph separator .replace(/\n/g, '\\n') // line feed + '"'; } function arrayContains(array, value) { /* * Stupid IE does not have Array.prototype.indexOf, otherwise this * function would be a one-liner. */ var length = array.length; for (var i = 0; i < length; i++) { if (array[i] === value) { return true; } } return false; } function matchFailed(failure) { if (pos < rightmostMatchFailuresPos) { return; } if (pos > rightmostMatchFailuresPos) { rightmostMatchFailuresPos = pos; rightmostMatchFailuresExpected = []; } if (!arrayContains(rightmostMatchFailuresExpected, failure)) { rightmostMatchFailuresExpected.push(failure); } } function parse_grammar(context) { var cacheKey = "grammar" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos0 = pos; var result2 = parse___(context); if (result2 !== null) { var result6 = parse_initializer(context); var result3 = result6 !== null ? result6 : ''; if (result3 !== null) { var result5 = parse_rule(context); if (result5 !== null) { var result4 = []; while (result5 !== null) { result4.push(result5); var result5 = parse_rule(context); } } else { var result4 = null; } if (result4 !== null) { var result1 = [result2, result3, result4]; } else { var result1 = null; pos = savedPos0; } } else { var result1 = null; pos = savedPos0; } } else { var result1 = null; pos = savedPos0; } var result0 = result1 !== null ? (function(initializer, rules) { var rulesConverted = {}; PEG.ArrayUtils.each(rules, function(rule) { rulesConverted[rule.name] = rule; }); return { initializer: initializer !== "" ? initializer : null, rules: rulesConverted } })(result1[1], result1[2]) : null; cache[cacheKey] = { nextPos: pos, result: result0 }; return result0; } function parse_initializer(context) { var cacheKey = "initializer" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos1 = pos; var result9 = parse_action(context); if (result9 !== null) { var result11 = parse_semicolon(context); var result10 = result11 !== null ? result11 : ''; if (result10 !== null) { var result8 = [result9, result10]; } else { var result8 = null; pos = savedPos1; } } else { var result8 = null; pos = savedPos1; } var result7 = result8 !== null ? (function(code) { return { type: "initializer", code: code }; })(result8[0]) : null; cache[cacheKey] = { nextPos: pos, result: result7 }; return result7; } function parse_rule(context) { var cacheKey = "rule" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos2 = pos; var result14 = parse_identifier(context); if (result14 !== null) { var result21 = parse_literal(context); if (result21 !== null) { var result15 = result21; } else { if (input.substr(pos, 0) === "") { var result20 = ""; pos += 0; } else { var result20 = null; if (context.reportMatchFailures) { matchFailed(quoteString("")); } } if (result20 !== null) { var result15 = result20; } else { var result15 = null;; }; } if (result15 !== null) { var result16 = parse_equals(context); if (result16 !== null) { var result17 = parse_choice(context); if (result17 !== null) { var result19 = parse_semicolon(context); var result18 = result19 !== null ? result19 : ''; if (result18 !== null) { var result13 = [result14, result15, result16, result17, result18]; } else { var result13 = null; pos = savedPos2; } } else { var result13 = null; pos = savedPos2; } } else { var result13 = null; pos = savedPos2; } } else { var result13 = null; pos = savedPos2; } } else { var result13 = null; pos = savedPos2; } var result12 = result13 !== null ? (function(name, displayName, expression) { return { type: "rule", name: name, displayName: displayName !== "" ? displayName : null, expression: expression }; })(result13[0], result13[1], result13[3]) : null; cache[cacheKey] = { nextPos: pos, result: result12 }; return result12; } function parse_choice(context) { var cacheKey = "choice" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos3 = pos; var result24 = parse_sequence(context); if (result24 !== null) { var result25 = []; var savedPos4 = pos; var result27 = parse_slash(context); if (result27 !== null) { var result28 = parse_sequence(context); if (result28 !== null) { var result26 = [result27, result28]; } else { var result26 = null; pos = savedPos4; } } else { var result26 = null; pos = savedPos4; } while (result26 !== null) { result25.push(result26); var savedPos4 = pos; var result27 = parse_slash(context); if (result27 !== null) { var result28 = parse_sequence(context); if (result28 !== null) { var result26 = [result27, result28]; } else { var result26 = null; pos = savedPos4; } } else { var result26 = null; pos = savedPos4; } } if (result25 !== null) { var result23 = [result24, result25]; } else { var result23 = null; pos = savedPos3; } } else { var result23 = null; pos = savedPos3; } var result22 = result23 !== null ? (function(head, tail) { if (tail.length > 0) { var alternatives = [head].concat(PEG.ArrayUtils.map( tail, function(element) { return element[1]; } )); return { type: "choice", alternatives: alternatives } } else { return head; } })(result23[0], result23[1]) : null; cache[cacheKey] = { nextPos: pos, result: result22 }; return result22; } function parse_sequence(context) { var cacheKey = "sequence" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos5 = pos; var result35 = []; var result37 = parse_labeled(context); while (result37 !== null) { result35.push(result37); var result37 = parse_labeled(context); } if (result35 !== null) { var result36 = parse_action(context); if (result36 !== null) { var result34 = [result35, result36]; } else { var result34 = null; pos = savedPos5; } } else { var result34 = null; pos = savedPos5; } var result33 = result34 !== null ? (function(elements, code) { var expression = elements.length != 1 ? { type: "sequence", elements: elements } : elements[0]; return { type: "action", expression: expression, code: code }; })(result34[0], result34[1]) : null; if (result33 !== null) { var result29 = result33; } else { var result31 = []; var result32 = parse_labeled(context); while (result32 !== null) { result31.push(result32); var result32 = parse_labeled(context); } var result30 = result31 !== null ? (function(elements) { return elements.length != 1 ? { type: "sequence", elements: elements } : elements[0]; })(result31) : null; if (result30 !== null) { var result29 = result30; } else { var result29 = null;; }; } cache[cacheKey] = { nextPos: pos, result: result29 }; return result29; } function parse_labeled(context) { var cacheKey = "labeled" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos6 = pos; var result42 = parse_identifier(context); if (result42 !== null) { var result43 = parse_colon(context); if (result43 !== null) { var result44 = parse_prefixed(context); if (result44 !== null) { var result41 = [result42, result43, result44]; } else { var result41 = null; pos = savedPos6; } } else { var result41 = null; pos = savedPos6; } } else { var result41 = null; pos = savedPos6; } var result40 = result41 !== null ? (function(label, expression) { return { type: "labeled", label: label, expression: expression }; })(result41[0], result41[2]) : null; if (result40 !== null) { var result38 = result40; } else { var result39 = parse_prefixed(context); if (result39 !== null) { var result38 = result39; } else { var result38 = null;; }; } cache[cacheKey] = { nextPos: pos, result: result38 }; return result38; } function parse_prefixed(context) { var cacheKey = "prefixed" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos8 = pos; var result53 = parse_and(context); if (result53 !== null) { var result54 = parse_suffixed(context); if (result54 !== null) { var result52 = [result53, result54]; } else { var result52 = null; pos = savedPos8; } } else { var result52 = null; pos = savedPos8; } var result51 = result52 !== null ? (function(expression) { return { type: "and_predicate", expression: expression }; })(result52[1]) : null; if (result51 !== null) { var result45 = result51; } else { var savedPos7 = pos; var result49 = parse_not(context); if (result49 !== null) { var result50 = parse_suffixed(context); if (result50 !== null) { var result48 = [result49, result50]; } else { var result48 = null; pos = savedPos7; } } else { var result48 = null; pos = savedPos7; } var result47 = result48 !== null ? (function(expression) { return { type: "not_predicate", expression: expression }; })(result48[1]) : null; if (result47 !== null) { var result45 = result47; } else { var result46 = parse_suffixed(context); if (result46 !== null) { var result45 = result46; } else { var result45 = null;; }; }; } cache[cacheKey] = { nextPos: pos, result: result45 }; return result45; } function parse_suffixed(context) { var cacheKey = "suffixed" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos11 = pos; var result67 = parse_primary(context); if (result67 !== null) { var result68 = parse_question(context); if (result68 !== null) { var result66 = [result67, result68]; } else { var result66 = null; pos = savedPos11; } } else { var result66 = null; pos = savedPos11; } var result65 = result66 !== null ? (function(expression) { return { type: "optional", expression: expression }; })(result66[0]) : null; if (result65 !== null) { var result55 = result65; } else { var savedPos10 = pos; var result63 = parse_primary(context); if (result63 !== null) { var result64 = parse_star(context); if (result64 !== null) { var result62 = [result63, result64]; } else { var result62 = null; pos = savedPos10; } } else { var result62 = null; pos = savedPos10; } var result61 = result62 !== null ? (function(expression) { return { type: "zero_or_more", expression: expression }; })(result62[0]) : null; if (result61 !== null) { var result55 = result61; } else { var savedPos9 = pos; var result59 = parse_primary(context); if (result59 !== null) { var result60 = parse_plus(context); if (result60 !== null) { var result58 = [result59, result60]; } else { var result58 = null; pos = savedPos9; } } else { var result58 = null; pos = savedPos9; } var result57 = result58 !== null ? (function(expression) { return { type: "one_or_more", expression: expression }; })(result58[0]) : null; if (result57 !== null) { var result55 = result57; } else { var result56 = parse_primary(context); if (result56 !== null) { var result55 = result56; } else { var result55 = null;; }; }; }; } cache[cacheKey] = { nextPos: pos, result: result55 }; return result55; } function parse_primary(context) { var cacheKey = "primary" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos13 = pos; var result82 = parse_identifier(context); if (result82 !== null) { var savedPos14 = pos; var savedReportMatchFailuresVar0 = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos15 = pos; var result88 = parse_literal(context); if (result88 !== null) { var result85 = result88; } else { if (input.substr(pos, 0) === "") { var result87 = ""; pos += 0; } else { var result87 = null; if (context.reportMatchFailures) { matchFailed(quoteString("")); } } if (result87 !== null) { var result85 = result87; } else { var result85 = null;; }; } if (result85 !== null) { var result86 = parse_equals(context); if (result86 !== null) { var result84 = [result85, result86]; } else { var result84 = null; pos = savedPos15; } } else { var result84 = null; pos = savedPos15; } context.reportMatchFailures = savedReportMatchFailuresVar0; if (result84 === null) { var result83 = ''; } else { var result83 = null; pos = savedPos14; } if (result83 !== null) { var result81 = [result82, result83]; } else { var result81 = null; pos = savedPos13; } } else { var result81 = null; pos = savedPos13; } var result80 = result81 !== null ? (function(name) { return { type: "rule_ref", name: name }; })(result81[0]) : null; if (result80 !== null) { var result69 = result80; } else { var result79 = parse_literal(context); var result78 = result79 !== null ? (function(value) { return { type: "literal", value: value }; })(result79) : null; if (result78 !== null) { var result69 = result78; } else { var result77 = parse_dot(context); var result76 = result77 !== null ? (function() { return { type: "any" }; })() : null; if (result76 !== null) { var result69 = result76; } else { var result75 = parse_class(context); if (result75 !== null) { var result69 = result75; } else { var savedPos12 = pos; var result72 = parse_lparen(context); if (result72 !== null) { var result73 = parse_choice(context); if (result73 !== null) { var result74 = parse_rparen(context); if (result74 !== null) { var result71 = [result72, result73, result74]; } else { var result71 = null; pos = savedPos12; } } else { var result71 = null; pos = savedPos12; } } else { var result71 = null; pos = savedPos12; } var result70 = result71 !== null ? (function(expression) { return expression; })(result71[1]) : null; if (result70 !== null) { var result69 = result70; } else { var result69 = null;; }; }; }; }; } cache[cacheKey] = { nextPos: pos, result: result69 }; return result69; } function parse_action(context) { var cacheKey = "action" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos16 = pos; var result91 = parse_braced(context); if (result91 !== null) { var result92 = parse___(context); if (result92 !== null) { var result90 = [result91, result92]; } else { var result90 = null; pos = savedPos16; } } else { var result90 = null; pos = savedPos16; } var result89 = result90 !== null ? (function(braced) { return braced.substr(1, braced.length - 2); })(result90[0]) : null; context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result89 === null) { matchFailed("action"); } cache[cacheKey] = { nextPos: pos, result: result89 }; return result89; } function parse_braced(context) { var cacheKey = "braced" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos17 = pos; if (input.substr(pos, 1) === "{") { var result95 = "{"; pos += 1; } else { var result95 = null; if (context.reportMatchFailures) { matchFailed(quoteString("{")); } } if (result95 !== null) { var result96 = []; var result100 = parse_braced(context); if (result100 !== null) { var result98 = result100; } else { var result99 = parse_nonBraceCharacter(context); if (result99 !== null) { var result98 = result99; } else { var result98 = null;; }; } while (result98 !== null) { result96.push(result98); var result100 = parse_braced(context); if (result100 !== null) { var result98 = result100; } else { var result99 = parse_nonBraceCharacter(context); if (result99 !== null) { var result98 = result99; } else { var result98 = null;; }; } } if (result96 !== null) { if (input.substr(pos, 1) === "}") { var result97 = "}"; pos += 1; } else { var result97 = null; if (context.reportMatchFailures) { matchFailed(quoteString("}")); } } if (result97 !== null) { var result94 = [result95, result96, result97]; } else { var result94 = null; pos = savedPos17; } } else { var result94 = null; pos = savedPos17; } } else { var result94 = null; pos = savedPos17; } var result93 = result94 !== null ? (function(parts) { return "{" + parts.join("") + "}"; })(result94[1]) : null; cache[cacheKey] = { nextPos: pos, result: result93 }; return result93; } function parse_nonBraceCharacters(context) { var cacheKey = "nonBraceCharacters" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var result103 = parse_nonBraceCharacter(context); if (result103 !== null) { var result102 = []; while (result103 !== null) { result102.push(result103); var result103 = parse_nonBraceCharacter(context); } } else { var result102 = null; } var result101 = result102 !== null ? (function(chars) { return chars.join(""); })(result102) : null; cache[cacheKey] = { nextPos: pos, result: result101 }; return result101; } function parse_nonBraceCharacter(context) { var cacheKey = "nonBraceCharacter" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } if (input.substr(pos).match(/^[^{}]/) !== null) { var result104 = input.charAt(pos); pos++; } else { var result104 = null; if (context.reportMatchFailures) { matchFailed("[^{}]"); } } cache[cacheKey] = { nextPos: pos, result: result104 }; return result104; } function parse_equals(context) { var cacheKey = "equals" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos18 = pos; if (input.substr(pos, 1) === "=") { var result107 = "="; pos += 1; } else { var result107 = null; if (context.reportMatchFailures) { matchFailed(quoteString("=")); } } if (result107 !== null) { var result108 = parse___(context); if (result108 !== null) { var result106 = [result107, result108]; } else { var result106 = null; pos = savedPos18; } } else { var result106 = null; pos = savedPos18; } var result105 = result106 !== null ? (function() { return "="; })() : null; cache[cacheKey] = { nextPos: pos, result: result105 }; return result105; } function parse_colon(context) { var cacheKey = "colon" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos19 = pos; if (input.substr(pos, 1) === ":") { var result111 = ":"; pos += 1; } else { var result111 = null; if (context.reportMatchFailures) { matchFailed(quoteString(":")); } } if (result111 !== null) { var result112 = parse___(context); if (result112 !== null) { var result110 = [result111, result112]; } else { var result110 = null; pos = savedPos19; } } else { var result110 = null; pos = savedPos19; } var result109 = result110 !== null ? (function() { return ":"; })() : null; cache[cacheKey] = { nextPos: pos, result: result109 }; return result109; } function parse_semicolon(context) { var cacheKey = "semicolon" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos20 = pos; if (input.substr(pos, 1) === ";") { var result115 = ";"; pos += 1; } else { var result115 = null; if (context.reportMatchFailures) { matchFailed(quoteString(";")); } } if (result115 !== null) { var result116 = parse___(context); if (result116 !== null) { var result114 = [result115, result116]; } else { var result114 = null; pos = savedPos20; } } else { var result114 = null; pos = savedPos20; } var result113 = result114 !== null ? (function() { return ";"; })() : null; cache[cacheKey] = { nextPos: pos, result: result113 }; return result113; } function parse_slash(context) { var cacheKey = "slash" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos21 = pos; if (input.substr(pos, 1) === "/") { var result119 = "/"; pos += 1; } else { var result119 = null; if (context.reportMatchFailures) { matchFailed(quoteString("/")); } } if (result119 !== null) { var result120 = parse___(context); if (result120 !== null) { var result118 = [result119, result120]; } else { var result118 = null; pos = savedPos21; } } else { var result118 = null; pos = savedPos21; } var result117 = result118 !== null ? (function() { return "/"; })() : null; cache[cacheKey] = { nextPos: pos, result: result117 }; return result117; } function parse_and(context) { var cacheKey = "and" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos22 = pos; if (input.substr(pos, 1) === "&") { var result123 = "&"; pos += 1; } else { var result123 = null; if (context.reportMatchFailures) { matchFailed(quoteString("&")); } } if (result123 !== null) { var result124 = parse___(context); if (result124 !== null) { var result122 = [result123, result124]; } else { var result122 = null; pos = savedPos22; } } else { var result122 = null; pos = savedPos22; } var result121 = result122 !== null ? (function() { return "&"; })() : null; cache[cacheKey] = { nextPos: pos, result: result121 }; return result121; } function parse_not(context) { var cacheKey = "not" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos23 = pos; if (input.substr(pos, 1) === "!") { var result127 = "!"; pos += 1; } else { var result127 = null; if (context.reportMatchFailures) { matchFailed(quoteString("!")); } } if (result127 !== null) { var result128 = parse___(context); if (result128 !== null) { var result126 = [result127, result128]; } else { var result126 = null; pos = savedPos23; } } else { var result126 = null; pos = savedPos23; } var result125 = result126 !== null ? (function() { return "!"; })() : null; cache[cacheKey] = { nextPos: pos, result: result125 }; return result125; } function parse_question(context) { var cacheKey = "question" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos24 = pos; if (input.substr(pos, 1) === "?") { var result131 = "?"; pos += 1; } else { var result131 = null; if (context.reportMatchFailures) { matchFailed(quoteString("?")); } } if (result131 !== null) { var result132 = parse___(context); if (result132 !== null) { var result130 = [result131, result132]; } else { var result130 = null; pos = savedPos24; } } else { var result130 = null; pos = savedPos24; } var result129 = result130 !== null ? (function() { return "?"; })() : null; cache[cacheKey] = { nextPos: pos, result: result129 }; return result129; } function parse_star(context) { var cacheKey = "star" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos25 = pos; if (input.substr(pos, 1) === "*") { var result135 = "*"; pos += 1; } else { var result135 = null; if (context.reportMatchFailures) { matchFailed(quoteString("*")); } } if (result135 !== null) { var result136 = parse___(context); if (result136 !== null) { var result134 = [result135, result136]; } else { var result134 = null; pos = savedPos25; } } else { var result134 = null; pos = savedPos25; } var result133 = result134 !== null ? (function() { return "*"; })() : null; cache[cacheKey] = { nextPos: pos, result: result133 }; return result133; } function parse_plus(context) { var cacheKey = "plus" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos26 = pos; if (input.substr(pos, 1) === "+") { var result139 = "+"; pos += 1; } else { var result139 = null; if (context.reportMatchFailures) { matchFailed(quoteString("+")); } } if (result139 !== null) { var result140 = parse___(context); if (result140 !== null) { var result138 = [result139, result140]; } else { var result138 = null; pos = savedPos26; } } else { var result138 = null; pos = savedPos26; } var result137 = result138 !== null ? (function() { return "+"; })() : null; cache[cacheKey] = { nextPos: pos, result: result137 }; return result137; } function parse_lparen(context) { var cacheKey = "lparen" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos27 = pos; if (input.substr(pos, 1) === "(") { var result143 = "("; pos += 1; } else { var result143 = null; if (context.reportMatchFailures) { matchFailed(quoteString("(")); } } if (result143 !== null) { var result144 = parse___(context); if (result144 !== null) { var result142 = [result143, result144]; } else { var result142 = null; pos = savedPos27; } } else { var result142 = null; pos = savedPos27; } var result141 = result142 !== null ? (function() { return "("; })() : null; cache[cacheKey] = { nextPos: pos, result: result141 }; return result141; } function parse_rparen(context) { var cacheKey = "rparen" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos28 = pos; if (input.substr(pos, 1) === ")") { var result147 = ")"; pos += 1; } else { var result147 = null; if (context.reportMatchFailures) { matchFailed(quoteString(")")); } } if (result147 !== null) { var result148 = parse___(context); if (result148 !== null) { var result146 = [result147, result148]; } else { var result146 = null; pos = savedPos28; } } else { var result146 = null; pos = savedPos28; } var result145 = result146 !== null ? (function() { return ")"; })() : null; cache[cacheKey] = { nextPos: pos, result: result145 }; return result145; } function parse_dot(context) { var cacheKey = "dot" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos29 = pos; if (input.substr(pos, 1) === ".") { var result151 = "."; pos += 1; } else { var result151 = null; if (context.reportMatchFailures) { matchFailed(quoteString(".")); } } if (result151 !== null) { var result152 = parse___(context); if (result152 !== null) { var result150 = [result151, result152]; } else { var result150 = null; pos = savedPos29; } } else { var result150 = null; pos = savedPos29; } var result149 = result150 !== null ? (function() { return "."; })() : null; cache[cacheKey] = { nextPos: pos, result: result149 }; return result149; } function parse_identifier(context) { var cacheKey = "identifier" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos30 = pos; var result165 = parse_letter(context); if (result165 !== null) { var result155 = result165; } else { if (input.substr(pos, 1) === "_") { var result164 = "_"; pos += 1; } else { var result164 = null; if (context.reportMatchFailures) { matchFailed(quoteString("_")); } } if (result164 !== null) { var result155 = result164; } else { if (input.substr(pos, 1) === "$") { var result163 = "$"; pos += 1; } else { var result163 = null; if (context.reportMatchFailures) { matchFailed(quoteString("$")); } } if (result163 !== null) { var result155 = result163; } else { var result155 = null;; }; }; } if (result155 !== null) { var result156 = []; var result162 = parse_letter(context); if (result162 !== null) { var result158 = result162; } else { var result161 = parse_digit(context); if (result161 !== null) { var result158 = result161; } else { if (input.substr(pos, 1) === "_") { var result160 = "_"; pos += 1; } else { var result160 = null; if (context.reportMatchFailures) { matchFailed(quoteString("_")); } } if (result160 !== null) { var result158 = result160; } else { if (input.substr(pos, 1) === "$") { var result159 = "$"; pos += 1; } else { var result159 = null; if (context.reportMatchFailures) { matchFailed(quoteString("$")); } } if (result159 !== null) { var result158 = result159; } else { var result158 = null;; }; }; }; } while (result158 !== null) { result156.push(result158); var result162 = parse_letter(context); if (result162 !== null) { var result158 = result162; } else { var result161 = parse_digit(context); if (result161 !== null) { var result158 = result161; } else { if (input.substr(pos, 1) === "_") { var result160 = "_"; pos += 1; } else { var result160 = null; if (context.reportMatchFailures) { matchFailed(quoteString("_")); } } if (result160 !== null) { var result158 = result160; } else { if (input.substr(pos, 1) === "$") { var result159 = "$"; pos += 1; } else { var result159 = null; if (context.reportMatchFailures) { matchFailed(quoteString("$")); } } if (result159 !== null) { var result158 = result159; } else { var result158 = null;; }; }; }; } } if (result156 !== null) { var result157 = parse___(context); if (result157 !== null) { var result154 = [result155, result156, result157]; } else { var result154 = null; pos = savedPos30; } } else { var result154 = null; pos = savedPos30; } } else { var result154 = null; pos = savedPos30; } var result153 = result154 !== null ? (function(head, tail) { return head + tail.join(""); })(result154[0], result154[1]) : null; context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result153 === null) { matchFailed("identifier"); } cache[cacheKey] = { nextPos: pos, result: result153 }; return result153; } function parse_literal(context) { var cacheKey = "literal" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos31 = pos; var result171 = parse_doubleQuotedLiteral(context); if (result171 !== null) { var result168 = result171; } else { var result170 = parse_singleQuotedLiteral(context); if (result170 !== null) { var result168 = result170; } else { var result168 = null;; }; } if (result168 !== null) { var result169 = parse___(context); if (result169 !== null) { var result167 = [result168, result169]; } else { var result167 = null; pos = savedPos31; } } else { var result167 = null; pos = savedPos31; } var result166 = result167 !== null ? (function(literal) { return literal; })(result167[0]) : null; context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result166 === null) { matchFailed("literal"); } cache[cacheKey] = { nextPos: pos, result: result166 }; return result166; } function parse_doubleQuotedLiteral(context) { var cacheKey = "doubleQuotedLiteral" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos32 = pos; if (input.substr(pos, 1) === "\"") { var result174 = "\""; pos += 1; } else { var result174 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\"")); } } if (result174 !== null) { var result175 = []; var result177 = parse_doubleQuotedCharacter(context); while (result177 !== null) { result175.push(result177); var result177 = parse_doubleQuotedCharacter(context); } if (result175 !== null) { if (input.substr(pos, 1) === "\"") { var result176 = "\""; pos += 1; } else { var result176 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\"")); } } if (result176 !== null) { var result173 = [result174, result175, result176]; } else { var result173 = null; pos = savedPos32; } } else { var result173 = null; pos = savedPos32; } } else { var result173 = null; pos = savedPos32; } var result172 = result173 !== null ? (function(chars) { return chars.join(""); })(result173[1]) : null; cache[cacheKey] = { nextPos: pos, result: result172 }; return result172; } function parse_doubleQuotedCharacter(context) { var cacheKey = "doubleQuotedCharacter" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var result184 = parse_simpleDoubleQuotedCharacter(context); if (result184 !== null) { var result178 = result184; } else { var result183 = parse_simpleEscapeSequence(context); if (result183 !== null) { var result178 = result183; } else { var result182 = parse_zeroEscapeSequence(context); if (result182 !== null) { var result178 = result182; } else { var result181 = parse_hexEscapeSequence(context); if (result181 !== null) { var result178 = result181; } else { var result180 = parse_unicodeEscapeSequence(context); if (result180 !== null) { var result178 = result180; } else { var result179 = parse_eolEscapeSequence(context); if (result179 !== null) { var result178 = result179; } else { var result178 = null;; }; }; }; }; }; } cache[cacheKey] = { nextPos: pos, result: result178 }; return result178; } function parse_simpleDoubleQuotedCharacter(context) { var cacheKey = "simpleDoubleQuotedCharacter" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos33 = pos; var savedPos34 = pos; var savedReportMatchFailuresVar1 = context.reportMatchFailures; context.reportMatchFailures = false; if (input.substr(pos, 1) === "\"") { var result192 = "\""; pos += 1; } else { var result192 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\"")); } } if (result192 !== null) { var result189 = result192; } else { if (input.substr(pos, 1) === "\\") { var result191 = "\\"; pos += 1; } else { var result191 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\\")); } } if (result191 !== null) { var result189 = result191; } else { var result190 = parse_eolChar(context); if (result190 !== null) { var result189 = result190; } else { var result189 = null;; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar1; if (result189 === null) { var result187 = ''; } else { var result187 = null; pos = savedPos34; } if (result187 !== null) { if (input.length > pos) { var result188 = input.charAt(pos); pos++; } else { var result188 = null; if (context.reportMatchFailures) { matchFailed('any character'); } } if (result188 !== null) { var result186 = [result187, result188]; } else { var result186 = null; pos = savedPos33; } } else { var result186 = null; pos = savedPos33; } var result185 = result186 !== null ? (function(char_) { return char_; })(result186[1]) : null; cache[cacheKey] = { nextPos: pos, result: result185 }; return result185; } function parse_singleQuotedLiteral(context) { var cacheKey = "singleQuotedLiteral" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos35 = pos; if (input.substr(pos, 1) === "'") { var result195 = "'"; pos += 1; } else { var result195 = null; if (context.reportMatchFailures) { matchFailed(quoteString("'")); } } if (result195 !== null) { var result196 = []; var result198 = parse_singleQuotedCharacter(context); while (result198 !== null) { result196.push(result198); var result198 = parse_singleQuotedCharacter(context); } if (result196 !== null) { if (input.substr(pos, 1) === "'") { var result197 = "'"; pos += 1; } else { var result197 = null; if (context.reportMatchFailures) { matchFailed(quoteString("'")); } } if (result197 !== null) { var result194 = [result195, result196, result197]; } else { var result194 = null; pos = savedPos35; } } else { var result194 = null; pos = savedPos35; } } else { var result194 = null; pos = savedPos35; } var result193 = result194 !== null ? (function(chars) { return chars.join(""); })(result194[1]) : null; cache[cacheKey] = { nextPos: pos, result: result193 }; return result193; } function parse_singleQuotedCharacter(context) { var cacheKey = "singleQuotedCharacter" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var result205 = parse_simpleSingleQuotedCharacter(context); if (result205 !== null) { var result199 = result205; } else { var result204 = parse_simpleEscapeSequence(context); if (result204 !== null) { var result199 = result204; } else { var result203 = parse_zeroEscapeSequence(context); if (result203 !== null) { var result199 = result203; } else { var result202 = parse_hexEscapeSequence(context); if (result202 !== null) { var result199 = result202; } else { var result201 = parse_unicodeEscapeSequence(context); if (result201 !== null) { var result199 = result201; } else { var result200 = parse_eolEscapeSequence(context); if (result200 !== null) { var result199 = result200; } else { var result199 = null;; }; }; }; }; }; } cache[cacheKey] = { nextPos: pos, result: result199 }; return result199; } function parse_simpleSingleQuotedCharacter(context) { var cacheKey = "simpleSingleQuotedCharacter" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos36 = pos; var savedPos37 = pos; var savedReportMatchFailuresVar2 = context.reportMatchFailures; context.reportMatchFailures = false; if (input.substr(pos, 1) === "'") { var result213 = "'"; pos += 1; } else { var result213 = null; if (context.reportMatchFailures) { matchFailed(quoteString("'")); } } if (result213 !== null) { var result210 = result213; } else { if (input.substr(pos, 1) === "\\") { var result212 = "\\"; pos += 1; } else { var result212 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\\")); } } if (result212 !== null) { var result210 = result212; } else { var result211 = parse_eolChar(context); if (result211 !== null) { var result210 = result211; } else { var result210 = null;; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar2; if (result210 === null) { var result208 = ''; } else { var result208 = null; pos = savedPos37; } if (result208 !== null) { if (input.length > pos) { var result209 = input.charAt(pos); pos++; } else { var result209 = null; if (context.reportMatchFailures) { matchFailed('any character'); } } if (result209 !== null) { var result207 = [result208, result209]; } else { var result207 = null; pos = savedPos36; } } else { var result207 = null; pos = savedPos36; } var result206 = result207 !== null ? (function(char_) { return char_; })(result207[1]) : null; cache[cacheKey] = { nextPos: pos, result: result206 }; return result206; } function parse_class(context) { var cacheKey = "class" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos38 = pos; if (input.substr(pos, 1) === "[") { var result216 = "["; pos += 1; } else { var result216 = null; if (context.reportMatchFailures) { matchFailed(quoteString("[")); } } if (result216 !== null) { if (input.substr(pos, 1) === "^") { var result224 = "^"; pos += 1; } else { var result224 = null; if (context.reportMatchFailures) { matchFailed(quoteString("^")); } } var result217 = result224 !== null ? result224 : ''; if (result217 !== null) { var result218 = []; var result223 = parse_classCharacterRange(context); if (result223 !== null) { var result221 = result223; } else { var result222 = parse_classCharacter(context); if (result222 !== null) { var result221 = result222; } else { var result221 = null;; }; } while (result221 !== null) { result218.push(result221); var result223 = parse_classCharacterRange(context); if (result223 !== null) { var result221 = result223; } else { var result222 = parse_classCharacter(context); if (result222 !== null) { var result221 = result222; } else { var result221 = null;; }; } } if (result218 !== null) { if (input.substr(pos, 1) === "]") { var result219 = "]"; pos += 1; } else { var result219 = null; if (context.reportMatchFailures) { matchFailed(quoteString("]")); } } if (result219 !== null) { var result220 = parse___(context); if (result220 !== null) { var result215 = [result216, result217, result218, result219, result220]; } else { var result215 = null; pos = savedPos38; } } else { var result215 = null; pos = savedPos38; } } else { var result215 = null; pos = savedPos38; } } else { var result215 = null; pos = savedPos38; } } else { var result215 = null; pos = savedPos38; } var result214 = result215 !== null ? (function(inverted, parts) { partsConverted = PEG.ArrayUtils.map(parts, function(part) { return part.data; }); rawText = "[" + inverted + PEG.ArrayUtils.map(parts, function(part) { return part.rawText; }).join("") + "]"; return { type: "class", inverted: inverted === "^", parts: partsConverted, // FIXME: Get the raw text from the input directly. rawText: rawText }; })(result215[1], result215[2]) : null; context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result214 === null) { matchFailed("character class"); } cache[cacheKey] = { nextPos: pos, result: result214 }; return result214; } function parse_classCharacterRange(context) { var cacheKey = "classCharacterRange" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos39 = pos; var result227 = parse_classCharacter(context); if (result227 !== null) { if (input.substr(pos, 1) === "-") { var result228 = "-"; pos += 1; } else { var result228 = null; if (context.reportMatchFailures) { matchFailed(quoteString("-")); } } if (result228 !== null) { var result229 = parse_classCharacter(context); if (result229 !== null) { var result226 = [result227, result228, result229]; } else { var result226 = null; pos = savedPos39; } } else { var result226 = null; pos = savedPos39; } } else { var result226 = null; pos = savedPos39; } var result225 = result226 !== null ? (function(begin, end) { if (begin.data.charCodeAt(0) > end.data.charCodeAt(0)) { throw new this.SyntaxError( "Invalid character range: " + begin.rawText + "-" + end.rawText + "." ); } return { data: [begin.data, end.data], // FIXME: Get the raw text from the input directly. rawText: begin.rawText + "-" + end.rawText } })(result226[0], result226[2]) : null; cache[cacheKey] = { nextPos: pos, result: result225 }; return result225; } function parse_classCharacter(context) { var cacheKey = "classCharacter" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var result231 = parse_bracketDelimitedCharacter(context); var result230 = result231 !== null ? (function(char_) { return { data: char_, // FIXME: Get the raw text from the input directly. rawText: PEG.RegExpUtils.quoteForClass(char_) }; })(result231) : null; cache[cacheKey] = { nextPos: pos, result: result230 }; return result230; } function parse_bracketDelimitedCharacter(context) { var cacheKey = "bracketDelimitedCharacter" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var result238 = parse_simpleBracketDelimitedCharacter(context); if (result238 !== null) { var result232 = result238; } else { var result237 = parse_simpleEscapeSequence(context); if (result237 !== null) { var result232 = result237; } else { var result236 = parse_zeroEscapeSequence(context); if (result236 !== null) { var result232 = result236; } else { var result235 = parse_hexEscapeSequence(context); if (result235 !== null) { var result232 = result235; } else { var result234 = parse_unicodeEscapeSequence(context); if (result234 !== null) { var result232 = result234; } else { var result233 = parse_eolEscapeSequence(context); if (result233 !== null) { var result232 = result233; } else { var result232 = null;; }; }; }; }; }; } cache[cacheKey] = { nextPos: pos, result: result232 }; return result232; } function parse_simpleBracketDelimitedCharacter(context) { var cacheKey = "simpleBracketDelimitedCharacter" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos40 = pos; var savedPos41 = pos; var savedReportMatchFailuresVar3 = context.reportMatchFailures; context.reportMatchFailures = false; if (input.substr(pos, 1) === "]") { var result246 = "]"; pos += 1; } else { var result246 = null; if (context.reportMatchFailures) { matchFailed(quoteString("]")); } } if (result246 !== null) { var result243 = result246; } else { if (input.substr(pos, 1) === "\\") { var result245 = "\\"; pos += 1; } else { var result245 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\\")); } } if (result245 !== null) { var result243 = result245; } else { var result244 = parse_eolChar(context); if (result244 !== null) { var result243 = result244; } else { var result243 = null;; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar3; if (result243 === null) { var result241 = ''; } else { var result241 = null; pos = savedPos41; } if (result241 !== null) { if (input.length > pos) { var result242 = input.charAt(pos); pos++; } else { var result242 = null; if (context.reportMatchFailures) { matchFailed('any character'); } } if (result242 !== null) { var result240 = [result241, result242]; } else { var result240 = null; pos = savedPos40; } } else { var result240 = null; pos = savedPos40; } var result239 = result240 !== null ? (function(char_) { return char_; })(result240[1]) : null; cache[cacheKey] = { nextPos: pos, result: result239 }; return result239; } function parse_simpleEscapeSequence(context) { var cacheKey = "simpleEscapeSequence" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos42 = pos; if (input.substr(pos, 1) === "\\") { var result249 = "\\"; pos += 1; } else { var result249 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\\")); } } if (result249 !== null) { var savedPos43 = pos; var savedReportMatchFailuresVar4 = context.reportMatchFailures; context.reportMatchFailures = false; var result256 = parse_digit(context); if (result256 !== null) { var result252 = result256; } else { if (input.substr(pos, 1) === "x") { var result255 = "x"; pos += 1; } else { var result255 = null; if (context.reportMatchFailures) { matchFailed(quoteString("x")); } } if (result255 !== null) { var result252 = result255; } else { if (input.substr(pos, 1) === "u") { var result254 = "u"; pos += 1; } else { var result254 = null; if (context.reportMatchFailures) { matchFailed(quoteString("u")); } } if (result254 !== null) { var result252 = result254; } else { var result253 = parse_eolChar(context); if (result253 !== null) { var result252 = result253; } else { var result252 = null;; }; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar4; if (result252 === null) { var result250 = ''; } else { var result250 = null; pos = savedPos43; } if (result250 !== null) { if (input.length > pos) { var result251 = input.charAt(pos); pos++; } else { var result251 = null; if (context.reportMatchFailures) { matchFailed('any character'); } } if (result251 !== null) { var result248 = [result249, result250, result251]; } else { var result248 = null; pos = savedPos42; } } else { var result248 = null; pos = savedPos42; } } else { var result248 = null; pos = savedPos42; } var result247 = result248 !== null ? (function(char_) { return char_ .replace("b", "\b") .replace("f", "\f") .replace("n", "\n") .replace("r", "\r") .replace("t", "\t") .replace("v", "\x0B") // IE does not recognize "\v". })(result248[2]) : null; cache[cacheKey] = { nextPos: pos, result: result247 }; return result247; } function parse_zeroEscapeSequence(context) { var cacheKey = "zeroEscapeSequence" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos44 = pos; if (input.substr(pos, 2) === "\\0") { var result259 = "\\0"; pos += 2; } else { var result259 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\\0")); } } if (result259 !== null) { var savedPos45 = pos; var savedReportMatchFailuresVar5 = context.reportMatchFailures; context.reportMatchFailures = false; var result261 = parse_digit(context); context.reportMatchFailures = savedReportMatchFailuresVar5; if (result261 === null) { var result260 = ''; } else { var result260 = null; pos = savedPos45; } if (result260 !== null) { var result258 = [result259, result260]; } else { var result258 = null; pos = savedPos44; } } else { var result258 = null; pos = savedPos44; } var result257 = result258 !== null ? (function() { return "\0"; })() : null; cache[cacheKey] = { nextPos: pos, result: result257 }; return result257; } function parse_hexEscapeSequence(context) { var cacheKey = "hexEscapeSequence" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos46 = pos; if (input.substr(pos, 2) === "\\x") { var result264 = "\\x"; pos += 2; } else { var result264 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\\x")); } } if (result264 !== null) { var result265 = parse_hexDigit(context); if (result265 !== null) { var result266 = parse_hexDigit(context); if (result266 !== null) { var result263 = [result264, result265, result266]; } else { var result263 = null; pos = savedPos46; } } else { var result263 = null; pos = savedPos46; } } else { var result263 = null; pos = savedPos46; } var result262 = result263 !== null ? (function(h1, h2) { return String.fromCharCode(parseInt("0x" + h1 + h2)); })(result263[1], result263[2]) : null; cache[cacheKey] = { nextPos: pos, result: result262 }; return result262; } function parse_unicodeEscapeSequence(context) { var cacheKey = "unicodeEscapeSequence" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos47 = pos; if (input.substr(pos, 2) === "\\u") { var result269 = "\\u"; pos += 2; } else { var result269 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\\u")); } } if (result269 !== null) { var result270 = parse_hexDigit(context); if (result270 !== null) { var result271 = parse_hexDigit(context); if (result271 !== null) { var result272 = parse_hexDigit(context); if (result272 !== null) { var result273 = parse_hexDigit(context); if (result273 !== null) { var result268 = [result269, result270, result271, result272, result273]; } else { var result268 = null; pos = savedPos47; } } else { var result268 = null; pos = savedPos47; } } else { var result268 = null; pos = savedPos47; } } else { var result268 = null; pos = savedPos47; } } else { var result268 = null; pos = savedPos47; } var result267 = result268 !== null ? (function(h1, h2, h3, h4) { return String.fromCharCode(parseInt("0x" + h1 + h2 + h3 + h4)); })(result268[1], result268[2], result268[3], result268[4]) : null; cache[cacheKey] = { nextPos: pos, result: result267 }; return result267; } function parse_eolEscapeSequence(context) { var cacheKey = "eolEscapeSequence" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos48 = pos; if (input.substr(pos, 1) === "\\") { var result276 = "\\"; pos += 1; } else { var result276 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\\")); } } if (result276 !== null) { var result277 = parse_eol(context); if (result277 !== null) { var result275 = [result276, result277]; } else { var result275 = null; pos = savedPos48; } } else { var result275 = null; pos = savedPos48; } var result274 = result275 !== null ? (function(eol) { return eol; })(result275[1]) : null; cache[cacheKey] = { nextPos: pos, result: result274 }; return result274; } function parse_digit(context) { var cacheKey = "digit" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } if (input.substr(pos).match(/^[0-9]/) !== null) { var result278 = input.charAt(pos); pos++; } else { var result278 = null; if (context.reportMatchFailures) { matchFailed("[0-9]"); } } cache[cacheKey] = { nextPos: pos, result: result278 }; return result278; } function parse_hexDigit(context) { var cacheKey = "hexDigit" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } if (input.substr(pos).match(/^[0-9a-fA-F]/) !== null) { var result279 = input.charAt(pos); pos++; } else { var result279 = null; if (context.reportMatchFailures) { matchFailed("[0-9a-fA-F]"); } } cache[cacheKey] = { nextPos: pos, result: result279 }; return result279; } function parse_letter(context) { var cacheKey = "letter" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var result282 = parse_lowerCaseLetter(context); if (result282 !== null) { var result280 = result282; } else { var result281 = parse_upperCaseLetter(context); if (result281 !== null) { var result280 = result281; } else { var result280 = null;; }; } cache[cacheKey] = { nextPos: pos, result: result280 }; return result280; } function parse_lowerCaseLetter(context) { var cacheKey = "lowerCaseLetter" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } if (input.substr(pos).match(/^[a-z]/) !== null) { var result283 = input.charAt(pos); pos++; } else { var result283 = null; if (context.reportMatchFailures) { matchFailed("[a-z]"); } } cache[cacheKey] = { nextPos: pos, result: result283 }; return result283; } function parse_upperCaseLetter(context) { var cacheKey = "upperCaseLetter" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } if (input.substr(pos).match(/^[A-Z]/) !== null) { var result284 = input.charAt(pos); pos++; } else { var result284 = null; if (context.reportMatchFailures) { matchFailed("[A-Z]"); } } cache[cacheKey] = { nextPos: pos, result: result284 }; return result284; } function parse___(context) { var cacheKey = "__" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var result285 = []; var result289 = parse_whitespace(context); if (result289 !== null) { var result286 = result289; } else { var result288 = parse_eol(context); if (result288 !== null) { var result286 = result288; } else { var result287 = parse_comment(context); if (result287 !== null) { var result286 = result287; } else { var result286 = null;; }; }; } while (result286 !== null) { result285.push(result286); var result289 = parse_whitespace(context); if (result289 !== null) { var result286 = result289; } else { var result288 = parse_eol(context); if (result288 !== null) { var result286 = result288; } else { var result287 = parse_comment(context); if (result287 !== null) { var result286 = result287; } else { var result286 = null;; }; }; } } cache[cacheKey] = { nextPos: pos, result: result285 }; return result285; } function parse_comment(context) { var cacheKey = "comment" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var result292 = parse_singleLineComment(context); if (result292 !== null) { var result290 = result292; } else { var result291 = parse_multiLineComment(context); if (result291 !== null) { var result290 = result291; } else { var result290 = null;; }; } context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result290 === null) { matchFailed("comment"); } cache[cacheKey] = { nextPos: pos, result: result290 }; return result290; } function parse_singleLineComment(context) { var cacheKey = "singleLineComment" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos49 = pos; if (input.substr(pos, 2) === "//") { var result294 = "//"; pos += 2; } else { var result294 = null; if (context.reportMatchFailures) { matchFailed(quoteString("//")); } } if (result294 !== null) { var result295 = []; var savedPos50 = pos; var savedPos51 = pos; var savedReportMatchFailuresVar6 = context.reportMatchFailures; context.reportMatchFailures = false; var result299 = parse_eolChar(context); context.reportMatchFailures = savedReportMatchFailuresVar6; if (result299 === null) { var result297 = ''; } else { var result297 = null; pos = savedPos51; } if (result297 !== null) { if (input.length > pos) { var result298 = input.charAt(pos); pos++; } else { var result298 = null; if (context.reportMatchFailures) { matchFailed('any character'); } } if (result298 !== null) { var result296 = [result297, result298]; } else { var result296 = null; pos = savedPos50; } } else { var result296 = null; pos = savedPos50; } while (result296 !== null) { result295.push(result296); var savedPos50 = pos; var savedPos51 = pos; var savedReportMatchFailuresVar6 = context.reportMatchFailures; context.reportMatchFailures = false; var result299 = parse_eolChar(context); context.reportMatchFailures = savedReportMatchFailuresVar6; if (result299 === null) { var result297 = ''; } else { var result297 = null; pos = savedPos51; } if (result297 !== null) { if (input.length > pos) { var result298 = input.charAt(pos); pos++; } else { var result298 = null; if (context.reportMatchFailures) { matchFailed('any character'); } } if (result298 !== null) { var result296 = [result297, result298]; } else { var result296 = null; pos = savedPos50; } } else { var result296 = null; pos = savedPos50; } } if (result295 !== null) { var result293 = [result294, result295]; } else { var result293 = null; pos = savedPos49; } } else { var result293 = null; pos = savedPos49; } cache[cacheKey] = { nextPos: pos, result: result293 }; return result293; } function parse_multiLineComment(context) { var cacheKey = "multiLineComment" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedPos52 = pos; if (input.substr(pos, 2) === "/*") { var result301 = "/*"; pos += 2; } else { var result301 = null; if (context.reportMatchFailures) { matchFailed(quoteString("/*")); } } if (result301 !== null) { var result302 = []; var savedPos53 = pos; var savedPos54 = pos; var savedReportMatchFailuresVar7 = context.reportMatchFailures; context.reportMatchFailures = false; if (input.substr(pos, 2) === "*/") { var result307 = "*/"; pos += 2; } else { var result307 = null; if (context.reportMatchFailures) { matchFailed(quoteString("*/")); } } context.reportMatchFailures = savedReportMatchFailuresVar7; if (result307 === null) { var result305 = ''; } else { var result305 = null; pos = savedPos54; } if (result305 !== null) { if (input.length > pos) { var result306 = input.charAt(pos); pos++; } else { var result306 = null; if (context.reportMatchFailures) { matchFailed('any character'); } } if (result306 !== null) { var result304 = [result305, result306]; } else { var result304 = null; pos = savedPos53; } } else { var result304 = null; pos = savedPos53; } while (result304 !== null) { result302.push(result304); var savedPos53 = pos; var savedPos54 = pos; var savedReportMatchFailuresVar7 = context.reportMatchFailures; context.reportMatchFailures = false; if (input.substr(pos, 2) === "*/") { var result307 = "*/"; pos += 2; } else { var result307 = null; if (context.reportMatchFailures) { matchFailed(quoteString("*/")); } } context.reportMatchFailures = savedReportMatchFailuresVar7; if (result307 === null) { var result305 = ''; } else { var result305 = null; pos = savedPos54; } if (result305 !== null) { if (input.length > pos) { var result306 = input.charAt(pos); pos++; } else { var result306 = null; if (context.reportMatchFailures) { matchFailed('any character'); } } if (result306 !== null) { var result304 = [result305, result306]; } else { var result304 = null; pos = savedPos53; } } else { var result304 = null; pos = savedPos53; } } if (result302 !== null) { if (input.substr(pos, 2) === "*/") { var result303 = "*/"; pos += 2; } else { var result303 = null; if (context.reportMatchFailures) { matchFailed(quoteString("*/")); } } if (result303 !== null) { var result300 = [result301, result302, result303]; } else { var result300 = null; pos = savedPos52; } } else { var result300 = null; pos = savedPos52; } } else { var result300 = null; pos = savedPos52; } cache[cacheKey] = { nextPos: pos, result: result300 }; return result300; } function parse_eol(context) { var cacheKey = "eol" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; if (input.substr(pos, 1) === "\n") { var result313 = "\n"; pos += 1; } else { var result313 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\n")); } } if (result313 !== null) { var result308 = result313; } else { if (input.substr(pos, 2) === "\r\n") { var result312 = "\r\n"; pos += 2; } else { var result312 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\r\n")); } } if (result312 !== null) { var result308 = result312; } else { if (input.substr(pos, 1) === "\r") { var result311 = "\r"; pos += 1; } else { var result311 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\r")); } } if (result311 !== null) { var result308 = result311; } else { if (input.substr(pos, 1) === "\u2028") { var result310 = "\u2028"; pos += 1; } else { var result310 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\u2028")); } } if (result310 !== null) { var result308 = result310; } else { if (input.substr(pos, 1) === "\u2029") { var result309 = "\u2029"; pos += 1; } else { var result309 = null; if (context.reportMatchFailures) { matchFailed(quoteString("\u2029")); } } if (result309 !== null) { var result308 = result309; } else { var result308 = null;; }; }; }; }; } context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result308 === null) { matchFailed("end of line"); } cache[cacheKey] = { nextPos: pos, result: result308 }; return result308; } function parse_eolChar(context) { var cacheKey = "eolChar" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } if (input.substr(pos).match(/^[\n\r\u2028\u2029]/) !== null) { var result314 = input.charAt(pos); pos++; } else { var result314 = null; if (context.reportMatchFailures) { matchFailed("[\\n\\r\\u2028\\u2029]"); } } cache[cacheKey] = { nextPos: pos, result: result314 }; return result314; } function parse_whitespace(context) { var cacheKey = "whitespace" + '@' + pos; var cachedResult = cache[cacheKey]; if (cachedResult) { pos = cachedResult.nextPos; return cachedResult.result; } var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; if (input.substr(pos).match(/^[   ᠎ -    ]/) !== null) { var result315 = input.charAt(pos); pos++; } else { var result315 = null; if (context.reportMatchFailures) { matchFailed("[   ᠎ -    ]"); } } context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result315 === null) { matchFailed("whitespace"); } cache[cacheKey] = { nextPos: pos, result: result315 }; return result315; } function buildErrorMessage() { function buildExpected(failuresExpected) { switch (failuresExpected.length) { case 0: return 'end of input'; case 1: return failuresExpected[0]; default: failuresExpected.sort(); return failuresExpected.slice(0, failuresExpected.length - 1).join(', ') + ' or ' + failuresExpected[failuresExpected.length - 1]; } } var expected = buildExpected(rightmostMatchFailuresExpected); var actualPos = Math.max(pos, rightmostMatchFailuresPos); var actual = actualPos < input.length ? quoteString(input.charAt(actualPos)) : 'end of input'; return 'Expected ' + expected + ' but ' + actual + ' found.'; } function computeErrorPosition() { /* * The first idea was to use |String.split| to break the input up to the * error position along newlines and derive the line and column from * there. However IE's |split| implementation is so broken that it was * enough to prevent it. */ var line = 1; var column = 1; var seenCR = false; for (var i = 0; i < rightmostMatchFailuresPos; i++) { var ch = input.charAt(i); if (ch === '\n') { if (!seenCR) { line++; } column = 1; seenCR = false; } else if (ch === '\r' | ch === '\u2028' || ch === '\u2029') { line++; column = 1; seenCR = true; } else { column++; seenCR = false; } } return { line: line, column: column }; } var result = parse_grammar({ reportMatchFailures: true }); /* * The parser is now in one of the following three states: * * 1. The parser successfully parsed the whole input. * * - |result !== null| * - |pos === input.length| * - |rightmostMatchFailuresExpected| may or may not contain something * * 2. The parser successfully parsed only a part of the input. * * - |result !== null| * - |pos < input.length| * - |rightmostMatchFailuresExpected| may or may not contain something * * 3. The parser did not successfully parse any part of the input. * * - |result === null| * - |pos === 0| * - |rightmostMatchFailuresExpected| contains at least one failure * * All code following this comment (including called functions) must * handle these states. */ if (result === null || pos !== input.length) { var errorPosition = computeErrorPosition(); throw new this.SyntaxError( buildErrorMessage(), errorPosition.line, errorPosition.column ); } return result; }, /* Returns the parser source code. */ toSource: function() { return this._source; } }; /* Thrown when a parser encounters a syntax error. */ result.SyntaxError = function(message, line, column) { this.name = 'SyntaxError'; this.message = message; this.line = line; this.column = column; }; result.SyntaxError.prototype = Error.prototype; return result; })();