You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pegjs/lib/metagrammar.js

3573 lines
102 KiB
JavaScript

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;
})();