From 439c815e486137ee9454a9f0c795e120d6d14871 Mon Sep 17 00:00:00 2001 From: David Majda Date: Mon, 7 Jun 2010 12:11:48 +0200 Subject: [PATCH] Move lot of stuff in generated parsers into the |parse| method We want to have the rule parsing functions inside the |parse| method because we want them to share a common environment. In the future, initializers will be executed in this enviromnent and thus functions and variables defined by them will be accessible to the rule parsing functions. Moving various private properties from the parser object into the |parse| method was not strictly necessary, but it was a natural step after moving the functions. --- lib/compiler.js | 209 +- lib/metagrammar.js | 5602 ++++++++++++++++++++++---------------------- 2 files changed, 2842 insertions(+), 2969 deletions(-) diff --git a/lib/compiler.js b/lib/compiler.js index 0e01445..52d860d 100644 --- a/lib/compiler.js +++ b/lib/compiler.js @@ -465,7 +465,7 @@ PEG.Compiler = { ); var reportMatchFailureCode = PEG.Compiler.formatCode( "if (context.reportMatchFailures && ${resultVar} === null) {", - " this._matchFailed(${displayName|string});", + " matchFailed(${displayName|string});", "}", { displayName: node.displayName, @@ -479,27 +479,25 @@ PEG.Compiler = { } return PEG.Compiler.formatCode( - "_parse_${name}: function(context) {", - " var cacheKey = ${name|string} + '@' + this._pos;", - " var cachedResult = this._cache[cacheKey];", + "function parse_${name}(context) {", + " var cacheKey = ${name|string} + '@' + pos;", + " var cachedResult = cache[cacheKey];", " if (cachedResult) {", - " this._pos = cachedResult.nextPos;", + " pos = cachedResult.nextPos;", " return cachedResult.result;", " }", " ", - " var pos = this._pos;", - " ", " ${setReportMatchFailuresCode}", " ${code}", " ${restoreReportMatchFailuresCode}", " ${reportMatchFailureCode}", " ", - " this._cache[cacheKey] = {", - " nextPos: this._pos,", + " cache[cacheKey] = {", + " nextPos: pos,", " result: ${resultVar}", " };", " return ${resultVar};", - "},", + "}", { name: node.name, setReportMatchFailuresCode: setReportMatchFailuresCode, @@ -516,16 +514,15 @@ PEG.Compiler = { * is as follows: * * * The code fragment should try to match a part of the input starting with - * the position indicated in |this._pos|. That position may point past the - * end of the input. + * the position indicated in |pos|. That position may point past the end of + * the input. * - * * If the code fragment matches the input, it advances |this._pos| after - * the matched part of the input and sets variable with a name stored in + * * If the code fragment matches the input, it advances |pos| after the + * matched part of the input and sets variable with a name stored in * |resultVar| to appropriate value, which is always non-null. * - * * If the code fragment does not match the input, it does not change - * |this._pos| and it sets a variable with a name stored in |resultVar| to - * |null|. + * * If the code fragment does not match the input, it does not change |pos| + * and it sets a variable with a name stored in |resultVar| to |null|. */ choice: function(node, resultVar) { @@ -577,7 +574,7 @@ PEG.Compiler = { " ${code}", "} else {", " var ${resultVar} = null;", - " this._pos = ${savedPosVar};", + " pos = ${savedPosVar};", "}", { elementCode: PEG.Compiler.compileNode(node.elements[i], elementResultVars[i]), @@ -590,7 +587,7 @@ PEG.Compiler = { } return PEG.Compiler.formatCode( - "var ${savedPosVar} = this._pos;", + "var ${savedPosVar} = pos;", "${code}", { code: code, @@ -609,14 +606,14 @@ PEG.Compiler = { var expressionResultVar = PEG.Compiler.generateUniqueIdentifier("result"); return PEG.Compiler.formatCode( - "var ${savedPosVar} = this._pos;", + "var ${savedPosVar} = pos;", "var ${savedReportMatchFailuresVar} = context.reportMatchFailures;", "context.reportMatchFailures = false;", "${expressionCode}", "context.reportMatchFailures = ${savedReportMatchFailuresVar};", "if (${expressionResultVar} !== null) {", " var ${resultVar} = '';", - " this._pos = ${savedPosVar};", + " pos = ${savedPosVar};", "} else {", " var ${resultVar} = null;", "}", @@ -636,7 +633,7 @@ PEG.Compiler = { var expressionResultVar = PEG.Compiler.generateUniqueIdentifier("result"); return PEG.Compiler.formatCode( - "var ${savedPosVar} = this._pos;", + "var ${savedPosVar} = pos;", "var ${savedReportMatchFailuresVar} = context.reportMatchFailures;", "context.reportMatchFailures = false;", "${expressionCode}", @@ -645,7 +642,7 @@ PEG.Compiler = { " var ${resultVar} = '';", "} else {", " var ${resultVar} = null;", - " this._pos = ${savedPosVar};", + " pos = ${savedPosVar};", "}", { expressionCode: PEG.Compiler.compileNode(node.expression, expressionResultVar), @@ -761,9 +758,9 @@ PEG.Compiler = { rule_ref: function(node, resultVar) { return PEG.Compiler.formatCode( - "var ${resultVar} = this.${ruleMethod}(context);", + "var ${resultVar} = ${ruleMethod}(context);", { - ruleMethod: "_parse_" + node.name, + ruleMethod: "parse_" + node.name, resultVar: resultVar } ); @@ -771,13 +768,13 @@ PEG.Compiler = { literal: function(node, resultVar) { return PEG.Compiler.formatCode( - "if (this._input.substr(this._pos, ${length}) === ${value|string}) {", + "if (input.substr(pos, ${length}) === ${value|string}) {", " var ${resultVar} = ${value|string};", - " this._pos += ${length};", + " pos += ${length};", "} else {", " var ${resultVar} = null;", " if (context.reportMatchFailures) {", - " this._matchFailed(this._quoteString(${value|string}));", + " matchFailed(quoteString(${value|string}));", " }", "}", { @@ -790,13 +787,13 @@ PEG.Compiler = { any: function(node, resultVar) { return PEG.Compiler.formatCode( - "if (this._input.length > this._pos) {", - " var ${resultVar} = this._input.charAt(this._pos);", - " this._pos++;", + "if (input.length > pos) {", + " var ${resultVar} = input.charAt(pos);", + " pos++;", "} else {", " var ${resultVar} = null;", " if (context.reportMatchFailures) {", - " this._matchFailed('any character');", + " matchFailed('any character');", " }", "}", { resultVar: resultVar } @@ -824,13 +821,13 @@ PEG.Compiler = { } return PEG.Compiler.formatCode( - "if (this._input.substr(this._pos).match(${regexp}) !== null) {", - " var ${resultVar} = this._input.charAt(this._pos);", - " this._pos++;", + "if (input.substr(pos).match(${regexp}) !== null) {", + " var ${resultVar} = input.charAt(pos);", + " pos++;", "} else {", " var ${resultVar} = null;", " if (context.reportMatchFailures) {", - " this._matchFailed(${rawText|string});", + " matchFailed(${rawText|string});", " }", "}", { @@ -884,56 +881,6 @@ PEG.Compiler = { " /* Generated by PEG.js (http://pegjs.majda.cz/). */", " ", " var result = {", - /* This needs to be in sync with PEG.StringUtils.quote. */ - " _quoteString: function(s) {", - " /*", - " * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string", - " * literal except for the closing quote character, backslash, carriage", - " * return, line separator, paragraph separator, and line feed. Any character", - " * may appear in the form of an escape sequence.", - " */", - " return '\"' + s", - " .replace(/\\\\/g, '\\\\\\\\') // backslash", - " .replace(/\"/g, '\\\\\"') // closing quote character", - " .replace(/\\r/g, '\\\\r') // carriage return", - " .replace(/\\u2028/g, '\\\\u2028') // line separator", - " .replace(/\\u2029/g, '\\\\u2029') // paragraph separator", - " .replace(/\\n/g, '\\\\n') // line feed", - " + '\"';", - " },", - " ", - /* This needs to be in sync with PEG.ArrayUtils.contains. */ - " _arrayContains: function(array, value) {", - " /*", - " * Stupid IE does not have Array.prototype.indexOf, otherwise this function", - " * would be a one-liner.", - " */", - " var length = array.length;", - " for (var i = 0; i < length; i++) {", - " if (array[i] === value) {", - " return true;", - " }", - " }", - " return false;", - " },", - " ", - " _matchFailed: function(failure) {", - " if (this._pos < this._rightmostMatchFailuresPos) {", - " return;", - " }", - " ", - " if (this._pos > this._rightmostMatchFailuresPos) {", - " this._rightmostMatchFailuresPos = this._pos;", - " this._rightmostMatchFailuresExpected = [];", - " }", - " ", - " if (!this._arrayContains(this._rightmostMatchFailuresExpected, failure)) {", - " this._rightmostMatchFailuresExpected.push(failure);", - " }", - " },", - " ", - " ${parseFunctionDefinitions}", - " ", " /*", " * Parses the input with a generated parser. If the parsing is successfull,", " * returns a value explicitly or implicitly specified by the grammar from", @@ -941,16 +888,61 @@ PEG.Compiler = { " * unsuccessful, throws |PEG.grammarParser.SyntaxError| describing the error.", " */", " parse: function(input) {", - " var that = this;", + " var pos = 0;", + " var rightmostMatchFailuresPos = 0;", + " var rightmostMatchFailuresExpected = [];", + " var cache = {};", + " ", + /* This needs to be in sync with PEG.StringUtils.quote. */ + " 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", + " + '\"';", + " }", + " ", + /* This needs to be in sync with PEG.ArrayUtils.contains. */ + " 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 initialize() {", - " that._input = input;", - " that._pos = 0;", - " that._rightmostMatchFailuresPos = 0;", - " that._rightmostMatchFailuresExpected = [];", - " that._cache = {};", + " function matchFailed(failure) {", + " if (pos < rightmostMatchFailuresPos) {", + " return;", + " }", + " ", + " if (pos > rightmostMatchFailuresPos) {", + " rightmostMatchFailuresPos = pos;", + " rightmostMatchFailuresExpected = [];", + " }", + " ", + " if (!arrayContains(rightmostMatchFailuresExpected, failure)) {", + " rightmostMatchFailuresExpected.push(failure);", + " }", " }", " ", + " ${parseFunctionDefinitions}", + " ", " function buildErrorMessage() {", " function buildExpected(failuresExpected) {", " switch (failuresExpected.length) {", @@ -966,10 +958,10 @@ PEG.Compiler = { " }", " }", " ", - " var expected = buildExpected(that._rightmostMatchFailuresExpected);", - " var pos = Math.max(that._pos, that._rightmostMatchFailuresPos);", - " var actual = pos < that._input.length", - " ? that._quoteString(that._input.charAt(pos))", + " 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.';", @@ -983,13 +975,11 @@ PEG.Compiler = { " * enough to prevent it.", " */", " ", - " var input = that._input;", - " var pos = that._rightmostMatchFailuresPos;", " var line = 1;", " var column = 1;", " var seenCR = false;", " ", - " for (var i = 0; i < pos; i++) {", + " for (var i = 0; i < rightmostMatchFailuresPos; i++) {", " var ch = input.charAt(i);", " if (ch === '\\n') {", " if (!seenCR) { line++; }", @@ -1008,13 +998,11 @@ PEG.Compiler = { " return { line: line, column: column };", " }", " ", - " initialize();", - " ", " var initialContext = {", " reportMatchFailures: true", " };", " ", - " var result = this._parse_${startRule}(initialContext);", + " var result = parse_${startRule}(initialContext);", " ", " /*", " * The parser is now in one of the following three states:", @@ -1022,27 +1010,28 @@ PEG.Compiler = { " * 1. The parser successfully parsed the whole input.", " *", " * - |result !== null|", - " * - |that._pos === input.length|", - " * - |that._rightmostMatchFailuresExpected.length| may or may not contain", + " * - |pos === input.length|", + " * - |rightmostMatchFailuresExpected.length| may or may not contain", " * something", " *", " * 2. The parser successfully parsed only a part of the input.", " *", " * - |result !== null|", - " * - |that._pos < input.length|", - " * - |that._rightmostMatchFailuresExpected.length| may or may not contain", + " * - |pos < input.length|", + " * - |rightmostMatchFailuresExpected.length| may or may not contain", " * something", " *", " * 3. The parser did not successfully parse any part of the input.", " *", " * - |result === null|", - " * - |that._pos === 0|", - " * - |that._rightmostMatchFailuresExpected.length| contains at least one failure", + " * - |pos === 0|", + " * - |rightmostMatchFailuresExpected.length| contains at least one", + " * failure", " *", " * All code following this comment (including called functions) must", " * handle these states.", " */", - " if (result === null || this._pos !== input.length) {", + " if (result === null || pos !== input.length) {", " var errorPosition = computeErrorPosition();", " throw new this.SyntaxError(", " buildErrorMessage(),", diff --git a/lib/metagrammar.js b/lib/metagrammar.js index cf1c018..e81e0e6 100644 --- a/lib/metagrammar.js +++ b/lib/metagrammar.js @@ -2,1590 +2,1513 @@ PEG.grammarParser = (function(){ /* Generated by PEG.js (http://pegjs.majda.cz/). */ var result = { - _quoteString: function(s) { - /* - * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string - * literal except for the closing quote character, backslash, carriage - * return, line separator, paragraph separator, and line feed. Any character - * may appear in the form of an escape sequence. - */ - return '"' + s - .replace(/\\/g, '\\\\') // backslash - .replace(/"/g, '\\"') // closing quote character - .replace(/\r/g, '\\r') // carriage return - .replace(/\u2028/g, '\\u2028') // line separator - .replace(/\u2029/g, '\\u2029') // paragraph separator - .replace(/\n/g, '\\n') // line feed - + '"'; - }, - - _arrayContains: function(array, value) { - /* - * Stupid IE does not have Array.prototype.indexOf, otherwise this function - * would be a one-liner. - */ - var length = array.length; - for (var i = 0; i < length; i++) { - if (array[i] === value) { - return true; - } - } - return false; - }, - - _matchFailed: function(failure) { - if (this._pos < this._rightmostMatchFailuresPos) { - return; - } - - if (this._pos > this._rightmostMatchFailuresPos) { - this._rightmostMatchFailuresPos = this._pos; - this._rightmostMatchFailuresExpected = []; - } + /* + * 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 = {}; - if (!this._arrayContains(this._rightmostMatchFailuresExpected, failure)) { - this._rightmostMatchFailuresExpected.push(failure); - } - }, - - _parse_grammar: function(context) { - var cacheKey = "grammar" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + 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 + + '"'; } - var pos = this._pos; - - - var savedPos0 = this._pos; - var result2 = this._parse___(context); - if (result2 !== null) { - var result4 = this._parse_rule(context); - if (result4 !== null) { - var result3 = []; - while (result4 !== null) { - result3.push(result4); - var result4 = this._parse_rule(context); + 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; } - } else { - var result3 = null; - } - if (result3 !== null) { - var result1 = [result2, result3]; - } else { - var result1 = null; - this._pos = savedPos0; } - } else { - var result1 = null; - this._pos = savedPos0; + return false; } - var result0 = result1 !== null - ? (function(rules) { - var result = {}; - PEG.ArrayUtils.each(rules, function(rule) { result[rule.name] = rule; }); - return result; - })(result1[1]) - : null; - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result0 - }; - return result0; - }, - - _parse_rule: function(context) { - var cacheKey = "rule" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + function matchFailed(failure) { + if (pos < rightmostMatchFailuresPos) { + return; + } + + if (pos > rightmostMatchFailuresPos) { + rightmostMatchFailuresPos = pos; + rightmostMatchFailuresExpected = []; + } + + if (!arrayContains(rightmostMatchFailuresExpected, failure)) { + rightmostMatchFailuresExpected.push(failure); + } } - var pos = this._pos; - - - var savedPos1 = this._pos; - var result7 = this._parse_identifier(context); - if (result7 !== null) { - var result14 = this._parse_literal(context); - if (result14 !== null) { - var result8 = result14; - } else { - if (this._input.substr(this._pos, 0) === "") { - var result13 = ""; - this._pos += 0; - } else { - var result13 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("")); + 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 result4 = parse_rule(context); + if (result4 !== null) { + var result3 = []; + while (result4 !== null) { + result3.push(result4); + var result4 = parse_rule(context); } + } else { + var result3 = null; } - if (result13 !== null) { - var result8 = result13; + if (result3 !== null) { + var result1 = [result2, result3]; } else { - var result8 = null;; - }; + var result1 = null; + pos = savedPos0; + } + } else { + var result1 = null; + pos = savedPos0; + } + var result0 = result1 !== null + ? (function(rules) { + var result = {}; + PEG.ArrayUtils.each(rules, function(rule) { result[rule.name] = rule; }); + return result; + })(result1[1]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result0 + }; + return result0; + } + + function parse_rule(context) { + var cacheKey = "rule" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - if (result8 !== null) { - var result9 = this._parse_equals(context); - if (result9 !== null) { - var result10 = this._parse_choice(context); - if (result10 !== null) { - var result12 = this._parse_semicolon(context); - var result11 = result12 !== null ? result12 : ''; - if (result11 !== null) { - var result6 = [result7, result8, result9, result10, result11]; + + + var savedPos1 = pos; + var result7 = parse_identifier(context); + if (result7 !== null) { + var result14 = parse_literal(context); + if (result14 !== null) { + var result8 = result14; + } else { + if (input.substr(pos, 0) === "") { + var result13 = ""; + pos += 0; + } else { + var result13 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("")); + } + } + if (result13 !== null) { + var result8 = result13; + } else { + var result8 = null;; + }; + } + if (result8 !== null) { + var result9 = parse_equals(context); + if (result9 !== null) { + var result10 = parse_choice(context); + if (result10 !== null) { + var result12 = parse_semicolon(context); + var result11 = result12 !== null ? result12 : ''; + if (result11 !== null) { + var result6 = [result7, result8, result9, result10, result11]; + } else { + var result6 = null; + pos = savedPos1; + } } else { var result6 = null; - this._pos = savedPos1; + pos = savedPos1; } } else { var result6 = null; - this._pos = savedPos1; + pos = savedPos1; } } else { var result6 = null; - this._pos = savedPos1; + pos = savedPos1; } } else { var result6 = null; - this._pos = savedPos1; + pos = savedPos1; } - } else { - var result6 = null; - this._pos = savedPos1; - } - var result5 = result6 !== null - ? (function(name, displayName, expression) { - return { - type: "rule", - name: name, - displayName: displayName !== "" ? displayName : null, - expression: expression - }; - })(result6[0], result6[1], result6[3]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result5 - }; - return result5; - }, - - _parse_choice: function(context) { - var cacheKey = "choice" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result5 = result6 !== null + ? (function(name, displayName, expression) { + return { + type: "rule", + name: name, + displayName: displayName !== "" ? displayName : null, + expression: expression + }; + })(result6[0], result6[1], result6[3]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result5 + }; + return result5; } - var pos = this._pos; - - - var savedPos2 = this._pos; - var result17 = this._parse_sequence(context); - if (result17 !== null) { - var result18 = []; - var savedPos3 = this._pos; - var result20 = this._parse_slash(context); - if (result20 !== null) { - var result21 = this._parse_sequence(context); - if (result21 !== null) { - var result19 = [result20, result21]; - } else { - var result19 = null; - this._pos = savedPos3; - } - } else { - var result19 = null; - this._pos = savedPos3; + function parse_choice(context) { + var cacheKey = "choice" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - while (result19 !== null) { - result18.push(result19); - var savedPos3 = this._pos; - var result20 = this._parse_slash(context); + + + var savedPos2 = pos; + var result17 = parse_sequence(context); + if (result17 !== null) { + var result18 = []; + var savedPos3 = pos; + var result20 = parse_slash(context); if (result20 !== null) { - var result21 = this._parse_sequence(context); + var result21 = parse_sequence(context); if (result21 !== null) { var result19 = [result20, result21]; } else { var result19 = null; - this._pos = savedPos3; + pos = savedPos3; } } else { var result19 = null; - this._pos = savedPos3; + pos = savedPos3; + } + while (result19 !== null) { + result18.push(result19); + var savedPos3 = pos; + var result20 = parse_slash(context); + if (result20 !== null) { + var result21 = parse_sequence(context); + if (result21 !== null) { + var result19 = [result20, result21]; + } else { + var result19 = null; + pos = savedPos3; + } + } else { + var result19 = null; + pos = savedPos3; + } + } + if (result18 !== null) { + var result16 = [result17, result18]; + } else { + var result16 = null; + pos = savedPos2; } - } - if (result18 !== null) { - var result16 = [result17, result18]; } else { var result16 = null; - this._pos = savedPos2; - } - } else { - var result16 = null; - this._pos = savedPos2; - } - var result15 = result16 !== null - ? (function(head, tail) { - if (tail.length > 0) { - var alternatives = [head].concat(PEG.ArrayUtils.map( - tail, - function(element) { return element[1]; } - )); - return { - type: "choice", - alternatives: alternatives + pos = savedPos2; + } + var result15 = result16 !== null + ? (function(head, tail) { + if (tail.length > 0) { + var alternatives = [head].concat(PEG.ArrayUtils.map( + tail, + function(element) { return element[1]; } + )); + return { + type: "choice", + alternatives: alternatives + } + } else { + return head; } - } else { - return head; - } - })(result16[0], result16[1]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result15 - }; - return result15; - }, - - _parse_sequence: function(context) { - var cacheKey = "sequence" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + })(result16[0], result16[1]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result15 + }; + return result15; } - var pos = this._pos; - - - var savedPos4 = this._pos; - var result28 = []; - var result30 = this._parse_labeled(context); - while (result30 !== null) { - result28.push(result30); - var result30 = this._parse_labeled(context); - } - if (result28 !== null) { - var result29 = this._parse_action(context); - if (result29 !== null) { - var result27 = [result28, result29]; + function parse_sequence(context) { + var cacheKey = "sequence" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; + } + + + var savedPos4 = pos; + var result28 = []; + var result30 = parse_labeled(context); + while (result30 !== null) { + result28.push(result30); + var result30 = parse_labeled(context); + } + if (result28 !== null) { + var result29 = parse_action(context); + if (result29 !== null) { + var result27 = [result28, result29]; + } else { + var result27 = null; + pos = savedPos4; + } } else { var result27 = null; - this._pos = savedPos4; + pos = savedPos4; } - } else { - var result27 = null; - this._pos = savedPos4; - } - var result26 = result27 !== null - ? (function(elements, action) { - var expression = elements.length != 1 - ? { - type: "sequence", - elements: elements - } - : elements[0]; - return { - type: "action", - expression: expression, - action: action - }; - })(result27[0], result27[1]) - : null; - if (result26 !== null) { - var result22 = result26; - } else { - var result24 = []; - var result25 = this._parse_labeled(context); - while (result25 !== null) { - result24.push(result25); - var result25 = this._parse_labeled(context); - } - var result23 = result24 !== null - ? (function(elements) { - return elements.length != 1 + var result26 = result27 !== null + ? (function(elements, action) { + var expression = elements.length != 1 ? { type: "sequence", elements: elements } : elements[0]; - })(result24) + return { + type: "action", + expression: expression, + action: action + }; + })(result27[0], result27[1]) : null; - if (result23 !== null) { - var result22 = result23; - } else { - var result22 = null;; - }; - } - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result22 - }; - return result22; - }, - - _parse_labeled: function(context) { - var cacheKey = "labeled" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - - var savedPos5 = this._pos; - var result35 = this._parse_identifier(context); - if (result35 !== null) { - var result36 = this._parse_colon(context); - if (result36 !== null) { - var result37 = this._parse_prefixed(context); - if (result37 !== null) { - var result34 = [result35, result36, result37]; - } else { - var result34 = null; - this._pos = savedPos5; + if (result26 !== null) { + var result22 = result26; + } else { + var result24 = []; + var result25 = parse_labeled(context); + while (result25 !== null) { + result24.push(result25); + var result25 = parse_labeled(context); } - } else { - var result34 = null; - this._pos = savedPos5; + var result23 = result24 !== null + ? (function(elements) { + return elements.length != 1 + ? { + type: "sequence", + elements: elements + } + : elements[0]; + })(result24) + : null; + if (result23 !== null) { + var result22 = result23; + } else { + var result22 = null;; + }; } - } else { - var result34 = null; - this._pos = savedPos5; - } - var result33 = result34 !== null - ? (function(label, expression) { - return { - type: "labeled", - label: label, - expression: expression - }; - })(result34[0], result34[2]) - : null; - if (result33 !== null) { - var result31 = result33; - } else { - var result32 = this._parse_prefixed(context); - if (result32 !== null) { - var result31 = result32; - } else { - var result31 = null;; + + + + cache[cacheKey] = { + nextPos: pos, + result: result22 }; + return result22; } - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result31 - }; - return result31; - }, - - _parse_prefixed: function(context) { - var cacheKey = "prefixed" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - - var savedPos7 = this._pos; - var result46 = this._parse_and(context); - if (result46 !== null) { - var result47 = this._parse_suffixed(context); - if (result47 !== null) { - var result45 = [result46, result47]; - } else { - var result45 = null; - this._pos = savedPos7; + function parse_labeled(context) { + var cacheKey = "labeled" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } else { - var result45 = null; - this._pos = savedPos7; - } - var result44 = result45 !== null - ? (function(expression) { - return { - type: "and_predicate", - expression: expression - }; - })(result45[1]) - : null; - if (result44 !== null) { - var result38 = result44; - } else { - var savedPos6 = this._pos; - var result42 = this._parse_not(context); - if (result42 !== null) { - var result43 = this._parse_suffixed(context); - if (result43 !== null) { - var result41 = [result42, result43]; + + + var savedPos5 = pos; + var result35 = parse_identifier(context); + if (result35 !== null) { + var result36 = parse_colon(context); + if (result36 !== null) { + var result37 = parse_prefixed(context); + if (result37 !== null) { + var result34 = [result35, result36, result37]; + } else { + var result34 = null; + pos = savedPos5; + } } else { - var result41 = null; - this._pos = savedPos6; + var result34 = null; + pos = savedPos5; } } else { - var result41 = null; - this._pos = savedPos6; + var result34 = null; + pos = savedPos5; } - var result40 = result41 !== null - ? (function(expression) { + var result33 = result34 !== null + ? (function(label, expression) { return { - type: "not_predicate", + type: "labeled", + label: label, expression: expression }; - })(result41[1]) + })(result34[0], result34[2]) : null; - if (result40 !== null) { - var result38 = result40; + if (result33 !== null) { + var result31 = result33; } else { - var result39 = this._parse_suffixed(context); - if (result39 !== null) { - var result38 = result39; + var result32 = parse_prefixed(context); + if (result32 !== null) { + var result31 = result32; } else { - var result38 = null;; + var result31 = null;; }; + } + + + + cache[cacheKey] = { + nextPos: pos, + result: result31 }; + return result31; } - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result38 - }; - return result38; - }, - - _parse_suffixed: function(context) { - var cacheKey = "suffixed" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - - var savedPos10 = this._pos; - var result60 = this._parse_primary(context); - if (result60 !== null) { - var result61 = this._parse_question(context); - if (result61 !== null) { - var result59 = [result60, result61]; - } else { - var result59 = null; - this._pos = savedPos10; + function parse_prefixed(context) { + var cacheKey = "prefixed" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } else { - var result59 = null; - this._pos = savedPos10; - } - var result58 = result59 !== null - ? (function(expression) { - return { - type: "optional", - expression: expression - }; - })(result59[0]) - : null; - if (result58 !== null) { - var result48 = result58; - } else { - var savedPos9 = this._pos; - var result56 = this._parse_primary(context); - if (result56 !== null) { - var result57 = this._parse_star(context); - if (result57 !== null) { - var result55 = [result56, result57]; + + + var savedPos7 = pos; + var result46 = parse_and(context); + if (result46 !== null) { + var result47 = parse_suffixed(context); + if (result47 !== null) { + var result45 = [result46, result47]; } else { - var result55 = null; - this._pos = savedPos9; + var result45 = null; + pos = savedPos7; } } else { - var result55 = null; - this._pos = savedPos9; + var result45 = null; + pos = savedPos7; } - var result54 = result55 !== null + var result44 = result45 !== null ? (function(expression) { return { - type: "zero_or_more", + type: "and_predicate", expression: expression }; - })(result55[0]) + })(result45[1]) : null; - if (result54 !== null) { - var result48 = result54; - } else { - var savedPos8 = this._pos; - var result52 = this._parse_primary(context); - if (result52 !== null) { - var result53 = this._parse_plus(context); - if (result53 !== null) { - var result51 = [result52, result53]; + if (result44 !== null) { + var result38 = result44; + } else { + var savedPos6 = pos; + var result42 = parse_not(context); + if (result42 !== null) { + var result43 = parse_suffixed(context); + if (result43 !== null) { + var result41 = [result42, result43]; } else { - var result51 = null; - this._pos = savedPos8; + var result41 = null; + pos = savedPos6; } } else { - var result51 = null; - this._pos = savedPos8; + var result41 = null; + pos = savedPos6; } - var result50 = result51 !== null + var result40 = result41 !== null ? (function(expression) { return { - type: "one_or_more", + type: "not_predicate", expression: expression }; - })(result51[0]) + })(result41[1]) : null; - if (result50 !== null) { - var result48 = result50; + if (result40 !== null) { + var result38 = result40; } else { - var result49 = this._parse_primary(context); - if (result49 !== null) { - var result48 = result49; + var result39 = parse_suffixed(context); + if (result39 !== null) { + var result38 = result39; } else { - var result48 = null;; + var result38 = null;; }; }; + } + + + + cache[cacheKey] = { + nextPos: pos, + result: result38 }; + return result38; } - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result48 - }; - return result48; - }, - - _parse_primary: function(context) { - var cacheKey = "primary" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - - var savedPos12 = this._pos; - var result75 = this._parse_identifier(context); - if (result75 !== null) { - var savedPos13 = this._pos; - var savedReportMatchFailuresVar0 = context.reportMatchFailures; - context.reportMatchFailures = false; - var savedPos14 = this._pos; - var result81 = this._parse_literal(context); - if (result81 !== null) { - var result78 = result81; - } else { - if (this._input.substr(this._pos, 0) === "") { - var result80 = ""; - this._pos += 0; - } else { - var result80 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("")); - } - } - if (result80 !== null) { - var result78 = result80; - } else { - var result78 = null;; - }; + function parse_suffixed(context) { + var cacheKey = "suffixed" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - if (result78 !== null) { - var result79 = this._parse_equals(context); - if (result79 !== null) { - var result77 = [result78, result79]; + + + var savedPos10 = pos; + var result60 = parse_primary(context); + if (result60 !== null) { + var result61 = parse_question(context); + if (result61 !== null) { + var result59 = [result60, result61]; } else { - var result77 = null; - this._pos = savedPos14; + var result59 = null; + pos = savedPos10; } } else { - var result77 = null; - this._pos = savedPos14; - } - context.reportMatchFailures = savedReportMatchFailuresVar0; - if (result77 === null) { - var result76 = ''; - } else { - var result76 = null; - this._pos = savedPos13; - } - if (result76 !== null) { - var result74 = [result75, result76]; - } else { - var result74 = null; - this._pos = savedPos12; + var result59 = null; + pos = savedPos10; } - } else { - var result74 = null; - this._pos = savedPos12; - } - var result73 = result74 !== null - ? (function(name) { - return { - type: "rule_ref", - name: name - }; - })(result74[0]) - : null; - if (result73 !== null) { - var result62 = result73; - } else { - var result72 = this._parse_literal(context); - var result71 = result72 !== null - ? (function(value) { + var result58 = result59 !== null + ? (function(expression) { return { - type: "literal", - value: value + type: "optional", + expression: expression }; - })(result72) + })(result59[0]) : null; - if (result71 !== null) { - var result62 = result71; - } else { - var result70 = this._parse_dot(context); - var result69 = result70 !== null - ? (function() { return { type: "any" }; })() + if (result58 !== null) { + var result48 = result58; + } else { + var savedPos9 = pos; + var result56 = parse_primary(context); + if (result56 !== null) { + var result57 = parse_star(context); + if (result57 !== null) { + var result55 = [result56, result57]; + } else { + var result55 = null; + pos = savedPos9; + } + } else { + var result55 = null; + pos = savedPos9; + } + var result54 = result55 !== null + ? (function(expression) { + return { + type: "zero_or_more", + expression: expression + }; + })(result55[0]) : null; - if (result69 !== null) { - var result62 = result69; + if (result54 !== null) { + var result48 = result54; } else { - var result68 = this._parse_class(context); - if (result68 !== null) { - var result62 = result68; + var savedPos8 = pos; + var result52 = parse_primary(context); + if (result52 !== null) { + var result53 = parse_plus(context); + if (result53 !== null) { + var result51 = [result52, result53]; + } else { + var result51 = null; + pos = savedPos8; + } } else { - var savedPos11 = this._pos; - var result65 = this._parse_lparen(context); - if (result65 !== null) { - var result66 = this._parse_choice(context); - if (result66 !== null) { - var result67 = this._parse_rparen(context); - if (result67 !== null) { - var result64 = [result65, result66, result67]; - } else { - var result64 = null; - this._pos = savedPos11; - } - } else { - var result64 = null; - this._pos = savedPos11; - } - } else { - var result64 = null; - this._pos = savedPos11; - } - var result63 = result64 !== null - ? (function(expression) { return expression; })(result64[1]) - : null; - if (result63 !== null) { - var result62 = result63; + var result51 = null; + pos = savedPos8; + } + var result50 = result51 !== null + ? (function(expression) { + return { + type: "one_or_more", + expression: expression + }; + })(result51[0]) + : null; + if (result50 !== null) { + var result48 = result50; + } else { + var result49 = parse_primary(context); + if (result49 !== null) { + var result48 = result49; } else { - var result62 = null;; + var result48 = null;; }; }; }; + } + + + + cache[cacheKey] = { + nextPos: pos, + result: result48 }; + return result48; } - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result62 - }; - return result62; - }, - - _parse_action: function(context) { - var cacheKey = "action" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + function parse_primary(context) { + var cacheKey = "primary" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; + } + + + var savedPos12 = pos; + var result75 = parse_identifier(context); + if (result75 !== null) { + var savedPos13 = pos; + var savedReportMatchFailuresVar0 = context.reportMatchFailures; + context.reportMatchFailures = false; + var savedPos14 = pos; + var result81 = parse_literal(context); + if (result81 !== null) { + var result78 = result81; + } else { + if (input.substr(pos, 0) === "") { + var result80 = ""; + pos += 0; + } else { + var result80 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("")); + } + } + if (result80 !== null) { + var result78 = result80; + } else { + var result78 = null;; + }; + } + if (result78 !== null) { + var result79 = parse_equals(context); + if (result79 !== null) { + var result77 = [result78, result79]; + } else { + var result77 = null; + pos = savedPos14; + } + } else { + var result77 = null; + pos = savedPos14; + } + context.reportMatchFailures = savedReportMatchFailuresVar0; + if (result77 === null) { + var result76 = ''; + } else { + var result76 = null; + pos = savedPos13; + } + if (result76 !== null) { + var result74 = [result75, result76]; + } else { + var result74 = null; + pos = savedPos12; + } + } else { + var result74 = null; + pos = savedPos12; + } + var result73 = result74 !== null + ? (function(name) { + return { + type: "rule_ref", + name: name + }; + })(result74[0]) + : null; + if (result73 !== null) { + var result62 = result73; + } else { + var result72 = parse_literal(context); + var result71 = result72 !== null + ? (function(value) { + return { + type: "literal", + value: value + }; + })(result72) + : null; + if (result71 !== null) { + var result62 = result71; + } else { + var result70 = parse_dot(context); + var result69 = result70 !== null + ? (function() { return { type: "any" }; })() + : null; + if (result69 !== null) { + var result62 = result69; + } else { + var result68 = parse_class(context); + if (result68 !== null) { + var result62 = result68; + } else { + var savedPos11 = pos; + var result65 = parse_lparen(context); + if (result65 !== null) { + var result66 = parse_choice(context); + if (result66 !== null) { + var result67 = parse_rparen(context); + if (result67 !== null) { + var result64 = [result65, result66, result67]; + } else { + var result64 = null; + pos = savedPos11; + } + } else { + var result64 = null; + pos = savedPos11; + } + } else { + var result64 = null; + pos = savedPos11; + } + var result63 = result64 !== null + ? (function(expression) { return expression; })(result64[1]) + : null; + if (result63 !== null) { + var result62 = result63; + } else { + var result62 = null;; + }; + }; + }; + }; + } + + + + cache[cacheKey] = { + nextPos: pos, + result: result62 + }; + return result62; } - var pos = this._pos; - - var savedReportMatchFailures = context.reportMatchFailures; - context.reportMatchFailures = false; - var savedPos15 = this._pos; - var result84 = this._parse_braced(context); - if (result84 !== null) { - var result85 = this._parse___(context); - if (result85 !== null) { - var result83 = [result84, result85]; + 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 savedPos15 = pos; + var result84 = parse_braced(context); + if (result84 !== null) { + var result85 = parse___(context); + if (result85 !== null) { + var result83 = [result84, result85]; + } else { + var result83 = null; + pos = savedPos15; + } } else { var result83 = null; - this._pos = savedPos15; + pos = savedPos15; } - } else { - var result83 = null; - this._pos = savedPos15; - } - var result82 = result83 !== null - ? (function(braced) { return braced.substr(1, braced.length - 2); })(result83[0]) - : null; - context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result82 === null) { - this._matchFailed("action"); - } - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result82 - }; - return result82; - }, - - _parse_braced: function(context) { - var cacheKey = "braced" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result82 = result83 !== null + ? (function(braced) { return braced.substr(1, braced.length - 2); })(result83[0]) + : null; + context.reportMatchFailures = savedReportMatchFailures; + if (context.reportMatchFailures && result82 === null) { + matchFailed("action"); + } + + cache[cacheKey] = { + nextPos: pos, + result: result82 + }; + return result82; } - var pos = this._pos; - - - var savedPos16 = this._pos; - if (this._input.substr(this._pos, 1) === "{") { - var result88 = "{"; - this._pos += 1; - } else { - var result88 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("{")); + function parse_braced(context) { + var cacheKey = "braced" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result88 !== null) { - var result89 = []; - var result93 = this._parse_braced(context); - if (result93 !== null) { - var result91 = result93; + + + var savedPos16 = pos; + if (input.substr(pos, 1) === "{") { + var result88 = "{"; + pos += 1; } else { - var result92 = this._parse_nonBraceCharacter(context); - if (result92 !== null) { - var result91 = result92; - } else { - var result91 = null;; - }; + var result88 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("{")); + } } - while (result91 !== null) { - result89.push(result91); - var result93 = this._parse_braced(context); + if (result88 !== null) { + var result89 = []; + var result93 = parse_braced(context); if (result93 !== null) { var result91 = result93; } else { - var result92 = this._parse_nonBraceCharacter(context); + var result92 = parse_nonBraceCharacter(context); if (result92 !== null) { var result91 = result92; } else { var result91 = null;; }; } - } - if (result89 !== null) { - if (this._input.substr(this._pos, 1) === "}") { - var result90 = "}"; - this._pos += 1; - } else { - var result90 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("}")); + while (result91 !== null) { + result89.push(result91); + var result93 = parse_braced(context); + if (result93 !== null) { + var result91 = result93; + } else { + var result92 = parse_nonBraceCharacter(context); + if (result92 !== null) { + var result91 = result92; + } else { + var result91 = null;; + }; } } - if (result90 !== null) { - var result87 = [result88, result89, result90]; + if (result89 !== null) { + if (input.substr(pos, 1) === "}") { + var result90 = "}"; + pos += 1; + } else { + var result90 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("}")); + } + } + if (result90 !== null) { + var result87 = [result88, result89, result90]; + } else { + var result87 = null; + pos = savedPos16; + } } else { var result87 = null; - this._pos = savedPos16; + pos = savedPos16; } } else { var result87 = null; - this._pos = savedPos16; + pos = savedPos16; } - } else { - var result87 = null; - this._pos = savedPos16; - } - var result86 = result87 !== null - ? (function(parts) { - return "{" + parts.join("") + "}"; - })(result87[1]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result86 - }; - return result86; - }, - - _parse_nonBraceCharacters: function(context) { - var cacheKey = "nonBraceCharacters" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - - var result96 = this._parse_nonBraceCharacter(context); - if (result96 !== null) { - var result95 = []; - while (result96 !== null) { - result95.push(result96); - var result96 = this._parse_nonBraceCharacter(context); - } - } else { - var result95 = null; - } - var result94 = result95 !== null - ? (function(chars) { return chars.join(""); })(result95) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result94 - }; - return result94; - }, - - _parse_nonBraceCharacter: function(context) { - var cacheKey = "nonBraceCharacter" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result86 = result87 !== null + ? (function(parts) { + return "{" + parts.join("") + "}"; + })(result87[1]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result86 + }; + return result86; } - var pos = this._pos; - - - if (this._input.substr(this._pos).match(/^[^{}]/) !== null) { - var result97 = this._input.charAt(this._pos); - this._pos++; - } else { - var result97 = null; - if (context.reportMatchFailures) { - this._matchFailed("[^{}]"); + function parse_nonBraceCharacters(context) { + var cacheKey = "nonBraceCharacters" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; + } + + + var result96 = parse_nonBraceCharacter(context); + if (result96 !== null) { + var result95 = []; + while (result96 !== null) { + result95.push(result96); + var result96 = parse_nonBraceCharacter(context); + } + } else { + var result95 = null; } + var result94 = result95 !== null + ? (function(chars) { return chars.join(""); })(result95) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result94 + }; + return result94; } - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result97 - }; - return result97; - }, - - _parse_equals: function(context) { - var cacheKey = "equals" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + 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 result97 = input.charAt(pos); + pos++; + } else { + var result97 = null; + if (context.reportMatchFailures) { + matchFailed("[^{}]"); + } + } + + + + cache[cacheKey] = { + nextPos: pos, + result: result97 + }; + return result97; } - var pos = this._pos; - - - var savedPos17 = this._pos; - if (this._input.substr(this._pos, 1) === "=") { - var result100 = "="; - this._pos += 1; - } else { - var result100 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("=")); + function parse_equals(context) { + var cacheKey = "equals" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result100 !== null) { - var result101 = this._parse___(context); - if (result101 !== null) { - var result99 = [result100, result101]; + + + var savedPos17 = pos; + if (input.substr(pos, 1) === "=") { + var result100 = "="; + pos += 1; + } else { + var result100 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("=")); + } + } + if (result100 !== null) { + var result101 = parse___(context); + if (result101 !== null) { + var result99 = [result100, result101]; + } else { + var result99 = null; + pos = savedPos17; + } } else { var result99 = null; - this._pos = savedPos17; + pos = savedPos17; } - } else { - var result99 = null; - this._pos = savedPos17; - } - var result98 = result99 !== null - ? (function() { return "="; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result98 - }; - return result98; - }, - - _parse_colon: function(context) { - var cacheKey = "colon" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result98 = result99 !== null + ? (function() { return "="; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result98 + }; + return result98; } - var pos = this._pos; - - - var savedPos18 = this._pos; - if (this._input.substr(this._pos, 1) === ":") { - var result104 = ":"; - this._pos += 1; - } else { - var result104 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString(":")); + function parse_colon(context) { + var cacheKey = "colon" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result104 !== null) { - var result105 = this._parse___(context); - if (result105 !== null) { - var result103 = [result104, result105]; + + + var savedPos18 = pos; + if (input.substr(pos, 1) === ":") { + var result104 = ":"; + pos += 1; + } else { + var result104 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString(":")); + } + } + if (result104 !== null) { + var result105 = parse___(context); + if (result105 !== null) { + var result103 = [result104, result105]; + } else { + var result103 = null; + pos = savedPos18; + } } else { var result103 = null; - this._pos = savedPos18; + pos = savedPos18; } - } else { - var result103 = null; - this._pos = savedPos18; - } - var result102 = result103 !== null - ? (function() { return ":"; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result102 - }; - return result102; - }, - - _parse_semicolon: function(context) { - var cacheKey = "semicolon" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result102 = result103 !== null + ? (function() { return ":"; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result102 + }; + return result102; } - var pos = this._pos; - - - var savedPos19 = this._pos; - if (this._input.substr(this._pos, 1) === ";") { - var result108 = ";"; - this._pos += 1; - } else { - var result108 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString(";")); + function parse_semicolon(context) { + var cacheKey = "semicolon" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result108 !== null) { - var result109 = this._parse___(context); - if (result109 !== null) { - var result107 = [result108, result109]; + + + var savedPos19 = pos; + if (input.substr(pos, 1) === ";") { + var result108 = ";"; + pos += 1; + } else { + var result108 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString(";")); + } + } + if (result108 !== null) { + var result109 = parse___(context); + if (result109 !== null) { + var result107 = [result108, result109]; + } else { + var result107 = null; + pos = savedPos19; + } } else { var result107 = null; - this._pos = savedPos19; + pos = savedPos19; } - } else { - var result107 = null; - this._pos = savedPos19; - } - var result106 = result107 !== null - ? (function() { return ";"; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result106 - }; - return result106; - }, - - _parse_slash: function(context) { - var cacheKey = "slash" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result106 = result107 !== null + ? (function() { return ";"; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result106 + }; + return result106; } - var pos = this._pos; - - - var savedPos20 = this._pos; - if (this._input.substr(this._pos, 1) === "/") { - var result112 = "/"; - this._pos += 1; - } else { - var result112 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("/")); + function parse_slash(context) { + var cacheKey = "slash" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result112 !== null) { - var result113 = this._parse___(context); - if (result113 !== null) { - var result111 = [result112, result113]; + + + var savedPos20 = pos; + if (input.substr(pos, 1) === "/") { + var result112 = "/"; + pos += 1; + } else { + var result112 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("/")); + } + } + if (result112 !== null) { + var result113 = parse___(context); + if (result113 !== null) { + var result111 = [result112, result113]; + } else { + var result111 = null; + pos = savedPos20; + } } else { var result111 = null; - this._pos = savedPos20; + pos = savedPos20; } - } else { - var result111 = null; - this._pos = savedPos20; - } - var result110 = result111 !== null - ? (function() { return "/"; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result110 - }; - return result110; - }, - - _parse_and: function(context) { - var cacheKey = "and" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result110 = result111 !== null + ? (function() { return "/"; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result110 + }; + return result110; } - var pos = this._pos; - - - var savedPos21 = this._pos; - if (this._input.substr(this._pos, 1) === "&") { - var result116 = "&"; - this._pos += 1; - } else { - var result116 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("&")); + function parse_and(context) { + var cacheKey = "and" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result116 !== null) { - var result117 = this._parse___(context); - if (result117 !== null) { - var result115 = [result116, result117]; + + + var savedPos21 = pos; + if (input.substr(pos, 1) === "&") { + var result116 = "&"; + pos += 1; + } else { + var result116 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("&")); + } + } + if (result116 !== null) { + var result117 = parse___(context); + if (result117 !== null) { + var result115 = [result116, result117]; + } else { + var result115 = null; + pos = savedPos21; + } } else { var result115 = null; - this._pos = savedPos21; + pos = savedPos21; } - } else { - var result115 = null; - this._pos = savedPos21; - } - var result114 = result115 !== null - ? (function() { return "&"; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result114 - }; - return result114; - }, - - _parse_not: function(context) { - var cacheKey = "not" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result114 = result115 !== null + ? (function() { return "&"; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result114 + }; + return result114; } - var pos = this._pos; - - - var savedPos22 = this._pos; - if (this._input.substr(this._pos, 1) === "!") { - var result120 = "!"; - this._pos += 1; - } else { - var result120 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("!")); + function parse_not(context) { + var cacheKey = "not" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result120 !== null) { - var result121 = this._parse___(context); - if (result121 !== null) { - var result119 = [result120, result121]; + + + var savedPos22 = pos; + if (input.substr(pos, 1) === "!") { + var result120 = "!"; + pos += 1; + } else { + var result120 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("!")); + } + } + if (result120 !== null) { + var result121 = parse___(context); + if (result121 !== null) { + var result119 = [result120, result121]; + } else { + var result119 = null; + pos = savedPos22; + } } else { var result119 = null; - this._pos = savedPos22; + pos = savedPos22; } - } else { - var result119 = null; - this._pos = savedPos22; - } - var result118 = result119 !== null - ? (function() { return "!"; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result118 - }; - return result118; - }, - - _parse_question: function(context) { - var cacheKey = "question" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result118 = result119 !== null + ? (function() { return "!"; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result118 + }; + return result118; } - var pos = this._pos; - - - var savedPos23 = this._pos; - if (this._input.substr(this._pos, 1) === "?") { - var result124 = "?"; - this._pos += 1; - } else { - var result124 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("?")); + function parse_question(context) { + var cacheKey = "question" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result124 !== null) { - var result125 = this._parse___(context); - if (result125 !== null) { - var result123 = [result124, result125]; + + + var savedPos23 = pos; + if (input.substr(pos, 1) === "?") { + var result124 = "?"; + pos += 1; + } else { + var result124 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("?")); + } + } + if (result124 !== null) { + var result125 = parse___(context); + if (result125 !== null) { + var result123 = [result124, result125]; + } else { + var result123 = null; + pos = savedPos23; + } } else { var result123 = null; - this._pos = savedPos23; + pos = savedPos23; } - } else { - var result123 = null; - this._pos = savedPos23; - } - var result122 = result123 !== null - ? (function() { return "?"; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result122 - }; - return result122; - }, - - _parse_star: function(context) { - var cacheKey = "star" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result122 = result123 !== null + ? (function() { return "?"; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result122 + }; + return result122; } - var pos = this._pos; - - - var savedPos24 = this._pos; - if (this._input.substr(this._pos, 1) === "*") { - var result128 = "*"; - this._pos += 1; - } else { - var result128 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("*")); + function parse_star(context) { + var cacheKey = "star" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result128 !== null) { - var result129 = this._parse___(context); - if (result129 !== null) { - var result127 = [result128, result129]; + + + var savedPos24 = pos; + if (input.substr(pos, 1) === "*") { + var result128 = "*"; + pos += 1; + } else { + var result128 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("*")); + } + } + if (result128 !== null) { + var result129 = parse___(context); + if (result129 !== null) { + var result127 = [result128, result129]; + } else { + var result127 = null; + pos = savedPos24; + } } else { var result127 = null; - this._pos = savedPos24; + pos = savedPos24; } - } else { - var result127 = null; - this._pos = savedPos24; - } - var result126 = result127 !== null - ? (function() { return "*"; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result126 - }; - return result126; - }, - - _parse_plus: function(context) { - var cacheKey = "plus" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result126 = result127 !== null + ? (function() { return "*"; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result126 + }; + return result126; } - var pos = this._pos; - - - var savedPos25 = this._pos; - if (this._input.substr(this._pos, 1) === "+") { - var result132 = "+"; - this._pos += 1; - } else { - var result132 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("+")); + function parse_plus(context) { + var cacheKey = "plus" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result132 !== null) { - var result133 = this._parse___(context); - if (result133 !== null) { - var result131 = [result132, result133]; + + + var savedPos25 = pos; + if (input.substr(pos, 1) === "+") { + var result132 = "+"; + pos += 1; + } else { + var result132 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("+")); + } + } + if (result132 !== null) { + var result133 = parse___(context); + if (result133 !== null) { + var result131 = [result132, result133]; + } else { + var result131 = null; + pos = savedPos25; + } } else { var result131 = null; - this._pos = savedPos25; + pos = savedPos25; } - } else { - var result131 = null; - this._pos = savedPos25; - } - var result130 = result131 !== null - ? (function() { return "+"; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result130 - }; - return result130; - }, - - _parse_lparen: function(context) { - var cacheKey = "lparen" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result130 = result131 !== null + ? (function() { return "+"; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result130 + }; + return result130; } - var pos = this._pos; - - - var savedPos26 = this._pos; - if (this._input.substr(this._pos, 1) === "(") { - var result136 = "("; - this._pos += 1; - } else { - var result136 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("(")); + function parse_lparen(context) { + var cacheKey = "lparen" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result136 !== null) { - var result137 = this._parse___(context); - if (result137 !== null) { - var result135 = [result136, result137]; + + + var savedPos26 = pos; + if (input.substr(pos, 1) === "(") { + var result136 = "("; + pos += 1; + } else { + var result136 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("(")); + } + } + if (result136 !== null) { + var result137 = parse___(context); + if (result137 !== null) { + var result135 = [result136, result137]; + } else { + var result135 = null; + pos = savedPos26; + } } else { var result135 = null; - this._pos = savedPos26; + pos = savedPos26; } - } else { - var result135 = null; - this._pos = savedPos26; - } - var result134 = result135 !== null - ? (function() { return "("; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result134 - }; - return result134; - }, - - _parse_rparen: function(context) { - var cacheKey = "rparen" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result134 = result135 !== null + ? (function() { return "("; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result134 + }; + return result134; } - var pos = this._pos; - - - var savedPos27 = this._pos; - if (this._input.substr(this._pos, 1) === ")") { - var result140 = ")"; - this._pos += 1; - } else { - var result140 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString(")")); + function parse_rparen(context) { + var cacheKey = "rparen" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result140 !== null) { - var result141 = this._parse___(context); - if (result141 !== null) { - var result139 = [result140, result141]; + + + var savedPos27 = pos; + if (input.substr(pos, 1) === ")") { + var result140 = ")"; + pos += 1; + } else { + var result140 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString(")")); + } + } + if (result140 !== null) { + var result141 = parse___(context); + if (result141 !== null) { + var result139 = [result140, result141]; + } else { + var result139 = null; + pos = savedPos27; + } } else { var result139 = null; - this._pos = savedPos27; + pos = savedPos27; } - } else { - var result139 = null; - this._pos = savedPos27; - } - var result138 = result139 !== null - ? (function() { return ")"; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result138 - }; - return result138; - }, - - _parse_dot: function(context) { - var cacheKey = "dot" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result138 = result139 !== null + ? (function() { return ")"; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result138 + }; + return result138; } - var pos = this._pos; - - - var savedPos28 = this._pos; - if (this._input.substr(this._pos, 1) === ".") { - var result144 = "."; - this._pos += 1; - } else { - var result144 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString(".")); + function parse_dot(context) { + var cacheKey = "dot" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result144 !== null) { - var result145 = this._parse___(context); - if (result145 !== null) { - var result143 = [result144, result145]; + + + var savedPos28 = pos; + if (input.substr(pos, 1) === ".") { + var result144 = "."; + pos += 1; + } else { + var result144 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString(".")); + } + } + if (result144 !== null) { + var result145 = parse___(context); + if (result145 !== null) { + var result143 = [result144, result145]; + } else { + var result143 = null; + pos = savedPos28; + } } else { var result143 = null; - this._pos = savedPos28; + pos = savedPos28; } - } else { - var result143 = null; - this._pos = savedPos28; - } - var result142 = result143 !== null - ? (function() { return "."; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result142 - }; - return result142; - }, - - _parse_identifier: function(context) { - var cacheKey = "identifier" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result142 = result143 !== null + ? (function() { return "."; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result142 + }; + return result142; } - var pos = this._pos; - - var savedReportMatchFailures = context.reportMatchFailures; - context.reportMatchFailures = false; - var savedPos29 = this._pos; - var result158 = this._parse_letter(context); - if (result158 !== null) { - var result148 = result158; - } else { - if (this._input.substr(this._pos, 1) === "_") { - var result157 = "_"; - this._pos += 1; - } else { - var result157 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("_")); - } + function parse_identifier(context) { + var cacheKey = "identifier" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - if (result157 !== null) { - var result148 = result157; - } else { - if (this._input.substr(this._pos, 1) === "$") { - var result156 = "$"; - this._pos += 1; + + var savedReportMatchFailures = context.reportMatchFailures; + context.reportMatchFailures = false; + var savedPos29 = pos; + var result158 = parse_letter(context); + if (result158 !== null) { + var result148 = result158; + } else { + if (input.substr(pos, 1) === "_") { + var result157 = "_"; + pos += 1; } else { - var result156 = null; + var result157 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("$")); + matchFailed(quoteString("_")); } } - if (result156 !== null) { - var result148 = result156; + if (result157 !== null) { + var result148 = result157; } else { - var result148 = null;; - }; - }; - } - if (result148 !== null) { - var result149 = []; - var result155 = this._parse_letter(context); - if (result155 !== null) { - var result151 = result155; - } else { - var result154 = this._parse_digit(context); - if (result154 !== null) { - var result151 = result154; - } else { - if (this._input.substr(this._pos, 1) === "_") { - var result153 = "_"; - this._pos += 1; + if (input.substr(pos, 1) === "$") { + var result156 = "$"; + pos += 1; } else { - var result153 = null; + var result156 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("_")); + matchFailed(quoteString("$")); } } - if (result153 !== null) { - var result151 = result153; + if (result156 !== null) { + var result148 = result156; } else { - if (this._input.substr(this._pos, 1) === "$") { - var result152 = "$"; - this._pos += 1; - } else { - var result152 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("$")); - } - } - if (result152 !== null) { - var result151 = result152; - } else { - var result151 = null;; - }; + var result148 = null;; }; }; } - while (result151 !== null) { - result149.push(result151); - var result155 = this._parse_letter(context); + if (result148 !== null) { + var result149 = []; + var result155 = parse_letter(context); if (result155 !== null) { var result151 = result155; } else { - var result154 = this._parse_digit(context); + var result154 = parse_digit(context); if (result154 !== null) { var result151 = result154; } else { - if (this._input.substr(this._pos, 1) === "_") { + if (input.substr(pos, 1) === "_") { var result153 = "_"; - this._pos += 1; + pos += 1; } else { var result153 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("_")); + matchFailed(quoteString("_")); } } if (result153 !== null) { var result151 = result153; } else { - if (this._input.substr(this._pos, 1) === "$") { + if (input.substr(pos, 1) === "$") { var result152 = "$"; - this._pos += 1; + pos += 1; } else { var result152 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("$")); + matchFailed(quoteString("$")); } } if (result152 !== null) { @@ -1596,1387 +1519,1362 @@ PEG.grammarParser = (function(){ }; }; } - } - if (result149 !== null) { - var result150 = this._parse___(context); - if (result150 !== null) { - var result147 = [result148, result149, result150]; + while (result151 !== null) { + result149.push(result151); + var result155 = parse_letter(context); + if (result155 !== null) { + var result151 = result155; + } else { + var result154 = parse_digit(context); + if (result154 !== null) { + var result151 = result154; + } else { + if (input.substr(pos, 1) === "_") { + var result153 = "_"; + pos += 1; + } else { + var result153 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("_")); + } + } + if (result153 !== null) { + var result151 = result153; + } else { + if (input.substr(pos, 1) === "$") { + var result152 = "$"; + pos += 1; + } else { + var result152 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("$")); + } + } + if (result152 !== null) { + var result151 = result152; + } else { + var result151 = null;; + }; + }; + }; + } + } + if (result149 !== null) { + var result150 = parse___(context); + if (result150 !== null) { + var result147 = [result148, result149, result150]; + } else { + var result147 = null; + pos = savedPos29; + } } else { var result147 = null; - this._pos = savedPos29; + pos = savedPos29; } } else { - var result147 = null; - this._pos = savedPos29; - } - } else { - var result147 = null; - this._pos = savedPos29; - } - var result146 = result147 !== null - ? (function(head, tail) { - return head + tail.join(""); - })(result147[0], result147[1]) - : null; - context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result146 === null) { - this._matchFailed("identifier"); - } - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result146 - }; - return result146; - }, - - _parse_literal: function(context) { - var cacheKey = "literal" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - var savedReportMatchFailures = context.reportMatchFailures; - context.reportMatchFailures = false; - var savedPos30 = this._pos; - var result164 = this._parse_doubleQuotedLiteral(context); - if (result164 !== null) { - var result161 = result164; - } else { - var result163 = this._parse_singleQuotedLiteral(context); - if (result163 !== null) { - var result161 = result163; - } else { - var result161 = null;; + var result147 = null; + pos = savedPos29; + } + var result146 = result147 !== null + ? (function(head, tail) { + return head + tail.join(""); + })(result147[0], result147[1]) + : null; + context.reportMatchFailures = savedReportMatchFailures; + if (context.reportMatchFailures && result146 === null) { + matchFailed("identifier"); + } + + cache[cacheKey] = { + nextPos: pos, + result: result146 }; + return result146; } - if (result161 !== null) { - var result162 = this._parse___(context); - if (result162 !== null) { - var result160 = [result161, result162]; + + 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 savedPos30 = pos; + var result164 = parse_doubleQuotedLiteral(context); + if (result164 !== null) { + var result161 = result164; + } else { + var result163 = parse_singleQuotedLiteral(context); + if (result163 !== null) { + var result161 = result163; + } else { + var result161 = null;; + }; + } + if (result161 !== null) { + var result162 = parse___(context); + if (result162 !== null) { + var result160 = [result161, result162]; + } else { + var result160 = null; + pos = savedPos30; + } } else { var result160 = null; - this._pos = savedPos30; + pos = savedPos30; } - } else { - var result160 = null; - this._pos = savedPos30; - } - var result159 = result160 !== null - ? (function(literal) { return literal; })(result160[0]) - : null; - context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result159 === null) { - this._matchFailed("literal"); - } - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result159 - }; - return result159; - }, - - _parse_doubleQuotedLiteral: function(context) { - var cacheKey = "doubleQuotedLiteral" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result159 = result160 !== null + ? (function(literal) { return literal; })(result160[0]) + : null; + context.reportMatchFailures = savedReportMatchFailures; + if (context.reportMatchFailures && result159 === null) { + matchFailed("literal"); + } + + cache[cacheKey] = { + nextPos: pos, + result: result159 + }; + return result159; } - var pos = this._pos; - - - var savedPos31 = this._pos; - if (this._input.substr(this._pos, 1) === "\"") { - var result167 = "\""; - this._pos += 1; - } else { - var result167 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\"")); + function parse_doubleQuotedLiteral(context) { + var cacheKey = "doubleQuotedLiteral" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result167 !== null) { - var result168 = []; - var result170 = this._parse_doubleQuotedCharacter(context); - while (result170 !== null) { - result168.push(result170); - var result170 = this._parse_doubleQuotedCharacter(context); - } - if (result168 !== null) { - if (this._input.substr(this._pos, 1) === "\"") { - var result169 = "\""; - this._pos += 1; - } else { - var result169 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\"")); - } + + + var savedPos31 = pos; + if (input.substr(pos, 1) === "\"") { + var result167 = "\""; + pos += 1; + } else { + var result167 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("\"")); + } + } + if (result167 !== null) { + var result168 = []; + var result170 = parse_doubleQuotedCharacter(context); + while (result170 !== null) { + result168.push(result170); + var result170 = parse_doubleQuotedCharacter(context); } - if (result169 !== null) { - var result166 = [result167, result168, result169]; + if (result168 !== null) { + if (input.substr(pos, 1) === "\"") { + var result169 = "\""; + pos += 1; + } else { + var result169 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("\"")); + } + } + if (result169 !== null) { + var result166 = [result167, result168, result169]; + } else { + var result166 = null; + pos = savedPos31; + } } else { var result166 = null; - this._pos = savedPos31; + pos = savedPos31; } } else { var result166 = null; - this._pos = savedPos31; + pos = savedPos31; } - } else { - var result166 = null; - this._pos = savedPos31; - } - var result165 = result166 !== null - ? (function(chars) { return chars.join(""); })(result166[1]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result165 - }; - return result165; - }, - - _parse_doubleQuotedCharacter: function(context) { - var cacheKey = "doubleQuotedCharacter" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result165 = result166 !== null + ? (function(chars) { return chars.join(""); })(result166[1]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result165 + }; + return result165; } - var pos = this._pos; - - - var result177 = this._parse_simpleDoubleQuotedCharacter(context); - if (result177 !== null) { - var result171 = result177; - } else { - var result176 = this._parse_simpleEscapeSequence(context); - if (result176 !== null) { - var result171 = result176; - } else { - var result175 = this._parse_zeroEscapeSequence(context); - if (result175 !== null) { - var result171 = result175; - } else { - var result174 = this._parse_hexEscapeSequence(context); - if (result174 !== null) { - var result171 = result174; + function parse_doubleQuotedCharacter(context) { + var cacheKey = "doubleQuotedCharacter" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; + } + + + var result177 = parse_simpleDoubleQuotedCharacter(context); + if (result177 !== null) { + var result171 = result177; + } else { + var result176 = parse_simpleEscapeSequence(context); + if (result176 !== null) { + var result171 = result176; + } else { + var result175 = parse_zeroEscapeSequence(context); + if (result175 !== null) { + var result171 = result175; } else { - var result173 = this._parse_unicodeEscapeSequence(context); - if (result173 !== null) { - var result171 = result173; + var result174 = parse_hexEscapeSequence(context); + if (result174 !== null) { + var result171 = result174; } else { - var result172 = this._parse_eolEscapeSequence(context); - if (result172 !== null) { - var result171 = result172; + var result173 = parse_unicodeEscapeSequence(context); + if (result173 !== null) { + var result171 = result173; } else { - var result171 = null;; + var result172 = parse_eolEscapeSequence(context); + if (result172 !== null) { + var result171 = result172; + } else { + var result171 = null;; + }; }; }; }; }; + } + + + + cache[cacheKey] = { + nextPos: pos, + result: result171 }; + return result171; } - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result171 - }; - return result171; - }, - - _parse_simpleDoubleQuotedCharacter: function(context) { - var cacheKey = "simpleDoubleQuotedCharacter" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - - var savedPos32 = this._pos; - var savedPos33 = this._pos; - var savedReportMatchFailuresVar1 = context.reportMatchFailures; - context.reportMatchFailures = false; - if (this._input.substr(this._pos, 1) === "\"") { - var result185 = "\""; - this._pos += 1; - } else { - var result185 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\"")); + function parse_simpleDoubleQuotedCharacter(context) { + var cacheKey = "simpleDoubleQuotedCharacter" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result185 !== null) { - var result182 = result185; - } else { - if (this._input.substr(this._pos, 1) === "\\") { - var result184 = "\\"; - this._pos += 1; - } else { - var result184 = null; + + + var savedPos32 = pos; + var savedPos33 = pos; + var savedReportMatchFailuresVar1 = context.reportMatchFailures; + context.reportMatchFailures = false; + if (input.substr(pos, 1) === "\"") { + var result185 = "\""; + pos += 1; + } else { + var result185 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\\")); + matchFailed(quoteString("\"")); } } - if (result184 !== null) { - var result182 = result184; + if (result185 !== null) { + var result182 = result185; } else { - var result183 = this._parse_eolChar(context); - if (result183 !== null) { - var result182 = result183; + if (input.substr(pos, 1) === "\\") { + var result184 = "\\"; + pos += 1; } else { - var result182 = null;; + var result184 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("\\")); + } + } + if (result184 !== null) { + var result182 = result184; + } else { + var result183 = parse_eolChar(context); + if (result183 !== null) { + var result182 = result183; + } else { + var result182 = null;; + }; }; - }; - } - context.reportMatchFailures = savedReportMatchFailuresVar1; - if (result182 === null) { - var result180 = ''; - } else { - var result180 = null; - this._pos = savedPos33; - } - if (result180 !== null) { - if (this._input.length > this._pos) { - var result181 = this._input.charAt(this._pos); - this._pos++; + } + context.reportMatchFailures = savedReportMatchFailuresVar1; + if (result182 === null) { + var result180 = ''; } else { - var result181 = null; - if (context.reportMatchFailures) { - this._matchFailed('any character'); - } + var result180 = null; + pos = savedPos33; } - if (result181 !== null) { - var result179 = [result180, result181]; + if (result180 !== null) { + if (input.length > pos) { + var result181 = input.charAt(pos); + pos++; + } else { + var result181 = null; + if (context.reportMatchFailures) { + matchFailed('any character'); + } + } + if (result181 !== null) { + var result179 = [result180, result181]; + } else { + var result179 = null; + pos = savedPos32; + } } else { var result179 = null; - this._pos = savedPos32; + pos = savedPos32; } - } else { - var result179 = null; - this._pos = savedPos32; - } - var result178 = result179 !== null - ? (function(char_) { return char_; })(result179[1]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result178 - }; - return result178; - }, - - _parse_singleQuotedLiteral: function(context) { - var cacheKey = "singleQuotedLiteral" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result178 = result179 !== null + ? (function(char_) { return char_; })(result179[1]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result178 + }; + return result178; } - var pos = this._pos; - - - var savedPos34 = this._pos; - if (this._input.substr(this._pos, 1) === "'") { - var result188 = "'"; - this._pos += 1; - } else { - var result188 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("'")); + function parse_singleQuotedLiteral(context) { + var cacheKey = "singleQuotedLiteral" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result188 !== null) { - var result189 = []; - var result191 = this._parse_singleQuotedCharacter(context); - while (result191 !== null) { - result189.push(result191); - var result191 = this._parse_singleQuotedCharacter(context); - } - if (result189 !== null) { - if (this._input.substr(this._pos, 1) === "'") { - var result190 = "'"; - this._pos += 1; - } else { - var result190 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("'")); - } + + + var savedPos34 = pos; + if (input.substr(pos, 1) === "'") { + var result188 = "'"; + pos += 1; + } else { + var result188 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("'")); + } + } + if (result188 !== null) { + var result189 = []; + var result191 = parse_singleQuotedCharacter(context); + while (result191 !== null) { + result189.push(result191); + var result191 = parse_singleQuotedCharacter(context); } - if (result190 !== null) { - var result187 = [result188, result189, result190]; + if (result189 !== null) { + if (input.substr(pos, 1) === "'") { + var result190 = "'"; + pos += 1; + } else { + var result190 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("'")); + } + } + if (result190 !== null) { + var result187 = [result188, result189, result190]; + } else { + var result187 = null; + pos = savedPos34; + } } else { var result187 = null; - this._pos = savedPos34; + pos = savedPos34; } } else { var result187 = null; - this._pos = savedPos34; + pos = savedPos34; } - } else { - var result187 = null; - this._pos = savedPos34; - } - var result186 = result187 !== null - ? (function(chars) { return chars.join(""); })(result187[1]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result186 - }; - return result186; - }, - - _parse_singleQuotedCharacter: function(context) { - var cacheKey = "singleQuotedCharacter" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result186 = result187 !== null + ? (function(chars) { return chars.join(""); })(result187[1]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result186 + }; + return result186; } - var pos = this._pos; - - - var result198 = this._parse_simpleSingleQuotedCharacter(context); - if (result198 !== null) { - var result192 = result198; - } else { - var result197 = this._parse_simpleEscapeSequence(context); - if (result197 !== null) { - var result192 = result197; - } else { - var result196 = this._parse_zeroEscapeSequence(context); - if (result196 !== null) { - var result192 = result196; - } else { - var result195 = this._parse_hexEscapeSequence(context); - if (result195 !== null) { - var result192 = result195; + function parse_singleQuotedCharacter(context) { + var cacheKey = "singleQuotedCharacter" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; + } + + + var result198 = parse_simpleSingleQuotedCharacter(context); + if (result198 !== null) { + var result192 = result198; + } else { + var result197 = parse_simpleEscapeSequence(context); + if (result197 !== null) { + var result192 = result197; + } else { + var result196 = parse_zeroEscapeSequence(context); + if (result196 !== null) { + var result192 = result196; } else { - var result194 = this._parse_unicodeEscapeSequence(context); - if (result194 !== null) { - var result192 = result194; + var result195 = parse_hexEscapeSequence(context); + if (result195 !== null) { + var result192 = result195; } else { - var result193 = this._parse_eolEscapeSequence(context); - if (result193 !== null) { - var result192 = result193; + var result194 = parse_unicodeEscapeSequence(context); + if (result194 !== null) { + var result192 = result194; } else { - var result192 = null;; + var result193 = parse_eolEscapeSequence(context); + if (result193 !== null) { + var result192 = result193; + } else { + var result192 = null;; + }; }; }; }; }; + } + + + + cache[cacheKey] = { + nextPos: pos, + result: result192 }; + return result192; } - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result192 - }; - return result192; - }, - - _parse_simpleSingleQuotedCharacter: function(context) { - var cacheKey = "simpleSingleQuotedCharacter" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - - var savedPos35 = this._pos; - var savedPos36 = this._pos; - var savedReportMatchFailuresVar2 = context.reportMatchFailures; - context.reportMatchFailures = false; - if (this._input.substr(this._pos, 1) === "'") { - var result206 = "'"; - this._pos += 1; - } else { - var result206 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("'")); + function parse_simpleSingleQuotedCharacter(context) { + var cacheKey = "simpleSingleQuotedCharacter" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result206 !== null) { - var result203 = result206; - } else { - if (this._input.substr(this._pos, 1) === "\\") { - var result205 = "\\"; - this._pos += 1; - } else { - var result205 = null; + + + var savedPos35 = pos; + var savedPos36 = pos; + var savedReportMatchFailuresVar2 = context.reportMatchFailures; + context.reportMatchFailures = false; + if (input.substr(pos, 1) === "'") { + var result206 = "'"; + pos += 1; + } else { + var result206 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\\")); + matchFailed(quoteString("'")); } } - if (result205 !== null) { - var result203 = result205; + if (result206 !== null) { + var result203 = result206; } else { - var result204 = this._parse_eolChar(context); - if (result204 !== null) { - var result203 = result204; + if (input.substr(pos, 1) === "\\") { + var result205 = "\\"; + pos += 1; + } else { + var result205 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("\\")); + } + } + if (result205 !== null) { + var result203 = result205; } else { - var result203 = null;; + var result204 = parse_eolChar(context); + if (result204 !== null) { + var result203 = result204; + } else { + var result203 = null;; + }; }; - }; - } - context.reportMatchFailures = savedReportMatchFailuresVar2; - if (result203 === null) { - var result201 = ''; - } else { - var result201 = null; - this._pos = savedPos36; - } - if (result201 !== null) { - if (this._input.length > this._pos) { - var result202 = this._input.charAt(this._pos); - this._pos++; + } + context.reportMatchFailures = savedReportMatchFailuresVar2; + if (result203 === null) { + var result201 = ''; } else { - var result202 = null; - if (context.reportMatchFailures) { - this._matchFailed('any character'); - } + var result201 = null; + pos = savedPos36; } - if (result202 !== null) { - var result200 = [result201, result202]; + if (result201 !== null) { + if (input.length > pos) { + var result202 = input.charAt(pos); + pos++; + } else { + var result202 = null; + if (context.reportMatchFailures) { + matchFailed('any character'); + } + } + if (result202 !== null) { + var result200 = [result201, result202]; + } else { + var result200 = null; + pos = savedPos35; + } } else { var result200 = null; - this._pos = savedPos35; + pos = savedPos35; } - } else { - var result200 = null; - this._pos = savedPos35; - } - var result199 = result200 !== null - ? (function(char_) { return char_; })(result200[1]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result199 - }; - return result199; - }, - - _parse_class: function(context) { - var cacheKey = "class" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result199 = result200 !== null + ? (function(char_) { return char_; })(result200[1]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result199 + }; + return result199; } - var pos = this._pos; - - var savedReportMatchFailures = context.reportMatchFailures; - context.reportMatchFailures = false; - var savedPos37 = this._pos; - if (this._input.substr(this._pos, 1) === "[") { - var result209 = "["; - this._pos += 1; - } else { - var result209 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("[")); + function parse_class(context) { + var cacheKey = "class" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result209 !== null) { - if (this._input.substr(this._pos, 1) === "^") { - var result217 = "^"; - this._pos += 1; + + var savedReportMatchFailures = context.reportMatchFailures; + context.reportMatchFailures = false; + var savedPos37 = pos; + if (input.substr(pos, 1) === "[") { + var result209 = "["; + pos += 1; } else { - var result217 = null; + var result209 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("^")); + matchFailed(quoteString("[")); } } - var result210 = result217 !== null ? result217 : ''; - if (result210 !== null) { - var result211 = []; - var result216 = this._parse_classCharacterRange(context); - if (result216 !== null) { - var result214 = result216; + if (result209 !== null) { + if (input.substr(pos, 1) === "^") { + var result217 = "^"; + pos += 1; } else { - var result215 = this._parse_classCharacter(context); - if (result215 !== null) { - var result214 = result215; - } else { - var result214 = null;; - }; + var result217 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("^")); + } } - while (result214 !== null) { - result211.push(result214); - var result216 = this._parse_classCharacterRange(context); + var result210 = result217 !== null ? result217 : ''; + if (result210 !== null) { + var result211 = []; + var result216 = parse_classCharacterRange(context); if (result216 !== null) { var result214 = result216; } else { - var result215 = this._parse_classCharacter(context); + var result215 = parse_classCharacter(context); if (result215 !== null) { var result214 = result215; } else { var result214 = null;; }; } - } - if (result211 !== null) { - if (this._input.substr(this._pos, 1) === "]") { - var result212 = "]"; - this._pos += 1; - } else { - var result212 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("]")); + while (result214 !== null) { + result211.push(result214); + var result216 = parse_classCharacterRange(context); + if (result216 !== null) { + var result214 = result216; + } else { + var result215 = parse_classCharacter(context); + if (result215 !== null) { + var result214 = result215; + } else { + var result214 = null;; + }; } } - if (result212 !== null) { - var result213 = this._parse___(context); - if (result213 !== null) { - var result208 = [result209, result210, result211, result212, result213]; + if (result211 !== null) { + if (input.substr(pos, 1) === "]") { + var result212 = "]"; + pos += 1; + } else { + var result212 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("]")); + } + } + if (result212 !== null) { + var result213 = parse___(context); + if (result213 !== null) { + var result208 = [result209, result210, result211, result212, result213]; + } else { + var result208 = null; + pos = savedPos37; + } } else { var result208 = null; - this._pos = savedPos37; + pos = savedPos37; } } else { var result208 = null; - this._pos = savedPos37; + pos = savedPos37; } } else { var result208 = null; - this._pos = savedPos37; + pos = savedPos37; } } else { var result208 = null; - this._pos = savedPos37; + pos = savedPos37; + } + var result207 = result208 !== null + ? (function(inverted, parts) { + partsConverted = PEG.ArrayUtils.map(parts, function(part) { + return part.data; + }); + rawText = "[" + + inverted + + PEG.ArrayUtils.map(parts, function(part) { + return part.rawText; + }).join("") + + "]"; + + return { + type: "class", + inverted: inverted === "^", + parts: partsConverted, + // FIXME: Get the raw text from the input directly. + rawText: rawText + }; + })(result208[1], result208[2]) + : null; + context.reportMatchFailures = savedReportMatchFailures; + if (context.reportMatchFailures && result207 === null) { + matchFailed("character class"); } - } else { - var result208 = null; - this._pos = savedPos37; - } - var result207 = result208 !== null - ? (function(inverted, parts) { - partsConverted = PEG.ArrayUtils.map(parts, function(part) { - return part.data; - }); - rawText = "[" - + inverted - + PEG.ArrayUtils.map(parts, function(part) { - return part.rawText; - }).join("") - + "]"; - - return { - type: "class", - inverted: inverted === "^", - parts: partsConverted, - // FIXME: Get the raw text from the input directly. - rawText: rawText - }; - })(result208[1], result208[2]) - : null; - context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result207 === null) { - this._matchFailed("character class"); - } - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result207 - }; - return result207; - }, - - _parse_classCharacterRange: function(context) { - var cacheKey = "classCharacterRange" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + + cache[cacheKey] = { + nextPos: pos, + result: result207 + }; + return result207; } - var pos = this._pos; - - - var savedPos38 = this._pos; - var result220 = this._parse_classCharacter(context); - if (result220 !== null) { - if (this._input.substr(this._pos, 1) === "-") { - var result221 = "-"; - this._pos += 1; - } else { - var result221 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("-")); - } + function parse_classCharacterRange(context) { + var cacheKey = "classCharacterRange" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - if (result221 !== null) { - var result222 = this._parse_classCharacter(context); - if (result222 !== null) { - var result219 = [result220, result221, result222]; + + + var savedPos38 = pos; + var result220 = parse_classCharacter(context); + if (result220 !== null) { + if (input.substr(pos, 1) === "-") { + var result221 = "-"; + pos += 1; + } else { + var result221 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("-")); + } + } + if (result221 !== null) { + var result222 = parse_classCharacter(context); + if (result222 !== null) { + var result219 = [result220, result221, result222]; + } else { + var result219 = null; + pos = savedPos38; + } } else { var result219 = null; - this._pos = savedPos38; + pos = savedPos38; } } else { var result219 = null; - this._pos = savedPos38; - } - } else { - var result219 = null; - this._pos = savedPos38; - } - var result218 = result219 !== null - ? (function(begin, end) { - if (begin.data.charCodeAt(0) > end.data.charCodeAt(0)) { - throw new this.SyntaxError( - "Invalid character range: " + begin.rawText + "-" + end.rawText + "." - ); - } + pos = savedPos38; + } + var result218 = result219 !== null + ? (function(begin, end) { + if (begin.data.charCodeAt(0) > end.data.charCodeAt(0)) { + throw new this.SyntaxError( + "Invalid character range: " + begin.rawText + "-" + end.rawText + "." + ); + } + + return { + data: [begin.data, end.data], + // FIXME: Get the raw text from the input directly. + rawText: begin.rawText + "-" + end.rawText + } + })(result219[0], result219[2]) + : null; - return { - data: [begin.data, end.data], - // FIXME: Get the raw text from the input directly. - rawText: begin.rawText + "-" + end.rawText - } - })(result219[0], result219[2]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result218 - }; - return result218; - }, - - _parse_classCharacter: function(context) { - var cacheKey = "classCharacter" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + + + cache[cacheKey] = { + nextPos: pos, + result: result218 + }; + return result218; } - var pos = this._pos; - - - var result224 = this._parse_bracketDelimitedCharacter(context); - var result223 = result224 !== null - ? (function(char_) { - return { - data: char_, - // FIXME: Get the raw text from the input directly. - rawText: PEG.RegExpUtils.quoteForClass(char_) - }; - })(result224) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result223 - }; - return result223; - }, - - _parse_bracketDelimitedCharacter: function(context) { - var cacheKey = "bracketDelimitedCharacter" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + function parse_classCharacter(context) { + var cacheKey = "classCharacter" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; + } + + + var result224 = parse_bracketDelimitedCharacter(context); + var result223 = result224 !== null + ? (function(char_) { + return { + data: char_, + // FIXME: Get the raw text from the input directly. + rawText: PEG.RegExpUtils.quoteForClass(char_) + }; + })(result224) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result223 + }; + return result223; } - var pos = this._pos; - - - var result231 = this._parse_simpleBracketDelimitedCharacter(context); - if (result231 !== null) { - var result225 = result231; - } else { - var result230 = this._parse_simpleEscapeSequence(context); - if (result230 !== null) { - var result225 = result230; - } else { - var result229 = this._parse_zeroEscapeSequence(context); - if (result229 !== null) { - var result225 = result229; - } else { - var result228 = this._parse_hexEscapeSequence(context); - if (result228 !== null) { - var result225 = result228; + function parse_bracketDelimitedCharacter(context) { + var cacheKey = "bracketDelimitedCharacter" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; + } + + + var result231 = parse_simpleBracketDelimitedCharacter(context); + if (result231 !== null) { + var result225 = result231; + } else { + var result230 = parse_simpleEscapeSequence(context); + if (result230 !== null) { + var result225 = result230; + } else { + var result229 = parse_zeroEscapeSequence(context); + if (result229 !== null) { + var result225 = result229; } else { - var result227 = this._parse_unicodeEscapeSequence(context); - if (result227 !== null) { - var result225 = result227; + var result228 = parse_hexEscapeSequence(context); + if (result228 !== null) { + var result225 = result228; } else { - var result226 = this._parse_eolEscapeSequence(context); - if (result226 !== null) { - var result225 = result226; + var result227 = parse_unicodeEscapeSequence(context); + if (result227 !== null) { + var result225 = result227; } else { - var result225 = null;; + var result226 = parse_eolEscapeSequence(context); + if (result226 !== null) { + var result225 = result226; + } else { + var result225 = null;; + }; }; }; }; }; + } + + + + cache[cacheKey] = { + nextPos: pos, + result: result225 }; + return result225; } - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result225 - }; - return result225; - }, - - _parse_simpleBracketDelimitedCharacter: function(context) { - var cacheKey = "simpleBracketDelimitedCharacter" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - - var savedPos39 = this._pos; - var savedPos40 = this._pos; - var savedReportMatchFailuresVar3 = context.reportMatchFailures; - context.reportMatchFailures = false; - if (this._input.substr(this._pos, 1) === "]") { - var result239 = "]"; - this._pos += 1; - } else { - var result239 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("]")); + function parse_simpleBracketDelimitedCharacter(context) { + var cacheKey = "simpleBracketDelimitedCharacter" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result239 !== null) { - var result236 = result239; - } else { - if (this._input.substr(this._pos, 1) === "\\") { - var result238 = "\\"; - this._pos += 1; - } else { - var result238 = null; + + + var savedPos39 = pos; + var savedPos40 = pos; + var savedReportMatchFailuresVar3 = context.reportMatchFailures; + context.reportMatchFailures = false; + if (input.substr(pos, 1) === "]") { + var result239 = "]"; + pos += 1; + } else { + var result239 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\\")); + matchFailed(quoteString("]")); } } - if (result238 !== null) { - var result236 = result238; + if (result239 !== null) { + var result236 = result239; } else { - var result237 = this._parse_eolChar(context); - if (result237 !== null) { - var result236 = result237; + if (input.substr(pos, 1) === "\\") { + var result238 = "\\"; + pos += 1; + } else { + var result238 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("\\")); + } + } + if (result238 !== null) { + var result236 = result238; } else { - var result236 = null;; + var result237 = parse_eolChar(context); + if (result237 !== null) { + var result236 = result237; + } else { + var result236 = null;; + }; }; - }; - } - context.reportMatchFailures = savedReportMatchFailuresVar3; - if (result236 === null) { - var result234 = ''; - } else { - var result234 = null; - this._pos = savedPos40; - } - if (result234 !== null) { - if (this._input.length > this._pos) { - var result235 = this._input.charAt(this._pos); - this._pos++; + } + context.reportMatchFailures = savedReportMatchFailuresVar3; + if (result236 === null) { + var result234 = ''; } else { - var result235 = null; - if (context.reportMatchFailures) { - this._matchFailed('any character'); - } + var result234 = null; + pos = savedPos40; } - if (result235 !== null) { - var result233 = [result234, result235]; + if (result234 !== null) { + if (input.length > pos) { + var result235 = input.charAt(pos); + pos++; + } else { + var result235 = null; + if (context.reportMatchFailures) { + matchFailed('any character'); + } + } + if (result235 !== null) { + var result233 = [result234, result235]; + } else { + var result233 = null; + pos = savedPos39; + } } else { var result233 = null; - this._pos = savedPos39; + pos = savedPos39; } - } else { - var result233 = null; - this._pos = savedPos39; - } - var result232 = result233 !== null - ? (function(char_) { return char_; })(result233[1]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result232 - }; - return result232; - }, - - _parse_simpleEscapeSequence: function(context) { - var cacheKey = "simpleEscapeSequence" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result232 = result233 !== null + ? (function(char_) { return char_; })(result233[1]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result232 + }; + return result232; } - var pos = this._pos; - - - var savedPos41 = this._pos; - if (this._input.substr(this._pos, 1) === "\\") { - var result242 = "\\"; - this._pos += 1; - } else { - var result242 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\\")); + function parse_simpleEscapeSequence(context) { + var cacheKey = "simpleEscapeSequence" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result242 !== null) { - var savedPos42 = this._pos; - var savedReportMatchFailuresVar4 = context.reportMatchFailures; - context.reportMatchFailures = false; - var result249 = this._parse_digit(context); - if (result249 !== null) { - var result245 = result249; + + + var savedPos41 = pos; + if (input.substr(pos, 1) === "\\") { + var result242 = "\\"; + pos += 1; } else { - if (this._input.substr(this._pos, 1) === "x") { - var result248 = "x"; - this._pos += 1; - } else { - var result248 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("x")); - } + var result242 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("\\")); } - if (result248 !== null) { - var result245 = result248; + } + if (result242 !== null) { + var savedPos42 = pos; + var savedReportMatchFailuresVar4 = context.reportMatchFailures; + context.reportMatchFailures = false; + var result249 = parse_digit(context); + if (result249 !== null) { + var result245 = result249; } else { - if (this._input.substr(this._pos, 1) === "u") { - var result247 = "u"; - this._pos += 1; + if (input.substr(pos, 1) === "x") { + var result248 = "x"; + pos += 1; } else { - var result247 = null; + var result248 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("u")); + matchFailed(quoteString("x")); } } - if (result247 !== null) { - var result245 = result247; + if (result248 !== null) { + var result245 = result248; } else { - var result246 = this._parse_eolChar(context); - if (result246 !== null) { - var result245 = result246; + if (input.substr(pos, 1) === "u") { + var result247 = "u"; + pos += 1; + } else { + var result247 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("u")); + } + } + if (result247 !== null) { + var result245 = result247; } else { - var result245 = null;; + var result246 = parse_eolChar(context); + if (result246 !== null) { + var result245 = result246; + } else { + var result245 = null;; + }; }; }; - }; - } - context.reportMatchFailures = savedReportMatchFailuresVar4; - if (result245 === null) { - var result243 = ''; - } else { - var result243 = null; - this._pos = savedPos42; - } - if (result243 !== null) { - if (this._input.length > this._pos) { - var result244 = this._input.charAt(this._pos); - this._pos++; + } + context.reportMatchFailures = savedReportMatchFailuresVar4; + if (result245 === null) { + var result243 = ''; } else { - var result244 = null; - if (context.reportMatchFailures) { - this._matchFailed('any character'); - } + var result243 = null; + pos = savedPos42; } - if (result244 !== null) { - var result241 = [result242, result243, result244]; + if (result243 !== null) { + if (input.length > pos) { + var result244 = input.charAt(pos); + pos++; + } else { + var result244 = null; + if (context.reportMatchFailures) { + matchFailed('any character'); + } + } + if (result244 !== null) { + var result241 = [result242, result243, result244]; + } else { + var result241 = null; + pos = savedPos41; + } } else { var result241 = null; - this._pos = savedPos41; + pos = savedPos41; } } else { var result241 = null; - this._pos = savedPos41; - } - } else { - var result241 = null; - this._pos = savedPos41; - } - var result240 = result241 !== null - ? (function(char_) { - return char_ - .replace("b", "\b") - .replace("f", "\f") - .replace("n", "\n") - .replace("r", "\r") - .replace("t", "\t") - .replace("v", "\x0B") // IE does not recognize "\v". - })(result241[2]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result240 - }; - return result240; - }, - - _parse_zeroEscapeSequence: function(context) { - var cacheKey = "zeroEscapeSequence" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + pos = savedPos41; + } + var result240 = result241 !== null + ? (function(char_) { + return char_ + .replace("b", "\b") + .replace("f", "\f") + .replace("n", "\n") + .replace("r", "\r") + .replace("t", "\t") + .replace("v", "\x0B") // IE does not recognize "\v". + })(result241[2]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result240 + }; + return result240; } - var pos = this._pos; - - - var savedPos43 = this._pos; - if (this._input.substr(this._pos, 2) === "\\0") { - var result252 = "\\0"; - this._pos += 2; - } else { - var result252 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\\0")); + function parse_zeroEscapeSequence(context) { + var cacheKey = "zeroEscapeSequence" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result252 !== null) { - var savedPos44 = this._pos; - var savedReportMatchFailuresVar5 = context.reportMatchFailures; - context.reportMatchFailures = false; - var result254 = this._parse_digit(context); - context.reportMatchFailures = savedReportMatchFailuresVar5; - if (result254 === null) { - var result253 = ''; + + + var savedPos43 = pos; + if (input.substr(pos, 2) === "\\0") { + var result252 = "\\0"; + pos += 2; } else { - var result253 = null; - this._pos = savedPos44; + var result252 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("\\0")); + } } - if (result253 !== null) { - var result251 = [result252, result253]; + if (result252 !== null) { + var savedPos44 = pos; + var savedReportMatchFailuresVar5 = context.reportMatchFailures; + context.reportMatchFailures = false; + var result254 = parse_digit(context); + context.reportMatchFailures = savedReportMatchFailuresVar5; + if (result254 === null) { + var result253 = ''; + } else { + var result253 = null; + pos = savedPos44; + } + if (result253 !== null) { + var result251 = [result252, result253]; + } else { + var result251 = null; + pos = savedPos43; + } } else { var result251 = null; - this._pos = savedPos43; + pos = savedPos43; } - } else { - var result251 = null; - this._pos = savedPos43; - } - var result250 = result251 !== null - ? (function() { return "\0"; })() - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result250 - }; - return result250; - }, - - _parse_hexEscapeSequence: function(context) { - var cacheKey = "hexEscapeSequence" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result250 = result251 !== null + ? (function() { return "\0"; })() + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result250 + }; + return result250; } - var pos = this._pos; - - - var savedPos45 = this._pos; - if (this._input.substr(this._pos, 2) === "\\x") { - var result257 = "\\x"; - this._pos += 2; - } else { - var result257 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\\x")); + function parse_hexEscapeSequence(context) { + var cacheKey = "hexEscapeSequence" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result257 !== null) { - var result258 = this._parse_hexDigit(context); - if (result258 !== null) { - var result259 = this._parse_hexDigit(context); - if (result259 !== null) { - var result256 = [result257, result258, result259]; + + + var savedPos45 = pos; + if (input.substr(pos, 2) === "\\x") { + var result257 = "\\x"; + pos += 2; + } else { + var result257 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("\\x")); + } + } + if (result257 !== null) { + var result258 = parse_hexDigit(context); + if (result258 !== null) { + var result259 = parse_hexDigit(context); + if (result259 !== null) { + var result256 = [result257, result258, result259]; + } else { + var result256 = null; + pos = savedPos45; + } } else { var result256 = null; - this._pos = savedPos45; + pos = savedPos45; } } else { var result256 = null; - this._pos = savedPos45; + pos = savedPos45; } - } else { - var result256 = null; - this._pos = savedPos45; - } - var result255 = result256 !== null - ? (function(h1, h2) { - return String.fromCharCode(parseInt("0x" + h1 + h2)); - })(result256[1], result256[2]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result255 - }; - return result255; - }, - - _parse_unicodeEscapeSequence: function(context) { - var cacheKey = "unicodeEscapeSequence" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result255 = result256 !== null + ? (function(h1, h2) { + return String.fromCharCode(parseInt("0x" + h1 + h2)); + })(result256[1], result256[2]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result255 + }; + return result255; } - var pos = this._pos; - - - var savedPos46 = this._pos; - if (this._input.substr(this._pos, 2) === "\\u") { - var result262 = "\\u"; - this._pos += 2; - } else { - var result262 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\\u")); + function parse_unicodeEscapeSequence(context) { + var cacheKey = "unicodeEscapeSequence" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result262 !== null) { - var result263 = this._parse_hexDigit(context); - if (result263 !== null) { - var result264 = this._parse_hexDigit(context); - if (result264 !== null) { - var result265 = this._parse_hexDigit(context); - if (result265 !== null) { - var result266 = this._parse_hexDigit(context); - if (result266 !== null) { - var result261 = [result262, result263, result264, result265, result266]; + + + var savedPos46 = pos; + if (input.substr(pos, 2) === "\\u") { + var result262 = "\\u"; + pos += 2; + } else { + var result262 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("\\u")); + } + } + if (result262 !== null) { + var result263 = parse_hexDigit(context); + if (result263 !== null) { + var result264 = parse_hexDigit(context); + if (result264 !== null) { + var result265 = parse_hexDigit(context); + if (result265 !== null) { + var result266 = parse_hexDigit(context); + if (result266 !== null) { + var result261 = [result262, result263, result264, result265, result266]; + } else { + var result261 = null; + pos = savedPos46; + } } else { var result261 = null; - this._pos = savedPos46; + pos = savedPos46; } } else { var result261 = null; - this._pos = savedPos46; + pos = savedPos46; } } else { var result261 = null; - this._pos = savedPos46; + pos = savedPos46; } } else { var result261 = null; - this._pos = savedPos46; + pos = savedPos46; } - } else { - var result261 = null; - this._pos = savedPos46; - } - var result260 = result261 !== null - ? (function(h1, h2, h3, h4) { - return String.fromCharCode(parseInt("0x" + h1 + h2 + h3 + h4)); - })(result261[1], result261[2], result261[3], result261[4]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result260 - }; - return result260; - }, - - _parse_eolEscapeSequence: function(context) { - var cacheKey = "eolEscapeSequence" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + var result260 = result261 !== null + ? (function(h1, h2, h3, h4) { + return String.fromCharCode(parseInt("0x" + h1 + h2 + h3 + h4)); + })(result261[1], result261[2], result261[3], result261[4]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result260 + }; + return result260; } - var pos = this._pos; - - - var savedPos47 = this._pos; - if (this._input.substr(this._pos, 1) === "\\") { - var result269 = "\\"; - this._pos += 1; - } else { - var result269 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\\")); + function parse_eolEscapeSequence(context) { + var cacheKey = "eolEscapeSequence" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result269 !== null) { - var result270 = this._parse_eol(context); - if (result270 !== null) { - var result268 = [result269, result270]; + + + var savedPos47 = pos; + if (input.substr(pos, 1) === "\\") { + var result269 = "\\"; + pos += 1; } else { - var result268 = null; - this._pos = savedPos47; - } - } else { - var result268 = null; - this._pos = savedPos47; - } - var result267 = result268 !== null - ? (function(eol) { return eol; })(result268[1]) - : null; - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result267 - }; - return result267; - }, - - _parse_digit: function(context) { - var cacheKey = "digit" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - - if (this._input.substr(this._pos).match(/^[0-9]/) !== null) { - var result271 = this._input.charAt(this._pos); - this._pos++; - } else { - var result271 = null; - if (context.reportMatchFailures) { - this._matchFailed("[0-9]"); + var result269 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("\\")); + } } - } - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result271 - }; - return result271; - }, - - _parse_hexDigit: function(context) { - var cacheKey = "hexDigit" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - - if (this._input.substr(this._pos).match(/^[0-9a-fA-F]/) !== null) { - var result272 = this._input.charAt(this._pos); - this._pos++; - } else { - var result272 = null; - if (context.reportMatchFailures) { - this._matchFailed("[0-9a-fA-F]"); + if (result269 !== null) { + var result270 = parse_eol(context); + if (result270 !== null) { + var result268 = [result269, result270]; + } else { + var result268 = null; + pos = savedPos47; + } + } else { + var result268 = null; + pos = savedPos47; } - } - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result272 - }; - return result272; - }, - - _parse_letter: function(context) { - var cacheKey = "letter" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - - var result275 = this._parse_lowerCaseLetter(context); - if (result275 !== null) { - var result273 = result275; - } else { - var result274 = this._parse_upperCaseLetter(context); - if (result274 !== null) { - var result273 = result274; - } else { - var result273 = null;; + var result267 = result268 !== null + ? (function(eol) { return eol; })(result268[1]) + : null; + + + + cache[cacheKey] = { + nextPos: pos, + result: result267 }; + return result267; } - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result273 - }; - return result273; - }, - - _parse_lowerCaseLetter: function(context) { - var cacheKey = "lowerCaseLetter" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - - if (this._input.substr(this._pos).match(/^[a-z]/) !== null) { - var result276 = this._input.charAt(this._pos); - this._pos++; - } else { - var result276 = null; - if (context.reportMatchFailures) { - this._matchFailed("[a-z]"); + 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 result271 = input.charAt(pos); + pos++; + } else { + var result271 = null; + if (context.reportMatchFailures) { + matchFailed("[0-9]"); + } } + + + + cache[cacheKey] = { + nextPos: pos, + result: result271 + }; + return result271; } - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result276 - }; - return result276; - }, - - _parse_upperCaseLetter: function(context) { - var cacheKey = "upperCaseLetter" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + 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 result272 = input.charAt(pos); + pos++; + } else { + var result272 = null; + if (context.reportMatchFailures) { + matchFailed("[0-9a-fA-F]"); + } + } + + + + cache[cacheKey] = { + nextPos: pos, + result: result272 + }; + return result272; } - var pos = this._pos; - - - if (this._input.substr(this._pos).match(/^[A-Z]/) !== null) { - var result277 = this._input.charAt(this._pos); - this._pos++; - } else { - var result277 = null; - if (context.reportMatchFailures) { - this._matchFailed("[A-Z]"); + function parse_letter(context) { + var cacheKey = "letter" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; + } + + + var result275 = parse_lowerCaseLetter(context); + if (result275 !== null) { + var result273 = result275; + } else { + var result274 = parse_upperCaseLetter(context); + if (result274 !== null) { + var result273 = result274; + } else { + var result273 = null;; + }; } + + + + cache[cacheKey] = { + nextPos: pos, + result: result273 + }; + return result273; } - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result277 - }; - return result277; - }, - - _parse___: function(context) { - var cacheKey = "__" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + 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 result276 = input.charAt(pos); + pos++; + } else { + var result276 = null; + if (context.reportMatchFailures) { + matchFailed("[a-z]"); + } + } + + + + cache[cacheKey] = { + nextPos: pos, + result: result276 + }; + return result276; } - var pos = this._pos; - - - var result278 = []; - var result282 = this._parse_whitespace(context); - if (result282 !== null) { - var result279 = result282; - } else { - var result281 = this._parse_eol(context); - if (result281 !== null) { - var result279 = result281; - } else { - var result280 = this._parse_comment(context); - if (result280 !== null) { - var result279 = result280; - } else { - var result279 = null;; - }; + 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 result277 = input.charAt(pos); + pos++; + } else { + var result277 = null; + if (context.reportMatchFailures) { + matchFailed("[A-Z]"); + } + } + + + + cache[cacheKey] = { + nextPos: pos, + result: result277 }; + return result277; } - while (result279 !== null) { - result278.push(result279); - var result282 = this._parse_whitespace(context); + + function parse___(context) { + var cacheKey = "__" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; + } + + + var result278 = []; + var result282 = parse_whitespace(context); if (result282 !== null) { var result279 = result282; } else { - var result281 = this._parse_eol(context); + var result281 = parse_eol(context); if (result281 !== null) { var result279 = result281; } else { - var result280 = this._parse_comment(context); + var result280 = parse_comment(context); if (result280 !== null) { var result279 = result280; } else { @@ -2984,238 +2882,208 @@ PEG.grammarParser = (function(){ }; }; } - } - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result278 - }; - return result278; - }, - - _parse_comment: function(context) { - var cacheKey = "comment" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - var savedReportMatchFailures = context.reportMatchFailures; - context.reportMatchFailures = false; - var result285 = this._parse_singleLineComment(context); - if (result285 !== null) { - var result283 = result285; - } else { - var result284 = this._parse_multiLineComment(context); - if (result284 !== null) { - var result283 = result284; - } else { - var result283 = null;; + while (result279 !== null) { + result278.push(result279); + var result282 = parse_whitespace(context); + if (result282 !== null) { + var result279 = result282; + } else { + var result281 = parse_eol(context); + if (result281 !== null) { + var result279 = result281; + } else { + var result280 = parse_comment(context); + if (result280 !== null) { + var result279 = result280; + } else { + var result279 = null;; + }; + }; + } + } + + + + cache[cacheKey] = { + nextPos: pos, + result: result278 }; - } - context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result283 === null) { - this._matchFailed("comment"); - } - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result283 - }; - return result283; - }, - - _parse_singleLineComment: function(context) { - var cacheKey = "singleLineComment" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + return result278; } - var pos = this._pos; - - - var savedPos48 = this._pos; - if (this._input.substr(this._pos, 2) === "//") { - var result287 = "//"; - this._pos += 2; - } else { - var result287 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("//")); + function parse_comment(context) { + var cacheKey = "comment" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result287 !== null) { - var result288 = []; - var savedPos49 = this._pos; - var savedPos50 = this._pos; - var savedReportMatchFailuresVar6 = context.reportMatchFailures; + + var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; - var result292 = this._parse_eolChar(context); - context.reportMatchFailures = savedReportMatchFailuresVar6; - if (result292 === null) { - var result290 = ''; + var result285 = parse_singleLineComment(context); + if (result285 !== null) { + var result283 = result285; } else { - var result290 = null; - this._pos = savedPos50; - } - if (result290 !== null) { - if (this._input.length > this._pos) { - var result291 = this._input.charAt(this._pos); - this._pos++; - } else { - var result291 = null; - if (context.reportMatchFailures) { - this._matchFailed('any character'); - } - } - if (result291 !== null) { - var result289 = [result290, result291]; + var result284 = parse_multiLineComment(context); + if (result284 !== null) { + var result283 = result284; } else { - var result289 = null; - this._pos = savedPos49; - } + var result283 = null;; + }; + } + context.reportMatchFailures = savedReportMatchFailures; + if (context.reportMatchFailures && result283 === null) { + matchFailed("comment"); + } + + cache[cacheKey] = { + nextPos: pos, + result: result283 + }; + return result283; + } + + function parse_singleLineComment(context) { + var cacheKey = "singleLineComment" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; + } + + + var savedPos48 = pos; + if (input.substr(pos, 2) === "//") { + var result287 = "//"; + pos += 2; } else { - var result289 = null; - this._pos = savedPos49; + var result287 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("//")); + } } - while (result289 !== null) { - result288.push(result289); - var savedPos49 = this._pos; - var savedPos50 = this._pos; + if (result287 !== null) { + var result288 = []; + var savedPos49 = pos; + var savedPos50 = pos; var savedReportMatchFailuresVar6 = context.reportMatchFailures; context.reportMatchFailures = false; - var result292 = this._parse_eolChar(context); + var result292 = parse_eolChar(context); context.reportMatchFailures = savedReportMatchFailuresVar6; if (result292 === null) { var result290 = ''; } else { var result290 = null; - this._pos = savedPos50; + pos = savedPos50; } if (result290 !== null) { - if (this._input.length > this._pos) { - var result291 = this._input.charAt(this._pos); - this._pos++; + if (input.length > pos) { + var result291 = input.charAt(pos); + pos++; } else { var result291 = null; if (context.reportMatchFailures) { - this._matchFailed('any character'); + matchFailed('any character'); } } if (result291 !== null) { var result289 = [result290, result291]; } else { var result289 = null; - this._pos = savedPos49; + pos = savedPos49; } } else { var result289 = null; - this._pos = savedPos49; + pos = savedPos49; + } + while (result289 !== null) { + result288.push(result289); + var savedPos49 = pos; + var savedPos50 = pos; + var savedReportMatchFailuresVar6 = context.reportMatchFailures; + context.reportMatchFailures = false; + var result292 = parse_eolChar(context); + context.reportMatchFailures = savedReportMatchFailuresVar6; + if (result292 === null) { + var result290 = ''; + } else { + var result290 = null; + pos = savedPos50; + } + if (result290 !== null) { + if (input.length > pos) { + var result291 = input.charAt(pos); + pos++; + } else { + var result291 = null; + if (context.reportMatchFailures) { + matchFailed('any character'); + } + } + if (result291 !== null) { + var result289 = [result290, result291]; + } else { + var result289 = null; + pos = savedPos49; + } + } else { + var result289 = null; + pos = savedPos49; + } + } + if (result288 !== null) { + var result286 = [result287, result288]; + } else { + var result286 = null; + pos = savedPos48; } - } - if (result288 !== null) { - var result286 = [result287, result288]; } else { var result286 = null; - this._pos = savedPos48; + pos = savedPos48; } - } else { - var result286 = null; - this._pos = savedPos48; - } - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result286 - }; - return result286; - }, - - _parse_multiLineComment: function(context) { - var cacheKey = "multiLineComment" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + + + + cache[cacheKey] = { + nextPos: pos, + result: result286 + }; + return result286; } - var pos = this._pos; - - - var savedPos51 = this._pos; - if (this._input.substr(this._pos, 2) === "/*") { - var result294 = "/*"; - this._pos += 2; - } else { - var result294 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("/*")); + function parse_multiLineComment(context) { + var cacheKey = "multiLineComment" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result294 !== null) { - var result295 = []; - var savedPos52 = this._pos; - var savedPos53 = this._pos; - var savedReportMatchFailuresVar7 = context.reportMatchFailures; - context.reportMatchFailures = false; - if (this._input.substr(this._pos, 2) === "*/") { - var result300 = "*/"; - this._pos += 2; + + + var savedPos51 = pos; + if (input.substr(pos, 2) === "/*") { + var result294 = "/*"; + pos += 2; } else { - var result300 = null; + var result294 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("*/")); - } - } - context.reportMatchFailures = savedReportMatchFailuresVar7; - if (result300 === null) { - var result298 = ''; - } else { - var result298 = null; - this._pos = savedPos53; - } - if (result298 !== null) { - if (this._input.length > this._pos) { - var result299 = this._input.charAt(this._pos); - this._pos++; - } else { - var result299 = null; - if (context.reportMatchFailures) { - this._matchFailed('any character'); - } - } - if (result299 !== null) { - var result297 = [result298, result299]; - } else { - var result297 = null; - this._pos = savedPos52; + matchFailed(quoteString("/*")); } - } else { - var result297 = null; - this._pos = savedPos52; } - while (result297 !== null) { - result295.push(result297); - var savedPos52 = this._pos; - var savedPos53 = this._pos; + if (result294 !== null) { + var result295 = []; + var savedPos52 = pos; + var savedPos53 = pos; var savedReportMatchFailuresVar7 = context.reportMatchFailures; context.reportMatchFailures = false; - if (this._input.substr(this._pos, 2) === "*/") { + if (input.substr(pos, 2) === "*/") { var result300 = "*/"; - this._pos += 2; + pos += 2; } else { var result300 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("*/")); + matchFailed(quoteString("*/")); } } context.reportMatchFailures = savedReportMatchFailuresVar7; @@ -3223,231 +3091,250 @@ PEG.grammarParser = (function(){ var result298 = ''; } else { var result298 = null; - this._pos = savedPos53; + pos = savedPos53; } if (result298 !== null) { - if (this._input.length > this._pos) { - var result299 = this._input.charAt(this._pos); - this._pos++; + if (input.length > pos) { + var result299 = input.charAt(pos); + pos++; } else { var result299 = null; if (context.reportMatchFailures) { - this._matchFailed('any character'); + matchFailed('any character'); } } if (result299 !== null) { var result297 = [result298, result299]; } else { var result297 = null; - this._pos = savedPos52; + pos = savedPos52; } } else { var result297 = null; - this._pos = savedPos52; + pos = savedPos52; } - } - if (result295 !== null) { - if (this._input.substr(this._pos, 2) === "*/") { - var result296 = "*/"; - this._pos += 2; - } else { - var result296 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("*/")); + while (result297 !== null) { + result295.push(result297); + var savedPos52 = pos; + var savedPos53 = pos; + var savedReportMatchFailuresVar7 = context.reportMatchFailures; + context.reportMatchFailures = false; + if (input.substr(pos, 2) === "*/") { + var result300 = "*/"; + pos += 2; + } else { + var result300 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("*/")); + } + } + context.reportMatchFailures = savedReportMatchFailuresVar7; + if (result300 === null) { + var result298 = ''; + } else { + var result298 = null; + pos = savedPos53; + } + if (result298 !== null) { + if (input.length > pos) { + var result299 = input.charAt(pos); + pos++; + } else { + var result299 = null; + if (context.reportMatchFailures) { + matchFailed('any character'); + } + } + if (result299 !== null) { + var result297 = [result298, result299]; + } else { + var result297 = null; + pos = savedPos52; + } + } else { + var result297 = null; + pos = savedPos52; } } - if (result296 !== null) { - var result293 = [result294, result295, result296]; + if (result295 !== null) { + if (input.substr(pos, 2) === "*/") { + var result296 = "*/"; + pos += 2; + } else { + var result296 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("*/")); + } + } + if (result296 !== null) { + var result293 = [result294, result295, result296]; + } else { + var result293 = null; + pos = savedPos51; + } } else { var result293 = null; - this._pos = savedPos51; + pos = savedPos51; } } else { var result293 = null; - this._pos = savedPos51; + pos = savedPos51; } - } else { - var result293 = null; - this._pos = savedPos51; - } - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result293 - }; - return result293; - }, - - _parse_eol: function(context) { - var cacheKey = "eol" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + + + + cache[cacheKey] = { + nextPos: pos, + result: result293 + }; + return result293; } - var pos = this._pos; - - var savedReportMatchFailures = context.reportMatchFailures; - context.reportMatchFailures = false; - if (this._input.substr(this._pos, 1) === "\n") { - var result306 = "\n"; - this._pos += 1; - } else { - var result306 = null; - if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\n")); + function parse_eol(context) { + var cacheKey = "eol" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - if (result306 !== null) { - var result301 = result306; - } else { - if (this._input.substr(this._pos, 2) === "\r\n") { - var result305 = "\r\n"; - this._pos += 2; - } else { - var result305 = null; + + var savedReportMatchFailures = context.reportMatchFailures; + context.reportMatchFailures = false; + if (input.substr(pos, 1) === "\n") { + var result306 = "\n"; + pos += 1; + } else { + var result306 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\r\n")); + matchFailed(quoteString("\n")); } } - if (result305 !== null) { - var result301 = result305; + if (result306 !== null) { + var result301 = result306; } else { - if (this._input.substr(this._pos, 1) === "\r") { - var result304 = "\r"; - this._pos += 1; + if (input.substr(pos, 2) === "\r\n") { + var result305 = "\r\n"; + pos += 2; } else { - var result304 = null; + var result305 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\r")); + matchFailed(quoteString("\r\n")); } } - if (result304 !== null) { - var result301 = result304; + if (result305 !== null) { + var result301 = result305; } else { - if (this._input.substr(this._pos, 1) === "\u2028") { - var result303 = "\u2028"; - this._pos += 1; + if (input.substr(pos, 1) === "\r") { + var result304 = "\r"; + pos += 1; } else { - var result303 = null; + var result304 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\u2028")); + matchFailed(quoteString("\r")); } } - if (result303 !== null) { - var result301 = result303; + if (result304 !== null) { + var result301 = result304; } else { - if (this._input.substr(this._pos, 1) === "\u2029") { - var result302 = "\u2029"; - this._pos += 1; + if (input.substr(pos, 1) === "\u2028") { + var result303 = "\u2028"; + pos += 1; } else { - var result302 = null; + var result303 = null; if (context.reportMatchFailures) { - this._matchFailed(this._quoteString("\u2029")); + matchFailed(quoteString("\u2028")); } } - if (result302 !== null) { - var result301 = result302; + if (result303 !== null) { + var result301 = result303; } else { - var result301 = null;; + if (input.substr(pos, 1) === "\u2029") { + var result302 = "\u2029"; + pos += 1; + } else { + var result302 = null; + if (context.reportMatchFailures) { + matchFailed(quoteString("\u2029")); + } + } + if (result302 !== null) { + var result301 = result302; + } else { + var result301 = null;; + }; }; }; }; + } + context.reportMatchFailures = savedReportMatchFailures; + if (context.reportMatchFailures && result301 === null) { + matchFailed("end of line"); + } + + cache[cacheKey] = { + nextPos: pos, + result: result301 }; - } - context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result301 === null) { - this._matchFailed("end of line"); - } - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result301 - }; - return result301; - }, - - _parse_eolChar: function(context) { - var cacheKey = "eolChar" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; + return result301; } - var pos = this._pos; - - - if (this._input.substr(this._pos).match(/^[\n\r\u2028\u2029]/) !== null) { - var result307 = this._input.charAt(this._pos); - this._pos++; - } else { - var result307 = null; - if (context.reportMatchFailures) { - this._matchFailed("[\\n\\r\\u2028\\u2029]"); + function parse_eolChar(context) { + var cacheKey = "eolChar" + '@' + pos; + var cachedResult = cache[cacheKey]; + if (cachedResult) { + pos = cachedResult.nextPos; + return cachedResult.result; } - } - - - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result307 - }; - return result307; - }, - - _parse_whitespace: function(context) { - var cacheKey = "whitespace" + '@' + this._pos; - var cachedResult = this._cache[cacheKey]; - if (cachedResult) { - this._pos = cachedResult.nextPos; - return cachedResult.result; - } - - var pos = this._pos; - - var savedReportMatchFailures = context.reportMatchFailures; - context.reportMatchFailures = false; - if (this._input.substr(this._pos).match(/^[   ᠎ -    ]/) !== null) { - var result308 = this._input.charAt(this._pos); - this._pos++; - } else { - var result308 = null; - if (context.reportMatchFailures) { - this._matchFailed("[   ᠎ -    ]"); + + + if (input.substr(pos).match(/^[\n\r\u2028\u2029]/) !== null) { + var result307 = input.charAt(pos); + pos++; + } else { + var result307 = null; + if (context.reportMatchFailures) { + matchFailed("[\\n\\r\\u2028\\u2029]"); + } } + + + + cache[cacheKey] = { + nextPos: pos, + result: result307 + }; + return result307; } - context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result308 === null) { - this._matchFailed("whitespace"); - } - - this._cache[cacheKey] = { - nextPos: this._pos, - result: result308 - }; - return result308; - }, - - /* - * Parses the input with a generated parser. If the parsing is successfull, - * returns a value explicitly or implicitly specified by the grammar from - * which the parser was generated (see |PEG.buildParser|). If the parsing is - * unsuccessful, throws |PEG.grammarParser.SyntaxError| describing the error. - */ - parse: function(input) { - var that = this; - function initialize() { - that._input = input; - that._pos = 0; - that._rightmostMatchFailuresPos = 0; - that._rightmostMatchFailuresExpected = []; - that._cache = {}; + function 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 result308 = input.charAt(pos); + pos++; + } else { + var result308 = null; + if (context.reportMatchFailures) { + matchFailed("[   ᠎ -    ]"); + } + } + context.reportMatchFailures = savedReportMatchFailures; + if (context.reportMatchFailures && result308 === null) { + matchFailed("whitespace"); + } + + cache[cacheKey] = { + nextPos: pos, + result: result308 + }; + return result308; } function buildErrorMessage() { @@ -3465,10 +3352,10 @@ PEG.grammarParser = (function(){ } } - var expected = buildExpected(that._rightmostMatchFailuresExpected); - var pos = Math.max(that._pos, that._rightmostMatchFailuresPos); - var actual = pos < that._input.length - ? that._quoteString(that._input.charAt(pos)) + 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.'; @@ -3482,13 +3369,11 @@ PEG.grammarParser = (function(){ * enough to prevent it. */ - var input = that._input; - var pos = that._rightmostMatchFailuresPos; var line = 1; var column = 1; var seenCR = false; - for (var i = 0; i < pos; i++) { + for (var i = 0; i < rightmostMatchFailuresPos; i++) { var ch = input.charAt(i); if (ch === '\n') { if (!seenCR) { line++; } @@ -3507,13 +3392,11 @@ PEG.grammarParser = (function(){ return { line: line, column: column }; } - initialize(); - var initialContext = { reportMatchFailures: true }; - var result = this._parse_grammar(initialContext); + var result = parse_grammar(initialContext); /* * The parser is now in one of the following three states: @@ -3521,27 +3404,28 @@ PEG.grammarParser = (function(){ * 1. The parser successfully parsed the whole input. * * - |result !== null| - * - |that._pos === input.length| - * - |that._rightmostMatchFailuresExpected.length| may or may not contain + * - |pos === input.length| + * - |rightmostMatchFailuresExpected.length| may or may not contain * something * * 2. The parser successfully parsed only a part of the input. * * - |result !== null| - * - |that._pos < input.length| - * - |that._rightmostMatchFailuresExpected.length| may or may not contain + * - |pos < input.length| + * - |rightmostMatchFailuresExpected.length| may or may not contain * something * * 3. The parser did not successfully parse any part of the input. * * - |result === null| - * - |that._pos === 0| - * - |that._rightmostMatchFailuresExpected.length| contains at least one failure + * - |pos === 0| + * - |rightmostMatchFailuresExpected.length| contains at least one + * failure * * All code following this comment (including called functions) must * handle these states. */ - if (result === null || this._pos !== input.length) { + if (result === null || pos !== input.length) { var errorPosition = computeErrorPosition(); throw new this.SyntaxError( buildErrorMessage(),