From 52704593cde1e8396cf87fe49a100c6591139e1f Mon Sep 17 00:00:00 2001 From: David Majda Date: Sun, 23 May 2010 19:29:53 +0200 Subject: [PATCH] Allow labeled expressions in the metagrammar (without any meaning yet) --- lib/compiler.js | 7 + lib/metagrammar.js | 2198 ++++++++++++++++++++------------------ lib/metagrammar.pegjs | 15 +- test/compiler-test.js | 8 + test/metagrammar-test.js | 44 +- 5 files changed, 1212 insertions(+), 1060 deletions(-) diff --git a/lib/compiler.js b/lib/compiler.js index 1dcdcc9..0698700 100644 --- a/lib/compiler.js +++ b/lib/compiler.js @@ -275,6 +275,7 @@ PEG.Compiler = { rule: checkExpression, choice: checkSubnodes("alternatives"), sequence: checkSubnodes("elements"), + labeled: checkExpression, and_predicate: checkExpression, not_predicate: checkExpression, optional: checkExpression, @@ -340,6 +341,7 @@ PEG.Compiler = { } }, + labeled: checkExpression, and_predicate: checkExpression, not_predicate: checkExpression, optional: checkExpression, @@ -406,6 +408,7 @@ PEG.Compiler = { rule: replaceInExpression, choice: replaceInSubnodes("alternatives"), sequence: replaceInSubnodes("elements"), + labeled: replaceInExpression, and_predicate: replaceInExpression, not_predicate: replaceInExpression, optional: replaceInExpression, @@ -596,6 +599,10 @@ PEG.Compiler = { ); }, + labeled: function(node, resultVar) { + return PEG.Compiler.compileNode(node.expression, resultVar); + }, + and_predicate: function(node, resultVar) { var savedPosVar = PEG.Compiler.generateUniqueIdentifier("savedPos"); var savedReportMatchFailuresVar = PEG.Compiler.generateUniqueIdentifier("savedReportMatchFailuresVar"); diff --git a/lib/metagrammar.js b/lib/metagrammar.js index 6ab8a5c..f7f38a0 100644 --- a/lib/metagrammar.js +++ b/lib/metagrammar.js @@ -271,10 +271,10 @@ PEG.grammarParser = (function(){ var savedPos4 = this._pos; var result26 = []; - var result28 = this._parse_prefixed(context); + var result28 = this._parse_labeled(context); while (result28 !== null) { result26.push(result28); - var result28 = this._parse_prefixed(context); + var result28 = this._parse_labeled(context); } if (result26 !== null) { var result27 = this._parse_action(context); @@ -307,10 +307,10 @@ PEG.grammarParser = (function(){ var result20 = result24; } else { var result22 = []; - var result23 = this._parse_prefixed(context); + var result23 = this._parse_labeled(context); while (result23 !== null) { result22.push(result23); - var result23 = this._parse_prefixed(context); + var result23 = this._parse_labeled(context); } var result21 = result22 !== null ? (function($1) { @@ -338,6 +338,66 @@ PEG.grammarParser = (function(){ return result20; }, + _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 result33 = this._parse_identifier(context); + if (result33 !== null) { + var result34 = this._parse_colon(context); + if (result34 !== null) { + var result35 = this._parse_prefixed(context); + if (result35 !== null) { + var result32 = [result33, result34, result35]; + } else { + var result32 = null; + this._pos = savedPos5; + } + } else { + var result32 = null; + this._pos = savedPos5; + } + } else { + var result32 = null; + this._pos = savedPos5; + } + var result31 = result32 !== null + ? (function($1, $2, $3) { + return { + type: "labeled", + label: $1, + expression: $3 + }; + }).apply(null, result32) + : null; + if (result31 !== null) { + var result29 = result31; + } else { + var result30 = this._parse_prefixed(context); + if (result30 !== null) { + var result29 = result30; + } else { + var result29 = null;; + }; + } + + + + this._cache[cacheKey] = { + nextPos: this._pos, + result: result29 + }; + return result29; + }, + _parse_prefixed: function(context) { var cacheKey = "prefixed" + '@' + this._pos; var cachedResult = this._cache[cacheKey]; @@ -349,51 +409,51 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos6 = this._pos; - var result37 = this._parse_and(context); - if (result37 !== null) { - var result38 = this._parse_suffixed(context); - if (result38 !== null) { - var result36 = [result37, result38]; + var savedPos7 = this._pos; + var result44 = this._parse_and(context); + if (result44 !== null) { + var result45 = this._parse_suffixed(context); + if (result45 !== null) { + var result43 = [result44, result45]; } else { - var result36 = null; - this._pos = savedPos6; + var result43 = null; + this._pos = savedPos7; } } else { - var result36 = null; - this._pos = savedPos6; + var result43 = null; + this._pos = savedPos7; } - var result35 = result36 !== null - ? (function($1, $2) { return { type: "and_predicate", expression: $2 }; }).apply(null, result36) + var result42 = result43 !== null + ? (function($1, $2) { return { type: "and_predicate", expression: $2 }; }).apply(null, result43) : null; - if (result35 !== null) { - var result29 = result35; - } else { - var savedPos5 = this._pos; - var result33 = this._parse_not(context); - if (result33 !== null) { - var result34 = this._parse_suffixed(context); - if (result34 !== null) { - var result32 = [result33, result34]; + if (result42 !== null) { + var result36 = result42; + } else { + var savedPos6 = this._pos; + var result40 = this._parse_not(context); + if (result40 !== null) { + var result41 = this._parse_suffixed(context); + if (result41 !== null) { + var result39 = [result40, result41]; } else { - var result32 = null; - this._pos = savedPos5; + var result39 = null; + this._pos = savedPos6; } } else { - var result32 = null; - this._pos = savedPos5; + var result39 = null; + this._pos = savedPos6; } - var result31 = result32 !== null - ? (function($1, $2) { return { type: "not_predicate", expression: $2 }; }).apply(null, result32) + var result38 = result39 !== null + ? (function($1, $2) { return { type: "not_predicate", expression: $2 }; }).apply(null, result39) : null; - if (result31 !== null) { - var result29 = result31; + if (result38 !== null) { + var result36 = result38; } else { - var result30 = this._parse_suffixed(context); - if (result30 !== null) { - var result29 = result30; + var result37 = this._parse_suffixed(context); + if (result37 !== null) { + var result36 = result37; } else { - var result29 = null;; + var result36 = null;; }; }; } @@ -402,9 +462,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result29 + result: result36 }; - return result29; + return result36; }, _parse_suffixed: function(context) { @@ -418,71 +478,71 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos9 = this._pos; - var result51 = this._parse_primary(context); - if (result51 !== null) { - var result52 = this._parse_question(context); - if (result52 !== null) { - var result50 = [result51, result52]; + var savedPos10 = this._pos; + var result58 = this._parse_primary(context); + if (result58 !== null) { + var result59 = this._parse_question(context); + if (result59 !== null) { + var result57 = [result58, result59]; } else { - var result50 = null; - this._pos = savedPos9; + var result57 = null; + this._pos = savedPos10; } } else { - var result50 = null; - this._pos = savedPos9; + var result57 = null; + this._pos = savedPos10; } - var result49 = result50 !== null - ? (function($1, $2) { return { type: "optional", expression: $1}; }).apply(null, result50) + var result56 = result57 !== null + ? (function($1, $2) { return { type: "optional", expression: $1}; }).apply(null, result57) : null; - if (result49 !== null) { - var result39 = result49; - } else { - var savedPos8 = this._pos; - var result47 = this._parse_primary(context); - if (result47 !== null) { - var result48 = this._parse_star(context); - if (result48 !== null) { - var result46 = [result47, result48]; + if (result56 !== null) { + var result46 = result56; + } else { + var savedPos9 = this._pos; + var result54 = this._parse_primary(context); + if (result54 !== null) { + var result55 = this._parse_star(context); + if (result55 !== null) { + var result53 = [result54, result55]; } else { - var result46 = null; - this._pos = savedPos8; + var result53 = null; + this._pos = savedPos9; } } else { - var result46 = null; - this._pos = savedPos8; + var result53 = null; + this._pos = savedPos9; } - var result45 = result46 !== null - ? (function($1, $2) { return { type: "zero_or_more", expression: $1}; }).apply(null, result46) + var result52 = result53 !== null + ? (function($1, $2) { return { type: "zero_or_more", expression: $1}; }).apply(null, result53) : null; - if (result45 !== null) { - var result39 = result45; - } else { - var savedPos7 = this._pos; - var result43 = this._parse_primary(context); - if (result43 !== null) { - var result44 = this._parse_plus(context); - if (result44 !== null) { - var result42 = [result43, result44]; + if (result52 !== null) { + var result46 = result52; + } else { + var savedPos8 = this._pos; + var result50 = this._parse_primary(context); + if (result50 !== null) { + var result51 = this._parse_plus(context); + if (result51 !== null) { + var result49 = [result50, result51]; } else { - var result42 = null; - this._pos = savedPos7; + var result49 = null; + this._pos = savedPos8; } } else { - var result42 = null; - this._pos = savedPos7; + var result49 = null; + this._pos = savedPos8; } - var result41 = result42 !== null - ? (function($1, $2) { return { type: "one_or_more", expression: $1}; }).apply(null, result42) + var result48 = result49 !== null + ? (function($1, $2) { return { type: "one_or_more", expression: $1}; }).apply(null, result49) : null; - if (result41 !== null) { - var result39 = result41; + if (result48 !== null) { + var result46 = result48; } else { - var result40 = this._parse_primary(context); - if (result40 !== null) { - var result39 = result40; + var result47 = this._parse_primary(context); + if (result47 !== null) { + var result46 = result47; } else { - var result39 = null;; + var result46 = null;; }; }; }; @@ -492,9 +552,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result39 + result: result46 }; - return result39; + return result46; }, _parse_primary: function(context) { @@ -508,112 +568,112 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos11 = this._pos; - var result66 = this._parse_identifier(context); - if (result66 !== null) { - var savedPos12 = this._pos; + var savedPos12 = this._pos; + var result73 = this._parse_identifier(context); + if (result73 !== null) { + var savedPos13 = this._pos; var savedReportMatchFailuresVar0 = context.reportMatchFailures; context.reportMatchFailures = false; - var savedPos13 = this._pos; - var result72 = this._parse_literal(context); - if (result72 !== null) { - var result69 = result72; + var savedPos14 = this._pos; + var result79 = this._parse_literal(context); + if (result79 !== null) { + var result76 = result79; } else { if (this._input.substr(this._pos, 0) === "") { - var result71 = ""; + var result78 = ""; this._pos += 0; } else { - var result71 = null; + var result78 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("")); } } - if (result71 !== null) { - var result69 = result71; + if (result78 !== null) { + var result76 = result78; } else { - var result69 = null;; + var result76 = null;; }; } - if (result69 !== null) { - var result70 = this._parse_equals(context); - if (result70 !== null) { - var result68 = [result69, result70]; + if (result76 !== null) { + var result77 = this._parse_equals(context); + if (result77 !== null) { + var result75 = [result76, result77]; } else { - var result68 = null; - this._pos = savedPos13; + var result75 = null; + this._pos = savedPos14; } } else { - var result68 = null; - this._pos = savedPos13; + var result75 = null; + this._pos = savedPos14; } context.reportMatchFailures = savedReportMatchFailuresVar0; - if (result68 === null) { - var result67 = ''; + if (result75 === null) { + var result74 = ''; } else { - var result67 = null; - this._pos = savedPos12; + var result74 = null; + this._pos = savedPos13; } - if (result67 !== null) { - var result65 = [result66, result67]; + if (result74 !== null) { + var result72 = [result73, result74]; } else { - var result65 = null; - this._pos = savedPos11; + var result72 = null; + this._pos = savedPos12; } } else { - var result65 = null; - this._pos = savedPos11; + var result72 = null; + this._pos = savedPos12; } - var result64 = result65 !== null - ? (function($1, $2) { return { type: "rule_ref", name: $1 }; }).apply(null, result65) + var result71 = result72 !== null + ? (function($1, $2) { return { type: "rule_ref", name: $1 }; }).apply(null, result72) : null; - if (result64 !== null) { - var result53 = result64; + if (result71 !== null) { + var result60 = result71; } else { - var result63 = this._parse_literal(context); - var result62 = result63 !== null - ? (function($1) { return { type: "literal", value: $1 }; })(result63) + var result70 = this._parse_literal(context); + var result69 = result70 !== null + ? (function($1) { return { type: "literal", value: $1 }; })(result70) : null; - if (result62 !== null) { - var result53 = result62; + if (result69 !== null) { + var result60 = result69; } else { - var result61 = this._parse_dot(context); - var result60 = result61 !== null - ? (function($1) { return { type: "any" }; })(result61) + var result68 = this._parse_dot(context); + var result67 = result68 !== null + ? (function($1) { return { type: "any" }; })(result68) : null; - if (result60 !== null) { - var result53 = result60; + if (result67 !== null) { + var result60 = result67; } else { - var result59 = this._parse_class(context); - if (result59 !== null) { - var result53 = result59; + var result66 = this._parse_class(context); + if (result66 !== null) { + var result60 = result66; } else { - var savedPos10 = this._pos; - var result56 = this._parse_lparen(context); - if (result56 !== null) { - var result57 = this._parse_choice(context); - if (result57 !== null) { - var result58 = this._parse_rparen(context); - if (result58 !== null) { - var result55 = [result56, result57, result58]; + var savedPos11 = this._pos; + var result63 = this._parse_lparen(context); + if (result63 !== null) { + var result64 = this._parse_choice(context); + if (result64 !== null) { + var result65 = this._parse_rparen(context); + if (result65 !== null) { + var result62 = [result63, result64, result65]; } else { - var result55 = null; - this._pos = savedPos10; + var result62 = null; + this._pos = savedPos11; } } else { - var result55 = null; - this._pos = savedPos10; + var result62 = null; + this._pos = savedPos11; } } else { - var result55 = null; - this._pos = savedPos10; + var result62 = null; + this._pos = savedPos11; } - var result54 = result55 !== null - ? (function($1, $2, $3) { return $2; }).apply(null, result55) + var result61 = result62 !== null + ? (function($1, $2, $3) { return $2; }).apply(null, result62) : null; - if (result54 !== null) { - var result53 = result54; + if (result61 !== null) { + var result60 = result61; } else { - var result53 = null;; + var result60 = null;; }; }; }; @@ -624,9 +684,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result53 + result: result60 }; - return result53; + return result60; }, _parse_action: function(context) { @@ -641,33 +701,33 @@ PEG.grammarParser = (function(){ var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; - var savedPos14 = this._pos; - var result75 = this._parse_braced(context); - if (result75 !== null) { - var result76 = this._parse___(context); - if (result76 !== null) { - var result74 = [result75, result76]; + var savedPos15 = this._pos; + var result82 = this._parse_braced(context); + if (result82 !== null) { + var result83 = this._parse___(context); + if (result83 !== null) { + var result81 = [result82, result83]; } else { - var result74 = null; - this._pos = savedPos14; + var result81 = null; + this._pos = savedPos15; } } else { - var result74 = null; - this._pos = savedPos14; + var result81 = null; + this._pos = savedPos15; } - var result73 = result74 !== null - ? (function($1, $2) { return $1.substr(1, $1.length - 2); }).apply(null, result74) + var result80 = result81 !== null + ? (function($1, $2) { return $1.substr(1, $1.length - 2); }).apply(null, result81) : null; context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result73 === null) { + if (context.reportMatchFailures && result80 === null) { this._matchFailed("action"); } this._cache[cacheKey] = { nextPos: this._pos, - result: result73 + result: result80 }; - return result73; + return result80; }, _parse_braced: function(context) { @@ -681,78 +741,78 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos15 = this._pos; + var savedPos16 = this._pos; if (this._input.substr(this._pos, 1) === "{") { - var result79 = "{"; + var result86 = "{"; this._pos += 1; } else { - var result79 = null; + var result86 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("{")); } } - if (result79 !== null) { - var result80 = []; - var result84 = this._parse_braced(context); - if (result84 !== null) { - var result82 = result84; + if (result86 !== null) { + var result87 = []; + var result91 = this._parse_braced(context); + if (result91 !== null) { + var result89 = result91; } else { - var result83 = this._parse_nonBraceCharacter(context); - if (result83 !== null) { - var result82 = result83; + var result90 = this._parse_nonBraceCharacter(context); + if (result90 !== null) { + var result89 = result90; } else { - var result82 = null;; + var result89 = null;; }; } - while (result82 !== null) { - result80.push(result82); - var result84 = this._parse_braced(context); - if (result84 !== null) { - var result82 = result84; + while (result89 !== null) { + result87.push(result89); + var result91 = this._parse_braced(context); + if (result91 !== null) { + var result89 = result91; } else { - var result83 = this._parse_nonBraceCharacter(context); - if (result83 !== null) { - var result82 = result83; + var result90 = this._parse_nonBraceCharacter(context); + if (result90 !== null) { + var result89 = result90; } else { - var result82 = null;; + var result89 = null;; }; } } - if (result80 !== null) { + if (result87 !== null) { if (this._input.substr(this._pos, 1) === "}") { - var result81 = "}"; + var result88 = "}"; this._pos += 1; } else { - var result81 = null; + var result88 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("}")); } } - if (result81 !== null) { - var result78 = [result79, result80, result81]; + if (result88 !== null) { + var result85 = [result86, result87, result88]; } else { - var result78 = null; - this._pos = savedPos15; + var result85 = null; + this._pos = savedPos16; } } else { - var result78 = null; - this._pos = savedPos15; + var result85 = null; + this._pos = savedPos16; } } else { - var result78 = null; - this._pos = savedPos15; + var result85 = null; + this._pos = savedPos16; } - var result77 = result78 !== null - ? (function($1, $2, $3) { return $1 + $2.join("") + $3; }).apply(null, result78) + var result84 = result85 !== null + ? (function($1, $2, $3) { return $1 + $2.join("") + $3; }).apply(null, result85) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result77 + result: result84 }; - return result77; + return result84; }, _parse_nonBraceCharacters: function(context) { @@ -766,27 +826,27 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var result87 = this._parse_nonBraceCharacter(context); - if (result87 !== null) { - var result86 = []; - while (result87 !== null) { - result86.push(result87); - var result87 = this._parse_nonBraceCharacter(context); + var result94 = this._parse_nonBraceCharacter(context); + if (result94 !== null) { + var result93 = []; + while (result94 !== null) { + result93.push(result94); + var result94 = this._parse_nonBraceCharacter(context); } } else { - var result86 = null; + var result93 = null; } - var result85 = result86 !== null - ? (function($1) { return $1.join(""); })(result86) + var result92 = result93 !== null + ? (function($1) { return $1.join(""); })(result93) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result85 + result: result92 }; - return result85; + return result92; }, _parse_nonBraceCharacter: function(context) { @@ -801,10 +861,10 @@ PEG.grammarParser = (function(){ if (this._input.substr(this._pos).match(/^[^{}]/) !== null) { - var result88 = this._input.charAt(this._pos); + var result95 = this._input.charAt(this._pos); this._pos++; } else { - var result88 = null; + var result95 = null; if (context.reportMatchFailures) { this._matchFailed("[^{}]"); } @@ -814,9 +874,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result88 + result: result95 }; - return result88; + return result95; }, _parse_equals: function(context) { @@ -830,39 +890,85 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos16 = this._pos; + var savedPos17 = this._pos; if (this._input.substr(this._pos, 1) === "=") { - var result91 = "="; + var result98 = "="; this._pos += 1; } else { - var result91 = null; + var result98 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("=")); } } - if (result91 !== null) { - var result92 = this._parse___(context); - if (result92 !== null) { - var result90 = [result91, result92]; + if (result98 !== null) { + var result99 = this._parse___(context); + if (result99 !== null) { + var result97 = [result98, result99]; } else { - var result90 = null; - this._pos = savedPos16; + var result97 = null; + this._pos = savedPos17; } } else { - var result90 = null; - this._pos = savedPos16; + var result97 = null; + this._pos = savedPos17; } - var result89 = result90 !== null - ? (function($1, $2) { return $1; }).apply(null, result90) + var result96 = result97 !== null + ? (function($1, $2) { return $1; }).apply(null, result97) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result89 + result: result96 }; - return result89; + return result96; + }, + + _parse_colon: function(context) { + var cacheKey = "colon" + '@' + this._pos; + var cachedResult = this._cache[cacheKey]; + if (cachedResult) { + this._pos = cachedResult.nextPos; + return cachedResult.result; + } + + var pos = this._pos; + + + var savedPos18 = this._pos; + if (this._input.substr(this._pos, 1) === ":") { + var result102 = ":"; + this._pos += 1; + } else { + var result102 = null; + if (context.reportMatchFailures) { + this._matchFailed(this._quoteString(":")); + } + } + if (result102 !== null) { + var result103 = this._parse___(context); + if (result103 !== null) { + var result101 = [result102, result103]; + } else { + var result101 = null; + this._pos = savedPos18; + } + } else { + var result101 = null; + this._pos = savedPos18; + } + var result100 = result101 !== null + ? (function($1, $2) { return $1; }).apply(null, result101) + : null; + + + + this._cache[cacheKey] = { + nextPos: this._pos, + result: result100 + }; + return result100; }, _parse_slash: function(context) { @@ -876,39 +982,39 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos17 = this._pos; + var savedPos19 = this._pos; if (this._input.substr(this._pos, 1) === "/") { - var result95 = "/"; + var result106 = "/"; this._pos += 1; } else { - var result95 = null; + var result106 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("/")); } } - if (result95 !== null) { - var result96 = this._parse___(context); - if (result96 !== null) { - var result94 = [result95, result96]; + if (result106 !== null) { + var result107 = this._parse___(context); + if (result107 !== null) { + var result105 = [result106, result107]; } else { - var result94 = null; - this._pos = savedPos17; + var result105 = null; + this._pos = savedPos19; } } else { - var result94 = null; - this._pos = savedPos17; + var result105 = null; + this._pos = savedPos19; } - var result93 = result94 !== null - ? (function($1, $2) { return $1; }).apply(null, result94) + var result104 = result105 !== null + ? (function($1, $2) { return $1; }).apply(null, result105) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result93 + result: result104 }; - return result93; + return result104; }, _parse_and: function(context) { @@ -922,39 +1028,39 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos18 = this._pos; + var savedPos20 = this._pos; if (this._input.substr(this._pos, 1) === "&") { - var result99 = "&"; + var result110 = "&"; this._pos += 1; } else { - var result99 = null; + var result110 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("&")); } } - if (result99 !== null) { - var result100 = this._parse___(context); - if (result100 !== null) { - var result98 = [result99, result100]; + if (result110 !== null) { + var result111 = this._parse___(context); + if (result111 !== null) { + var result109 = [result110, result111]; } else { - var result98 = null; - this._pos = savedPos18; + var result109 = null; + this._pos = savedPos20; } } else { - var result98 = null; - this._pos = savedPos18; + var result109 = null; + this._pos = savedPos20; } - var result97 = result98 !== null - ? (function($1, $2) { return $1; }).apply(null, result98) + var result108 = result109 !== null + ? (function($1, $2) { return $1; }).apply(null, result109) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result97 + result: result108 }; - return result97; + return result108; }, _parse_not: function(context) { @@ -968,39 +1074,39 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos19 = this._pos; + var savedPos21 = this._pos; if (this._input.substr(this._pos, 1) === "!") { - var result103 = "!"; + var result114 = "!"; this._pos += 1; } else { - var result103 = null; + var result114 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("!")); } } - if (result103 !== null) { - var result104 = this._parse___(context); - if (result104 !== null) { - var result102 = [result103, result104]; + if (result114 !== null) { + var result115 = this._parse___(context); + if (result115 !== null) { + var result113 = [result114, result115]; } else { - var result102 = null; - this._pos = savedPos19; + var result113 = null; + this._pos = savedPos21; } } else { - var result102 = null; - this._pos = savedPos19; + var result113 = null; + this._pos = savedPos21; } - var result101 = result102 !== null - ? (function($1, $2) { return $1; }).apply(null, result102) + var result112 = result113 !== null + ? (function($1, $2) { return $1; }).apply(null, result113) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result101 + result: result112 }; - return result101; + return result112; }, _parse_question: function(context) { @@ -1014,39 +1120,39 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos20 = this._pos; + var savedPos22 = this._pos; if (this._input.substr(this._pos, 1) === "?") { - var result107 = "?"; + var result118 = "?"; this._pos += 1; } else { - var result107 = null; + var result118 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("?")); } } - if (result107 !== null) { - var result108 = this._parse___(context); - if (result108 !== null) { - var result106 = [result107, result108]; + if (result118 !== null) { + var result119 = this._parse___(context); + if (result119 !== null) { + var result117 = [result118, result119]; } else { - var result106 = null; - this._pos = savedPos20; + var result117 = null; + this._pos = savedPos22; } } else { - var result106 = null; - this._pos = savedPos20; + var result117 = null; + this._pos = savedPos22; } - var result105 = result106 !== null - ? (function($1, $2) { return $1; }).apply(null, result106) + var result116 = result117 !== null + ? (function($1, $2) { return $1; }).apply(null, result117) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result105 + result: result116 }; - return result105; + return result116; }, _parse_star: function(context) { @@ -1060,39 +1166,39 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos21 = this._pos; + var savedPos23 = this._pos; if (this._input.substr(this._pos, 1) === "*") { - var result111 = "*"; + var result122 = "*"; this._pos += 1; } else { - var result111 = null; + var result122 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("*")); } } - if (result111 !== null) { - var result112 = this._parse___(context); - if (result112 !== null) { - var result110 = [result111, result112]; + if (result122 !== null) { + var result123 = this._parse___(context); + if (result123 !== null) { + var result121 = [result122, result123]; } else { - var result110 = null; - this._pos = savedPos21; + var result121 = null; + this._pos = savedPos23; } } else { - var result110 = null; - this._pos = savedPos21; + var result121 = null; + this._pos = savedPos23; } - var result109 = result110 !== null - ? (function($1, $2) { return $1; }).apply(null, result110) + var result120 = result121 !== null + ? (function($1, $2) { return $1; }).apply(null, result121) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result109 + result: result120 }; - return result109; + return result120; }, _parse_plus: function(context) { @@ -1106,39 +1212,39 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos22 = this._pos; + var savedPos24 = this._pos; if (this._input.substr(this._pos, 1) === "+") { - var result115 = "+"; + var result126 = "+"; this._pos += 1; } else { - var result115 = null; + var result126 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("+")); } } - if (result115 !== null) { - var result116 = this._parse___(context); - if (result116 !== null) { - var result114 = [result115, result116]; + if (result126 !== null) { + var result127 = this._parse___(context); + if (result127 !== null) { + var result125 = [result126, result127]; } else { - var result114 = null; - this._pos = savedPos22; + var result125 = null; + this._pos = savedPos24; } } else { - var result114 = null; - this._pos = savedPos22; + var result125 = null; + this._pos = savedPos24; } - var result113 = result114 !== null - ? (function($1, $2) { return $1; }).apply(null, result114) + var result124 = result125 !== null + ? (function($1, $2) { return $1; }).apply(null, result125) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result113 + result: result124 }; - return result113; + return result124; }, _parse_lparen: function(context) { @@ -1152,39 +1258,39 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos23 = this._pos; + var savedPos25 = this._pos; if (this._input.substr(this._pos, 1) === "(") { - var result119 = "("; + var result130 = "("; this._pos += 1; } else { - var result119 = null; + var result130 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("(")); } } - if (result119 !== null) { - var result120 = this._parse___(context); - if (result120 !== null) { - var result118 = [result119, result120]; + if (result130 !== null) { + var result131 = this._parse___(context); + if (result131 !== null) { + var result129 = [result130, result131]; } else { - var result118 = null; - this._pos = savedPos23; + var result129 = null; + this._pos = savedPos25; } } else { - var result118 = null; - this._pos = savedPos23; + var result129 = null; + this._pos = savedPos25; } - var result117 = result118 !== null - ? (function($1, $2) { return $1; }).apply(null, result118) + var result128 = result129 !== null + ? (function($1, $2) { return $1; }).apply(null, result129) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result117 + result: result128 }; - return result117; + return result128; }, _parse_rparen: function(context) { @@ -1198,39 +1304,39 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos24 = this._pos; + var savedPos26 = this._pos; if (this._input.substr(this._pos, 1) === ")") { - var result123 = ")"; + var result134 = ")"; this._pos += 1; } else { - var result123 = null; + var result134 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString(")")); } } - if (result123 !== null) { - var result124 = this._parse___(context); - if (result124 !== null) { - var result122 = [result123, result124]; + if (result134 !== null) { + var result135 = this._parse___(context); + if (result135 !== null) { + var result133 = [result134, result135]; } else { - var result122 = null; - this._pos = savedPos24; + var result133 = null; + this._pos = savedPos26; } } else { - var result122 = null; - this._pos = savedPos24; + var result133 = null; + this._pos = savedPos26; } - var result121 = result122 !== null - ? (function($1, $2) { return $1; }).apply(null, result122) + var result132 = result133 !== null + ? (function($1, $2) { return $1; }).apply(null, result133) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result121 + result: result132 }; - return result121; + return result132; }, _parse_dot: function(context) { @@ -1244,39 +1350,39 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos25 = this._pos; + var savedPos27 = this._pos; if (this._input.substr(this._pos, 1) === ".") { - var result127 = "."; + var result138 = "."; this._pos += 1; } else { - var result127 = null; + var result138 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString(".")); } } - if (result127 !== null) { - var result128 = this._parse___(context); - if (result128 !== null) { - var result126 = [result127, result128]; + if (result138 !== null) { + var result139 = this._parse___(context); + if (result139 !== null) { + var result137 = [result138, result139]; } else { - var result126 = null; - this._pos = savedPos25; + var result137 = null; + this._pos = savedPos27; } } else { - var result126 = null; - this._pos = savedPos25; + var result137 = null; + this._pos = savedPos27; } - var result125 = result126 !== null - ? (function($1, $2) { return $1; }).apply(null, result126) + var result136 = result137 !== null + ? (function($1, $2) { return $1; }).apply(null, result137) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result125 + result: result136 }; - return result125; + return result136; }, _parse_identifier: function(context) { @@ -1291,149 +1397,149 @@ PEG.grammarParser = (function(){ var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; - var savedPos26 = this._pos; - var result141 = this._parse_letter(context); - if (result141 !== null) { - var result131 = result141; + var savedPos28 = this._pos; + var result152 = this._parse_letter(context); + if (result152 !== null) { + var result142 = result152; } else { if (this._input.substr(this._pos, 1) === "_") { - var result140 = "_"; + var result151 = "_"; this._pos += 1; } else { - var result140 = null; + var result151 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("_")); } } - if (result140 !== null) { - var result131 = result140; + if (result151 !== null) { + var result142 = result151; } else { if (this._input.substr(this._pos, 1) === "$") { - var result139 = "$"; + var result150 = "$"; this._pos += 1; } else { - var result139 = null; + var result150 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("$")); } } - if (result139 !== null) { - var result131 = result139; + if (result150 !== null) { + var result142 = result150; } else { - var result131 = null;; + var result142 = null;; }; }; } - if (result131 !== null) { - var result132 = []; - var result138 = this._parse_letter(context); - if (result138 !== null) { - var result134 = result138; + if (result142 !== null) { + var result143 = []; + var result149 = this._parse_letter(context); + if (result149 !== null) { + var result145 = result149; } else { - var result137 = this._parse_digit(context); - if (result137 !== null) { - var result134 = result137; + var result148 = this._parse_digit(context); + if (result148 !== null) { + var result145 = result148; } else { if (this._input.substr(this._pos, 1) === "_") { - var result136 = "_"; + var result147 = "_"; this._pos += 1; } else { - var result136 = null; + var result147 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("_")); } } - if (result136 !== null) { - var result134 = result136; + if (result147 !== null) { + var result145 = result147; } else { if (this._input.substr(this._pos, 1) === "$") { - var result135 = "$"; + var result146 = "$"; this._pos += 1; } else { - var result135 = null; + var result146 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("$")); } } - if (result135 !== null) { - var result134 = result135; + if (result146 !== null) { + var result145 = result146; } else { - var result134 = null;; + var result145 = null;; }; }; }; } - while (result134 !== null) { - result132.push(result134); - var result138 = this._parse_letter(context); - if (result138 !== null) { - var result134 = result138; + while (result145 !== null) { + result143.push(result145); + var result149 = this._parse_letter(context); + if (result149 !== null) { + var result145 = result149; } else { - var result137 = this._parse_digit(context); - if (result137 !== null) { - var result134 = result137; + var result148 = this._parse_digit(context); + if (result148 !== null) { + var result145 = result148; } else { if (this._input.substr(this._pos, 1) === "_") { - var result136 = "_"; + var result147 = "_"; this._pos += 1; } else { - var result136 = null; + var result147 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("_")); } } - if (result136 !== null) { - var result134 = result136; + if (result147 !== null) { + var result145 = result147; } else { if (this._input.substr(this._pos, 1) === "$") { - var result135 = "$"; + var result146 = "$"; this._pos += 1; } else { - var result135 = null; + var result146 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("$")); } } - if (result135 !== null) { - var result134 = result135; + if (result146 !== null) { + var result145 = result146; } else { - var result134 = null;; + var result145 = null;; }; }; }; } } - if (result132 !== null) { - var result133 = this._parse___(context); - if (result133 !== null) { - var result130 = [result131, result132, result133]; + if (result143 !== null) { + var result144 = this._parse___(context); + if (result144 !== null) { + var result141 = [result142, result143, result144]; } else { - var result130 = null; - this._pos = savedPos26; + var result141 = null; + this._pos = savedPos28; } } else { - var result130 = null; - this._pos = savedPos26; + var result141 = null; + this._pos = savedPos28; } } else { - var result130 = null; - this._pos = savedPos26; + var result141 = null; + this._pos = savedPos28; } - var result129 = result130 !== null + var result140 = result141 !== null ? (function($1, $2, $3) { return $1 + $2.join(""); - }).apply(null, result130) + }).apply(null, result141) : null; context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result129 === null) { + if (context.reportMatchFailures && result140 === null) { this._matchFailed("identifier"); } this._cache[cacheKey] = { nextPos: this._pos, - result: result129 + result: result140 }; - return result129; + return result140; }, _parse_literal: function(context) { @@ -1448,43 +1554,43 @@ PEG.grammarParser = (function(){ var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; - var savedPos27 = this._pos; - var result147 = this._parse_doubleQuotedLiteral(context); - if (result147 !== null) { - var result144 = result147; + var savedPos29 = this._pos; + var result158 = this._parse_doubleQuotedLiteral(context); + if (result158 !== null) { + var result155 = result158; } else { - var result146 = this._parse_singleQuotedLiteral(context); - if (result146 !== null) { - var result144 = result146; + var result157 = this._parse_singleQuotedLiteral(context); + if (result157 !== null) { + var result155 = result157; } else { - var result144 = null;; + var result155 = null;; }; } - if (result144 !== null) { - var result145 = this._parse___(context); - if (result145 !== null) { - var result143 = [result144, result145]; + if (result155 !== null) { + var result156 = this._parse___(context); + if (result156 !== null) { + var result154 = [result155, result156]; } else { - var result143 = null; - this._pos = savedPos27; + var result154 = null; + this._pos = savedPos29; } } else { - var result143 = null; - this._pos = savedPos27; + var result154 = null; + this._pos = savedPos29; } - var result142 = result143 !== null - ? (function($1, $2) { return $1; }).apply(null, result143) + var result153 = result154 !== null + ? (function($1, $2) { return $1; }).apply(null, result154) : null; context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result142 === null) { + if (context.reportMatchFailures && result153 === null) { this._matchFailed("literal"); } this._cache[cacheKey] = { nextPos: this._pos, - result: result142 + result: result153 }; - return result142; + return result153; }, _parse_doubleQuotedLiteral: function(context) { @@ -1498,58 +1604,58 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos28 = this._pos; + var savedPos30 = this._pos; if (this._input.substr(this._pos, 1) === "\"") { - var result150 = "\""; + var result161 = "\""; this._pos += 1; } else { - var result150 = null; + var result161 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\"")); } } - if (result150 !== null) { - var result151 = []; - var result153 = this._parse_doubleQuotedCharacter(context); - while (result153 !== null) { - result151.push(result153); - var result153 = this._parse_doubleQuotedCharacter(context); + if (result161 !== null) { + var result162 = []; + var result164 = this._parse_doubleQuotedCharacter(context); + while (result164 !== null) { + result162.push(result164); + var result164 = this._parse_doubleQuotedCharacter(context); } - if (result151 !== null) { + if (result162 !== null) { if (this._input.substr(this._pos, 1) === "\"") { - var result152 = "\""; + var result163 = "\""; this._pos += 1; } else { - var result152 = null; + var result163 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\"")); } } - if (result152 !== null) { - var result149 = [result150, result151, result152]; + if (result163 !== null) { + var result160 = [result161, result162, result163]; } else { - var result149 = null; - this._pos = savedPos28; + var result160 = null; + this._pos = savedPos30; } } else { - var result149 = null; - this._pos = savedPos28; + var result160 = null; + this._pos = savedPos30; } } else { - var result149 = null; - this._pos = savedPos28; + var result160 = null; + this._pos = savedPos30; } - var result148 = result149 !== null - ? (function($1, $2, $3) { return $2.join(""); }).apply(null, result149) + var result159 = result160 !== null + ? (function($1, $2, $3) { return $2.join(""); }).apply(null, result160) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result148 + result: result159 }; - return result148; + return result159; }, _parse_doubleQuotedCharacter: function(context) { @@ -1563,31 +1669,31 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var result160 = this._parse_simpleDoubleQuotedCharacter(context); - if (result160 !== null) { - var result154 = result160; + var result171 = this._parse_simpleDoubleQuotedCharacter(context); + if (result171 !== null) { + var result165 = result171; } else { - var result159 = this._parse_simpleEscapeSequence(context); - if (result159 !== null) { - var result154 = result159; + var result170 = this._parse_simpleEscapeSequence(context); + if (result170 !== null) { + var result165 = result170; } else { - var result158 = this._parse_zeroEscapeSequence(context); - if (result158 !== null) { - var result154 = result158; + var result169 = this._parse_zeroEscapeSequence(context); + if (result169 !== null) { + var result165 = result169; } else { - var result157 = this._parse_hexEscapeSequence(context); - if (result157 !== null) { - var result154 = result157; + var result168 = this._parse_hexEscapeSequence(context); + if (result168 !== null) { + var result165 = result168; } else { - var result156 = this._parse_unicodeEscapeSequence(context); - if (result156 !== null) { - var result154 = result156; + var result167 = this._parse_unicodeEscapeSequence(context); + if (result167 !== null) { + var result165 = result167; } else { - var result155 = this._parse_eolEscapeSequence(context); - if (result155 !== null) { - var result154 = result155; + var result166 = this._parse_eolEscapeSequence(context); + if (result166 !== null) { + var result165 = result166; } else { - var result154 = null;; + var result165 = null;; }; }; }; @@ -1599,9 +1705,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result154 + result: result165 }; - return result154; + return result165; }, _parse_simpleDoubleQuotedCharacter: function(context) { @@ -1615,80 +1721,80 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos29 = this._pos; - var savedPos30 = this._pos; + var savedPos31 = this._pos; + var savedPos32 = this._pos; var savedReportMatchFailuresVar1 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 1) === "\"") { - var result168 = "\""; + var result179 = "\""; this._pos += 1; } else { - var result168 = null; + var result179 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\"")); } } - if (result168 !== null) { - var result165 = result168; + if (result179 !== null) { + var result176 = result179; } else { if (this._input.substr(this._pos, 1) === "\\") { - var result167 = "\\"; + var result178 = "\\"; this._pos += 1; } else { - var result167 = null; + var result178 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } - if (result167 !== null) { - var result165 = result167; + if (result178 !== null) { + var result176 = result178; } else { - var result166 = this._parse_eolChar(context); - if (result166 !== null) { - var result165 = result166; + var result177 = this._parse_eolChar(context); + if (result177 !== null) { + var result176 = result177; } else { - var result165 = null;; + var result176 = null;; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar1; - if (result165 === null) { - var result163 = ''; + if (result176 === null) { + var result174 = ''; } else { - var result163 = null; - this._pos = savedPos30; + var result174 = null; + this._pos = savedPos32; } - if (result163 !== null) { + if (result174 !== null) { if (this._input.length > this._pos) { - var result164 = this._input.charAt(this._pos); + var result175 = this._input.charAt(this._pos); this._pos++; } else { - var result164 = null; + var result175 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } - if (result164 !== null) { - var result162 = [result163, result164]; + if (result175 !== null) { + var result173 = [result174, result175]; } else { - var result162 = null; - this._pos = savedPos29; + var result173 = null; + this._pos = savedPos31; } } else { - var result162 = null; - this._pos = savedPos29; + var result173 = null; + this._pos = savedPos31; } - var result161 = result162 !== null - ? (function($1, $2) { return $2; }).apply(null, result162) + var result172 = result173 !== null + ? (function($1, $2) { return $2; }).apply(null, result173) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result161 + result: result172 }; - return result161; + return result172; }, _parse_singleQuotedLiteral: function(context) { @@ -1702,58 +1808,58 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos31 = this._pos; + var savedPos33 = this._pos; if (this._input.substr(this._pos, 1) === "'") { - var result171 = "'"; + var result182 = "'"; this._pos += 1; } else { - var result171 = null; + var result182 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("'")); } } - if (result171 !== null) { - var result172 = []; - var result174 = this._parse_singleQuotedCharacter(context); - while (result174 !== null) { - result172.push(result174); - var result174 = this._parse_singleQuotedCharacter(context); + if (result182 !== null) { + var result183 = []; + var result185 = this._parse_singleQuotedCharacter(context); + while (result185 !== null) { + result183.push(result185); + var result185 = this._parse_singleQuotedCharacter(context); } - if (result172 !== null) { + if (result183 !== null) { if (this._input.substr(this._pos, 1) === "'") { - var result173 = "'"; + var result184 = "'"; this._pos += 1; } else { - var result173 = null; + var result184 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("'")); } } - if (result173 !== null) { - var result170 = [result171, result172, result173]; + if (result184 !== null) { + var result181 = [result182, result183, result184]; } else { - var result170 = null; - this._pos = savedPos31; + var result181 = null; + this._pos = savedPos33; } } else { - var result170 = null; - this._pos = savedPos31; + var result181 = null; + this._pos = savedPos33; } } else { - var result170 = null; - this._pos = savedPos31; + var result181 = null; + this._pos = savedPos33; } - var result169 = result170 !== null - ? (function($1, $2, $3) { return $2.join(""); }).apply(null, result170) + var result180 = result181 !== null + ? (function($1, $2, $3) { return $2.join(""); }).apply(null, result181) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result169 + result: result180 }; - return result169; + return result180; }, _parse_singleQuotedCharacter: function(context) { @@ -1767,31 +1873,31 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var result181 = this._parse_simpleSingleQuotedCharacter(context); - if (result181 !== null) { - var result175 = result181; + var result192 = this._parse_simpleSingleQuotedCharacter(context); + if (result192 !== null) { + var result186 = result192; } else { - var result180 = this._parse_simpleEscapeSequence(context); - if (result180 !== null) { - var result175 = result180; + var result191 = this._parse_simpleEscapeSequence(context); + if (result191 !== null) { + var result186 = result191; } else { - var result179 = this._parse_zeroEscapeSequence(context); - if (result179 !== null) { - var result175 = result179; + var result190 = this._parse_zeroEscapeSequence(context); + if (result190 !== null) { + var result186 = result190; } else { - var result178 = this._parse_hexEscapeSequence(context); - if (result178 !== null) { - var result175 = result178; + var result189 = this._parse_hexEscapeSequence(context); + if (result189 !== null) { + var result186 = result189; } else { - var result177 = this._parse_unicodeEscapeSequence(context); - if (result177 !== null) { - var result175 = result177; + var result188 = this._parse_unicodeEscapeSequence(context); + if (result188 !== null) { + var result186 = result188; } else { - var result176 = this._parse_eolEscapeSequence(context); - if (result176 !== null) { - var result175 = result176; + var result187 = this._parse_eolEscapeSequence(context); + if (result187 !== null) { + var result186 = result187; } else { - var result175 = null;; + var result186 = null;; }; }; }; @@ -1803,9 +1909,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result175 + result: result186 }; - return result175; + return result186; }, _parse_simpleSingleQuotedCharacter: function(context) { @@ -1819,80 +1925,80 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos32 = this._pos; - var savedPos33 = this._pos; + var savedPos34 = this._pos; + var savedPos35 = this._pos; var savedReportMatchFailuresVar2 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 1) === "'") { - var result189 = "'"; + var result200 = "'"; this._pos += 1; } else { - var result189 = null; + var result200 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("'")); } } - if (result189 !== null) { - var result186 = result189; + if (result200 !== null) { + var result197 = result200; } else { if (this._input.substr(this._pos, 1) === "\\") { - var result188 = "\\"; + var result199 = "\\"; this._pos += 1; } else { - var result188 = null; + var result199 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } - if (result188 !== null) { - var result186 = result188; + if (result199 !== null) { + var result197 = result199; } else { - var result187 = this._parse_eolChar(context); - if (result187 !== null) { - var result186 = result187; + var result198 = this._parse_eolChar(context); + if (result198 !== null) { + var result197 = result198; } else { - var result186 = null;; + var result197 = null;; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar2; - if (result186 === null) { - var result184 = ''; + if (result197 === null) { + var result195 = ''; } else { - var result184 = null; - this._pos = savedPos33; + var result195 = null; + this._pos = savedPos35; } - if (result184 !== null) { + if (result195 !== null) { if (this._input.length > this._pos) { - var result185 = this._input.charAt(this._pos); + var result196 = this._input.charAt(this._pos); this._pos++; } else { - var result185 = null; + var result196 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } - if (result185 !== null) { - var result183 = [result184, result185]; + if (result196 !== null) { + var result194 = [result195, result196]; } else { - var result183 = null; - this._pos = savedPos32; + var result194 = null; + this._pos = savedPos34; } } else { - var result183 = null; - this._pos = savedPos32; + var result194 = null; + this._pos = savedPos34; } - var result182 = result183 !== null - ? (function($1, $2) { return $2; }).apply(null, result183) + var result193 = result194 !== null + ? (function($1, $2) { return $2; }).apply(null, result194) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result182 + result: result193 }; - return result182; + return result193; }, _parse_class: function(context) { @@ -1907,89 +2013,89 @@ PEG.grammarParser = (function(){ var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; - var savedPos34 = this._pos; + var savedPos36 = this._pos; if (this._input.substr(this._pos, 1) === "[") { - var result192 = "["; + var result203 = "["; this._pos += 1; } else { - var result192 = null; + var result203 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("[")); } } - if (result192 !== null) { + if (result203 !== null) { if (this._input.substr(this._pos, 1) === "^") { - var result200 = "^"; + var result211 = "^"; this._pos += 1; } else { - var result200 = null; + var result211 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("^")); } } - var result193 = result200 !== null ? result200 : ''; - if (result193 !== null) { - var result194 = []; - var result199 = this._parse_classCharacterRange(context); - if (result199 !== null) { - var result197 = result199; + var result204 = result211 !== null ? result211 : ''; + if (result204 !== null) { + var result205 = []; + var result210 = this._parse_classCharacterRange(context); + if (result210 !== null) { + var result208 = result210; } else { - var result198 = this._parse_classCharacter(context); - if (result198 !== null) { - var result197 = result198; + var result209 = this._parse_classCharacter(context); + if (result209 !== null) { + var result208 = result209; } else { - var result197 = null;; + var result208 = null;; }; } - while (result197 !== null) { - result194.push(result197); - var result199 = this._parse_classCharacterRange(context); - if (result199 !== null) { - var result197 = result199; + while (result208 !== null) { + result205.push(result208); + var result210 = this._parse_classCharacterRange(context); + if (result210 !== null) { + var result208 = result210; } else { - var result198 = this._parse_classCharacter(context); - if (result198 !== null) { - var result197 = result198; + var result209 = this._parse_classCharacter(context); + if (result209 !== null) { + var result208 = result209; } else { - var result197 = null;; + var result208 = null;; }; } } - if (result194 !== null) { + if (result205 !== null) { if (this._input.substr(this._pos, 1) === "]") { - var result195 = "]"; + var result206 = "]"; this._pos += 1; } else { - var result195 = null; + var result206 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("]")); } } - if (result195 !== null) { - var result196 = this._parse___(context); - if (result196 !== null) { - var result191 = [result192, result193, result194, result195, result196]; + if (result206 !== null) { + var result207 = this._parse___(context); + if (result207 !== null) { + var result202 = [result203, result204, result205, result206, result207]; } else { - var result191 = null; - this._pos = savedPos34; + var result202 = null; + this._pos = savedPos36; } } else { - var result191 = null; - this._pos = savedPos34; + var result202 = null; + this._pos = savedPos36; } } else { - var result191 = null; - this._pos = savedPos34; + var result202 = null; + this._pos = savedPos36; } } else { - var result191 = null; - this._pos = savedPos34; + var result202 = null; + this._pos = savedPos36; } } else { - var result191 = null; - this._pos = savedPos34; + var result202 = null; + this._pos = savedPos36; } - var result190 = result191 !== null + var result201 = result202 !== null ? (function($1, $2, $3, $4, $5) { parts = PEG.ArrayUtils.map($3, function(part) { return part.data; }); rawText = "[" @@ -2006,18 +2112,18 @@ PEG.grammarParser = (function(){ // FIXME: Get the raw text from the input directly. rawText: rawText }; - }).apply(null, result191) + }).apply(null, result202) : null; context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result190 === null) { + if (context.reportMatchFailures && result201 === null) { this._matchFailed("character class"); } this._cache[cacheKey] = { nextPos: this._pos, - result: result190 + result: result201 }; - return result190; + return result201; }, _parse_classCharacterRange: function(context) { @@ -2031,35 +2137,35 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos35 = this._pos; - var result203 = this._parse_classCharacter(context); - if (result203 !== null) { + var savedPos37 = this._pos; + var result214 = this._parse_classCharacter(context); + if (result214 !== null) { if (this._input.substr(this._pos, 1) === "-") { - var result204 = "-"; + var result215 = "-"; this._pos += 1; } else { - var result204 = null; + var result215 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("-")); } } - if (result204 !== null) { - var result205 = this._parse_classCharacter(context); - if (result205 !== null) { - var result202 = [result203, result204, result205]; + if (result215 !== null) { + var result216 = this._parse_classCharacter(context); + if (result216 !== null) { + var result213 = [result214, result215, result216]; } else { - var result202 = null; - this._pos = savedPos35; + var result213 = null; + this._pos = savedPos37; } } else { - var result202 = null; - this._pos = savedPos35; + var result213 = null; + this._pos = savedPos37; } } else { - var result202 = null; - this._pos = savedPos35; + var result213 = null; + this._pos = savedPos37; } - var result201 = result202 !== null + var result212 = result213 !== null ? (function($1, $2, $3) { if ($1.data.charCodeAt(0) > $3.data.charCodeAt(0)) { throw new this.SyntaxError( @@ -2072,16 +2178,16 @@ PEG.grammarParser = (function(){ // FIXME: Get the raw text from the input directly. rawText: $1.rawText + "-" + $3.rawText } - }).apply(null, result202) + }).apply(null, result213) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result201 + result: result212 }; - return result201; + return result212; }, _parse_classCharacter: function(context) { @@ -2095,24 +2201,24 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var result207 = this._parse_bracketDelimitedCharacter(context); - var result206 = result207 !== null + var result218 = this._parse_bracketDelimitedCharacter(context); + var result217 = result218 !== null ? (function($1) { return { data: $1, // FIXME: Get the raw text from the input directly. rawText: PEG.RegExpUtils.quoteForClass($1) }; - })(result207) + })(result218) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result206 + result: result217 }; - return result206; + return result217; }, _parse_bracketDelimitedCharacter: function(context) { @@ -2126,31 +2232,31 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var result214 = this._parse_simpleBracketDelimitedCharacter(context); - if (result214 !== null) { - var result208 = result214; + var result225 = this._parse_simpleBracketDelimitedCharacter(context); + if (result225 !== null) { + var result219 = result225; } else { - var result213 = this._parse_simpleEscapeSequence(context); - if (result213 !== null) { - var result208 = result213; + var result224 = this._parse_simpleEscapeSequence(context); + if (result224 !== null) { + var result219 = result224; } else { - var result212 = this._parse_zeroEscapeSequence(context); - if (result212 !== null) { - var result208 = result212; + var result223 = this._parse_zeroEscapeSequence(context); + if (result223 !== null) { + var result219 = result223; } else { - var result211 = this._parse_hexEscapeSequence(context); - if (result211 !== null) { - var result208 = result211; + var result222 = this._parse_hexEscapeSequence(context); + if (result222 !== null) { + var result219 = result222; } else { - var result210 = this._parse_unicodeEscapeSequence(context); - if (result210 !== null) { - var result208 = result210; + var result221 = this._parse_unicodeEscapeSequence(context); + if (result221 !== null) { + var result219 = result221; } else { - var result209 = this._parse_eolEscapeSequence(context); - if (result209 !== null) { - var result208 = result209; + var result220 = this._parse_eolEscapeSequence(context); + if (result220 !== null) { + var result219 = result220; } else { - var result208 = null;; + var result219 = null;; }; }; }; @@ -2162,9 +2268,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result208 + result: result219 }; - return result208; + return result219; }, _parse_simpleBracketDelimitedCharacter: function(context) { @@ -2178,80 +2284,80 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos36 = this._pos; - var savedPos37 = this._pos; + var savedPos38 = this._pos; + var savedPos39 = this._pos; var savedReportMatchFailuresVar3 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 1) === "]") { - var result222 = "]"; + var result233 = "]"; this._pos += 1; } else { - var result222 = null; + var result233 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("]")); } } - if (result222 !== null) { - var result219 = result222; + if (result233 !== null) { + var result230 = result233; } else { if (this._input.substr(this._pos, 1) === "\\") { - var result221 = "\\"; + var result232 = "\\"; this._pos += 1; } else { - var result221 = null; + var result232 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } - if (result221 !== null) { - var result219 = result221; + if (result232 !== null) { + var result230 = result232; } else { - var result220 = this._parse_eolChar(context); - if (result220 !== null) { - var result219 = result220; + var result231 = this._parse_eolChar(context); + if (result231 !== null) { + var result230 = result231; } else { - var result219 = null;; + var result230 = null;; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar3; - if (result219 === null) { - var result217 = ''; + if (result230 === null) { + var result228 = ''; } else { - var result217 = null; - this._pos = savedPos37; + var result228 = null; + this._pos = savedPos39; } - if (result217 !== null) { + if (result228 !== null) { if (this._input.length > this._pos) { - var result218 = this._input.charAt(this._pos); + var result229 = this._input.charAt(this._pos); this._pos++; } else { - var result218 = null; + var result229 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } - if (result218 !== null) { - var result216 = [result217, result218]; + if (result229 !== null) { + var result227 = [result228, result229]; } else { - var result216 = null; - this._pos = savedPos36; + var result227 = null; + this._pos = savedPos38; } } else { - var result216 = null; - this._pos = savedPos36; + var result227 = null; + this._pos = savedPos38; } - var result215 = result216 !== null - ? (function($1, $2) { return $2; }).apply(null, result216) + var result226 = result227 !== null + ? (function($1, $2) { return $2; }).apply(null, result227) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result215 + result: result226 }; - return result215; + return result226; }, _parse_simpleEscapeSequence: function(context) { @@ -2265,89 +2371,89 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos38 = this._pos; + var savedPos40 = this._pos; if (this._input.substr(this._pos, 1) === "\\") { - var result225 = "\\"; + var result236 = "\\"; this._pos += 1; } else { - var result225 = null; + var result236 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } - if (result225 !== null) { - var savedPos39 = this._pos; + if (result236 !== null) { + var savedPos41 = this._pos; var savedReportMatchFailuresVar4 = context.reportMatchFailures; context.reportMatchFailures = false; - var result232 = this._parse_digit(context); - if (result232 !== null) { - var result228 = result232; + var result243 = this._parse_digit(context); + if (result243 !== null) { + var result239 = result243; } else { if (this._input.substr(this._pos, 1) === "x") { - var result231 = "x"; + var result242 = "x"; this._pos += 1; } else { - var result231 = null; + var result242 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("x")); } } - if (result231 !== null) { - var result228 = result231; + if (result242 !== null) { + var result239 = result242; } else { if (this._input.substr(this._pos, 1) === "u") { - var result230 = "u"; + var result241 = "u"; this._pos += 1; } else { - var result230 = null; + var result241 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("u")); } } - if (result230 !== null) { - var result228 = result230; + if (result241 !== null) { + var result239 = result241; } else { - var result229 = this._parse_eolChar(context); - if (result229 !== null) { - var result228 = result229; + var result240 = this._parse_eolChar(context); + if (result240 !== null) { + var result239 = result240; } else { - var result228 = null;; + var result239 = null;; }; }; }; } context.reportMatchFailures = savedReportMatchFailuresVar4; - if (result228 === null) { - var result226 = ''; + if (result239 === null) { + var result237 = ''; } else { - var result226 = null; - this._pos = savedPos39; + var result237 = null; + this._pos = savedPos41; } - if (result226 !== null) { + if (result237 !== null) { if (this._input.length > this._pos) { - var result227 = this._input.charAt(this._pos); + var result238 = this._input.charAt(this._pos); this._pos++; } else { - var result227 = null; + var result238 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } - if (result227 !== null) { - var result224 = [result225, result226, result227]; + if (result238 !== null) { + var result235 = [result236, result237, result238]; } else { - var result224 = null; - this._pos = savedPos38; + var result235 = null; + this._pos = savedPos40; } } else { - var result224 = null; - this._pos = savedPos38; + var result235 = null; + this._pos = savedPos40; } } else { - var result224 = null; - this._pos = savedPos38; + var result235 = null; + this._pos = savedPos40; } - var result223 = result224 !== null + var result234 = result235 !== null ? (function($1, $2, $3) { return $3 .replace("b", "\b") @@ -2356,16 +2462,16 @@ PEG.grammarParser = (function(){ .replace("r", "\r") .replace("t", "\t") .replace("v", "\x0B") // IE does not recognize "\v". - }).apply(null, result224) + }).apply(null, result235) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result223 + result: result234 }; - return result223; + return result234; }, _parse_zeroEscapeSequence: function(context) { @@ -2379,49 +2485,49 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos40 = this._pos; + var savedPos42 = this._pos; if (this._input.substr(this._pos, 2) === "\\0") { - var result235 = "\\0"; + var result246 = "\\0"; this._pos += 2; } else { - var result235 = null; + var result246 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\0")); } } - if (result235 !== null) { - var savedPos41 = this._pos; + if (result246 !== null) { + var savedPos43 = this._pos; var savedReportMatchFailuresVar5 = context.reportMatchFailures; context.reportMatchFailures = false; - var result237 = this._parse_digit(context); + var result248 = this._parse_digit(context); context.reportMatchFailures = savedReportMatchFailuresVar5; - if (result237 === null) { - var result236 = ''; + if (result248 === null) { + var result247 = ''; } else { - var result236 = null; - this._pos = savedPos41; + var result247 = null; + this._pos = savedPos43; } - if (result236 !== null) { - var result234 = [result235, result236]; + if (result247 !== null) { + var result245 = [result246, result247]; } else { - var result234 = null; - this._pos = savedPos40; + var result245 = null; + this._pos = savedPos42; } } else { - var result234 = null; - this._pos = savedPos40; + var result245 = null; + this._pos = savedPos42; } - var result233 = result234 !== null - ? (function($1, $2) { return "\0"; }).apply(null, result234) + var result244 = result245 !== null + ? (function($1, $2) { return "\0"; }).apply(null, result245) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result233 + result: result244 }; - return result233; + return result244; }, _parse_hexEscapeSequence: function(context) { @@ -2435,47 +2541,47 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos42 = this._pos; + var savedPos44 = this._pos; if (this._input.substr(this._pos, 2) === "\\x") { - var result240 = "\\x"; + var result251 = "\\x"; this._pos += 2; } else { - var result240 = null; + var result251 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\x")); } } - if (result240 !== null) { - var result241 = this._parse_hexDigit(context); - if (result241 !== null) { - var result242 = this._parse_hexDigit(context); - if (result242 !== null) { - var result239 = [result240, result241, result242]; + if (result251 !== null) { + var result252 = this._parse_hexDigit(context); + if (result252 !== null) { + var result253 = this._parse_hexDigit(context); + if (result253 !== null) { + var result250 = [result251, result252, result253]; } else { - var result239 = null; - this._pos = savedPos42; + var result250 = null; + this._pos = savedPos44; } } else { - var result239 = null; - this._pos = savedPos42; + var result250 = null; + this._pos = savedPos44; } } else { - var result239 = null; - this._pos = savedPos42; + var result250 = null; + this._pos = savedPos44; } - var result238 = result239 !== null + var result249 = result250 !== null ? (function($1, $2, $3) { return String.fromCharCode(parseInt("0x" + $2 + $3)); - }).apply(null, result239) + }).apply(null, result250) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result238 + result: result249 }; - return result238; + return result249; }, _parse_unicodeEscapeSequence: function(context) { @@ -2489,59 +2595,59 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos43 = this._pos; + var savedPos45 = this._pos; if (this._input.substr(this._pos, 2) === "\\u") { - var result245 = "\\u"; + var result256 = "\\u"; this._pos += 2; } else { - var result245 = null; + var result256 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\u")); } } - if (result245 !== null) { - var result246 = this._parse_hexDigit(context); - if (result246 !== null) { - var result247 = this._parse_hexDigit(context); - if (result247 !== null) { - var result248 = this._parse_hexDigit(context); - if (result248 !== null) { - var result249 = this._parse_hexDigit(context); - if (result249 !== null) { - var result244 = [result245, result246, result247, result248, result249]; + if (result256 !== null) { + var result257 = this._parse_hexDigit(context); + if (result257 !== null) { + var result258 = this._parse_hexDigit(context); + if (result258 !== null) { + var result259 = this._parse_hexDigit(context); + if (result259 !== null) { + var result260 = this._parse_hexDigit(context); + if (result260 !== null) { + var result255 = [result256, result257, result258, result259, result260]; } else { - var result244 = null; - this._pos = savedPos43; + var result255 = null; + this._pos = savedPos45; } } else { - var result244 = null; - this._pos = savedPos43; + var result255 = null; + this._pos = savedPos45; } } else { - var result244 = null; - this._pos = savedPos43; + var result255 = null; + this._pos = savedPos45; } } else { - var result244 = null; - this._pos = savedPos43; + var result255 = null; + this._pos = savedPos45; } } else { - var result244 = null; - this._pos = savedPos43; + var result255 = null; + this._pos = savedPos45; } - var result243 = result244 !== null + var result254 = result255 !== null ? (function($1, $2, $3, $4, $5) { return String.fromCharCode(parseInt("0x" + $2 + $3 + $4 + $5)); - }).apply(null, result244) + }).apply(null, result255) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result243 + result: result254 }; - return result243; + return result254; }, _parse_eolEscapeSequence: function(context) { @@ -2555,39 +2661,39 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos44 = this._pos; + var savedPos46 = this._pos; if (this._input.substr(this._pos, 1) === "\\") { - var result252 = "\\"; + var result263 = "\\"; this._pos += 1; } else { - var result252 = null; + var result263 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\\")); } } - if (result252 !== null) { - var result253 = this._parse_eol(context); - if (result253 !== null) { - var result251 = [result252, result253]; + if (result263 !== null) { + var result264 = this._parse_eol(context); + if (result264 !== null) { + var result262 = [result263, result264]; } else { - var result251 = null; - this._pos = savedPos44; + var result262 = null; + this._pos = savedPos46; } } else { - var result251 = null; - this._pos = savedPos44; + var result262 = null; + this._pos = savedPos46; } - var result250 = result251 !== null - ? (function($1, $2) { return $2; }).apply(null, result251) + var result261 = result262 !== null + ? (function($1, $2) { return $2; }).apply(null, result262) : null; this._cache[cacheKey] = { nextPos: this._pos, - result: result250 + result: result261 }; - return result250; + return result261; }, _parse_digit: function(context) { @@ -2602,10 +2708,10 @@ PEG.grammarParser = (function(){ if (this._input.substr(this._pos).match(/^[0-9]/) !== null) { - var result254 = this._input.charAt(this._pos); + var result265 = this._input.charAt(this._pos); this._pos++; } else { - var result254 = null; + var result265 = null; if (context.reportMatchFailures) { this._matchFailed("[0-9]"); } @@ -2615,9 +2721,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result254 + result: result265 }; - return result254; + return result265; }, _parse_hexDigit: function(context) { @@ -2632,10 +2738,10 @@ PEG.grammarParser = (function(){ if (this._input.substr(this._pos).match(/^[0-9a-fA-F]/) !== null) { - var result255 = this._input.charAt(this._pos); + var result266 = this._input.charAt(this._pos); this._pos++; } else { - var result255 = null; + var result266 = null; if (context.reportMatchFailures) { this._matchFailed("[0-9a-fA-F]"); } @@ -2645,9 +2751,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result255 + result: result266 }; - return result255; + return result266; }, _parse_letter: function(context) { @@ -2661,15 +2767,15 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var result258 = this._parse_lowerCaseLetter(context); - if (result258 !== null) { - var result256 = result258; + var result269 = this._parse_lowerCaseLetter(context); + if (result269 !== null) { + var result267 = result269; } else { - var result257 = this._parse_upperCaseLetter(context); - if (result257 !== null) { - var result256 = result257; + var result268 = this._parse_upperCaseLetter(context); + if (result268 !== null) { + var result267 = result268; } else { - var result256 = null;; + var result267 = null;; }; } @@ -2677,9 +2783,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result256 + result: result267 }; - return result256; + return result267; }, _parse_lowerCaseLetter: function(context) { @@ -2694,10 +2800,10 @@ PEG.grammarParser = (function(){ if (this._input.substr(this._pos).match(/^[a-z]/) !== null) { - var result259 = this._input.charAt(this._pos); + var result270 = this._input.charAt(this._pos); this._pos++; } else { - var result259 = null; + var result270 = null; if (context.reportMatchFailures) { this._matchFailed("[a-z]"); } @@ -2707,9 +2813,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result259 + result: result270 }; - return result259; + return result270; }, _parse_upperCaseLetter: function(context) { @@ -2724,10 +2830,10 @@ PEG.grammarParser = (function(){ if (this._input.substr(this._pos).match(/^[A-Z]/) !== null) { - var result260 = this._input.charAt(this._pos); + var result271 = this._input.charAt(this._pos); this._pos++; } else { - var result260 = null; + var result271 = null; if (context.reportMatchFailures) { this._matchFailed("[A-Z]"); } @@ -2737,9 +2843,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result260 + result: result271 }; - return result260; + return result271; }, _parse___: function(context) { @@ -2753,38 +2859,38 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var result261 = []; - var result265 = this._parse_whitespace(context); - if (result265 !== null) { - var result262 = result265; + var result272 = []; + var result276 = this._parse_whitespace(context); + if (result276 !== null) { + var result273 = result276; } else { - var result264 = this._parse_eol(context); - if (result264 !== null) { - var result262 = result264; + var result275 = this._parse_eol(context); + if (result275 !== null) { + var result273 = result275; } else { - var result263 = this._parse_comment(context); - if (result263 !== null) { - var result262 = result263; + var result274 = this._parse_comment(context); + if (result274 !== null) { + var result273 = result274; } else { - var result262 = null;; + var result273 = null;; }; }; } - while (result262 !== null) { - result261.push(result262); - var result265 = this._parse_whitespace(context); - if (result265 !== null) { - var result262 = result265; + while (result273 !== null) { + result272.push(result273); + var result276 = this._parse_whitespace(context); + if (result276 !== null) { + var result273 = result276; } else { - var result264 = this._parse_eol(context); - if (result264 !== null) { - var result262 = result264; + var result275 = this._parse_eol(context); + if (result275 !== null) { + var result273 = result275; } else { - var result263 = this._parse_comment(context); - if (result263 !== null) { - var result262 = result263; + var result274 = this._parse_comment(context); + if (result274 !== null) { + var result273 = result274; } else { - var result262 = null;; + var result273 = null;; }; }; } @@ -2794,9 +2900,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result261 + result: result272 }; - return result261; + return result272; }, _parse_comment: function(context) { @@ -2811,27 +2917,27 @@ PEG.grammarParser = (function(){ var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; - var result268 = this._parse_singleLineComment(context); - if (result268 !== null) { - var result266 = result268; + var result279 = this._parse_singleLineComment(context); + if (result279 !== null) { + var result277 = result279; } else { - var result267 = this._parse_multiLineComment(context); - if (result267 !== null) { - var result266 = result267; + var result278 = this._parse_multiLineComment(context); + if (result278 !== null) { + var result277 = result278; } else { - var result266 = null;; + var result277 = null;; }; } context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result266 === null) { + if (context.reportMatchFailures && result277 === null) { this._matchFailed("comment"); } this._cache[cacheKey] = { nextPos: this._pos, - result: result266 + result: result277 }; - return result266; + return result277; }, _parse_singleLineComment: function(context) { @@ -2845,103 +2951,103 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos45 = this._pos; + var savedPos47 = this._pos; if (this._input.substr(this._pos, 2) === "//") { - var result270 = "//"; + var result281 = "//"; this._pos += 2; } else { - var result270 = null; + var result281 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("//")); } } - if (result270 !== null) { - var result271 = []; - var savedPos46 = this._pos; - var savedPos47 = this._pos; + if (result281 !== null) { + var result282 = []; + var savedPos48 = this._pos; + var savedPos49 = this._pos; var savedReportMatchFailuresVar6 = context.reportMatchFailures; context.reportMatchFailures = false; - var result275 = this._parse_eolChar(context); + var result286 = this._parse_eolChar(context); context.reportMatchFailures = savedReportMatchFailuresVar6; - if (result275 === null) { - var result273 = ''; + if (result286 === null) { + var result284 = ''; } else { - var result273 = null; - this._pos = savedPos47; + var result284 = null; + this._pos = savedPos49; } - if (result273 !== null) { + if (result284 !== null) { if (this._input.length > this._pos) { - var result274 = this._input.charAt(this._pos); + var result285 = this._input.charAt(this._pos); this._pos++; } else { - var result274 = null; + var result285 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } - if (result274 !== null) { - var result272 = [result273, result274]; + if (result285 !== null) { + var result283 = [result284, result285]; } else { - var result272 = null; - this._pos = savedPos46; + var result283 = null; + this._pos = savedPos48; } } else { - var result272 = null; - this._pos = savedPos46; + var result283 = null; + this._pos = savedPos48; } - while (result272 !== null) { - result271.push(result272); - var savedPos46 = this._pos; - var savedPos47 = this._pos; + while (result283 !== null) { + result282.push(result283); + var savedPos48 = this._pos; + var savedPos49 = this._pos; var savedReportMatchFailuresVar6 = context.reportMatchFailures; context.reportMatchFailures = false; - var result275 = this._parse_eolChar(context); + var result286 = this._parse_eolChar(context); context.reportMatchFailures = savedReportMatchFailuresVar6; - if (result275 === null) { - var result273 = ''; + if (result286 === null) { + var result284 = ''; } else { - var result273 = null; - this._pos = savedPos47; + var result284 = null; + this._pos = savedPos49; } - if (result273 !== null) { + if (result284 !== null) { if (this._input.length > this._pos) { - var result274 = this._input.charAt(this._pos); + var result285 = this._input.charAt(this._pos); this._pos++; } else { - var result274 = null; + var result285 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } - if (result274 !== null) { - var result272 = [result273, result274]; + if (result285 !== null) { + var result283 = [result284, result285]; } else { - var result272 = null; - this._pos = savedPos46; + var result283 = null; + this._pos = savedPos48; } } else { - var result272 = null; - this._pos = savedPos46; + var result283 = null; + this._pos = savedPos48; } } - if (result271 !== null) { - var result269 = [result270, result271]; + if (result282 !== null) { + var result280 = [result281, result282]; } else { - var result269 = null; - this._pos = savedPos45; + var result280 = null; + this._pos = savedPos47; } } else { - var result269 = null; - this._pos = savedPos45; + var result280 = null; + this._pos = savedPos47; } this._cache[cacheKey] = { nextPos: this._pos, - result: result269 + result: result280 }; - return result269; + return result280; }, _parse_multiLineComment: function(context) { @@ -2955,133 +3061,133 @@ PEG.grammarParser = (function(){ var pos = this._pos; - var savedPos48 = this._pos; + var savedPos50 = this._pos; if (this._input.substr(this._pos, 2) === "/*") { - var result277 = "/*"; + var result288 = "/*"; this._pos += 2; } else { - var result277 = null; + var result288 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("/*")); } } - if (result277 !== null) { - var result278 = []; - var savedPos49 = this._pos; - var savedPos50 = this._pos; + if (result288 !== null) { + var result289 = []; + var savedPos51 = this._pos; + var savedPos52 = this._pos; var savedReportMatchFailuresVar7 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 2) === "*/") { - var result283 = "*/"; + var result294 = "*/"; this._pos += 2; } else { - var result283 = null; + var result294 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("*/")); } } context.reportMatchFailures = savedReportMatchFailuresVar7; - if (result283 === null) { - var result281 = ''; + if (result294 === null) { + var result292 = ''; } else { - var result281 = null; - this._pos = savedPos50; + var result292 = null; + this._pos = savedPos52; } - if (result281 !== null) { + if (result292 !== null) { if (this._input.length > this._pos) { - var result282 = this._input.charAt(this._pos); + var result293 = this._input.charAt(this._pos); this._pos++; } else { - var result282 = null; + var result293 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } - if (result282 !== null) { - var result280 = [result281, result282]; + if (result293 !== null) { + var result291 = [result292, result293]; } else { - var result280 = null; - this._pos = savedPos49; + var result291 = null; + this._pos = savedPos51; } } else { - var result280 = null; - this._pos = savedPos49; + var result291 = null; + this._pos = savedPos51; } - while (result280 !== null) { - result278.push(result280); - var savedPos49 = this._pos; - var savedPos50 = this._pos; + while (result291 !== null) { + result289.push(result291); + var savedPos51 = this._pos; + var savedPos52 = this._pos; var savedReportMatchFailuresVar7 = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 2) === "*/") { - var result283 = "*/"; + var result294 = "*/"; this._pos += 2; } else { - var result283 = null; + var result294 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("*/")); } } context.reportMatchFailures = savedReportMatchFailuresVar7; - if (result283 === null) { - var result281 = ''; + if (result294 === null) { + var result292 = ''; } else { - var result281 = null; - this._pos = savedPos50; + var result292 = null; + this._pos = savedPos52; } - if (result281 !== null) { + if (result292 !== null) { if (this._input.length > this._pos) { - var result282 = this._input.charAt(this._pos); + var result293 = this._input.charAt(this._pos); this._pos++; } else { - var result282 = null; + var result293 = null; if (context.reportMatchFailures) { this._matchFailed('any character'); } } - if (result282 !== null) { - var result280 = [result281, result282]; + if (result293 !== null) { + var result291 = [result292, result293]; } else { - var result280 = null; - this._pos = savedPos49; + var result291 = null; + this._pos = savedPos51; } } else { - var result280 = null; - this._pos = savedPos49; + var result291 = null; + this._pos = savedPos51; } } - if (result278 !== null) { + if (result289 !== null) { if (this._input.substr(this._pos, 2) === "*/") { - var result279 = "*/"; + var result290 = "*/"; this._pos += 2; } else { - var result279 = null; + var result290 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("*/")); } } - if (result279 !== null) { - var result276 = [result277, result278, result279]; + if (result290 !== null) { + var result287 = [result288, result289, result290]; } else { - var result276 = null; - this._pos = savedPos48; + var result287 = null; + this._pos = savedPos50; } } else { - var result276 = null; - this._pos = savedPos48; + var result287 = null; + this._pos = savedPos50; } } else { - var result276 = null; - this._pos = savedPos48; + var result287 = null; + this._pos = savedPos50; } this._cache[cacheKey] = { nextPos: this._pos, - result: result276 + result: result287 }; - return result276; + return result287; }, _parse_eol: function(context) { @@ -3097,81 +3203,81 @@ PEG.grammarParser = (function(){ var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos, 1) === "\n") { - var result289 = "\n"; + var result300 = "\n"; this._pos += 1; } else { - var result289 = null; + var result300 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\n")); } } - if (result289 !== null) { - var result284 = result289; + if (result300 !== null) { + var result295 = result300; } else { if (this._input.substr(this._pos, 2) === "\r\n") { - var result288 = "\r\n"; + var result299 = "\r\n"; this._pos += 2; } else { - var result288 = null; + var result299 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\r\n")); } } - if (result288 !== null) { - var result284 = result288; + if (result299 !== null) { + var result295 = result299; } else { if (this._input.substr(this._pos, 1) === "\r") { - var result287 = "\r"; + var result298 = "\r"; this._pos += 1; } else { - var result287 = null; + var result298 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\r")); } } - if (result287 !== null) { - var result284 = result287; + if (result298 !== null) { + var result295 = result298; } else { if (this._input.substr(this._pos, 1) === "\u2028") { - var result286 = "\u2028"; + var result297 = "\u2028"; this._pos += 1; } else { - var result286 = null; + var result297 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\u2028")); } } - if (result286 !== null) { - var result284 = result286; + if (result297 !== null) { + var result295 = result297; } else { if (this._input.substr(this._pos, 1) === "\u2029") { - var result285 = "\u2029"; + var result296 = "\u2029"; this._pos += 1; } else { - var result285 = null; + var result296 = null; if (context.reportMatchFailures) { this._matchFailed(this._quoteString("\u2029")); } } - if (result285 !== null) { - var result284 = result285; + if (result296 !== null) { + var result295 = result296; } else { - var result284 = null;; + var result295 = null;; }; }; }; }; } context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result284 === null) { + if (context.reportMatchFailures && result295 === null) { this._matchFailed("end of line"); } this._cache[cacheKey] = { nextPos: this._pos, - result: result284 + result: result295 }; - return result284; + return result295; }, _parse_eolChar: function(context) { @@ -3186,10 +3292,10 @@ PEG.grammarParser = (function(){ if (this._input.substr(this._pos).match(/^[\n\r\u2028\u2029]/) !== null) { - var result290 = this._input.charAt(this._pos); + var result301 = this._input.charAt(this._pos); this._pos++; } else { - var result290 = null; + var result301 = null; if (context.reportMatchFailures) { this._matchFailed("[\\n\\r\\u2028\\u2029]"); } @@ -3199,9 +3305,9 @@ PEG.grammarParser = (function(){ this._cache[cacheKey] = { nextPos: this._pos, - result: result290 + result: result301 }; - return result290; + return result301; }, _parse_whitespace: function(context) { @@ -3217,24 +3323,24 @@ PEG.grammarParser = (function(){ var savedReportMatchFailures = context.reportMatchFailures; context.reportMatchFailures = false; if (this._input.substr(this._pos).match(/^[   ᠎ -    ]/) !== null) { - var result291 = this._input.charAt(this._pos); + var result302 = this._input.charAt(this._pos); this._pos++; } else { - var result291 = null; + var result302 = null; if (context.reportMatchFailures) { this._matchFailed("[   ᠎ -    ]"); } } context.reportMatchFailures = savedReportMatchFailures; - if (context.reportMatchFailures && result291 === null) { + if (context.reportMatchFailures && result302 === null) { this._matchFailed("whitespace"); } this._cache[cacheKey] = { nextPos: this._pos, - result: result291 + result: result302 }; - return result291; + return result302; }, /* diff --git a/lib/metagrammar.pegjs b/lib/metagrammar.pegjs index e1ebbd4..27acd09 100644 --- a/lib/metagrammar.pegjs +++ b/lib/metagrammar.pegjs @@ -35,7 +35,7 @@ choice } sequence - = prefixed* action { + = labeled* action { var expression = $1.length != 1 ? { type: "sequence", @@ -48,7 +48,7 @@ sequence action: $2 }; } - / prefixed* { + / labeled* { return $1.length != 1 ? { type: "sequence", @@ -57,6 +57,16 @@ sequence : $1[0]; } +labeled + = identifier colon prefixed { + return { + type: "labeled", + label: $1, + expression: $3 + }; + } + / prefixed + prefixed = and suffixed { return { type: "and_predicate", expression: $2 }; } / not suffixed { return { type: "not_predicate", expression: $2 }; } @@ -90,6 +100,7 @@ nonBraceCharacter = [^{}] equals = "=" __ { return $1; } +colon = ":" __ { return $1; } slash = "/" __ { return $1; } and = "&" __ { return $1; } not = "!" __ { return $1; } diff --git a/test/compiler-test.js b/test/compiler-test.js index 67d5bbe..34aadd9 100644 --- a/test/compiler-test.js +++ b/test/compiler-test.js @@ -206,6 +206,7 @@ test("buildParser reports missing referenced rules", function() { 'start = "a" / "b" / missing', 'start = missing "a" "b"', 'start = "a" "b" missing', + 'start = label:missing', 'start = &missing', 'start = !missing', 'start = missing?', @@ -230,6 +231,7 @@ test("buildParser reports left recursion", function() { 'start = start / "a" / "b"', 'start = "a" / "b" / start', 'start = start "a" "b"', + 'start = label:start', 'start = &start', 'start = !start', 'start = start?', @@ -289,6 +291,12 @@ test("sequences", function() { parses(posTestParser, "a", "a"); }); +test("labels", function() { + var parser = PEG.buildParser('start = label:"a"'); + parses(parser, "a", "a"); + doesNotParse(parser, "b"); +}); + test("and predicate", function() { var parser = PEG.buildParser('start = "a" &"b" "b"'); parses(parser, "ab", ["a", "", "b"]); diff --git a/test/metagrammar-test.js b/test/metagrammar-test.js index 5a824fe..1aade36 100644 --- a/test/metagrammar-test.js +++ b/test/metagrammar-test.js @@ -43,6 +43,14 @@ function sequence(elements) { }; } +function labeled(label, expression) { + return { + type: "labeled", + label: label, + expression: expression + }; +} + function nodeWithExpressionConstructor(type) { return function(expression) { return { @@ -100,12 +108,12 @@ var literalIjkl = literal("ijkl"); var optionalLiteral = optional(literalAbcd); -var notAbcd = notPredicate(literalAbcd); -var notEfgh = notPredicate(literalEfgh); -var notIjkl = notPredicate(literalIjkl); +var labeledAbcd = labeled("a", literalAbcd); +var labeledEfgh = labeled("e", literalEfgh); +var labeledIjkl = labeled("i", literalIjkl); var sequenceEmpty = sequence([]); -var sequenceNots = sequence([notAbcd, notEfgh, notIjkl]); +var sequenceLabeleds = sequence([labeledAbcd, labeledEfgh, labeledIjkl]); var sequenceLiterals = sequence([literalAbcd, literalEfgh, literalIjkl]); var choiceLiterals = choice([literalAbcd, literalEfgh, literalIjkl]); @@ -194,19 +202,31 @@ test("parses sequence", function() { oneRuleGrammar(action(sequenceEmpty, " code ")) ); grammarParserParses( - 'start = !"abcd" { code }', - oneRuleGrammar(action(notAbcd, " code ")) + 'start = a:"abcd" { code }', + oneRuleGrammar(action(labeledAbcd, " code ")) + ); + grammarParserParses( + 'start = a:"abcd" e:"efgh" i:"ijkl" { code }', + oneRuleGrammar(action(sequenceLabeleds, " code ")) ); + + grammarParserParses('start = ', oneRuleGrammar(sequenceEmpty)); + grammarParserParses('start = a:"abcd"', oneRuleGrammar(labeledAbcd)); grammarParserParses( - 'start = !"abcd" !"efgh" !"ijkl" { code }', - oneRuleGrammar(action(sequenceNots, " code ")) + 'start = a:"abcd" e:"efgh" i:"ijkl"', + oneRuleGrammar(sequenceLabeleds) ); +}); - grammarParserParses('start = ', oneRuleGrammar(sequenceEmpty)); - grammarParserParses('start = !"abcd"', oneRuleGrammar(notAbcd)); +/* Canonical labeled is "label:\"abcd\"". */ +test("parses labeled", function() { + grammarParserParses( + 'start = label:!"abcd"', + oneRuleGrammar(labeled("label", notPredicate(literalAbcd))) + ); grammarParserParses( - 'start = !"abcd" !"efgh" !"ijkl"', - oneRuleGrammar(sequenceNots) + 'start = !"abcd"', + oneRuleGrammar(notPredicate(literalAbcd)) ); });