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

3505 lines
102 KiB
JavaScript

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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