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