From a5a0609505edf98174960f163587422e604b1830 Mon Sep 17 00:00:00 2001 From: David Majda Date: Fri, 28 Mar 2014 11:35:56 +0100 Subject: [PATCH] PEG.js grammar: Inline trivial character rules --- lib/parser.js | 498 +++++++++++++++++++------------------------- spec/parser.spec.js | 2 - src/parser.pegjs | 46 ++-- 3 files changed, 228 insertions(+), 318 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index 13573be..9958100 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -42,13 +42,17 @@ module.exports = (function() { rules: extractList(rules, 0) }; }, - peg$c4 = function(code) { + peg$c4 = ";", + peg$c5 = { type: "literal", value: ";", description: "\";\"" }, + peg$c6 = function(code) { return { type: "initializer", code: code }; }, - peg$c5 = function(name, displayName, expression) { + peg$c7 = "=", + peg$c8 = { type: "literal", value: "=", description: "\"=\"" }, + peg$c9 = function(name, displayName, expression) { return { type: "rule", name: name, @@ -61,12 +65,14 @@ module.exports = (function() { : expression }; }, - peg$c6 = function(first, rest) { + peg$c10 = "/", + peg$c11 = { type: "literal", value: "/", description: "\"/\"" }, + peg$c12 = function(first, rest) { return rest.length > 0 ? { type: "choice", alternatives: buildList(first, rest, 3) } : first; }, - peg$c7 = function(first, rest, code) { + peg$c13 = function(first, rest, code) { var expression = rest.length > 0 ? { type: "sequence", elements: buildList(first, rest, 1) } : first; @@ -76,109 +82,103 @@ module.exports = (function() { code: code }; }, - peg$c8 = function(first, rest) { + peg$c14 = function(first, rest) { return rest.length > 0 ? { type: "sequence", elements: buildList(first, rest, 1) } : first; }, - peg$c9 = function(label, expression) { + peg$c15 = ":", + peg$c16 = { type: "literal", value: ":", description: "\":\"" }, + peg$c17 = function(label, expression) { return { type: "labeled", label: label, expression: expression }; }, - peg$c10 = function(expression) { + peg$c18 = "$", + peg$c19 = { type: "literal", value: "$", description: "\"$\"" }, + peg$c20 = function(expression) { return { type: "text", expression: expression }; }, - peg$c11 = function(code) { + peg$c21 = "&", + peg$c22 = { type: "literal", value: "&", description: "\"&\"" }, + peg$c23 = function(code) { return { type: "semantic_and", code: code }; }, - peg$c12 = function(expression) { + peg$c24 = function(expression) { return { type: "simple_and", expression: expression }; }, - peg$c13 = function(code) { + peg$c25 = "!", + peg$c26 = { type: "literal", value: "!", description: "\"!\"" }, + peg$c27 = function(code) { return { type: "semantic_not", code: code }; }, - peg$c14 = function(expression) { + peg$c28 = function(expression) { return { type: "simple_not", expression: expression }; }, - peg$c15 = function(expression) { + peg$c29 = "?", + peg$c30 = { type: "literal", value: "?", description: "\"?\"" }, + peg$c31 = function(expression) { return { type: "optional", expression: expression }; }, - peg$c16 = function(expression) { + peg$c32 = "*", + peg$c33 = { type: "literal", value: "*", description: "\"*\"" }, + peg$c34 = function(expression) { return { type: "zero_or_more", expression: expression }; }, - peg$c17 = function(expression) { + peg$c35 = "+", + peg$c36 = { type: "literal", value: "+", description: "\"+\"" }, + peg$c37 = function(expression) { return { type: "one_or_more", expression: expression }; }, - peg$c18 = void 0, - peg$c19 = function(name) { + peg$c38 = void 0, + peg$c39 = function(name) { return { type: "rule_ref", name: name }; }, - peg$c20 = function() { return { type: "any" }; }, - peg$c21 = function(expression) { return expression; }, - peg$c22 = { type: "other", description: "action" }, - peg$c23 = function(braced) { return braced.substr(1, braced.length - 2); }, - peg$c24 = "{", - peg$c25 = { type: "literal", value: "{", description: "\"{\"" }, - peg$c26 = "}", - peg$c27 = { type: "literal", value: "}", description: "\"}\"" }, - peg$c28 = /^[^{}]/, - peg$c29 = { type: "class", value: "[^{}]", description: "[^{}]" }, - peg$c30 = "=", - peg$c31 = { type: "literal", value: "=", description: "\"=\"" }, - peg$c32 = ":", - peg$c33 = { type: "literal", value: ":", description: "\":\"" }, - peg$c34 = ";", - peg$c35 = { type: "literal", value: ";", description: "\";\"" }, - peg$c36 = "/", - peg$c37 = { type: "literal", value: "/", description: "\"/\"" }, - peg$c38 = "&", - peg$c39 = { type: "literal", value: "&", description: "\"&\"" }, - peg$c40 = "!", - peg$c41 = { type: "literal", value: "!", description: "\"!\"" }, - peg$c42 = "$", - peg$c43 = { type: "literal", value: "$", description: "\"$\"" }, - peg$c44 = "?", - peg$c45 = { type: "literal", value: "?", description: "\"?\"" }, - peg$c46 = "*", - peg$c47 = { type: "literal", value: "*", description: "\"*\"" }, - peg$c48 = "+", - peg$c49 = { type: "literal", value: "+", description: "\"+\"" }, - peg$c50 = "(", - peg$c51 = { type: "literal", value: "(", description: "\"(\"" }, - peg$c52 = ")", - peg$c53 = { type: "literal", value: ")", description: "\")\"" }, - peg$c54 = ".", - peg$c55 = { type: "literal", value: ".", description: "\".\"" }, + peg$c40 = ".", + peg$c41 = { type: "literal", value: ".", description: "\".\"" }, + peg$c42 = function() { return { type: "any" }; }, + peg$c43 = "(", + peg$c44 = { type: "literal", value: "(", description: "\"(\"" }, + peg$c45 = ")", + peg$c46 = { type: "literal", value: ")", description: "\")\"" }, + peg$c47 = function(expression) { return expression; }, + peg$c48 = { type: "other", description: "action" }, + peg$c49 = function(braced) { return braced.substr(1, braced.length - 2); }, + peg$c50 = "{", + peg$c51 = { type: "literal", value: "{", description: "\"{\"" }, + peg$c52 = "}", + peg$c53 = { type: "literal", value: "}", description: "\"}\"" }, + peg$c54 = /^[^{}]/, + peg$c55 = { type: "class", value: "[^{}]", description: "[^{}]" }, peg$c56 = { type: "other", description: "identifier" }, peg$c57 = "_", peg$c58 = { type: "literal", value: "_", description: "\"_\"" }, @@ -542,7 +542,13 @@ module.exports = (function() { s2 = peg$currPos; s3 = peg$parse__(); if (s3 !== peg$FAILED) { - s4 = peg$parseSemicolon(); + if (input.charCodeAt(peg$currPos) === 59) { + s4 = peg$c4; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c5); } + } if (s4 !== peg$FAILED) { s3 = [s3, s4]; s2 = s3; @@ -559,7 +565,7 @@ module.exports = (function() { } if (s2 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c4(s1); + s1 = peg$c6(s1); s0 = s1; } else { peg$currPos = s0; @@ -600,7 +606,13 @@ module.exports = (function() { s3 = peg$c1; } if (s3 !== peg$FAILED) { - s4 = peg$parseEquals(); + if (input.charCodeAt(peg$currPos) === 61) { + s4 = peg$c7; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c8); } + } if (s4 !== peg$FAILED) { s5 = peg$parse__(); if (s5 !== peg$FAILED) { @@ -609,7 +621,13 @@ module.exports = (function() { s7 = peg$currPos; s8 = peg$parse__(); if (s8 !== peg$FAILED) { - s9 = peg$parseSemicolon(); + if (input.charCodeAt(peg$currPos) === 59) { + s9 = peg$c4; + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c5); } + } if (s9 !== peg$FAILED) { s8 = [s8, s9]; s7 = s8; @@ -626,7 +644,7 @@ module.exports = (function() { } if (s7 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c5(s1, s3, s6); + s1 = peg$c9(s1, s3, s6); s0 = s1; } else { peg$currPos = s0; @@ -670,7 +688,13 @@ module.exports = (function() { s3 = peg$currPos; s4 = peg$parse__(); if (s4 !== peg$FAILED) { - s5 = peg$parseSlash(); + if (input.charCodeAt(peg$currPos) === 47) { + s5 = peg$c10; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c11); } + } if (s5 !== peg$FAILED) { s6 = peg$parse__(); if (s6 !== peg$FAILED) { @@ -699,7 +723,13 @@ module.exports = (function() { s3 = peg$currPos; s4 = peg$parse__(); if (s4 !== peg$FAILED) { - s5 = peg$parseSlash(); + if (input.charCodeAt(peg$currPos) === 47) { + s5 = peg$c10; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c11); } + } if (s5 !== peg$FAILED) { s6 = peg$parse__(); if (s6 !== peg$FAILED) { @@ -726,7 +756,7 @@ module.exports = (function() { } if (s2 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c6(s1, s2); + s1 = peg$c12(s1, s2); s0 = s1; } else { peg$currPos = s0; @@ -786,7 +816,7 @@ module.exports = (function() { s4 = peg$parseAction(); if (s4 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c7(s1, s2, s4); + s1 = peg$c13(s1, s2, s4); s0 = s1; } else { peg$currPos = s0; @@ -844,7 +874,7 @@ module.exports = (function() { } if (s2 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c8(s1, s2); + s1 = peg$c14(s1, s2); s0 = s1; } else { peg$currPos = s0; @@ -867,14 +897,20 @@ module.exports = (function() { if (s1 !== peg$FAILED) { s2 = peg$parse__(); if (s2 !== peg$FAILED) { - s3 = peg$parseColon(); + if (input.charCodeAt(peg$currPos) === 58) { + s3 = peg$c15; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } if (s3 !== peg$FAILED) { s4 = peg$parse__(); if (s4 !== peg$FAILED) { s5 = peg$parsePrefixed(); if (s5 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c9(s1, s5); + s1 = peg$c17(s1, s5); s0 = s1; } else { peg$currPos = s0; @@ -907,14 +943,20 @@ module.exports = (function() { var s0, s1, s2, s3; s0 = peg$currPos; - s1 = peg$parseDollar(); + if (input.charCodeAt(peg$currPos) === 36) { + s1 = peg$c18; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c19); } + } if (s1 !== peg$FAILED) { s2 = peg$parse__(); if (s2 !== peg$FAILED) { s3 = peg$parseSuffixed(); if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c10(s3); + s1 = peg$c20(s3); s0 = s1; } else { peg$currPos = s0; @@ -930,14 +972,20 @@ module.exports = (function() { } if (s0 === peg$FAILED) { s0 = peg$currPos; - s1 = peg$parseAnd(); + if (input.charCodeAt(peg$currPos) === 38) { + s1 = peg$c21; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c22); } + } if (s1 !== peg$FAILED) { s2 = peg$parse__(); if (s2 !== peg$FAILED) { s3 = peg$parseAction(); if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c11(s3); + s1 = peg$c23(s3); s0 = s1; } else { peg$currPos = s0; @@ -953,14 +1001,20 @@ module.exports = (function() { } if (s0 === peg$FAILED) { s0 = peg$currPos; - s1 = peg$parseAnd(); + if (input.charCodeAt(peg$currPos) === 38) { + s1 = peg$c21; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c22); } + } if (s1 !== peg$FAILED) { s2 = peg$parse__(); if (s2 !== peg$FAILED) { s3 = peg$parseSuffixed(); if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c12(s3); + s1 = peg$c24(s3); s0 = s1; } else { peg$currPos = s0; @@ -976,14 +1030,20 @@ module.exports = (function() { } if (s0 === peg$FAILED) { s0 = peg$currPos; - s1 = peg$parseNot(); + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c25; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c26); } + } if (s1 !== peg$FAILED) { s2 = peg$parse__(); if (s2 !== peg$FAILED) { s3 = peg$parseAction(); if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c13(s3); + s1 = peg$c27(s3); s0 = s1; } else { peg$currPos = s0; @@ -999,14 +1059,20 @@ module.exports = (function() { } if (s0 === peg$FAILED) { s0 = peg$currPos; - s1 = peg$parseNot(); + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c25; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c26); } + } if (s1 !== peg$FAILED) { s2 = peg$parse__(); if (s2 !== peg$FAILED) { s3 = peg$parseSuffixed(); if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c14(s3); + s1 = peg$c28(s3); s0 = s1; } else { peg$currPos = s0; @@ -1039,10 +1105,16 @@ module.exports = (function() { if (s1 !== peg$FAILED) { s2 = peg$parse__(); if (s2 !== peg$FAILED) { - s3 = peg$parseQuestion(); + if (input.charCodeAt(peg$currPos) === 63) { + s3 = peg$c29; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c30); } + } if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c15(s1); + s1 = peg$c31(s1); s0 = s1; } else { peg$currPos = s0; @@ -1062,10 +1134,16 @@ module.exports = (function() { if (s1 !== peg$FAILED) { s2 = peg$parse__(); if (s2 !== peg$FAILED) { - s3 = peg$parseStar(); + if (input.charCodeAt(peg$currPos) === 42) { + s3 = peg$c32; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c33); } + } if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c16(s1); + s1 = peg$c34(s1); s0 = s1; } else { peg$currPos = s0; @@ -1085,10 +1163,16 @@ module.exports = (function() { if (s1 !== peg$FAILED) { s2 = peg$parse__(); if (s2 !== peg$FAILED) { - s3 = peg$parsePlus(); + if (input.charCodeAt(peg$currPos) === 43) { + s3 = peg$c35; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } if (s3 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c17(s1); + s1 = peg$c37(s1); s0 = s1; } else { peg$currPos = s0; @@ -1141,7 +1225,13 @@ module.exports = (function() { s5 = peg$c1; } if (s5 !== peg$FAILED) { - s6 = peg$parseEquals(); + if (input.charCodeAt(peg$currPos) === 61) { + s6 = peg$c7; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c8); } + } if (s6 !== peg$FAILED) { s4 = [s4, s5, s6]; s3 = s4; @@ -1159,14 +1249,14 @@ module.exports = (function() { } peg$silentFails--; if (s3 === peg$FAILED) { - s2 = peg$c18; + s2 = peg$c38; } else { peg$currPos = s2; s2 = peg$c0; } if (s2 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c19(s1); + s1 = peg$c39(s1); s0 = s1; } else { peg$currPos = s0; @@ -1182,15 +1272,27 @@ module.exports = (function() { s0 = peg$parseClass(); if (s0 === peg$FAILED) { s0 = peg$currPos; - s1 = peg$parseDot(); + if (input.charCodeAt(peg$currPos) === 46) { + s1 = peg$c40; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c41); } + } if (s1 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c20(); + s1 = peg$c42(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - s1 = peg$parseLparen(); + if (input.charCodeAt(peg$currPos) === 40) { + s1 = peg$c43; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c44); } + } if (s1 !== peg$FAILED) { s2 = peg$parse__(); if (s2 !== peg$FAILED) { @@ -1198,10 +1300,16 @@ module.exports = (function() { if (s3 !== peg$FAILED) { s4 = peg$parse__(); if (s4 !== peg$FAILED) { - s5 = peg$parseRparen(); + if (input.charCodeAt(peg$currPos) === 41) { + s5 = peg$c45; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c46); } + } if (s5 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c21(s3); + s1 = peg$c47(s3); s0 = s1; } else { peg$currPos = s0; @@ -1241,7 +1349,7 @@ module.exports = (function() { s2 = peg$parse__(); if (s2 !== peg$FAILED) { peg$reportedPos = s0; - s1 = peg$c23(s1); + s1 = peg$c49(s1); s0 = s1; } else { peg$currPos = s0; @@ -1254,7 +1362,7 @@ module.exports = (function() { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c22); } + if (peg$silentFails === 0) { peg$fail(peg$c48); } } return s0; @@ -1266,11 +1374,11 @@ module.exports = (function() { s0 = peg$currPos; s1 = peg$currPos; if (input.charCodeAt(peg$currPos) === 123) { - s2 = peg$c24; + s2 = peg$c50; peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c25); } + if (peg$silentFails === 0) { peg$fail(peg$c51); } } if (s2 !== peg$FAILED) { s3 = []; @@ -1287,11 +1395,11 @@ module.exports = (function() { } if (s3 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 125) { - s4 = peg$c26; + s4 = peg$c52; peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c27); } + if (peg$silentFails === 0) { peg$fail(peg$c53); } } if (s4 !== peg$FAILED) { s2 = [s2, s3, s4]; @@ -1336,191 +1444,9 @@ module.exports = (function() { function peg$parseNonBraceCharacter() { var s0; - if (peg$c28.test(input.charAt(peg$currPos))) { + if (peg$c54.test(input.charAt(peg$currPos))) { s0 = input.charAt(peg$currPos); peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c29); } - } - - return s0; - } - - function peg$parseEquals() { - var s0; - - if (input.charCodeAt(peg$currPos) === 61) { - s0 = peg$c30; - peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c31); } - } - - return s0; - } - - function peg$parseColon() { - var s0; - - if (input.charCodeAt(peg$currPos) === 58) { - s0 = peg$c32; - peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c33); } - } - - return s0; - } - - function peg$parseSemicolon() { - var s0; - - if (input.charCodeAt(peg$currPos) === 59) { - s0 = peg$c34; - peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c35); } - } - - return s0; - } - - function peg$parseSlash() { - var s0; - - if (input.charCodeAt(peg$currPos) === 47) { - s0 = peg$c36; - peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c37); } - } - - return s0; - } - - function peg$parseAnd() { - var s0; - - if (input.charCodeAt(peg$currPos) === 38) { - s0 = peg$c38; - peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c39); } - } - - return s0; - } - - function peg$parseNot() { - var s0; - - if (input.charCodeAt(peg$currPos) === 33) { - s0 = peg$c40; - peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c41); } - } - - return s0; - } - - function peg$parseDollar() { - var s0; - - if (input.charCodeAt(peg$currPos) === 36) { - s0 = peg$c42; - peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c43); } - } - - return s0; - } - - function peg$parseQuestion() { - var s0; - - if (input.charCodeAt(peg$currPos) === 63) { - s0 = peg$c44; - peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c45); } - } - - return s0; - } - - function peg$parseStar() { - var s0; - - if (input.charCodeAt(peg$currPos) === 42) { - s0 = peg$c46; - peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c47); } - } - - return s0; - } - - function peg$parsePlus() { - var s0; - - if (input.charCodeAt(peg$currPos) === 43) { - s0 = peg$c48; - peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c49); } - } - - return s0; - } - - function peg$parseLparen() { - var s0; - - if (input.charCodeAt(peg$currPos) === 40) { - s0 = peg$c50; - peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c51); } - } - - return s0; - } - - function peg$parseRparen() { - var s0; - - if (input.charCodeAt(peg$currPos) === 41) { - s0 = peg$c52; - peg$currPos++; - } else { - s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c53); } - } - - return s0; - } - - function peg$parseDot() { - var s0; - - if (input.charCodeAt(peg$currPos) === 46) { - s0 = peg$c54; - peg$currPos++; } else { s0 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c55); } @@ -1760,7 +1686,7 @@ module.exports = (function() { } peg$silentFails--; if (s2 === peg$FAILED) { - s1 = peg$c18; + s1 = peg$c38; } else { peg$currPos = s1; s1 = peg$c0; @@ -1885,7 +1811,7 @@ module.exports = (function() { } peg$silentFails--; if (s2 === peg$FAILED) { - s1 = peg$c18; + s1 = peg$c38; } else { peg$currPos = s1; s1 = peg$c0; @@ -2087,7 +2013,7 @@ module.exports = (function() { } peg$silentFails--; if (s2 === peg$FAILED) { - s1 = peg$c18; + s1 = peg$c38; } else { peg$currPos = s1; s1 = peg$c0; @@ -2154,7 +2080,7 @@ module.exports = (function() { } peg$silentFails--; if (s3 === peg$FAILED) { - s2 = peg$c18; + s2 = peg$c38; } else { peg$currPos = s2; s2 = peg$c0; @@ -2204,7 +2130,7 @@ module.exports = (function() { s3 = peg$parseDigit(); peg$silentFails--; if (s3 === peg$FAILED) { - s2 = peg$c18; + s2 = peg$c38; } else { peg$currPos = s2; s2 = peg$c0; @@ -2490,7 +2416,7 @@ module.exports = (function() { s5 = peg$parseEOLChar(); peg$silentFails--; if (s5 === peg$FAILED) { - s4 = peg$c18; + s4 = peg$c38; } else { peg$currPos = s4; s4 = peg$c0; @@ -2522,7 +2448,7 @@ module.exports = (function() { s5 = peg$parseEOLChar(); peg$silentFails--; if (s5 === peg$FAILED) { - s4 = peg$c18; + s4 = peg$c38; } else { peg$currPos = s4; s4 = peg$c0; @@ -2587,7 +2513,7 @@ module.exports = (function() { } peg$silentFails--; if (s5 === peg$FAILED) { - s4 = peg$c18; + s4 = peg$c38; } else { peg$currPos = s4; s4 = peg$c0; @@ -2625,7 +2551,7 @@ module.exports = (function() { } peg$silentFails--; if (s5 === peg$FAILED) { - s4 = peg$c18; + s4 = peg$c38; } else { peg$currPos = s4; s4 = peg$c0; diff --git a/spec/parser.spec.js b/spec/parser.spec.js index f14e7af..bb68165 100644 --- a/spec/parser.spec.js +++ b/spec/parser.spec.js @@ -366,8 +366,6 @@ describe("PEG.js grammar parser", function() { expect('start = "abcd" {}}').toFailToParse(); }); - /* Trivial character rules are not tested. */ - /* Canonical Identifier is "a". */ it("parses Identifier", function() { expect('start = a' ).toParseAs(ruleRefGrammar("a")); diff --git a/src/parser.pegjs b/src/parser.pegjs index 13428e1..c75ac89 100644 --- a/src/parser.pegjs +++ b/src/parser.pegjs @@ -28,7 +28,7 @@ Grammar } Initializer - = code:Action (__ Semicolon)? { + = code:Action (__ ";")? { return { type: "initializer", code: code @@ -38,8 +38,8 @@ Initializer Rule = name:Identifier __ displayName:(String __)? - Equals __ - expression:Expression (__ Semicolon)? { + "=" __ + expression:Expression (__ ";")? { return { type: "rule", name: name, @@ -57,7 +57,7 @@ Expression = Choice Choice - = first:Sequence rest:(__ Slash __ Sequence)* { + = first:Sequence rest:(__ "/" __ Sequence)* { return rest.length > 0 ? { type: "choice", alternatives: buildList(first, rest, 3) } : first; @@ -81,7 +81,7 @@ Sequence } Labeled - = label:Identifier __ Colon __ expression:Prefixed { + = label:Identifier __ ":" __ expression:Prefixed { return { type: "labeled", label: label, @@ -91,31 +91,31 @@ Labeled / Prefixed Prefixed - = Dollar __ expression:Suffixed { + = "$" __ expression:Suffixed { return { type: "text", expression: expression }; } - / And __ code:Action { + / "&" __ code:Action { return { type: "semantic_and", code: code }; } - / And __ expression:Suffixed { + / "&" __ expression:Suffixed { return { type: "simple_and", expression: expression }; } - / Not __ code:Action { + / "!" __ code:Action { return { type: "semantic_not", code: code }; } - / Not __ expression:Suffixed { + / "!" __ expression:Suffixed { return { type: "simple_not", expression: expression @@ -124,19 +124,19 @@ Prefixed / Suffixed Suffixed - = expression:Primary __ Question { + = expression:Primary __ "?" { return { type: "optional", expression: expression }; } - / expression:Primary __ Star { + / expression:Primary __ "*" { return { type: "zero_or_more", expression: expression }; } - / expression:Primary __ Plus { + / expression:Primary __ "+" { return { type: "one_or_more", expression: expression @@ -145,7 +145,7 @@ Suffixed / Primary Primary - = name:Identifier !(__ (String __)? Equals) { + = name:Identifier !(__ (String __)? "=") { return { type: "rule_ref", name: name @@ -153,8 +153,8 @@ Primary } / Literal / Class - / Dot { return { type: "any" }; } - / Lparen __ expression:Expression __ Rparen { return expression; } + / "." { return { type: "any" }; } + / "(" __ expression:Expression __ ")" { return expression; } /* "Lexical" elements */ @@ -170,20 +170,6 @@ NonBraceCharacters NonBraceCharacter = [^{}] -Equals = "=" -Colon = ":" -Semicolon = ";" -Slash = "/" -And = "&" -Not = "!" -Dollar = "$" -Question = "?" -Star = "*" -Plus = "+" -Lparen = "(" -Rparen = ")" -Dot = "." - /* * Modeled after ECMA-262, 5th ed., 7.6, but much simplified: *