PEG.grammarParser = (function(){ /* Generated by PEG.js (http://pegjs.majda.cz/). */ var result = { _startRule: "grammar", _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) { 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 !== undefined) { 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($1, $2) { var result = {}; PEG.ArrayUtils.each($2, function(rule) { result[rule.getName()] = rule; }); return result; }).apply(this, result1) : 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 !== undefined) { 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 result12 = this._parse_literal(context); if (result12 !== null) { var result8 = result12; } else { if (this._input.substr(this._pos, 0) === "") { var result11 = ""; this._pos += 0; } else { var result11 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("")); } } if (result11 !== null) { var result8 = result11; } else { var result8 = null;; }; } if (result8 !== null) { var result9 = this._parse_colon(context); if (result9 !== null) { var result10 = this._parse_expression(context); if (result10 !== null) { var result6 = [result7, result8, result9, result10]; } 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($1, $2, $3, $4) { return new PEG.Grammar.Rule($1, $2 !== "" ? $2 : null, $4); }).apply(this, result6) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result5 }; return result5; }, _parse_expression: function(context) { var cacheKey = "expression" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result13 = this._parse_choice(context); this._cache[cacheKey] = { nextPos: this._pos, result: result13 }; return result13; }, _parse_choice: function(context) { var cacheKey = "choice" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos2 = this._pos; var result16 = this._parse_sequence(context); if (result16 !== null) { var result17 = []; var savedPos3 = this._pos; var result19 = this._parse_slash(context); if (result19 !== null) { var result20 = this._parse_sequence(context); if (result20 !== null) { var result18 = [result19, result20]; } else { var result18 = null; this._pos = savedPos3; } } else { var result18 = null; this._pos = savedPos3; } while (result18 !== null) { result17.push(result18); var savedPos3 = this._pos; var result19 = this._parse_slash(context); if (result19 !== null) { var result20 = this._parse_sequence(context); if (result20 !== null) { var result18 = [result19, result20]; } else { var result18 = null; this._pos = savedPos3; } } else { var result18 = null; this._pos = savedPos3; } } if (result17 !== null) { var result15 = [result16, result17]; } else { var result15 = null; this._pos = savedPos2; } } else { var result15 = null; this._pos = savedPos2; } var result14 = result15 !== null ? (function($1, $2) { return $2.length > 0 ? new PEG.Grammar.Choice([$1].concat(PEG.ArrayUtils.map( $2, function(element) { return element[1]; } ))) : $1; }).apply(this, result15) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result14 }; return result14; }, _parse_sequence: function(context) { var cacheKey = "sequence" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos4 = this._pos; var result27 = []; var result29 = this._parse_prefixed(context); while (result29 !== null) { result27.push(result29); var result29 = this._parse_prefixed(context); } if (result27 !== null) { var result28 = this._parse_action(context); if (result28 !== null) { var result26 = [result27, result28]; } else { var result26 = null; this._pos = savedPos4; } } else { var result26 = null; this._pos = savedPos4; } var result25 = result26 !== null ? (function($1, $2) { return new PEG.Grammar.Action( $1.length != 1 ? new PEG.Grammar.Sequence($1) : $1[0], $2 ); }).apply(this, result26) : null; if (result25 !== null) { var result21 = result25; } else { var result23 = []; var result24 = this._parse_prefixed(context); while (result24 !== null) { result23.push(result24); var result24 = this._parse_prefixed(context); } var result22 = result23 !== null ? (function($1) { return $1.length != 1 ? new PEG.Grammar.Sequence($1) : $1[0]; }).call(this, result23) : null; if (result22 !== null) { var result21 = result22; } else { var result21 = null;; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result21 }; return result21; }, _parse_prefixed: function(context) { var cacheKey = "prefixed" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos6 = this._pos; var result38 = this._parse_and(context); if (result38 !== null) { var result39 = this._parse_suffixed(context); if (result39 !== null) { var result37 = [result38, result39]; } else { var result37 = null; this._pos = savedPos6; } } else { var result37 = null; this._pos = savedPos6; } var result36 = result37 !== null ? (function($1, $2) { return new PEG.Grammar.AndPredicate($2); }).apply(this, result37) : null; if (result36 !== null) { var result30 = result36; } else { var savedPos5 = this._pos; var result34 = this._parse_not(context); if (result34 !== null) { var result35 = this._parse_suffixed(context); if (result35 !== null) { var result33 = [result34, result35]; } else { var result33 = null; this._pos = savedPos5; } } else { var result33 = null; this._pos = savedPos5; } var result32 = result33 !== null ? (function($1, $2) { return new PEG.Grammar.NotPredicate($2); }).apply(this, result33) : null; if (result32 !== null) { var result30 = result32; } else { var result31 = this._parse_suffixed(context); if (result31 !== null) { var result30 = result31; } else { var result30 = null;; }; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result30 }; return result30; }, _parse_suffixed: function(context) { var cacheKey = "suffixed" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos9 = this._pos; var result52 = this._parse_primary(context); if (result52 !== null) { var result53 = this._parse_question(context); if (result53 !== null) { var result51 = [result52, result53]; } else { var result51 = null; this._pos = savedPos9; } } else { var result51 = null; this._pos = savedPos9; } var result50 = result51 !== null ? (function($1, $2) { return new PEG.Grammar.Optional($1); }).apply(this, result51) : null; if (result50 !== null) { var result40 = result50; } else { var savedPos8 = this._pos; var result48 = this._parse_primary(context); if (result48 !== null) { var result49 = this._parse_star(context); if (result49 !== null) { var result47 = [result48, result49]; } else { var result47 = null; this._pos = savedPos8; } } else { var result47 = null; this._pos = savedPos8; } var result46 = result47 !== null ? (function($1, $2) { return new PEG.Grammar.ZeroOrMore($1); }).apply(this, result47) : null; if (result46 !== null) { var result40 = result46; } else { var savedPos7 = this._pos; var result44 = this._parse_primary(context); if (result44 !== null) { var result45 = this._parse_plus(context); if (result45 !== null) { var result43 = [result44, result45]; } else { var result43 = null; this._pos = savedPos7; } } else { var result43 = null; this._pos = savedPos7; } var result42 = result43 !== null ? (function($1, $2) { return new PEG.Grammar.OneOrMore($1); }).apply(this, result43) : null; if (result42 !== null) { var result40 = result42; } else { var result41 = this._parse_primary(context); if (result41 !== null) { var result40 = result41; } else { var result40 = null;; }; }; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result40 }; return result40; }, _parse_primary: function(context) { var cacheKey = "primary" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos11 = this._pos; var result68 = this._parse_identifier(context); if (result68 !== null) { var savedPos12 = this._pos; var savedReportMatchFailuresVar0 = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos13 = this._pos; var result74 = this._parse_literal(context); if (result74 !== null) { var result71 = result74; } else { if (this._input.substr(this._pos, 0) === "") { var result73 = ""; this._pos += 0; } else { var result73 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("")); } } if (result73 !== null) { var result71 = result73; } else { var result71 = null;; }; } if (result71 !== null) { var result72 = this._parse_colon(context); if (result72 !== null) { var result70 = [result71, result72]; } else { var result70 = null; this._pos = savedPos13; } } else { var result70 = null; this._pos = savedPos13; } context.reportMatchFailures = savedReportMatchFailuresVar0; if (result70 === null) { var result69 = ''; } else { var result69 = null; this._pos = savedPos12; } if (result69 !== null) { var result67 = [result68, result69]; } else { var result67 = null; this._pos = savedPos11; } } else { var result67 = null; this._pos = savedPos11; } var result66 = result67 !== null ? (function($1, $2) { return new PEG.Grammar.RuleRef($1); }).apply(this, result67) : null; if (result66 !== null) { var result54 = result66; } else { var result65 = this._parse_literal(context); var result64 = result65 !== null ? (function($1) { return new PEG.Grammar.Literal($1); }).call(this, result65) : null; if (result64 !== null) { var result54 = result64; } else { var result63 = this._parse_dot(context); var result62 = result63 !== null ? (function($1) { return new PEG.Grammar.Any(); }).call(this, result63) : null; if (result62 !== null) { var result54 = result62; } else { var result61 = this._parse_class(context); var result60 = result61 !== null ? (function($1) { return new PEG.Grammar.Class($1); }).call(this, result61) : null; if (result60 !== null) { var result54 = result60; } else { var savedPos10 = this._pos; var result57 = this._parse_lparen(context); if (result57 !== null) { var result58 = this._parse_expression(context); if (result58 !== null) { var result59 = this._parse_rparen(context); if (result59 !== null) { var result56 = [result57, result58, result59]; } else { var result56 = null; this._pos = savedPos10; } } else { var result56 = null; this._pos = savedPos10; } } else { var result56 = null; this._pos = savedPos10; } var result55 = result56 !== null ? (function($1, $2, $3) { return $2; }).apply(this, result56) : null; if (result55 !== null) { var result54 = result55; } else { var result54 = null;; }; }; }; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result54 }; return result54; }, _parse_action: function(context) { var cacheKey = "action" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos14 = this._pos; var result77 = this._parse_braced(context); if (result77 !== null) { var result78 = this._parse___(context); if (result78 !== null) { var result76 = [result77, result78]; } else { var result76 = null; this._pos = savedPos14; } } else { var result76 = null; this._pos = savedPos14; } var result75 = result76 !== null ? (function($1, $2) { return $1.substr(1, $1.length - 2); }).apply(this, result76) : null; context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result75 === null) { this._matchFailed("action"); } this._cache[cacheKey] = { nextPos: this._pos, result: result75 }; return result75; }, _parse_braced: function(context) { var cacheKey = "braced" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos15 = this._pos; if (this._input.substr(this._pos, 1) === "{") { var result81 = "{"; this._pos += 1; } else { var result81 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("{")); } } if (result81 !== null) { var result82 = []; var result86 = this._parse_braced(context); if (result86 !== null) { var result84 = result86; } else { var result85 = this._parse_nonBraceCharacter(context); if (result85 !== null) { var result84 = result85; } else { var result84 = null;; }; } while (result84 !== null) { result82.push(result84); var result86 = this._parse_braced(context); if (result86 !== null) { var result84 = result86; } else { var result85 = this._parse_nonBraceCharacter(context); if (result85 !== null) { var result84 = result85; } else { var result84 = null;; }; } } if (result82 !== null) { if (this._input.substr(this._pos, 1) === "}") { var result83 = "}"; this._pos += 1; } else { var result83 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("}")); } } if (result83 !== null) { var result80 = [result81, result82, result83]; } else { var result80 = null; this._pos = savedPos15; } } else { var result80 = null; this._pos = savedPos15; } } else { var result80 = null; this._pos = savedPos15; } var result79 = result80 !== null ? (function($1, $2, $3) { return $1 + $2.join("") + $3; }).apply(this, result80) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result79 }; return result79; }, _parse_nonBraceCharacters: function(context) { var cacheKey = "nonBraceCharacters" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result89 = this._parse_nonBraceCharacter(context); if (result89 !== null) { var result88 = []; while (result89 !== null) { result88.push(result89); var result89 = this._parse_nonBraceCharacter(context); } } else { var result88 = null; } var result87 = result88 !== null ? (function($1) { return $1.join(""); }).call(this, result88) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result87 }; return result87; }, _parse_nonBraceCharacter: function(context) { var cacheKey = "nonBraceCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; if (this._input.substr(this._pos).match(/^[^{}]/) !== null) { var result91 = this._input.charAt(this._pos); this._pos++; } else { var result91 = null; if (context.reportMatchFailures) { this._matchFailed('[' + "^{}" + ']'); } } var result90 = result91 !== null ? (function($1) { return $1; }).call(this, result91) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result90 }; return result90; }, _parse_colon: function(context) { var cacheKey = "colon" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos16 = this._pos; if (this._input.substr(this._pos, 1) === ":") { var result94 = ":"; this._pos += 1; } else { var result94 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString(":")); } } if (result94 !== null) { var result95 = this._parse___(context); if (result95 !== null) { var result93 = [result94, result95]; } else { var result93 = null; this._pos = savedPos16; } } else { var result93 = null; this._pos = savedPos16; } var result92 = result93 !== null ? (function($1, $2) { return $1; }).apply(this, result93) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result92 }; return result92; }, _parse_slash: function(context) { var cacheKey = "slash" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos17 = this._pos; if (this._input.substr(this._pos, 1) === "/") { var result98 = "/"; this._pos += 1; } else { var result98 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("/")); } } if (result98 !== null) { var result99 = this._parse___(context); if (result99 !== null) { var result97 = [result98, result99]; } else { var result97 = null; this._pos = savedPos17; } } else { var result97 = null; this._pos = savedPos17; } var result96 = result97 !== null ? (function($1, $2) { return $1; }).apply(this, result97) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result96 }; return result96; }, _parse_and: function(context) { var cacheKey = "and" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos18 = this._pos; if (this._input.substr(this._pos, 1) === "&") { var result102 = "&"; this._pos += 1; } else { var result102 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("&")); } } if (result102 !== null) { var result103 = this._parse___(context); if (result103 !== null) { var result101 = [result102, result103]; } else { var result101 = null; this._pos = savedPos18; } } else { var result101 = null; this._pos = savedPos18; } var result100 = result101 !== null ? (function($1, $2) { return $1; }).apply(this, result101) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result100 }; return result100; }, _parse_not: function(context) { var cacheKey = "not" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos19 = this._pos; if (this._input.substr(this._pos, 1) === "!") { var result106 = "!"; this._pos += 1; } else { var result106 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("!")); } } if (result106 !== null) { var result107 = this._parse___(context); if (result107 !== null) { var result105 = [result106, result107]; } else { var result105 = null; this._pos = savedPos19; } } else { var result105 = null; this._pos = savedPos19; } var result104 = result105 !== null ? (function($1, $2) { return $1; }).apply(this, result105) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result104 }; return result104; }, _parse_question: function(context) { var cacheKey = "question" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos20 = this._pos; if (this._input.substr(this._pos, 1) === "?") { var result110 = "?"; this._pos += 1; } else { var result110 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("?")); } } if (result110 !== null) { var result111 = this._parse___(context); if (result111 !== null) { var result109 = [result110, result111]; } else { var result109 = null; this._pos = savedPos20; } } else { var result109 = null; this._pos = savedPos20; } var result108 = result109 !== null ? (function($1, $2) { return $1; }).apply(this, result109) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result108 }; return result108; }, _parse_star: function(context) { var cacheKey = "star" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos21 = this._pos; if (this._input.substr(this._pos, 1) === "*") { var result114 = "*"; this._pos += 1; } else { var result114 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("*")); } } if (result114 !== null) { var result115 = this._parse___(context); if (result115 !== null) { var result113 = [result114, result115]; } else { var result113 = null; this._pos = savedPos21; } } else { var result113 = null; this._pos = savedPos21; } var result112 = result113 !== null ? (function($1, $2) { return $1; }).apply(this, result113) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result112 }; return result112; }, _parse_plus: function(context) { var cacheKey = "plus" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos22 = this._pos; if (this._input.substr(this._pos, 1) === "+") { var result118 = "+"; this._pos += 1; } else { var result118 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("+")); } } if (result118 !== null) { var result119 = this._parse___(context); if (result119 !== null) { var result117 = [result118, result119]; } else { var result117 = null; this._pos = savedPos22; } } else { var result117 = null; this._pos = savedPos22; } var result116 = result117 !== null ? (function($1, $2) { return $1; }).apply(this, result117) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result116 }; return result116; }, _parse_lparen: function(context) { var cacheKey = "lparen" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos23 = this._pos; if (this._input.substr(this._pos, 1) === "(") { var result122 = "("; this._pos += 1; } else { var result122 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("(")); } } if (result122 !== null) { var result123 = this._parse___(context); if (result123 !== null) { var result121 = [result122, result123]; } else { var result121 = null; this._pos = savedPos23; } } else { var result121 = null; this._pos = savedPos23; } var result120 = result121 !== null ? (function($1, $2) { return $1; }).apply(this, result121) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result120 }; return result120; }, _parse_rparen: function(context) { var cacheKey = "rparen" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos24 = this._pos; if (this._input.substr(this._pos, 1) === ")") { var result126 = ")"; this._pos += 1; } else { var result126 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString(")")); } } if (result126 !== null) { var result127 = this._parse___(context); if (result127 !== null) { var result125 = [result126, result127]; } else { var result125 = null; this._pos = savedPos24; } } else { var result125 = null; this._pos = savedPos24; } var result124 = result125 !== null ? (function($1, $2) { return $1; }).apply(this, result125) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result124 }; return result124; }, _parse_dot: function(context) { var cacheKey = "dot" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos25 = this._pos; if (this._input.substr(this._pos, 1) === ".") { var result130 = "."; this._pos += 1; } else { var result130 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString(".")); } } if (result130 !== null) { var result131 = this._parse___(context); if (result131 !== null) { var result129 = [result130, result131]; } else { var result129 = null; this._pos = savedPos25; } } else { var result129 = null; this._pos = savedPos25; } var result128 = result129 !== null ? (function($1, $2) { return $1; }).apply(this, result129) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result128 }; return result128; }, _parse_identifier: function(context) { var cacheKey = "identifier" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos26 = this._pos; var result144 = this._parse_letter(context); if (result144 !== null) { var result134 = result144; } else { if (this._input.substr(this._pos, 1) === "_") { var result143 = "_"; this._pos += 1; } else { var result143 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("_")); } } if (result143 !== null) { var result134 = result143; } else { if (this._input.substr(this._pos, 1) === "$") { var result142 = "$"; this._pos += 1; } else { var result142 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("$")); } } if (result142 !== null) { var result134 = result142; } else { var result134 = null;; }; }; } if (result134 !== null) { var result135 = []; var result141 = this._parse_letter(context); if (result141 !== null) { var result137 = result141; } else { var result140 = this._parse_digit(context); if (result140 !== null) { var result137 = result140; } else { if (this._input.substr(this._pos, 1) === "_") { var result139 = "_"; this._pos += 1; } else { var result139 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("_")); } } if (result139 !== null) { var result137 = result139; } else { if (this._input.substr(this._pos, 1) === "$") { var result138 = "$"; this._pos += 1; } else { var result138 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("$")); } } if (result138 !== null) { var result137 = result138; } else { var result137 = null;; }; }; }; } while (result137 !== null) { result135.push(result137); var result141 = this._parse_letter(context); if (result141 !== null) { var result137 = result141; } else { var result140 = this._parse_digit(context); if (result140 !== null) { var result137 = result140; } else { if (this._input.substr(this._pos, 1) === "_") { var result139 = "_"; this._pos += 1; } else { var result139 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("_")); } } if (result139 !== null) { var result137 = result139; } else { if (this._input.substr(this._pos, 1) === "$") { var result138 = "$"; this._pos += 1; } else { var result138 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("$")); } } if (result138 !== null) { var result137 = result138; } else { var result137 = null;; }; }; }; } } if (result135 !== null) { var result136 = this._parse___(context); if (result136 !== null) { var result133 = [result134, result135, result136]; } else { var result133 = null; this._pos = savedPos26; } } else { var result133 = null; this._pos = savedPos26; } } else { var result133 = null; this._pos = savedPos26; } var result132 = result133 !== null ? (function($1, $2, $3) { return $1 + $2.join(""); }).apply(this, result133) : null; context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result132 === null) { this._matchFailed("identifier"); } this._cache[cacheKey] = { nextPos: this._pos, result: result132 }; return result132; }, _parse_literal: function(context) { var cacheKey = "literal" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos27 = this._pos; var result150 = this._parse_doubleQuotedLiteral(context); if (result150 !== null) { var result147 = result150; } else { var result149 = this._parse_singleQuotedLiteral(context); if (result149 !== null) { var result147 = result149; } else { var result147 = null;; }; } if (result147 !== null) { var result148 = this._parse___(context); if (result148 !== null) { var result146 = [result147, result148]; } else { var result146 = null; this._pos = savedPos27; } } else { var result146 = null; this._pos = savedPos27; } var result145 = result146 !== null ? (function($1, $2) { return $1; }).apply(this, result146) : null; context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result145 === null) { this._matchFailed("literal"); } this._cache[cacheKey] = { nextPos: this._pos, result: result145 }; return result145; }, _parse_doubleQuotedLiteral: function(context) { var cacheKey = "doubleQuotedLiteral" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos28 = this._pos; 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 result154 = []; var result156 = this._parse_doubleQuotedCharacter(context); while (result156 !== null) { result154.push(result156); var result156 = this._parse_doubleQuotedCharacter(context); } if (result154 !== null) { if (this._input.substr(this._pos, 1) === "\"") { var result155 = "\""; this._pos += 1; } else { var result155 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\"")); } } if (result155 !== null) { var result152 = [result153, result154, result155]; } else { var result152 = null; this._pos = savedPos28; } } else { var result152 = null; this._pos = savedPos28; } } else { var result152 = null; this._pos = savedPos28; } var result151 = result152 !== null ? (function($1, $2, $3) { return $2.join(""); }).apply(this, result152) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result151 }; return result151; }, _parse_doubleQuotedCharacter: function(context) { var cacheKey = "doubleQuotedCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result163 = this._parse_simpleDoubleQuotedCharacter(context); if (result163 !== null) { var result157 = result163; } else { var result162 = this._parse_simpleEscapeSequence(context); if (result162 !== null) { var result157 = result162; } else { var result161 = this._parse_zeroEscapeSequence(context); if (result161 !== null) { var result157 = result161; } else { var result160 = this._parse_hexEscapeSequence(context); if (result160 !== null) { var result157 = result160; } else { var result159 = this._parse_unicodeEscapeSequence(context); if (result159 !== null) { var result157 = result159; } else { var result158 = this._parse_eolEscapeSequence(context); if (result158 !== null) { var result157 = result158; } else { var result157 = null;; }; }; }; }; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result157 }; return result157; }, _parse_simpleDoubleQuotedCharacter: function(context) { var cacheKey = "simpleDoubleQuotedCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos29 = this._pos; var savedPos30 = this._pos; var savedReportMatchFailuresVar1 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 1) === "\"") { var result171 = "\""; this._pos += 1; } else { var result171 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\"")); } } if (result171 !== null) { var result168 = result171; } else { if (this._input.substr(this._pos, 1) === "\\") { var result170 = "\\"; this._pos += 1; } else { var result170 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } if (result170 !== null) { var result168 = result170; } else { var result169 = this._parse_eolChar(context); if (result169 !== null) { var result168 = result169; } else { var result168 = null;; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar1; if (result168 === null) { var result166 = ''; } else { var result166 = null; this._pos = savedPos30; } if (result166 !== null) { if (this._input.length > this._pos) { var result167 = this._input.charAt(this._pos); this._pos++; } else { var result167 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result167 !== null) { var result165 = [result166, result167]; } else { var result165 = null; this._pos = savedPos29; } } else { var result165 = null; this._pos = savedPos29; } var result164 = result165 !== null ? (function($1, $2) { return $2; }).apply(this, result165) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result164 }; return result164; }, _parse_singleQuotedLiteral: function(context) { var cacheKey = "singleQuotedLiteral" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos31 = this._pos; if (this._input.substr(this._pos, 1) === "'") { var result174 = "'"; this._pos += 1; } else { var result174 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("'")); } } if (result174 !== null) { var result175 = []; var result177 = this._parse_singleQuotedCharacter(context); while (result177 !== null) { result175.push(result177); var result177 = this._parse_singleQuotedCharacter(context); } if (result175 !== null) { if (this._input.substr(this._pos, 1) === "'") { var result176 = "'"; this._pos += 1; } else { var result176 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("'")); } } if (result176 !== null) { var result173 = [result174, result175, result176]; } else { var result173 = null; this._pos = savedPos31; } } else { var result173 = null; this._pos = savedPos31; } } else { var result173 = null; this._pos = savedPos31; } var result172 = result173 !== null ? (function($1, $2, $3) { return $2.join(""); }).apply(this, result173) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result172 }; return result172; }, _parse_singleQuotedCharacter: function(context) { var cacheKey = "singleQuotedCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result184 = this._parse_simpleSingleQuotedCharacter(context); if (result184 !== null) { var result178 = result184; } else { var result183 = this._parse_simpleEscapeSequence(context); if (result183 !== null) { var result178 = result183; } else { var result182 = this._parse_zeroEscapeSequence(context); if (result182 !== null) { var result178 = result182; } else { var result181 = this._parse_hexEscapeSequence(context); if (result181 !== null) { var result178 = result181; } else { var result180 = this._parse_unicodeEscapeSequence(context); if (result180 !== null) { var result178 = result180; } else { var result179 = this._parse_eolEscapeSequence(context); if (result179 !== null) { var result178 = result179; } else { var result178 = null;; }; }; }; }; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result178 }; return result178; }, _parse_simpleSingleQuotedCharacter: function(context) { var cacheKey = "simpleSingleQuotedCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos32 = this._pos; var savedPos33 = this._pos; var savedReportMatchFailuresVar2 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 1) === "'") { var result192 = "'"; this._pos += 1; } else { var result192 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("'")); } } if (result192 !== null) { var result189 = result192; } else { if (this._input.substr(this._pos, 1) === "\\") { var result191 = "\\"; this._pos += 1; } else { var result191 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } if (result191 !== null) { var result189 = result191; } else { var result190 = this._parse_eolChar(context); if (result190 !== null) { var result189 = result190; } else { var result189 = null;; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar2; if (result189 === null) { var result187 = ''; } else { var result187 = null; this._pos = savedPos33; } if (result187 !== null) { if (this._input.length > this._pos) { var result188 = this._input.charAt(this._pos); this._pos++; } else { var result188 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result188 !== null) { var result186 = [result187, result188]; } else { var result186 = null; this._pos = savedPos32; } } else { var result186 = null; this._pos = savedPos32; } var result185 = result186 !== null ? (function($1, $2) { return $2; }).apply(this, result186) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result185 }; return result185; }, _parse_class: function(context) { var cacheKey = "class" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var savedPos34 = this._pos; if (this._input.substr(this._pos, 1) === "[") { var result195 = "["; this._pos += 1; } else { var result195 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("[")); } } if (result195 !== null) { if (this._input.substr(this._pos, 1) === "^") { var result203 = "^"; this._pos += 1; } else { var result203 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("^")); } } var result196 = result203 !== null ? result203 : ''; if (result196 !== null) { var result197 = []; var result202 = this._parse_classCharacterRange(context); if (result202 !== null) { var result200 = result202; } else { var result201 = this._parse_classCharacter(context); if (result201 !== null) { var result200 = result201; } else { var result200 = null;; }; } while (result200 !== null) { result197.push(result200); var result202 = this._parse_classCharacterRange(context); if (result202 !== null) { var result200 = result202; } else { var result201 = this._parse_classCharacter(context); if (result201 !== null) { var result200 = result201; } else { var result200 = null;; }; } } if (result197 !== null) { if (this._input.substr(this._pos, 1) === "]") { var result198 = "]"; this._pos += 1; } else { var result198 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("]")); } } if (result198 !== null) { var result199 = this._parse___(context); if (result199 !== null) { var result194 = [result195, result196, result197, result198, result199]; } else { var result194 = null; this._pos = savedPos34; } } else { var result194 = null; this._pos = savedPos34; } } else { var result194 = null; this._pos = savedPos34; } } else { var result194 = null; this._pos = savedPos34; } } else { var result194 = null; this._pos = savedPos34; } var result193 = result194 !== null ? (function($1, $2, $3, $4, $5) { return $2 + $3.join(""); }).apply(this, result194) : null; context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result193 === null) { this._matchFailed("character class"); } this._cache[cacheKey] = { nextPos: this._pos, result: result193 }; return result193; }, _parse_classCharacterRange: function(context) { var cacheKey = "classCharacterRange" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos35 = this._pos; var result206 = this._parse_bracketDelimitedCharacter(context); if (result206 !== null) { if (this._input.substr(this._pos, 1) === "-") { var result207 = "-"; this._pos += 1; } else { var result207 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("-")); } } if (result207 !== null) { var result208 = this._parse_bracketDelimitedCharacter(context); if (result208 !== null) { var result205 = [result206, result207, result208]; } else { var result205 = null; this._pos = savedPos35; } } else { var result205 = null; this._pos = savedPos35; } } else { var result205 = null; this._pos = savedPos35; } var result204 = result205 !== null ? (function($1, $2, $3) { if ($1.charCodeAt(0) > $3.charCodeAt(0)) { throw new this.SyntaxError( "Invalid character range: " + PEG.RegExpUtils.quoteForClass($1) + "-" + PEG.RegExpUtils.quoteForClass($3) + "." ); } return PEG.RegExpUtils.quoteForClass($1) + "-" + PEG.RegExpUtils.quoteForClass($3); }).apply(this, result205) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result204 }; return result204; }, _parse_classCharacter: function(context) { var cacheKey = "classCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result210 = this._parse_bracketDelimitedCharacter(context); var result209 = result210 !== null ? (function($1) { return PEG.RegExpUtils.quoteForClass($1); }).call(this, result210) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result209 }; return result209; }, _parse_bracketDelimitedCharacter: function(context) { var cacheKey = "bracketDelimitedCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result217 = this._parse_simpleBracketDelimitedCharacter(context); if (result217 !== null) { var result211 = result217; } else { var result216 = this._parse_simpleEscapeSequence(context); if (result216 !== null) { var result211 = result216; } else { var result215 = this._parse_zeroEscapeSequence(context); if (result215 !== null) { var result211 = result215; } else { var result214 = this._parse_hexEscapeSequence(context); if (result214 !== null) { var result211 = result214; } else { var result213 = this._parse_unicodeEscapeSequence(context); if (result213 !== null) { var result211 = result213; } else { var result212 = this._parse_eolEscapeSequence(context); if (result212 !== null) { var result211 = result212; } else { var result211 = null;; }; }; }; }; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result211 }; return result211; }, _parse_simpleBracketDelimitedCharacter: function(context) { var cacheKey = "simpleBracketDelimitedCharacter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos36 = this._pos; var savedPos37 = this._pos; var savedReportMatchFailuresVar3 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 1) === "]") { var result225 = "]"; this._pos += 1; } else { var result225 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("]")); } } if (result225 !== null) { var result222 = result225; } else { if (this._input.substr(this._pos, 1) === "\\") { var result224 = "\\"; this._pos += 1; } else { var result224 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } if (result224 !== null) { var result222 = result224; } else { var result223 = this._parse_eolChar(context); if (result223 !== null) { var result222 = result223; } else { var result222 = null;; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar3; if (result222 === null) { var result220 = ''; } else { var result220 = null; this._pos = savedPos37; } if (result220 !== null) { if (this._input.length > this._pos) { var result221 = this._input.charAt(this._pos); this._pos++; } else { var result221 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result221 !== null) { var result219 = [result220, result221]; } else { var result219 = null; this._pos = savedPos36; } } else { var result219 = null; this._pos = savedPos36; } var result218 = result219 !== null ? (function($1, $2) { return $2; }).apply(this, result219) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result218 }; return result218; }, _parse_simpleEscapeSequence: function(context) { var cacheKey = "simpleEscapeSequence" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos38 = this._pos; if (this._input.substr(this._pos, 1) === "\\") { var result228 = "\\"; this._pos += 1; } else { var result228 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } if (result228 !== null) { var savedPos39 = this._pos; var savedReportMatchFailuresVar4 = context.reportMatchFailures; context.reportMatchFailures = false; var result235 = this._parse_digit(context); if (result235 !== null) { var result231 = result235; } else { if (this._input.substr(this._pos, 1) === "x") { var result234 = "x"; this._pos += 1; } else { var result234 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("x")); } } if (result234 !== null) { var result231 = result234; } else { if (this._input.substr(this._pos, 1) === "u") { var result233 = "u"; this._pos += 1; } else { var result233 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("u")); } } if (result233 !== null) { var result231 = result233; } else { var result232 = this._parse_eolChar(context); if (result232 !== null) { var result231 = result232; } else { var result231 = null;; }; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar4; if (result231 === null) { var result229 = ''; } else { var result229 = null; this._pos = savedPos39; } if (result229 !== null) { if (this._input.length > this._pos) { var result230 = this._input.charAt(this._pos); this._pos++; } else { var result230 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result230 !== null) { var result227 = [result228, result229, result230]; } else { var result227 = null; this._pos = savedPos38; } } else { var result227 = null; this._pos = savedPos38; } } else { var result227 = null; this._pos = savedPos38; } var result226 = result227 !== null ? (function($1, $2, $3) { return $3 .replace("b", "\b") .replace("f", "\f") .replace("n", "\n") .replace("r", "\r") .replace("t", "\t") .replace("v", "\x0B") // IE does not recognize "\v". }).apply(this, result227) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result226 }; return result226; }, _parse_zeroEscapeSequence: function(context) { var cacheKey = "zeroEscapeSequence" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos40 = this._pos; if (this._input.substr(this._pos, 2) === "\\0") { var result238 = "\\0"; this._pos += 2; } else { var result238 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\0")); } } if (result238 !== null) { var savedPos41 = this._pos; var savedReportMatchFailuresVar5 = context.reportMatchFailures; context.reportMatchFailures = false; var result240 = this._parse_digit(context); context.reportMatchFailures = savedReportMatchFailuresVar5; if (result240 === null) { var result239 = ''; } else { var result239 = null; this._pos = savedPos41; } if (result239 !== null) { var result237 = [result238, result239]; } else { var result237 = null; this._pos = savedPos40; } } else { var result237 = null; this._pos = savedPos40; } var result236 = result237 !== null ? (function($1, $2) { return "\0"; }).apply(this, result237) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result236 }; return result236; }, _parse_hexEscapeSequence: function(context) { var cacheKey = "hexEscapeSequence" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos42 = this._pos; if (this._input.substr(this._pos, 2) === "\\x") { var result243 = "\\x"; this._pos += 2; } else { var result243 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\x")); } } if (result243 !== null) { var result244 = this._parse_hexDigit(context); if (result244 !== null) { var result245 = this._parse_hexDigit(context); if (result245 !== null) { var result242 = [result243, result244, result245]; } else { var result242 = null; this._pos = savedPos42; } } else { var result242 = null; this._pos = savedPos42; } } else { var result242 = null; this._pos = savedPos42; } var result241 = result242 !== null ? (function($1, $2, $3) { return String.fromCharCode(parseInt("0x" + $2 + $3)); }).apply(this, result242) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result241 }; return result241; }, _parse_unicodeEscapeSequence: function(context) { var cacheKey = "unicodeEscapeSequence" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos43 = this._pos; if (this._input.substr(this._pos, 2) === "\\u") { var result248 = "\\u"; this._pos += 2; } else { var result248 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\u")); } } if (result248 !== null) { var result249 = this._parse_hexDigit(context); if (result249 !== null) { var result250 = this._parse_hexDigit(context); if (result250 !== null) { var result251 = this._parse_hexDigit(context); if (result251 !== null) { var result252 = this._parse_hexDigit(context); if (result252 !== null) { var result247 = [result248, result249, result250, result251, result252]; } else { var result247 = null; this._pos = savedPos43; } } else { var result247 = null; this._pos = savedPos43; } } else { var result247 = null; this._pos = savedPos43; } } else { var result247 = null; this._pos = savedPos43; } } else { var result247 = null; this._pos = savedPos43; } var result246 = result247 !== null ? (function($1, $2, $3, $4, $5) { return String.fromCharCode(parseInt("0x" + $2 + $3 + $4 + $5)); }).apply(this, result247) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result246 }; return result246; }, _parse_eolEscapeSequence: function(context) { var cacheKey = "eolEscapeSequence" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos44 = this._pos; if (this._input.substr(this._pos, 1) === "\\") { var result255 = "\\"; this._pos += 1; } else { var result255 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } if (result255 !== null) { var result256 = this._parse_eol(context); if (result256 !== null) { var result254 = [result255, result256]; } else { var result254 = null; this._pos = savedPos44; } } else { var result254 = null; this._pos = savedPos44; } var result253 = result254 !== null ? (function($1, $2) { return $2; }).apply(this, result254) : null; this._cache[cacheKey] = { nextPos: this._pos, result: result253 }; return result253; }, _parse_digit: function(context) { var cacheKey = "digit" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; if (this._input.substr(this._pos).match(/^[0-9]/) !== null) { var result257 = this._input.charAt(this._pos); this._pos++; } else { var result257 = null; if (context.reportMatchFailures) { this._matchFailed('[' + "0-9" + ']'); } } this._cache[cacheKey] = { nextPos: this._pos, result: result257 }; return result257; }, _parse_hexDigit: function(context) { var cacheKey = "hexDigit" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; if (this._input.substr(this._pos).match(/^[0-9a-fA-F]/) !== null) { var result258 = this._input.charAt(this._pos); this._pos++; } else { var result258 = null; if (context.reportMatchFailures) { this._matchFailed('[' + "0-9a-fA-F" + ']'); } } this._cache[cacheKey] = { nextPos: this._pos, result: result258 }; return result258; }, _parse_letter: function(context) { var cacheKey = "letter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result261 = this._parse_lowerCaseLetter(context); if (result261 !== null) { var result259 = result261; } else { var result260 = this._parse_upperCaseLetter(context); if (result260 !== null) { var result259 = result260; } else { var result259 = null;; }; } this._cache[cacheKey] = { nextPos: this._pos, result: result259 }; return result259; }, _parse_lowerCaseLetter: function(context) { var cacheKey = "lowerCaseLetter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; if (this._input.substr(this._pos).match(/^[a-z]/) !== null) { var result262 = this._input.charAt(this._pos); this._pos++; } else { var result262 = null; if (context.reportMatchFailures) { this._matchFailed('[' + "a-z" + ']'); } } this._cache[cacheKey] = { nextPos: this._pos, result: result262 }; return result262; }, _parse_upperCaseLetter: function(context) { var cacheKey = "upperCaseLetter" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; if (this._input.substr(this._pos).match(/^[A-Z]/) !== null) { var result263 = this._input.charAt(this._pos); this._pos++; } else { var result263 = null; if (context.reportMatchFailures) { this._matchFailed('[' + "A-Z" + ']'); } } this._cache[cacheKey] = { nextPos: this._pos, result: result263 }; return result263; }, _parse___: function(context) { var cacheKey = "__" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var result264 = []; var result268 = this._parse_whitespace(context); if (result268 !== null) { var result265 = result268; } else { var result267 = this._parse_eol(context); if (result267 !== null) { var result265 = result267; } else { var result266 = this._parse_comment(context); if (result266 !== null) { var result265 = result266; } else { var result265 = null;; }; }; } while (result265 !== null) { result264.push(result265); var result268 = this._parse_whitespace(context); if (result268 !== null) { var result265 = result268; } else { var result267 = this._parse_eol(context); if (result267 !== null) { var result265 = result267; } else { var result266 = this._parse_comment(context); if (result266 !== null) { var result265 = result266; } else { var result265 = null;; }; }; } } this._cache[cacheKey] = { nextPos: this._pos, result: result264 }; return result264; }, _parse_comment: function(context) { var cacheKey = "comment" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; var result271 = this._parse_singleLineComment(context); if (result271 !== null) { var result269 = result271; } else { var result270 = this._parse_multiLineComment(context); if (result270 !== null) { var result269 = result270; } else { var result269 = null;; }; } context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result269 === null) { this._matchFailed("comment"); } this._cache[cacheKey] = { nextPos: this._pos, result: result269 }; return result269; }, _parse_singleLineComment: function(context) { var cacheKey = "singleLineComment" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos45 = this._pos; if (this._input.substr(this._pos, 2) === "//") { var result273 = "//"; this._pos += 2; } else { var result273 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("//")); } } if (result273 !== null) { var result274 = []; var savedPos46 = this._pos; var savedPos47 = this._pos; var savedReportMatchFailuresVar6 = context.reportMatchFailures; context.reportMatchFailures = false; var result278 = this._parse_eolChar(context); context.reportMatchFailures = savedReportMatchFailuresVar6; if (result278 === null) { var result276 = ''; } else { var result276 = null; this._pos = savedPos47; } if (result276 !== null) { if (this._input.length > this._pos) { var result277 = this._input.charAt(this._pos); this._pos++; } else { var result277 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result277 !== null) { var result275 = [result276, result277]; } else { var result275 = null; this._pos = savedPos46; } } else { var result275 = null; this._pos = savedPos46; } while (result275 !== null) { result274.push(result275); var savedPos46 = this._pos; var savedPos47 = this._pos; var savedReportMatchFailuresVar6 = context.reportMatchFailures; context.reportMatchFailures = false; var result278 = this._parse_eolChar(context); context.reportMatchFailures = savedReportMatchFailuresVar6; if (result278 === null) { var result276 = ''; } else { var result276 = null; this._pos = savedPos47; } if (result276 !== null) { if (this._input.length > this._pos) { var result277 = this._input.charAt(this._pos); this._pos++; } else { var result277 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result277 !== null) { var result275 = [result276, result277]; } else { var result275 = null; this._pos = savedPos46; } } else { var result275 = null; this._pos = savedPos46; } } if (result274 !== null) { var result272 = [result273, result274]; } else { var result272 = null; this._pos = savedPos45; } } else { var result272 = null; this._pos = savedPos45; } this._cache[cacheKey] = { nextPos: this._pos, result: result272 }; return result272; }, _parse_multiLineComment: function(context) { var cacheKey = "multiLineComment" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; var savedPos48 = this._pos; if (this._input.substr(this._pos, 2) === "/*") { var result280 = "/*"; this._pos += 2; } else { var result280 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("/*")); } } if (result280 !== null) { var result281 = []; var savedPos49 = this._pos; var savedPos50 = this._pos; var savedReportMatchFailuresVar7 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 2) === "*/") { var result286 = "*/"; this._pos += 2; } else { var result286 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("*/")); } } context.reportMatchFailures = savedReportMatchFailuresVar7; if (result286 === null) { var result284 = ''; } else { var result284 = null; this._pos = savedPos50; } if (result284 !== null) { if (this._input.length > this._pos) { var result285 = this._input.charAt(this._pos); this._pos++; } else { var result285 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result285 !== null) { var result283 = [result284, result285]; } else { var result283 = null; this._pos = savedPos49; } } else { var result283 = null; this._pos = savedPos49; } while (result283 !== null) { result281.push(result283); var savedPos49 = this._pos; var savedPos50 = this._pos; var savedReportMatchFailuresVar7 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 2) === "*/") { var result286 = "*/"; this._pos += 2; } else { var result286 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("*/")); } } context.reportMatchFailures = savedReportMatchFailuresVar7; if (result286 === null) { var result284 = ''; } else { var result284 = null; this._pos = savedPos50; } if (result284 !== null) { if (this._input.length > this._pos) { var result285 = this._input.charAt(this._pos); this._pos++; } else { var result285 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } if (result285 !== null) { var result283 = [result284, result285]; } else { var result283 = null; this._pos = savedPos49; } } else { var result283 = null; this._pos = savedPos49; } } if (result281 !== null) { if (this._input.substr(this._pos, 2) === "*/") { var result282 = "*/"; this._pos += 2; } else { var result282 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("*/")); } } if (result282 !== null) { var result279 = [result280, result281, result282]; } else { var result279 = null; this._pos = savedPos48; } } else { var result279 = null; this._pos = savedPos48; } } else { var result279 = null; this._pos = savedPos48; } this._cache[cacheKey] = { nextPos: this._pos, result: result279 }; return result279; }, _parse_eol: function(context) { var cacheKey = "eol" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { 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 result292 = "\n"; this._pos += 1; } else { var result292 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\n")); } } if (result292 !== null) { var result287 = result292; } else { if (this._input.substr(this._pos, 2) === "\r\n") { var result291 = "\r\n"; this._pos += 2; } else { var result291 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\r\n")); } } if (result291 !== null) { var result287 = result291; } else { if (this._input.substr(this._pos, 1) === "\r") { var result290 = "\r"; this._pos += 1; } else { var result290 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\r")); } } if (result290 !== null) { var result287 = result290; } else { if (this._input.substr(this._pos, 1) === "\u2028") { var result289 = "\u2028"; this._pos += 1; } else { var result289 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\u2028")); } } if (result289 !== null) { var result287 = result289; } else { if (this._input.substr(this._pos, 1) === "\u2029") { var result288 = "\u2029"; this._pos += 1; } else { var result288 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\u2029")); } } if (result288 !== null) { var result287 = result288; } else { var result287 = null;; }; }; }; }; } context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result287 === null) { this._matchFailed("end of line"); } this._cache[cacheKey] = { nextPos: this._pos, result: result287 }; return result287; }, _parse_eolChar: function(context) { var cacheKey = "eolChar" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { this._pos = cachedResult.nextPos; return cachedResult.result; } var pos = this._pos; if (this._input.substr(this._pos).match(/^[\n\r\u2028\u2029]/) !== null) { var result293 = this._input.charAt(this._pos); this._pos++; } else { var result293 = null; if (context.reportMatchFailures) { this._matchFailed('[' + "\\n\\r\\u2028\\u2029" + ']'); } } this._cache[cacheKey] = { nextPos: this._pos, result: result293 }; return result293; }, _parse_whitespace: function(context) { var cacheKey = "whitespace" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; if (cachedResult !== undefined) { 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 result294 = this._input.charAt(this._pos); this._pos++; } else { var result294 = null; if (context.reportMatchFailures) { this._matchFailed('[' + "   ᠎ -    " + ']'); } } context.reportMatchFailures = savedReportMatchFailures; if (context.reportMatchFailures && result294 === null) { this._matchFailed("whitespace"); } this._cache[cacheKey] = { nextPos: this._pos, result: result294 }; return result294; }, /* * 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_' + this._startRule](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; })();