PEG.grammarParser = (function(){ /* Generated by PEG.js (http://pegjs.majda.cz/). */ var result = { _quoteString: function(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 + '"'; }, _arrayContains: function(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; }, _matchFailed: function(failure) { if (this._pos < this._rightmostMatchFailuresPos) { return; } if (this._pos > this._rightmostMatchFailuresPos) { this._rightmostMatchFailuresPos = this._pos; this._rightmostMatchFailuresExpected = []; } if (!this._arrayContains(this._rightmostMatchFailuresExpected, failure)) { this._rightmostMatchFailuresExpected.push(failure); } }, _parse_grammar: function(context) { var cacheKey = "grammar" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos0 = this._pos; var result2 = this._parse___(context); if (result2 !== null) { var result4 = this._parse_rule(context); if (result4 !== null) { var result3 = []; while (result4 !== null) { result3.push(result4); var result4 = this._parse_rule(context); } } else { var result3 = null; } if (result3 !== null) { var result1 = [result2, result3]; } else { var result1 = null; this._pos = savedPos0; } } else { var result1 = null; this._pos = savedPos0; } var result0 = result1 !== null ? (function(rules) { var result = {}; PEG.ArrayUtils.each(rules, function(rule) { result[rule.name] = rule; }); return result; })(result1[1]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result0 }; return result0; }, _parse_rule: function(context) { var cacheKey = "rule" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos1 = this._pos; var result7 = this._parse_identifier(context); if (result7 !== null) { var result14 = this._parse_literal(context); if (result14 !== null) { var result8 = result14; } else { if (this._input.substr(this._pos, 0) === "") { var result13 = ""; this._pos += 0; } else { var result13 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("")); } } if (result13 !== null) { var result8 = result13; } else { var result8 = null;; }; } if (result8 !== null) { var result9 = this._parse_equals(context); if (result9 !== null) { var result10 = this._parse_choice(context); if (result10 !== null) { var result12 = this._parse_semicolon(context); var result11 = result12 !== null ? result12 : ''; if (result11 !== null) { var result6 = [result7, result8, result9, result10, result11]; } else { var result6 = null; this._pos = savedPos1; } } else { var result6 = null; this._pos = savedPos1; } } else { var result6 = null; this._pos = savedPos1; } } else { var result6 = null; this._pos = savedPos1; } } else { var result6 = null; this._pos = savedPos1; } var result5 = result6 !== null ? (function(name, displayName, expression) { return { type: "rule", name: name, displayName: displayName !== "" ? displayName : null, expression: expression }; })(result6[0], result6[1], result6[3]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result5 }; return result5; }, _parse_choice: function(context) { var cacheKey = "choice" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos2 = this._pos; var result17 = this._parse_sequence(context); if (result17 !== null) { var result18 = []; var savedPos3 = this._pos; var result20 = this._parse_slash(context); if (result20 !== null) { var result21 = this._parse_sequence(context); if (result21 !== null) { var result19 = [result20, result21]; } else { var result19 = null; this._pos = savedPos3; } } else { var result19 = null; this._pos = savedPos3; } while (result19 !== null) { result18.push(result19); var savedPos3 = this._pos; var result20 = this._parse_slash(context); if (result20 !== null) { var result21 = this._parse_sequence(context); if (result21 !== null) { var result19 = [result20, result21]; } else { var result19 = null; this._pos = savedPos3; } } else { var result19 = null; this._pos = savedPos3; } } if (result18 !== null) { var result16 = [result17, result18]; } else { var result16 = null; this._pos = savedPos2; } } else { var result16 = null; this._pos = savedPos2; } var result15 = result16 !== 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; } })(result16[0], result16[1]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result15 }; return result15; }, _parse_sequence: function(context) { var cacheKey = "sequence" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos4 = this._pos; var result28 = []; var result30 = this._parse_labeled(context); while (result30 !== null) { result28.push(result30); var result30 = this._parse_labeled(context); } if (result28 !== null) { var result29 = this._parse_action(context); if (result29 !== null) { var result27 = [result28, result29]; } else { var result27 = null; this._pos = savedPos4; } } else { var result27 = null; this._pos = savedPos4; } var result26 = result27 !== null ? (function(elements, action) { var expression = elements.length != 1 ? { type: "sequence", elements: elements } : elements[0]; return { type: "action", expression: expression, action: action }; })(result27[0], result27[1]) : null; if (result26 !== null) { var result22 = result26; } else { var result24 = []; var result25 = this._parse_labeled(context); while (result25 !== null) { result24.push(result25); var result25 = this._parse_labeled(context); } var result23 = result24 !== null ? (function(elements) { return elements.length != 1 ? { type: "sequence", elements: elements } : elements[0]; })(result24) : null; if (result23 !== null) { var result22 = result23; } else { var result22 = null;; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result22 }; return result22; }, _parse_labeled: function(context) { var cacheKey = "labeled" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos5 = this._pos; var result35 = this._parse_identifier(context); if (result35 !== null) { var result36 = this._parse_colon(context); if (result36 !== null) { var result37 = this._parse_prefixed(context); if (result37 !== null) { var result34 = [result35, result36, result37]; } else { var result34 = null; this._pos = savedPos5; } } else { var result34 = null; this._pos = savedPos5; } } else { var result34 = null; this._pos = savedPos5; } var result33 = result34 !== null ? (function(label, expression) { return { type: "labeled", label: label, expression: expression }; })(result34[0], result34[2]) : null; if (result33 !== null) { var result31 = result33; } else { var result32 = this._parse_prefixed(context); if (result32 !== null) { var result31 = result32; } else { var result31 = null;; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result31 }; return result31; }, _parse_prefixed: function(context) { var cacheKey = "prefixed" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos7 = this._pos; var result46 = this._parse_and(context); if (result46 !== null) { var result47 = this._parse_suffixed(context); if (result47 !== null) { var result45 = [result46, result47]; } else { var result45 = null; this._pos = savedPos7; } } else { var result45 = null; this._pos = savedPos7; } var result44 = result45 !== null ? (function(expression) { return { type: "and_predicate", expression: expression }; })(result45[1]) : null; if (result44 !== null) { var result38 = result44; } else { var savedPos6 = this._pos; var result42 = this._parse_not(context); if (result42 !== null) { var result43 = this._parse_suffixed(context); if (result43 !== null) { var result41 = [result42, result43]; } else { var result41 = null; this._pos = savedPos6; } } else { var result41 = null; this._pos = savedPos6; } var result40 = result41 !== null ? (function(expression) { return { type: "not_predicate", expression: expression }; })(result41[1]) : null; if (result40 !== null) { var result38 = result40; } else { var result39 = this._parse_suffixed(context); if (result39 !== null) { var result38 = result39; } else { var result38 = null;; }; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result38 }; return result38; }, _parse_suffixed: function(context) { var cacheKey = "suffixed" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos10 = this._pos; var result60 = this._parse_primary(context); if (result60 !== null) { var result61 = this._parse_question(context); if (result61 !== null) { var result59 = [result60, result61]; } else { var result59 = null; this._pos = savedPos10; } } else { var result59 = null; this._pos = savedPos10; } var result58 = result59 !== null ? (function(expression) { return { type: "optional", expression: expression }; })(result59[0]) : null; if (result58 !== null) { var result48 = result58; } else { var savedPos9 = this._pos; var result56 = this._parse_primary(context); if (result56 !== null) { var result57 = this._parse_star(context); if (result57 !== null) { var result55 = [result56, result57]; } else { var result55 = null; this._pos = savedPos9; } } else { var result55 = null; this._pos = savedPos9; } var result54 = result55 !== null ? (function(expression) { return { type: "zero_or_more", expression: expression }; })(result55[0]) : null; if (result54 !== null) { var result48 = result54; } else { var savedPos8 = this._pos; var result52 = this._parse_primary(context); if (result52 !== null) { var result53 = this._parse_plus(context); if (result53 !== null) { var result51 = [result52, result53]; } else { var result51 = null; this._pos = savedPos8; } } else { var result51 = null; this._pos = savedPos8; } var result50 = result51 !== null ? (function(expression) { return { type: "one_or_more", expression: expression }; })(result51[0]) : null; if (result50 !== null) { var result48 = result50; } else { var result49 = this._parse_primary(context); if (result49 !== null) { var result48 = result49; } else { var result48 = null;; }; }; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result48 }; return result48; }, _parse_primary: function(context) { var cacheKey = "primary" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos12 = this._pos; var result75 = this._parse_identifier(context); if (result75 !== null) { var savedPos13 = this._pos; var savedReportMatchFailuresVar0 = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos14 = this._pos; var result81 = this._parse_literal(context); if (result81 !== null) { var result78 = result81; } else { if (this._input.substr(this._pos, 0) === "") { var result80 = ""; this._pos += 0; } else { var result80 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("")); } } if (result80 !== null) { var result78 = result80; } else { var result78 = null;; }; } if (result78 !== null) { var result79 = this._parse_equals(context); if (result79 !== null) { var result77 = [result78, result79]; } else { var result77 = null; this._pos = savedPos14; } } else { var result77 = null; this._pos = savedPos14; } context.reportMatchFailures = savedReportMatchFailuresVar0; if (result77 === null) { var result76 = ''; } else { var result76 = null; this._pos = savedPos13; } if (result76 !== null) { var result74 = [result75, result76]; } else { var result74 = null; this._pos = savedPos12; } } else { var result74 = null; this._pos = savedPos12; } var result73 = result74 !== null ? (function(name) { return { type: "rule_ref", name: name }; })(result74[0]) : null; if (result73 !== null) { var result62 = result73; } else { var result72 = this._parse_literal(context); var result71 = result72 !== null ? (function(value) { return { type: "literal", value: value }; })(result72) : null; if (result71 !== null) { var result62 = result71; } else { var result70 = this._parse_dot(context); var result69 = result70 !== null ? (function() { return { type: "any" }; })() : null; if (result69 !== null) { var result62 = result69; } else { var result68 = this._parse_class(context); if (result68 !== null) { var result62 = result68; } else { var savedPos11 = this._pos; var result65 = this._parse_lparen(context); if (result65 !== null) { var result66 = this._parse_choice(context); if (result66 !== null) { var result67 = this._parse_rparen(context); if (result67 !== null) { var result64 = [result65, result66, result67]; } else { var result64 = null; this._pos = savedPos11; } } else { var result64 = null; this._pos = savedPos11; } } else { var result64 = null; this._pos = savedPos11; } var result63 = result64 !== null ? (function(expression) { return expression; })(result64[1]) : null; if (result63 !== null) { var result62 = result63; } else { var result62 = null;; }; }; }; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result62 }; return result62; }, _parse_action: function(context) { var cacheKey = "action" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos15 = this._pos; var result84 = this._parse_braced(context); if (result84 !== null) { var result85 = this._parse___(context); if (result85 !== null) { var result83 = [result84, result85]; } else { var result83 = null; this._pos = savedPos15; } } else { var result83 = null; this._pos = savedPos15; } var result82 = result83 !== null ? (function(braced) { return braced.substr(1, braced.length - 2); })(result83[0]) : null; context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result82 === null) { this._matchFailed("action"); } this._cache[cacheKey] = { nextPos: this._pos, result: result82 }; return result82; }, _parse_braced: function(context) { var cacheKey = "braced" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos16 = this._pos; if (this._input.substr(this._pos, 1) === "{") { var result88 = "{"; this._pos += 1; } else { var result88 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("{")); } } if (result88 !== null) { var result89 = []; var result93 = this._parse_braced(context); if (result93 !== null) { var result91 = result93; } else { var result92 = this._parse_nonBraceCharacter(context); if (result92 !== null) { var result91 = result92; } else { var result91 = null;; }; } while (result91 !== null) { result89.push(result91); var result93 = this._parse_braced(context); if (result93 !== null) { var result91 = result93; } else { var result92 = this._parse_nonBraceCharacter(context); if (result92 !== null) { var result91 = result92; } else { var result91 = null;; }; } } if (result89 !== null) { if (this._input.substr(this._pos, 1) === "}") { var result90 = "}"; this._pos += 1; } else { var result90 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("}")); } } if (result90 !== null) { var result87 = [result88, result89, result90]; } else { var result87 = null; this._pos = savedPos16; } } else { var result87 = null; this._pos = savedPos16; } } else { var result87 = null; this._pos = savedPos16; } var result86 = result87 !== null ? (function(parts) { return "{" + parts.join("") + "}"; })(result87[1]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result86 }; return result86; }, _parse_nonBraceCharacters: function(context) { var cacheKey = "nonBraceCharacters" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result96 = this._parse_nonBraceCharacter(context); if (result96 !== null) { var result95 = []; while (result96 !== null) { result95.push(result96); var result96 = this._parse_nonBraceCharacter(context); } } else { var result95 = null; } var result94 = result95 !== null ? (function(chars) { return chars.join(""); })(result95) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result94 }; return result94; }, _parse_nonBraceCharacter: function(context) { var cacheKey = "nonBraceCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; if (this._input.substr(this._pos).match(/^[^{}]/) !== null) { var result97 = this._input.charAt(this._pos); this._pos++; } else { var result97 = null; if (context.reportMatchFailures) { this._matchFailed("[^{}]"); } } this._cache[cacheKey] = { nextPos: this._pos, result: result97 }; return result97; }, _parse_equals: function(context) { var cacheKey = "equals" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos17 = this._pos; if (this._input.substr(this._pos, 1) === "=") { var result100 = "="; this._pos += 1; } else { var result100 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("=")); } } if (result100 !== null) { var result101 = this._parse___(context); if (result101 !== null) { var result99 = [result100, result101]; } else { var result99 = null; this._pos = savedPos17; } } else { var result99 = null; this._pos = savedPos17; } var result98 = result99 !== null ? (function() { return "="; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result98 }; return result98; }, _parse_colon: function(context) { var cacheKey = "colon" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos18 = this._pos; if (this._input.substr(this._pos, 1) === ":") { var result104 = ":"; this._pos += 1; } else { var result104 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString(":")); } } if (result104 !== null) { var result105 = this._parse___(context); if (result105 !== null) { var result103 = [result104, result105]; } else { var result103 = null; this._pos = savedPos18; } } else { var result103 = null; this._pos = savedPos18; } var result102 = result103 !== null ? (function() { return ":"; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result102 }; return result102; }, _parse_semicolon: function(context) { var cacheKey = "semicolon" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos19 = this._pos; if (this._input.substr(this._pos, 1) === ";") { var result108 = ";"; this._pos += 1; } else { var result108 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString(";")); } } if (result108 !== null) { var result109 = this._parse___(context); if (result109 !== null) { var result107 = [result108, result109]; } else { var result107 = null; this._pos = savedPos19; } } else { var result107 = null; this._pos = savedPos19; } var result106 = result107 !== null ? (function() { return ";"; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result106 }; return result106; }, _parse_slash: function(context) { var cacheKey = "slash" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos20 = this._pos; if (this._input.substr(this._pos, 1) === "/") { var result112 = "/"; this._pos += 1; } else { var result112 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("/")); } } if (result112 !== null) { var result113 = this._parse___(context); if (result113 !== null) { var result111 = [result112, result113]; } else { var result111 = null; this._pos = savedPos20; } } else { var result111 = null; this._pos = savedPos20; } var result110 = result111 !== null ? (function() { return "/"; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result110 }; return result110; }, _parse_and: function(context) { var cacheKey = "and" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos21 = this._pos; if (this._input.substr(this._pos, 1) === "&") { var result116 = "&"; this._pos += 1; } else { var result116 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("&")); } } if (result116 !== null) { var result117 = this._parse___(context); if (result117 !== null) { var result115 = [result116, result117]; } else { var result115 = null; this._pos = savedPos21; } } else { var result115 = null; this._pos = savedPos21; } var result114 = result115 !== null ? (function() { return "&"; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result114 }; return result114; }, _parse_not: function(context) { var cacheKey = "not" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos22 = this._pos; if (this._input.substr(this._pos, 1) === "!") { var result120 = "!"; this._pos += 1; } else { var result120 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("!")); } } if (result120 !== null) { var result121 = this._parse___(context); if (result121 !== null) { var result119 = [result120, result121]; } else { var result119 = null; this._pos = savedPos22; } } else { var result119 = null; this._pos = savedPos22; } var result118 = result119 !== null ? (function() { return "!"; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result118 }; return result118; }, _parse_question: function(context) { var cacheKey = "question" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos23 = this._pos; if (this._input.substr(this._pos, 1) === "?") { var result124 = "?"; this._pos += 1; } else { var result124 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("?")); } } if (result124 !== null) { var result125 = this._parse___(context); if (result125 !== null) { var result123 = [result124, result125]; } else { var result123 = null; this._pos = savedPos23; } } else { var result123 = null; this._pos = savedPos23; } var result122 = result123 !== null ? (function() { return "?"; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result122 }; return result122; }, _parse_star: function(context) { var cacheKey = "star" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos24 = this._pos; if (this._input.substr(this._pos, 1) === "*") { var result128 = "*"; this._pos += 1; } else { var result128 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("*")); } } if (result128 !== null) { var result129 = this._parse___(context); if (result129 !== null) { var result127 = [result128, result129]; } else { var result127 = null; this._pos = savedPos24; } } else { var result127 = null; this._pos = savedPos24; } var result126 = result127 !== null ? (function() { return "*"; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result126 }; return result126; }, _parse_plus: function(context) { var cacheKey = "plus" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos25 = this._pos; if (this._input.substr(this._pos, 1) === "+") { var result132 = "+"; this._pos += 1; } else { var result132 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("+")); } } if (result132 !== null) { var result133 = this._parse___(context); if (result133 !== null) { var result131 = [result132, result133]; } else { var result131 = null; this._pos = savedPos25; } } else { var result131 = null; this._pos = savedPos25; } var result130 = result131 !== null ? (function() { return "+"; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result130 }; return result130; }, _parse_lparen: function(context) { var cacheKey = "lparen" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos26 = this._pos; if (this._input.substr(this._pos, 1) === "(") { var result136 = "("; this._pos += 1; } else { var result136 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("(")); } } if (result136 !== null) { var result137 = this._parse___(context); if (result137 !== null) { var result135 = [result136, result137]; } else { var result135 = null; this._pos = savedPos26; } } else { var result135 = null; this._pos = savedPos26; } var result134 = result135 !== null ? (function() { return "("; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result134 }; return result134; }, _parse_rparen: function(context) { var cacheKey = "rparen" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos27 = this._pos; if (this._input.substr(this._pos, 1) === ")") { var result140 = ")"; this._pos += 1; } else { var result140 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString(")")); } } if (result140 !== null) { var result141 = this._parse___(context); if (result141 !== null) { var result139 = [result140, result141]; } else { var result139 = null; this._pos = savedPos27; } } else { var result139 = null; this._pos = savedPos27; } var result138 = result139 !== null ? (function() { return ")"; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result138 }; return result138; }, _parse_dot: function(context) { var cacheKey = "dot" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos28 = this._pos; if (this._input.substr(this._pos, 1) === ".") { var result144 = "."; this._pos += 1; } else { var result144 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString(".")); } } if (result144 !== null) { var result145 = this._parse___(context); if (result145 !== null) { var result143 = [result144, result145]; } else { var result143 = null; this._pos = savedPos28; } } else { var result143 = null; this._pos = savedPos28; } var result142 = result143 !== null ? (function() { return "."; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result142 }; return result142; }, _parse_identifier: function(context) { var cacheKey = "identifier" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos29 = this._pos; var result158 = this._parse_letter(context); if (result158 !== null) { var result148 = result158; } else { if (this._input.substr(this._pos, 1) === "_") { var result157 = "_"; this._pos += 1; } else { var result157 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("_")); } } if (result157 !== null) { var result148 = result157; } else { if (this._input.substr(this._pos, 1) === "$") { var result156 = "$"; this._pos += 1; } else { var result156 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("$")); } } if (result156 !== null) { var result148 = result156; } else { var result148 = null;; }; }; } if (result148 !== null) { var result149 = []; var result155 = this._parse_letter(context); if (result155 !== null) { var result151 = result155; } else { var result154 = this._parse_digit(context); if (result154 !== null) { var result151 = result154; } else { if (this._input.substr(this._pos, 1) === "_") { var result153 = "_"; this._pos += 1; } else { var result153 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("_")); } } if (result153 !== null) { var result151 = result153; } else { if (this._input.substr(this._pos, 1) === "$") { var result152 = "$"; this._pos += 1; } else { var result152 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("$")); } } if (result152 !== null) { var result151 = result152; } else { var result151 = null;; }; }; }; } while (result151 !== null) { result149.push(result151); var result155 = this._parse_letter(context); if (result155 !== null) { var result151 = result155; } else { var result154 = this._parse_digit(context); if (result154 !== null) { var result151 = result154; } else { if (this._input.substr(this._pos, 1) === "_") { var result153 = "_"; this._pos += 1; } else { var result153 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("_")); } } if (result153 !== null) { var result151 = result153; } else { if (this._input.substr(this._pos, 1) === "$") { var result152 = "$"; this._pos += 1; } else { var result152 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("$")); } } if (result152 !== null) { var result151 = result152; } else { var result151 = null;; }; }; }; } } if (result149 !== null) { var result150 = this._parse___(context); if (result150 !== null) { var result147 = [result148, result149, result150]; } else { var result147 = null; this._pos = savedPos29; } } else { var result147 = null; this._pos = savedPos29; } } else { var result147 = null; this._pos = savedPos29; } var result146 = result147 !== null ? (function(head, tail) { return head + tail.join(""); })(result147[0], result147[1]) : null; context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result146 === null) { this._matchFailed("identifier"); } this._cache[cacheKey] = { nextPos: this._pos, result: result146 }; return result146; }, _parse_literal: function(context) { var cacheKey = "literal" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos30 = this._pos; var result164 = this._parse_doubleQuotedLiteral(context); if (result164 !== null) { var result161 = result164; } else { var result163 = this._parse_singleQuotedLiteral(context); if (result163 !== null) { var result161 = result163; } else { var result161 = null;; }; } if (result161 !== null) { var result162 = this._parse___(context); if (result162 !== null) { var result160 = [result161, result162]; } else { var result160 = null; this._pos = savedPos30; } } else { var result160 = null; this._pos = savedPos30; } var result159 = result160 !== null ? (function(literal) { return literal; })(result160[0]) : null; context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result159 === null) { this._matchFailed("literal"); } this._cache[cacheKey] = { nextPos: this._pos, result: result159 }; return result159; }, _parse_doubleQuotedLiteral: function(context) { var cacheKey = "doubleQuotedLiteral" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos31 = this._pos; if (this._input.substr(this._pos, 1) === "\"") { var result167 = "\""; this._pos += 1; } else { var result167 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\"")); } } if (result167 !== null) { var result168 = []; var result170 = this._parse_doubleQuotedCharacter(context); while (result170 !== null) { result168.push(result170); var result170 = this._parse_doubleQuotedCharacter(context); } if (result168 !== null) { if (this._input.substr(this._pos, 1) === "\"") { var result169 = "\""; this._pos += 1; } else { var result169 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\"")); } } if (result169 !== null) { var result166 = [result167, result168, result169]; } else { var result166 = null; this._pos = savedPos31; } } else { var result166 = null; this._pos = savedPos31; } } else { var result166 = null; this._pos = savedPos31; } var result165 = result166 !== null ? (function(chars) { return chars.join(""); })(result166[1]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result165 }; return result165; }, _parse_doubleQuotedCharacter: function(context) { var cacheKey = "doubleQuotedCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result177 = this._parse_simpleDoubleQuotedCharacter(context); if (result177 !== null) { var result171 = result177; } else { var result176 = this._parse_simpleEscapeSequence(context); if (result176 !== null) { var result171 = result176; } else { var result175 = this._parse_zeroEscapeSequence(context); if (result175 !== null) { var result171 = result175; } else { var result174 = this._parse_hexEscapeSequence(context); if (result174 !== null) { var result171 = result174; } else { var result173 = this._parse_unicodeEscapeSequence(context); if (result173 !== null) { var result171 = result173; } else { var result172 = this._parse_eolEscapeSequence(context); if (result172 !== null) { var result171 = result172; } else { var result171 = null;; }; }; }; }; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result171 }; return result171; }, _parse_simpleDoubleQuotedCharacter: function(context) { var cacheKey = "simpleDoubleQuotedCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos32 = this._pos; var savedPos33 = this._pos; var savedReportMatchFailuresVar1 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 1) === "\"") { var result185 = "\""; this._pos += 1; } else { var result185 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\"")); } } if (result185 !== null) { var result182 = result185; } else { if (this._input.substr(this._pos, 1) === "\\") { var result184 = "\\"; this._pos += 1; } else { var result184 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } if (result184 !== null) { var result182 = result184; } else { var result183 = this._parse_eolChar(context); if (result183 !== null) { var result182 = result183; } else { var result182 = null;; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar1; if (result182 === null) { var result180 = ''; } else { var result180 = null; this._pos = savedPos33; } if (result180 !== null) { if (this._input.length > this._pos) { var result181 = this._input.charAt(this._pos); this._pos++; } else { var result181 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result181 !== null) { var result179 = [result180, result181]; } else { var result179 = null; this._pos = savedPos32; } } else { var result179 = null; this._pos = savedPos32; } var result178 = result179 !== null ? (function(char_) { return char_; })(result179[1]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result178 }; return result178; }, _parse_singleQuotedLiteral: function(context) { var cacheKey = "singleQuotedLiteral" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos34 = this._pos; if (this._input.substr(this._pos, 1) === "'") { var result188 = "'"; this._pos += 1; } else { var result188 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("'")); } } if (result188 !== null) { var result189 = []; var result191 = this._parse_singleQuotedCharacter(context); while (result191 !== null) { result189.push(result191); var result191 = this._parse_singleQuotedCharacter(context); } if (result189 !== null) { if (this._input.substr(this._pos, 1) === "'") { var result190 = "'"; this._pos += 1; } else { var result190 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("'")); } } if (result190 !== null) { var result187 = [result188, result189, result190]; } else { var result187 = null; this._pos = savedPos34; } } else { var result187 = null; this._pos = savedPos34; } } else { var result187 = null; this._pos = savedPos34; } var result186 = result187 !== null ? (function(chars) { return chars.join(""); })(result187[1]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result186 }; return result186; }, _parse_singleQuotedCharacter: function(context) { var cacheKey = "singleQuotedCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result198 = this._parse_simpleSingleQuotedCharacter(context); if (result198 !== null) { var result192 = result198; } else { var result197 = this._parse_simpleEscapeSequence(context); if (result197 !== null) { var result192 = result197; } else { var result196 = this._parse_zeroEscapeSequence(context); if (result196 !== null) { var result192 = result196; } else { var result195 = this._parse_hexEscapeSequence(context); if (result195 !== null) { var result192 = result195; } else { var result194 = this._parse_unicodeEscapeSequence(context); if (result194 !== null) { var result192 = result194; } else { var result193 = this._parse_eolEscapeSequence(context); if (result193 !== null) { var result192 = result193; } else { var result192 = null;; }; }; }; }; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result192 }; return result192; }, _parse_simpleSingleQuotedCharacter: function(context) { var cacheKey = "simpleSingleQuotedCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos35 = this._pos; var savedPos36 = this._pos; var savedReportMatchFailuresVar2 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 1) === "'") { var result206 = "'"; this._pos += 1; } else { var result206 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("'")); } } if (result206 !== null) { var result203 = result206; } else { if (this._input.substr(this._pos, 1) === "\\") { var result205 = "\\"; this._pos += 1; } else { var result205 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } if (result205 !== null) { var result203 = result205; } else { var result204 = this._parse_eolChar(context); if (result204 !== null) { var result203 = result204; } else { var result203 = null;; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar2; if (result203 === null) { var result201 = ''; } else { var result201 = null; this._pos = savedPos36; } if (result201 !== null) { if (this._input.length > this._pos) { var result202 = this._input.charAt(this._pos); this._pos++; } else { var result202 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result202 !== null) { var result200 = [result201, result202]; } else { var result200 = null; this._pos = savedPos35; } } else { var result200 = null; this._pos = savedPos35; } var result199 = result200 !== null ? (function(char_) { return char_; })(result200[1]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result199 }; return result199; }, _parse_class: function(context) { var cacheKey = "class" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos37 = this._pos; if (this._input.substr(this._pos, 1) === "[") { var result209 = "["; this._pos += 1; } else { var result209 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("[")); } } if (result209 !== null) { if (this._input.substr(this._pos, 1) === "^") { var result217 = "^"; this._pos += 1; } else { var result217 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("^")); } } var result210 = result217 !== null ? result217 : ''; if (result210 !== null) { var result211 = []; var result216 = this._parse_classCharacterRange(context); if (result216 !== null) { var result214 = result216; } else { var result215 = this._parse_classCharacter(context); if (result215 !== null) { var result214 = result215; } else { var result214 = null;; }; } while (result214 !== null) { result211.push(result214); var result216 = this._parse_classCharacterRange(context); if (result216 !== null) { var result214 = result216; } else { var result215 = this._parse_classCharacter(context); if (result215 !== null) { var result214 = result215; } else { var result214 = null;; }; } } if (result211 !== null) { if (this._input.substr(this._pos, 1) === "]") { var result212 = "]"; this._pos += 1; } else { var result212 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("]")); } } if (result212 !== null) { var result213 = this._parse___(context); if (result213 !== null) { var result208 = [result209, result210, result211, result212, result213]; } else { var result208 = null; this._pos = savedPos37; } } else { var result208 = null; this._pos = savedPos37; } } else { var result208 = null; this._pos = savedPos37; } } else { var result208 = null; this._pos = savedPos37; } } else { var result208 = null; this._pos = savedPos37; } var result207 = result208 !== 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 }; })(result208[1], result208[2]) : null; context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result207 === null) { this._matchFailed("character class"); } this._cache[cacheKey] = { nextPos: this._pos, result: result207 }; return result207; }, _parse_classCharacterRange: function(context) { var cacheKey = "classCharacterRange" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos38 = this._pos; var result220 = this._parse_classCharacter(context); if (result220 !== null) { if (this._input.substr(this._pos, 1) === "-") { var result221 = "-"; this._pos += 1; } else { var result221 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("-")); } } if (result221 !== null) { var result222 = this._parse_classCharacter(context); if (result222 !== null) { var result219 = [result220, result221, result222]; } else { var result219 = null; this._pos = savedPos38; } } else { var result219 = null; this._pos = savedPos38; } } else { var result219 = null; this._pos = savedPos38; } var result218 = result219 !== 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 } })(result219[0], result219[2]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result218 }; return result218; }, _parse_classCharacter: function(context) { var cacheKey = "classCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result224 = this._parse_bracketDelimitedCharacter(context); var result223 = result224 !== null ? (function(char_) { return { data: char_, // FIXME: Get the raw text from the input directly. rawText: PEG.RegExpUtils.quoteForClass(char_) }; })(result224) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result223 }; return result223; }, _parse_bracketDelimitedCharacter: function(context) { var cacheKey = "bracketDelimitedCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result231 = this._parse_simpleBracketDelimitedCharacter(context); if (result231 !== null) { var result225 = result231; } else { var result230 = this._parse_simpleEscapeSequence(context); if (result230 !== null) { var result225 = result230; } else { var result229 = this._parse_zeroEscapeSequence(context); if (result229 !== null) { var result225 = result229; } else { var result228 = this._parse_hexEscapeSequence(context); if (result228 !== null) { var result225 = result228; } else { var result227 = this._parse_unicodeEscapeSequence(context); if (result227 !== null) { var result225 = result227; } else { var result226 = this._parse_eolEscapeSequence(context); if (result226 !== null) { var result225 = result226; } else { var result225 = null;; }; }; }; }; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result225 }; return result225; }, _parse_simpleBracketDelimitedCharacter: function(context) { var cacheKey = "simpleBracketDelimitedCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos39 = this._pos; var savedPos40 = this._pos; var savedReportMatchFailuresVar3 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 1) === "]") { var result239 = "]"; this._pos += 1; } else { var result239 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("]")); } } if (result239 !== null) { var result236 = result239; } else { if (this._input.substr(this._pos, 1) === "\\") { var result238 = "\\"; this._pos += 1; } else { var result238 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } if (result238 !== null) { var result236 = result238; } else { var result237 = this._parse_eolChar(context); if (result237 !== null) { var result236 = result237; } else { var result236 = null;; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar3; if (result236 === null) { var result234 = ''; } else { var result234 = null; this._pos = savedPos40; } if (result234 !== null) { if (this._input.length > this._pos) { var result235 = this._input.charAt(this._pos); this._pos++; } else { var result235 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result235 !== null) { var result233 = [result234, result235]; } else { var result233 = null; this._pos = savedPos39; } } else { var result233 = null; this._pos = savedPos39; } var result232 = result233 !== null ? (function(char_) { return char_; })(result233[1]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result232 }; return result232; }, _parse_simpleEscapeSequence: function(context) { var cacheKey = "simpleEscapeSequence" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos41 = this._pos; if (this._input.substr(this._pos, 1) === "\\") { var result242 = "\\"; this._pos += 1; } else { var result242 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } if (result242 !== null) { var savedPos42 = this._pos; var savedReportMatchFailuresVar4 = context.reportMatchFailures; context.reportMatchFailures = false; var result249 = this._parse_digit(context); if (result249 !== null) { var result245 = result249; } else { if (this._input.substr(this._pos, 1) === "x") { var result248 = "x"; this._pos += 1; } else { var result248 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("x")); } } if (result248 !== null) { var result245 = result248; } else { if (this._input.substr(this._pos, 1) === "u") { var result247 = "u"; this._pos += 1; } else { var result247 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("u")); } } if (result247 !== null) { var result245 = result247; } else { var result246 = this._parse_eolChar(context); if (result246 !== null) { var result245 = result246; } else { var result245 = null;; }; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar4; if (result245 === null) { var result243 = ''; } else { var result243 = null; this._pos = savedPos42; } if (result243 !== null) { if (this._input.length > this._pos) { var result244 = this._input.charAt(this._pos); this._pos++; } else { var result244 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result244 !== null) { var result241 = [result242, result243, result244]; } else { var result241 = null; this._pos = savedPos41; } } else { var result241 = null; this._pos = savedPos41; } } else { var result241 = null; this._pos = savedPos41; } var result240 = result241 !== 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". })(result241[2]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result240 }; return result240; }, _parse_zeroEscapeSequence: function(context) { var cacheKey = "zeroEscapeSequence" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos43 = this._pos; if (this._input.substr(this._pos, 2) === "\\0") { var result252 = "\\0"; this._pos += 2; } else { var result252 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\0")); } } if (result252 !== null) { var savedPos44 = this._pos; var savedReportMatchFailuresVar5 = context.reportMatchFailures; context.reportMatchFailures = false; var result254 = this._parse_digit(context); context.reportMatchFailures = savedReportMatchFailuresVar5; if (result254 === null) { var result253 = ''; } else { var result253 = null; this._pos = savedPos44; } if (result253 !== null) { var result251 = [result252, result253]; } else { var result251 = null; this._pos = savedPos43; } } else { var result251 = null; this._pos = savedPos43; } var result250 = result251 !== null ? (function() { return "\0"; })() : null; this._cache[cacheKey] = { nextPos: this._pos, result: result250 }; return result250; }, _parse_hexEscapeSequence: function(context) { var cacheKey = "hexEscapeSequence" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos45 = this._pos; if (this._input.substr(this._pos, 2) === "\\x") { var result257 = "\\x"; this._pos += 2; } else { var result257 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\x")); } } if (result257 !== null) { var result258 = this._parse_hexDigit(context); if (result258 !== null) { var result259 = this._parse_hexDigit(context); if (result259 !== null) { var result256 = [result257, result258, result259]; } else { var result256 = null; this._pos = savedPos45; } } else { var result256 = null; this._pos = savedPos45; } } else { var result256 = null; this._pos = savedPos45; } var result255 = result256 !== null ? (function(h1, h2) { return String.fromCharCode(parseInt("0x" + h1 + h2)); })(result256[1], result256[2]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result255 }; return result255; }, _parse_unicodeEscapeSequence: function(context) { var cacheKey = "unicodeEscapeSequence" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos46 = this._pos; if (this._input.substr(this._pos, 2) === "\\u") { var result262 = "\\u"; this._pos += 2; } else { var result262 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\u")); } } if (result262 !== null) { var result263 = this._parse_hexDigit(context); if (result263 !== null) { var result264 = this._parse_hexDigit(context); if (result264 !== null) { var result265 = this._parse_hexDigit(context); if (result265 !== null) { var result266 = this._parse_hexDigit(context); if (result266 !== null) { var result261 = [result262, result263, result264, result265, result266]; } else { var result261 = null; this._pos = savedPos46; } } else { var result261 = null; this._pos = savedPos46; } } else { var result261 = null; this._pos = savedPos46; } } else { var result261 = null; this._pos = savedPos46; } } else { var result261 = null; this._pos = savedPos46; } var result260 = result261 !== null ? (function(h1, h2, h3, h4) { return String.fromCharCode(parseInt("0x" + h1 + h2 + h3 + h4)); })(result261[1], result261[2], result261[3], result261[4]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result260 }; return result260; }, _parse_eolEscapeSequence: function(context) { var cacheKey = "eolEscapeSequence" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos47 = this._pos; if (this._input.substr(this._pos, 1) === "\\") { var result269 = "\\"; this._pos += 1; } else { var result269 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } if (result269 !== null) { var result270 = this._parse_eol(context); if (result270 !== null) { var result268 = [result269, result270]; } else { var result268 = null; this._pos = savedPos47; } } else { var result268 = null; this._pos = savedPos47; } var result267 = result268 !== null ? (function(eol) { return eol; })(result268[1]) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result267 }; return result267; }, _parse_digit: function(context) { var cacheKey = "digit" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; if (this._input.substr(this._pos).match(/^[0-9]/) !== null) { var result271 = this._input.charAt(this._pos); this._pos++; } else { var result271 = null; if (context.reportMatchFailures) { this._matchFailed("[0-9]"); } } this._cache[cacheKey] = { nextPos: this._pos, result: result271 }; return result271; }, _parse_hexDigit: function(context) { var cacheKey = "hexDigit" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; if (this._input.substr(this._pos).match(/^[0-9a-fA-F]/) !== null) { var result272 = this._input.charAt(this._pos); this._pos++; } else { var result272 = null; if (context.reportMatchFailures) { this._matchFailed("[0-9a-fA-F]"); } } this._cache[cacheKey] = { nextPos: this._pos, result: result272 }; return result272; }, _parse_letter: function(context) { var cacheKey = "letter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result275 = this._parse_lowerCaseLetter(context); if (result275 !== null) { var result273 = result275; } else { var result274 = this._parse_upperCaseLetter(context); if (result274 !== null) { var result273 = result274; } else { var result273 = null;; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result273 }; return result273; }, _parse_lowerCaseLetter: function(context) { var cacheKey = "lowerCaseLetter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; if (this._input.substr(this._pos).match(/^[a-z]/) !== null) { var result276 = this._input.charAt(this._pos); this._pos++; } else { var result276 = null; if (context.reportMatchFailures) { this._matchFailed("[a-z]"); } } this._cache[cacheKey] = { nextPos: this._pos, result: result276 }; return result276; }, _parse_upperCaseLetter: function(context) { var cacheKey = "upperCaseLetter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; if (this._input.substr(this._pos).match(/^[A-Z]/) !== null) { var result277 = this._input.charAt(this._pos); this._pos++; } else { var result277 = null; if (context.reportMatchFailures) { this._matchFailed("[A-Z]"); } } this._cache[cacheKey] = { nextPos: this._pos, result: result277 }; return result277; }, _parse___: function(context) { var cacheKey = "__" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result278 = []; var result282 = this._parse_whitespace(context); if (result282 !== null) { var result279 = result282; } else { var result281 = this._parse_eol(context); if (result281 !== null) { var result279 = result281; } else { var result280 = this._parse_comment(context); if (result280 !== null) { var result279 = result280; } else { var result279 = null;; }; }; } while (result279 !== null) { result278.push(result279); var result282 = this._parse_whitespace(context); if (result282 !== null) { var result279 = result282; } else { var result281 = this._parse_eol(context); if (result281 !== null) { var result279 = result281; } else { var result280 = this._parse_comment(context); if (result280 !== null) { var result279 = result280; } else { var result279 = null;; }; }; } } this._cache[cacheKey] = { nextPos: this._pos, result: result278 }; return result278; }, _parse_comment: function(context) { var cacheKey = "comment" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var result285 = this._parse_singleLineComment(context); if (result285 !== null) { var result283 = result285; } else { var result284 = this._parse_multiLineComment(context); if (result284 !== null) { var result283 = result284; } else { var result283 = null;; }; } context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result283 === null) { this._matchFailed("comment"); } this._cache[cacheKey] = { nextPos: this._pos, result: result283 }; return result283; }, _parse_singleLineComment: function(context) { var cacheKey = "singleLineComment" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos48 = this._pos; if (this._input.substr(this._pos, 2) === "//") { var result287 = "//"; this._pos += 2; } else { var result287 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("//")); } } if (result287 !== null) { var result288 = []; var savedPos49 = this._pos; var savedPos50 = this._pos; var savedReportMatchFailuresVar6 = context.reportMatchFailures; context.reportMatchFailures = false; var result292 = this._parse_eolChar(context); context.reportMatchFailures = savedReportMatchFailuresVar6; if (result292 === null) { var result290 = ''; } else { var result290 = null; this._pos = savedPos50; } if (result290 !== null) { if (this._input.length > this._pos) { var result291 = this._input.charAt(this._pos); this._pos++; } else { var result291 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result291 !== null) { var result289 = [result290, result291]; } else { var result289 = null; this._pos = savedPos49; } } else { var result289 = null; this._pos = savedPos49; } while (result289 !== null) { result288.push(result289); var savedPos49 = this._pos; var savedPos50 = this._pos; var savedReportMatchFailuresVar6 = context.reportMatchFailures; context.reportMatchFailures = false; var result292 = this._parse_eolChar(context); context.reportMatchFailures = savedReportMatchFailuresVar6; if (result292 === null) { var result290 = ''; } else { var result290 = null; this._pos = savedPos50; } if (result290 !== null) { if (this._input.length > this._pos) { var result291 = this._input.charAt(this._pos); this._pos++; } else { var result291 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result291 !== null) { var result289 = [result290, result291]; } else { var result289 = null; this._pos = savedPos49; } } else { var result289 = null; this._pos = savedPos49; } } if (result288 !== null) { var result286 = [result287, result288]; } else { var result286 = null; this._pos = savedPos48; } } else { var result286 = null; this._pos = savedPos48; } this._cache[cacheKey] = { nextPos: this._pos, result: result286 }; return result286; }, _parse_multiLineComment: function(context) { var cacheKey = "multiLineComment" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos51 = this._pos; if (this._input.substr(this._pos, 2) === "/*") { var result294 = "/*"; this._pos += 2; } else { var result294 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("/*")); } } if (result294 !== null) { var result295 = []; var savedPos52 = this._pos; var savedPos53 = this._pos; var savedReportMatchFailuresVar7 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 2) === "*/") { var result300 = "*/"; this._pos += 2; } else { var result300 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("*/")); } } context.reportMatchFailures = savedReportMatchFailuresVar7; if (result300 === null) { var result298 = ''; } else { var result298 = null; this._pos = savedPos53; } if (result298 !== null) { if (this._input.length > this._pos) { var result299 = this._input.charAt(this._pos); this._pos++; } else { var result299 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result299 !== null) { var result297 = [result298, result299]; } else { var result297 = null; this._pos = savedPos52; } } else { var result297 = null; this._pos = savedPos52; } while (result297 !== null) { result295.push(result297); var savedPos52 = this._pos; var savedPos53 = this._pos; var savedReportMatchFailuresVar7 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 2) === "*/") { var result300 = "*/"; this._pos += 2; } else { var result300 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("*/")); } } context.reportMatchFailures = savedReportMatchFailuresVar7; if (result300 === null) { var result298 = ''; } else { var result298 = null; this._pos = savedPos53; } if (result298 !== null) { if (this._input.length > this._pos) { var result299 = this._input.charAt(this._pos); this._pos++; } else { var result299 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result299 !== null) { var result297 = [result298, result299]; } else { var result297 = null; this._pos = savedPos52; } } else { var result297 = null; this._pos = savedPos52; } } if (result295 !== null) { if (this._input.substr(this._pos, 2) === "*/") { var result296 = "*/"; this._pos += 2; } else { var result296 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("*/")); } } if (result296 !== null) { var result293 = [result294, result295, result296]; } else { var result293 = null; this._pos = savedPos51; } } else { var result293 = null; this._pos = savedPos51; } } else { var result293 = null; this._pos = savedPos51; } this._cache[cacheKey] = { nextPos: this._pos, result: result293 }; return result293; }, _parse_eol: function(context) { var cacheKey = "eol" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 1) === "\n") { var result306 = "\n"; this._pos += 1; } else { var result306 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\n")); } } if (result306 !== null) { var result301 = result306; } else { if (this._input.substr(this._pos, 2) === "\r\n") { var result305 = "\r\n"; this._pos += 2; } else { var result305 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\r\n")); } } if (result305 !== null) { var result301 = result305; } else { if (this._input.substr(this._pos, 1) === "\r") { var result304 = "\r"; this._pos += 1; } else { var result304 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\r")); } } if (result304 !== null) { var result301 = result304; } else { if (this._input.substr(this._pos, 1) === "\u2028") { var result303 = "\u2028"; this._pos += 1; } else { var result303 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\u2028")); } } if (result303 !== null) { var result301 = result303; } else { if (this._input.substr(this._pos, 1) === "\u2029") { var result302 = "\u2029"; this._pos += 1; } else { var result302 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\u2029")); } } if (result302 !== null) { var result301 = result302; } else { var result301 = null;; }; }; }; }; } context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result301 === null) { this._matchFailed("end of line"); } this._cache[cacheKey] = { nextPos: this._pos, result: result301 }; return result301; }, _parse_eolChar: function(context) { var cacheKey = "eolChar" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; if (this._input.substr(this._pos).match(/^[\n\r\u2028\u2029]/) !== null) { var result307 = this._input.charAt(this._pos); this._pos++; } else { var result307 = null; if (context.reportMatchFailures) { this._matchFailed("[\\n\\r\\u2028\\u2029]"); } } this._cache[cacheKey] = { nextPos: this._pos, result: result307 }; return result307; }, _parse_whitespace: function(context) { var cacheKey = "whitespace" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos).match(/^[   ᠎ -    ]/) !== null) { var result308 = this._input.charAt(this._pos); this._pos++; } else { var result308 = null; if (context.reportMatchFailures) { this._matchFailed("[   ᠎ -    ]"); } } context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result308 === null) { this._matchFailed("whitespace"); } this._cache[cacheKey] = { nextPos: this._pos, result: result308 }; return result308; }, /* * 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 that = this; function initialize() { that._input = input; that._pos = 0; that._rightmostMatchFailuresPos = 0; that._rightmostMatchFailuresExpected = []; that._cache = {}; } 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(that._rightmostMatchFailuresExpected); var pos = Math.max(that._pos, that._rightmostMatchFailuresPos); var actual = pos < that._input.length ? that._quoteString(that._input.charAt(pos)) : '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 input = that._input; var pos = that._rightmostMatchFailuresPos; var line = 1; var column = 1; var seenCR = false; for (var i = 0; i < pos; 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 }; } initialize(); var initialContext = { reportMatchFailures: true }; var result = this._parse_grammar(initialContext); /* * The parser is now in one of the following three states: * * 1. The parser successfully parsed the whole input. * * - |result !== null| * - |that._pos === input.length| * - |that._rightmostMatchFailuresExpected.length| may or may not contain * something * * 2. The parser successfully parsed only a part of the input. * * - |result !== null| * - |that._pos < input.length| * - |that._rightmostMatchFailuresExpected.length| may or may not contain * something * * 3. The parser did not successfully parse any part of the input. * * - |result === null| * - |that._pos === 0| * - |that._rightmostMatchFailuresExpected.length| contains at least one failure * * All code following this comment (including called functions) must * handle these states. */ if (result === null || this._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; })();