diff --git a/lib/compiler/asts.js b/lib/compiler/asts.js index da324c17..4e9b428a 100644 --- a/lib/compiler/asts.js +++ b/lib/compiler/asts.js @@ -4,10 +4,20 @@ const visitor = require("./visitor"); // AST utilities. const asts = { - findRule(ast, name) { - for (let i = 0; i < ast.rules.length; i++) { - if (ast.rules[i].name === name) { - return ast.rules[i]; + findRule(ast, name, includeImports = false) { + for (const rule of ast.rules) { + if (rule.name === name) { + return rule; + } + } + + if (includeImports && ast.imports) { + for (const _import of ast.imports) { + for (const rule of _import.rules) { + if (rule.alias === name) { + return rule; + } + } } } diff --git a/lib/compiler/opcodes.js b/lib/compiler/opcodes.js index b0d71230..0a0d624a 100644 --- a/lib/compiler/opcodes.js +++ b/lib/compiler/opcodes.js @@ -53,6 +53,7 @@ const opcodes = { // Rules RULE: 27, // RULE r + IMPORTED_RULE: 43, // IMPORTED_RULE i, r // Failure Reporting diff --git a/lib/compiler/passes/generate-bytecode.js b/lib/compiler/passes/generate-bytecode.js index 6e445250..10430c96 100644 --- a/lib/compiler/passes/generate-bytecode.js +++ b/lib/compiler/passes/generate-bytecode.js @@ -218,6 +218,10 @@ const { ALWAYS_MATCH, SOMETIMES_MATCH, NEVER_MATCH } = require("./inference-matc // // stack.push(parseRule(r)); // +// [43] IMPORTED_RULE i, r +// +// stack.push(parseImportedRule(i, r)); +// // Failure Reporting // ----------------- // @@ -270,7 +274,7 @@ const { ALWAYS_MATCH, SOMETIMES_MATCH, NEVER_MATCH } = require("./inference-matc // that is equivalent of an unknown match result and signals the generator that // runtime check for the |FAILED| is required. Trick is explained on the // Wikipedia page (https://en.wikipedia.org/wiki/Asm.js#Code_generation) -function generateBytecode(ast, options) { +function generateBytecode(ast, options, session) { const literals = []; const classes = []; const expectations = []; @@ -954,7 +958,20 @@ function generateBytecode(ast, options) { }, rule_ref(node) { - return [op.RULE, asts.indexOfRule(ast, node.name)]; + const rule = asts.indexOfRule(ast, node.name); + if (rule < 0) { + for (let i = 0; i < ast.imports.length; ++i) { + const rule = ast.imports[i].rules.findIndex( + rule => rule.alias === node.name + ); + if (rule >= 0) { + return [op.IMPORTED_RULE, i, rule]; + } + } + session.error(`Unknown imported rule ${node.name}`, node.location); + } + + return [op.RULE, rule]; }, literal(node) { diff --git a/lib/compiler/passes/generate-js.js b/lib/compiler/passes/generate-js.js index f0f2c91f..8c128f64 100644 --- a/lib/compiler/passes/generate-js.js +++ b/lib/compiler/passes/generate-js.js @@ -585,6 +585,13 @@ function generateJS(ast, options) { ip += 2; break; + case op.IMPORTED_RULE: { // IMPORTED_RULE i, r + const _import = ast.imports[bc[ip + 1]]; + const rule = _import.rules[bc[ip + 2]]; + parts.push(stack.push(rule.name + "()")); + ip += 3; + break; + } case op.SILENT_FAILS_ON: // SILENT_FAILS_ON parts.push("peg$silentFails++;"); ip++; diff --git a/lib/compiler/passes/inference-match-result.js b/lib/compiler/passes/inference-match-result.js index 12846c30..f7bb34c8 100644 --- a/lib/compiler/passes/inference-match-result.js +++ b/lib/compiler/passes/inference-match-result.js @@ -46,6 +46,7 @@ function inferenceMatchResult(ast) { } const inference = visitor.build({ + imported_rule: sometimesMatch, rule(node) { let oldResult; let count = 0; @@ -151,7 +152,7 @@ function inferenceMatchResult(ast) { semantic_and: sometimesMatch, semantic_not: sometimesMatch, rule_ref(node) { - const rule = asts.findRule(ast, node.name); + const rule = asts.findRule(ast, node.name, true); return (node.match = inference(rule)); }, diff --git a/lib/compiler/passes/remove-proxy-rules.js b/lib/compiler/passes/remove-proxy-rules.js index 2ae28d04..3ac606bd 100644 --- a/lib/compiler/passes/remove-proxy-rules.js +++ b/lib/compiler/passes/remove-proxy-rules.js @@ -20,7 +20,7 @@ function removeProxyRules(ast, options, session) { node.location, [{ message: "This rule will be used", - location: asts.findRule(ast, to).nameLocation, + location: asts.findRule(ast, to, true).nameLocation, }] ); } diff --git a/lib/compiler/passes/report-duplicate-rules.js b/lib/compiler/passes/report-duplicate-rules.js index ce2842fb..b36a477a 100644 --- a/lib/compiler/passes/report-duplicate-rules.js +++ b/lib/compiler/passes/report-duplicate-rules.js @@ -1,28 +1,71 @@ "use strict"; +const asts = require("../asts"); const visitor = require("../visitor"); // Checks that each rule is defined only once. function reportDuplicateRules(ast, options, session) { - const rules = {}; + const defined = {}; + const imported = {}; + + function checkRepository(repository, node, errorMessage, detailMessage) { + if (Object.prototype.hasOwnProperty.call(repository, node.name)) { + session.error( + errorMessage, + node.nameLocation, + [{ + message: detailMessage, + location: repository[node.name], + }] + ); + + return true; + } + + return false; + } const check = visitor.build({ - rule(node) { - if (Object.prototype.hasOwnProperty.call(rules, node.name)) { + imported_rule(node) { + if (checkRepository( + imported, + node, + `Rule "${node.name}" is already imported`, + "Original import location" + )) { + // Do not rewrite original rule location + return; + } + + imported[node.name] = node.location; + + const rule = asts.findRule(ast, node.name); + if (rule) { session.error( - `Rule "${node.name}" is already defined`, + node.aliasLocation + ? `Rule with the same name "${node.name}" is already defined in the grammar` + : `Rule with the same name "${node.name}" is already defined in the grammar, try to add \`as \` to the imported one`, node.nameLocation, [{ - message: "Original rule location", - location: rules[node.name], + message: "Rule defined here", + location: rule.nameLocation, }] ); + } + }, + rule(node) { + if (checkRepository( + defined, + node, + `Rule "${node.name}" is already defined`, + "Original rule location" + )) { // Do not rewrite original rule location return; } - rules[node.name] = node.nameLocation; + defined[node.name] = node.nameLocation; }, }); diff --git a/lib/compiler/passes/report-undefined-rules.js b/lib/compiler/passes/report-undefined-rules.js index 7ccb2ae3..06f674a3 100644 --- a/lib/compiler/passes/report-undefined-rules.js +++ b/lib/compiler/passes/report-undefined-rules.js @@ -7,9 +7,9 @@ const visitor = require("../visitor"); function reportUndefinedRules(ast, options, session) { const check = visitor.build({ rule_ref(node) { - if (!asts.findRule(ast, node.name)) { + if (!asts.findRule(ast, node.name, true)) { session.error( - `Rule "${node.name}" is not defined`, + `Rule "${node.name}" is not defined or imported`, node.location ); } diff --git a/lib/compiler/visitor.js b/lib/compiler/visitor.js index 31dec143..ffdf452b 100644 --- a/lib/compiler/visitor.js +++ b/lib/compiler/visitor.js @@ -28,6 +28,10 @@ const visitor = { const DEFAULT_FUNCTIONS = { grammar(node, ...args) { + if (node.imports) { + node.imports.forEach(_import => visit(_import, ...args)); + } + if (node.topLevelInitializer) { visit(node.topLevelInitializer, ...args); } @@ -39,6 +43,8 @@ const visitor = { node.rules.forEach(rule => visit(rule, ...args)); }, + import: visitChildren("rules"), + imported_rule: visitNop, top_level_initializer: visitNop, initializer: visitNop, rule: visitExpression, diff --git a/lib/parser.js b/lib/parser.js index 4b281a98..dba2ef72 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -194,59 +194,62 @@ function peg$parse(input, options) { var peg$startRuleFunctions = { Grammar: peg$parseGrammar }; var peg$startRuleFunction = peg$parseGrammar; - var peg$c0 = "{"; - var peg$c1 = "}"; - var peg$c2 = "="; - var peg$c3 = "/"; - var peg$c4 = "@"; - var peg$c5 = ":"; - var peg$c6 = "$"; - var peg$c7 = "&"; - var peg$c8 = "!"; - var peg$c9 = "?"; - var peg$c10 = "*"; - var peg$c11 = "+"; - var peg$c12 = "|"; - var peg$c13 = ","; - var peg$c14 = ".."; - var peg$c15 = "("; - var peg$c16 = ")"; - var peg$c17 = "\t"; - var peg$c18 = "\v"; - var peg$c19 = "\f"; - var peg$c20 = " "; - var peg$c21 = "\xA0"; - var peg$c22 = "\uFEFF"; - var peg$c23 = "\n"; - var peg$c24 = "\r\n"; - var peg$c25 = "\r"; - var peg$c26 = "\u2028"; - var peg$c27 = "\u2029"; - var peg$c28 = "/*"; - var peg$c29 = "*/"; - var peg$c30 = "//"; - var peg$c31 = "_"; - var peg$c32 = "\\"; - var peg$c33 = "\u200C"; - var peg$c34 = "\u200D"; - var peg$c35 = "i"; - var peg$c36 = "\""; - var peg$c37 = "'"; - var peg$c38 = "["; - var peg$c39 = "^"; - var peg$c40 = "]"; - var peg$c41 = "-"; - var peg$c42 = "0"; - var peg$c43 = "b"; - var peg$c44 = "f"; - var peg$c45 = "n"; - var peg$c46 = "r"; - var peg$c47 = "t"; - var peg$c48 = "v"; - var peg$c49 = "x"; - var peg$c50 = "u"; - var peg$c51 = "."; - var peg$c52 = ";"; + var peg$c0 = "import"; + var peg$c1 = "{"; + var peg$c2 = ","; + var peg$c3 = "}"; + var peg$c4 = "from"; + var peg$c5 = "as"; + var peg$c6 = "="; + var peg$c7 = "/"; + var peg$c8 = "@"; + var peg$c9 = ":"; + var peg$c10 = "$"; + var peg$c11 = "&"; + var peg$c12 = "!"; + var peg$c13 = "?"; + var peg$c14 = "*"; + var peg$c15 = "+"; + var peg$c16 = "|"; + var peg$c17 = ".."; + var peg$c18 = "("; + var peg$c19 = ")"; + var peg$c20 = "\t"; + var peg$c21 = "\v"; + var peg$c22 = "\f"; + var peg$c23 = " "; + var peg$c24 = "\xA0"; + var peg$c25 = "\uFEFF"; + var peg$c26 = "\n"; + var peg$c27 = "\r\n"; + var peg$c28 = "\r"; + var peg$c29 = "\u2028"; + var peg$c30 = "\u2029"; + var peg$c31 = "/*"; + var peg$c32 = "*/"; + var peg$c33 = "//"; + var peg$c34 = "_"; + var peg$c35 = "\\"; + var peg$c36 = "\u200C"; + var peg$c37 = "\u200D"; + var peg$c38 = "i"; + var peg$c39 = "\""; + var peg$c40 = "'"; + var peg$c41 = "["; + var peg$c42 = "^"; + var peg$c43 = "]"; + var peg$c44 = "-"; + var peg$c45 = "0"; + var peg$c46 = "b"; + var peg$c47 = "f"; + var peg$c48 = "n"; + var peg$c49 = "r"; + var peg$c50 = "t"; + var peg$c51 = "v"; + var peg$c52 = "x"; + var peg$c53 = "u"; + var peg$c54 = "."; + var peg$c55 = ";"; var peg$r0 = /^[\n\r\u2028\u2029]/; var peg$r1 = /^[0-9]/; @@ -264,94 +267,116 @@ function peg$parse(input, options) { var peg$r13 = /^[_\u203F-\u2040\u2054\uFE33-\uFE34\uFE4D-\uFE4F\uFF3F]/; var peg$r14 = /^[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/; - var peg$e0 = peg$literalExpectation("{", false); - var peg$e1 = peg$literalExpectation("}", false); - var peg$e2 = peg$literalExpectation("=", false); - var peg$e3 = peg$literalExpectation("/", false); - var peg$e4 = peg$literalExpectation("@", false); - var peg$e5 = peg$literalExpectation(":", false); - var peg$e6 = peg$literalExpectation("$", false); - var peg$e7 = peg$literalExpectation("&", false); - var peg$e8 = peg$literalExpectation("!", false); - var peg$e9 = peg$literalExpectation("?", false); - var peg$e10 = peg$literalExpectation("*", false); - var peg$e11 = peg$literalExpectation("+", false); - var peg$e12 = peg$literalExpectation("|", false); - var peg$e13 = peg$literalExpectation(",", false); - var peg$e14 = peg$literalExpectation("..", false); - var peg$e15 = peg$literalExpectation("(", false); - var peg$e16 = peg$literalExpectation(")", false); - var peg$e17 = peg$anyExpectation(); - var peg$e18 = peg$otherExpectation("whitespace"); - var peg$e19 = peg$literalExpectation("\t", false); - var peg$e20 = peg$literalExpectation("\v", false); - var peg$e21 = peg$literalExpectation("\f", false); - var peg$e22 = peg$literalExpectation(" ", false); - var peg$e23 = peg$literalExpectation("\xA0", false); - var peg$e24 = peg$literalExpectation("\uFEFF", false); - var peg$e25 = peg$classExpectation(["\n", "\r", "\u2028", "\u2029"], false, false); - var peg$e26 = peg$otherExpectation("end of line"); - var peg$e27 = peg$literalExpectation("\n", false); - var peg$e28 = peg$literalExpectation("\r\n", false); - var peg$e29 = peg$literalExpectation("\r", false); - var peg$e30 = peg$literalExpectation("\u2028", false); - var peg$e31 = peg$literalExpectation("\u2029", false); - var peg$e32 = peg$otherExpectation("comment"); - var peg$e33 = peg$literalExpectation("/*", false); - var peg$e34 = peg$literalExpectation("*/", false); - var peg$e35 = peg$literalExpectation("//", false); - var peg$e36 = peg$otherExpectation("identifier"); - var peg$e37 = peg$literalExpectation("_", false); - var peg$e38 = peg$literalExpectation("\\", false); - var peg$e39 = peg$literalExpectation("\u200C", false); - var peg$e40 = peg$literalExpectation("\u200D", false); - var peg$e41 = peg$otherExpectation("literal"); - var peg$e42 = peg$literalExpectation("i", false); - var peg$e43 = peg$otherExpectation("string"); - var peg$e44 = peg$literalExpectation("\"", false); - var peg$e45 = peg$literalExpectation("'", false); - var peg$e46 = peg$otherExpectation("character class"); - var peg$e47 = peg$literalExpectation("[", false); - var peg$e48 = peg$literalExpectation("^", false); - var peg$e49 = peg$literalExpectation("]", false); - var peg$e50 = peg$literalExpectation("-", false); - var peg$e51 = peg$literalExpectation("0", false); - var peg$e52 = peg$literalExpectation("b", false); - var peg$e53 = peg$literalExpectation("f", false); - var peg$e54 = peg$literalExpectation("n", false); - var peg$e55 = peg$literalExpectation("r", false); - var peg$e56 = peg$literalExpectation("t", false); - var peg$e57 = peg$literalExpectation("v", false); - var peg$e58 = peg$literalExpectation("x", false); - var peg$e59 = peg$literalExpectation("u", false); - var peg$e60 = peg$classExpectation([["0", "9"]], false, false); - var peg$e61 = peg$classExpectation([["0", "9"], ["a", "f"]], false, true); - var peg$e62 = peg$literalExpectation(".", false); - var peg$e63 = peg$otherExpectation("code block"); - var peg$e64 = peg$classExpectation(["{", "}"], false, false); - var peg$e65 = peg$classExpectation([["a", "z"], "\xB5", ["\xDF", "\xF6"], ["\xF8", "\xFF"], "\u0101", "\u0103", "\u0105", "\u0107", "\u0109", "\u010B", "\u010D", "\u010F", "\u0111", "\u0113", "\u0115", "\u0117", "\u0119", "\u011B", "\u011D", "\u011F", "\u0121", "\u0123", "\u0125", "\u0127", "\u0129", "\u012B", "\u012D", "\u012F", "\u0131", "\u0133", "\u0135", ["\u0137", "\u0138"], "\u013A", "\u013C", "\u013E", "\u0140", "\u0142", "\u0144", "\u0146", ["\u0148", "\u0149"], "\u014B", "\u014D", "\u014F", "\u0151", "\u0153", "\u0155", "\u0157", "\u0159", "\u015B", "\u015D", "\u015F", "\u0161", "\u0163", "\u0165", "\u0167", "\u0169", "\u016B", "\u016D", "\u016F", "\u0171", "\u0173", "\u0175", "\u0177", "\u017A", "\u017C", ["\u017E", "\u0180"], "\u0183", "\u0185", "\u0188", ["\u018C", "\u018D"], "\u0192", "\u0195", ["\u0199", "\u019B"], "\u019E", "\u01A1", "\u01A3", "\u01A5", "\u01A8", ["\u01AA", "\u01AB"], "\u01AD", "\u01B0", "\u01B4", "\u01B6", ["\u01B9", "\u01BA"], ["\u01BD", "\u01BF"], "\u01C6", "\u01C9", "\u01CC", "\u01CE", "\u01D0", "\u01D2", "\u01D4", "\u01D6", "\u01D8", "\u01DA", ["\u01DC", "\u01DD"], "\u01DF", "\u01E1", "\u01E3", "\u01E5", "\u01E7", "\u01E9", "\u01EB", "\u01ED", ["\u01EF", "\u01F0"], "\u01F3", "\u01F5", "\u01F9", "\u01FB", "\u01FD", "\u01FF", "\u0201", "\u0203", "\u0205", "\u0207", "\u0209", "\u020B", "\u020D", "\u020F", "\u0211", "\u0213", "\u0215", "\u0217", "\u0219", "\u021B", "\u021D", "\u021F", "\u0221", "\u0223", "\u0225", "\u0227", "\u0229", "\u022B", "\u022D", "\u022F", "\u0231", ["\u0233", "\u0239"], "\u023C", ["\u023F", "\u0240"], "\u0242", "\u0247", "\u0249", "\u024B", "\u024D", ["\u024F", "\u0293"], ["\u0295", "\u02AF"], "\u0371", "\u0373", "\u0377", ["\u037B", "\u037D"], "\u0390", ["\u03AC", "\u03CE"], ["\u03D0", "\u03D1"], ["\u03D5", "\u03D7"], "\u03D9", "\u03DB", "\u03DD", "\u03DF", "\u03E1", "\u03E3", "\u03E5", "\u03E7", "\u03E9", "\u03EB", "\u03ED", ["\u03EF", "\u03F3"], "\u03F5", "\u03F8", ["\u03FB", "\u03FC"], ["\u0430", "\u045F"], "\u0461", "\u0463", "\u0465", "\u0467", "\u0469", "\u046B", "\u046D", "\u046F", "\u0471", "\u0473", "\u0475", "\u0477", "\u0479", "\u047B", "\u047D", "\u047F", "\u0481", "\u048B", "\u048D", "\u048F", "\u0491", "\u0493", "\u0495", "\u0497", "\u0499", "\u049B", "\u049D", "\u049F", "\u04A1", "\u04A3", "\u04A5", "\u04A7", "\u04A9", "\u04AB", "\u04AD", "\u04AF", "\u04B1", "\u04B3", "\u04B5", "\u04B7", "\u04B9", "\u04BB", "\u04BD", "\u04BF", "\u04C2", "\u04C4", "\u04C6", "\u04C8", "\u04CA", "\u04CC", ["\u04CE", "\u04CF"], "\u04D1", "\u04D3", "\u04D5", "\u04D7", "\u04D9", "\u04DB", "\u04DD", "\u04DF", "\u04E1", "\u04E3", "\u04E5", "\u04E7", "\u04E9", "\u04EB", "\u04ED", "\u04EF", "\u04F1", "\u04F3", "\u04F5", "\u04F7", "\u04F9", "\u04FB", "\u04FD", "\u04FF", "\u0501", "\u0503", "\u0505", "\u0507", "\u0509", "\u050B", "\u050D", "\u050F", "\u0511", "\u0513", "\u0515", "\u0517", "\u0519", "\u051B", "\u051D", "\u051F", "\u0521", "\u0523", "\u0525", "\u0527", "\u0529", "\u052B", "\u052D", "\u052F", ["\u0561", "\u0587"], ["\u13F8", "\u13FD"], ["\u1D00", "\u1D2B"], ["\u1D6B", "\u1D77"], ["\u1D79", "\u1D9A"], "\u1E01", "\u1E03", "\u1E05", "\u1E07", "\u1E09", "\u1E0B", "\u1E0D", "\u1E0F", "\u1E11", "\u1E13", "\u1E15", "\u1E17", "\u1E19", "\u1E1B", "\u1E1D", "\u1E1F", "\u1E21", "\u1E23", "\u1E25", "\u1E27", "\u1E29", "\u1E2B", "\u1E2D", "\u1E2F", "\u1E31", "\u1E33", "\u1E35", "\u1E37", "\u1E39", "\u1E3B", "\u1E3D", "\u1E3F", "\u1E41", "\u1E43", "\u1E45", "\u1E47", "\u1E49", "\u1E4B", "\u1E4D", "\u1E4F", "\u1E51", "\u1E53", "\u1E55", "\u1E57", "\u1E59", "\u1E5B", "\u1E5D", "\u1E5F", "\u1E61", "\u1E63", "\u1E65", "\u1E67", "\u1E69", "\u1E6B", "\u1E6D", "\u1E6F", "\u1E71", "\u1E73", "\u1E75", "\u1E77", "\u1E79", "\u1E7B", "\u1E7D", "\u1E7F", "\u1E81", "\u1E83", "\u1E85", "\u1E87", "\u1E89", "\u1E8B", "\u1E8D", "\u1E8F", "\u1E91", "\u1E93", ["\u1E95", "\u1E9D"], "\u1E9F", "\u1EA1", "\u1EA3", "\u1EA5", "\u1EA7", "\u1EA9", "\u1EAB", "\u1EAD", "\u1EAF", "\u1EB1", "\u1EB3", "\u1EB5", "\u1EB7", "\u1EB9", "\u1EBB", "\u1EBD", "\u1EBF", "\u1EC1", "\u1EC3", "\u1EC5", "\u1EC7", "\u1EC9", "\u1ECB", "\u1ECD", "\u1ECF", "\u1ED1", "\u1ED3", "\u1ED5", "\u1ED7", "\u1ED9", "\u1EDB", "\u1EDD", "\u1EDF", "\u1EE1", "\u1EE3", "\u1EE5", "\u1EE7", "\u1EE9", "\u1EEB", "\u1EED", "\u1EEF", "\u1EF1", "\u1EF3", "\u1EF5", "\u1EF7", "\u1EF9", "\u1EFB", "\u1EFD", ["\u1EFF", "\u1F07"], ["\u1F10", "\u1F15"], ["\u1F20", "\u1F27"], ["\u1F30", "\u1F37"], ["\u1F40", "\u1F45"], ["\u1F50", "\u1F57"], ["\u1F60", "\u1F67"], ["\u1F70", "\u1F7D"], ["\u1F80", "\u1F87"], ["\u1F90", "\u1F97"], ["\u1FA0", "\u1FA7"], ["\u1FB0", "\u1FB4"], ["\u1FB6", "\u1FB7"], "\u1FBE", ["\u1FC2", "\u1FC4"], ["\u1FC6", "\u1FC7"], ["\u1FD0", "\u1FD3"], ["\u1FD6", "\u1FD7"], ["\u1FE0", "\u1FE7"], ["\u1FF2", "\u1FF4"], ["\u1FF6", "\u1FF7"], "\u210A", ["\u210E", "\u210F"], "\u2113", "\u212F", "\u2134", "\u2139", ["\u213C", "\u213D"], ["\u2146", "\u2149"], "\u214E", "\u2184", ["\u2C30", "\u2C5E"], "\u2C61", ["\u2C65", "\u2C66"], "\u2C68", "\u2C6A", "\u2C6C", "\u2C71", ["\u2C73", "\u2C74"], ["\u2C76", "\u2C7B"], "\u2C81", "\u2C83", "\u2C85", "\u2C87", "\u2C89", "\u2C8B", "\u2C8D", "\u2C8F", "\u2C91", "\u2C93", "\u2C95", "\u2C97", "\u2C99", "\u2C9B", "\u2C9D", "\u2C9F", "\u2CA1", "\u2CA3", "\u2CA5", "\u2CA7", "\u2CA9", "\u2CAB", "\u2CAD", "\u2CAF", "\u2CB1", "\u2CB3", "\u2CB5", "\u2CB7", "\u2CB9", "\u2CBB", "\u2CBD", "\u2CBF", "\u2CC1", "\u2CC3", "\u2CC5", "\u2CC7", "\u2CC9", "\u2CCB", "\u2CCD", "\u2CCF", "\u2CD1", "\u2CD3", "\u2CD5", "\u2CD7", "\u2CD9", "\u2CDB", "\u2CDD", "\u2CDF", "\u2CE1", ["\u2CE3", "\u2CE4"], "\u2CEC", "\u2CEE", "\u2CF3", ["\u2D00", "\u2D25"], "\u2D27", "\u2D2D", "\uA641", "\uA643", "\uA645", "\uA647", "\uA649", "\uA64B", "\uA64D", "\uA64F", "\uA651", "\uA653", "\uA655", "\uA657", "\uA659", "\uA65B", "\uA65D", "\uA65F", "\uA661", "\uA663", "\uA665", "\uA667", "\uA669", "\uA66B", "\uA66D", "\uA681", "\uA683", "\uA685", "\uA687", "\uA689", "\uA68B", "\uA68D", "\uA68F", "\uA691", "\uA693", "\uA695", "\uA697", "\uA699", "\uA69B", "\uA723", "\uA725", "\uA727", "\uA729", "\uA72B", "\uA72D", ["\uA72F", "\uA731"], "\uA733", "\uA735", "\uA737", "\uA739", "\uA73B", "\uA73D", "\uA73F", "\uA741", "\uA743", "\uA745", "\uA747", "\uA749", "\uA74B", "\uA74D", "\uA74F", "\uA751", "\uA753", "\uA755", "\uA757", "\uA759", "\uA75B", "\uA75D", "\uA75F", "\uA761", "\uA763", "\uA765", "\uA767", "\uA769", "\uA76B", "\uA76D", "\uA76F", ["\uA771", "\uA778"], "\uA77A", "\uA77C", "\uA77F", "\uA781", "\uA783", "\uA785", "\uA787", "\uA78C", "\uA78E", "\uA791", ["\uA793", "\uA795"], "\uA797", "\uA799", "\uA79B", "\uA79D", "\uA79F", "\uA7A1", "\uA7A3", "\uA7A5", "\uA7A7", "\uA7A9", "\uA7B5", "\uA7B7", "\uA7FA", ["\uAB30", "\uAB5A"], ["\uAB60", "\uAB65"], ["\uAB70", "\uABBF"], ["\uFB00", "\uFB06"], ["\uFB13", "\uFB17"], ["\uFF41", "\uFF5A"]], false, false); - var peg$e66 = peg$classExpectation([["\u02B0", "\u02C1"], ["\u02C6", "\u02D1"], ["\u02E0", "\u02E4"], "\u02EC", "\u02EE", "\u0374", "\u037A", "\u0559", "\u0640", ["\u06E5", "\u06E6"], ["\u07F4", "\u07F5"], "\u07FA", "\u081A", "\u0824", "\u0828", "\u0971", "\u0E46", "\u0EC6", "\u10FC", "\u17D7", "\u1843", "\u1AA7", ["\u1C78", "\u1C7D"], ["\u1D2C", "\u1D6A"], "\u1D78", ["\u1D9B", "\u1DBF"], "\u2071", "\u207F", ["\u2090", "\u209C"], ["\u2C7C", "\u2C7D"], "\u2D6F", "\u2E2F", "\u3005", ["\u3031", "\u3035"], "\u303B", ["\u309D", "\u309E"], ["\u30FC", "\u30FE"], "\uA015", ["\uA4F8", "\uA4FD"], "\uA60C", "\uA67F", ["\uA69C", "\uA69D"], ["\uA717", "\uA71F"], "\uA770", "\uA788", ["\uA7F8", "\uA7F9"], "\uA9CF", "\uA9E6", "\uAA70", "\uAADD", ["\uAAF3", "\uAAF4"], ["\uAB5C", "\uAB5F"], "\uFF70", ["\uFF9E", "\uFF9F"]], false, false); - var peg$e67 = peg$classExpectation(["\xAA", "\xBA", "\u01BB", ["\u01C0", "\u01C3"], "\u0294", ["\u05D0", "\u05EA"], ["\u05F0", "\u05F2"], ["\u0620", "\u063F"], ["\u0641", "\u064A"], ["\u066E", "\u066F"], ["\u0671", "\u06D3"], "\u06D5", ["\u06EE", "\u06EF"], ["\u06FA", "\u06FC"], "\u06FF", "\u0710", ["\u0712", "\u072F"], ["\u074D", "\u07A5"], "\u07B1", ["\u07CA", "\u07EA"], ["\u0800", "\u0815"], ["\u0840", "\u0858"], ["\u08A0", "\u08B4"], ["\u0904", "\u0939"], "\u093D", "\u0950", ["\u0958", "\u0961"], ["\u0972", "\u0980"], ["\u0985", "\u098C"], ["\u098F", "\u0990"], ["\u0993", "\u09A8"], ["\u09AA", "\u09B0"], "\u09B2", ["\u09B6", "\u09B9"], "\u09BD", "\u09CE", ["\u09DC", "\u09DD"], ["\u09DF", "\u09E1"], ["\u09F0", "\u09F1"], ["\u0A05", "\u0A0A"], ["\u0A0F", "\u0A10"], ["\u0A13", "\u0A28"], ["\u0A2A", "\u0A30"], ["\u0A32", "\u0A33"], ["\u0A35", "\u0A36"], ["\u0A38", "\u0A39"], ["\u0A59", "\u0A5C"], "\u0A5E", ["\u0A72", "\u0A74"], ["\u0A85", "\u0A8D"], ["\u0A8F", "\u0A91"], ["\u0A93", "\u0AA8"], ["\u0AAA", "\u0AB0"], ["\u0AB2", "\u0AB3"], ["\u0AB5", "\u0AB9"], "\u0ABD", "\u0AD0", ["\u0AE0", "\u0AE1"], "\u0AF9", ["\u0B05", "\u0B0C"], ["\u0B0F", "\u0B10"], ["\u0B13", "\u0B28"], ["\u0B2A", "\u0B30"], ["\u0B32", "\u0B33"], ["\u0B35", "\u0B39"], "\u0B3D", ["\u0B5C", "\u0B5D"], ["\u0B5F", "\u0B61"], "\u0B71", "\u0B83", ["\u0B85", "\u0B8A"], ["\u0B8E", "\u0B90"], ["\u0B92", "\u0B95"], ["\u0B99", "\u0B9A"], "\u0B9C", ["\u0B9E", "\u0B9F"], ["\u0BA3", "\u0BA4"], ["\u0BA8", "\u0BAA"], ["\u0BAE", "\u0BB9"], "\u0BD0", ["\u0C05", "\u0C0C"], ["\u0C0E", "\u0C10"], ["\u0C12", "\u0C28"], ["\u0C2A", "\u0C39"], "\u0C3D", ["\u0C58", "\u0C5A"], ["\u0C60", "\u0C61"], ["\u0C85", "\u0C8C"], ["\u0C8E", "\u0C90"], ["\u0C92", "\u0CA8"], ["\u0CAA", "\u0CB3"], ["\u0CB5", "\u0CB9"], "\u0CBD", "\u0CDE", ["\u0CE0", "\u0CE1"], ["\u0CF1", "\u0CF2"], ["\u0D05", "\u0D0C"], ["\u0D0E", "\u0D10"], ["\u0D12", "\u0D3A"], "\u0D3D", "\u0D4E", ["\u0D5F", "\u0D61"], ["\u0D7A", "\u0D7F"], ["\u0D85", "\u0D96"], ["\u0D9A", "\u0DB1"], ["\u0DB3", "\u0DBB"], "\u0DBD", ["\u0DC0", "\u0DC6"], ["\u0E01", "\u0E30"], ["\u0E32", "\u0E33"], ["\u0E40", "\u0E45"], ["\u0E81", "\u0E82"], "\u0E84", ["\u0E87", "\u0E88"], "\u0E8A", "\u0E8D", ["\u0E94", "\u0E97"], ["\u0E99", "\u0E9F"], ["\u0EA1", "\u0EA3"], "\u0EA5", "\u0EA7", ["\u0EAA", "\u0EAB"], ["\u0EAD", "\u0EB0"], ["\u0EB2", "\u0EB3"], "\u0EBD", ["\u0EC0", "\u0EC4"], ["\u0EDC", "\u0EDF"], "\u0F00", ["\u0F40", "\u0F47"], ["\u0F49", "\u0F6C"], ["\u0F88", "\u0F8C"], ["\u1000", "\u102A"], "\u103F", ["\u1050", "\u1055"], ["\u105A", "\u105D"], "\u1061", ["\u1065", "\u1066"], ["\u106E", "\u1070"], ["\u1075", "\u1081"], "\u108E", ["\u10D0", "\u10FA"], ["\u10FD", "\u1248"], ["\u124A", "\u124D"], ["\u1250", "\u1256"], "\u1258", ["\u125A", "\u125D"], ["\u1260", "\u1288"], ["\u128A", "\u128D"], ["\u1290", "\u12B0"], ["\u12B2", "\u12B5"], ["\u12B8", "\u12BE"], "\u12C0", ["\u12C2", "\u12C5"], ["\u12C8", "\u12D6"], ["\u12D8", "\u1310"], ["\u1312", "\u1315"], ["\u1318", "\u135A"], ["\u1380", "\u138F"], ["\u1401", "\u166C"], ["\u166F", "\u167F"], ["\u1681", "\u169A"], ["\u16A0", "\u16EA"], ["\u16F1", "\u16F8"], ["\u1700", "\u170C"], ["\u170E", "\u1711"], ["\u1720", "\u1731"], ["\u1740", "\u1751"], ["\u1760", "\u176C"], ["\u176E", "\u1770"], ["\u1780", "\u17B3"], "\u17DC", ["\u1820", "\u1842"], ["\u1844", "\u1877"], ["\u1880", "\u18A8"], "\u18AA", ["\u18B0", "\u18F5"], ["\u1900", "\u191E"], ["\u1950", "\u196D"], ["\u1970", "\u1974"], ["\u1980", "\u19AB"], ["\u19B0", "\u19C9"], ["\u1A00", "\u1A16"], ["\u1A20", "\u1A54"], ["\u1B05", "\u1B33"], ["\u1B45", "\u1B4B"], ["\u1B83", "\u1BA0"], ["\u1BAE", "\u1BAF"], ["\u1BBA", "\u1BE5"], ["\u1C00", "\u1C23"], ["\u1C4D", "\u1C4F"], ["\u1C5A", "\u1C77"], ["\u1CE9", "\u1CEC"], ["\u1CEE", "\u1CF1"], ["\u1CF5", "\u1CF6"], ["\u2135", "\u2138"], ["\u2D30", "\u2D67"], ["\u2D80", "\u2D96"], ["\u2DA0", "\u2DA6"], ["\u2DA8", "\u2DAE"], ["\u2DB0", "\u2DB6"], ["\u2DB8", "\u2DBE"], ["\u2DC0", "\u2DC6"], ["\u2DC8", "\u2DCE"], ["\u2DD0", "\u2DD6"], ["\u2DD8", "\u2DDE"], "\u3006", "\u303C", ["\u3041", "\u3096"], "\u309F", ["\u30A1", "\u30FA"], "\u30FF", ["\u3105", "\u312D"], ["\u3131", "\u318E"], ["\u31A0", "\u31BA"], ["\u31F0", "\u31FF"], ["\u3400", "\u4DB5"], ["\u4E00", "\u9FD5"], ["\uA000", "\uA014"], ["\uA016", "\uA48C"], ["\uA4D0", "\uA4F7"], ["\uA500", "\uA60B"], ["\uA610", "\uA61F"], ["\uA62A", "\uA62B"], "\uA66E", ["\uA6A0", "\uA6E5"], "\uA78F", "\uA7F7", ["\uA7FB", "\uA801"], ["\uA803", "\uA805"], ["\uA807", "\uA80A"], ["\uA80C", "\uA822"], ["\uA840", "\uA873"], ["\uA882", "\uA8B3"], ["\uA8F2", "\uA8F7"], "\uA8FB", "\uA8FD", ["\uA90A", "\uA925"], ["\uA930", "\uA946"], ["\uA960", "\uA97C"], ["\uA984", "\uA9B2"], ["\uA9E0", "\uA9E4"], ["\uA9E7", "\uA9EF"], ["\uA9FA", "\uA9FE"], ["\uAA00", "\uAA28"], ["\uAA40", "\uAA42"], ["\uAA44", "\uAA4B"], ["\uAA60", "\uAA6F"], ["\uAA71", "\uAA76"], "\uAA7A", ["\uAA7E", "\uAAAF"], "\uAAB1", ["\uAAB5", "\uAAB6"], ["\uAAB9", "\uAABD"], "\uAAC0", "\uAAC2", ["\uAADB", "\uAADC"], ["\uAAE0", "\uAAEA"], "\uAAF2", ["\uAB01", "\uAB06"], ["\uAB09", "\uAB0E"], ["\uAB11", "\uAB16"], ["\uAB20", "\uAB26"], ["\uAB28", "\uAB2E"], ["\uABC0", "\uABE2"], ["\uAC00", "\uD7A3"], ["\uD7B0", "\uD7C6"], ["\uD7CB", "\uD7FB"], ["\uF900", "\uFA6D"], ["\uFA70", "\uFAD9"], "\uFB1D", ["\uFB1F", "\uFB28"], ["\uFB2A", "\uFB36"], ["\uFB38", "\uFB3C"], "\uFB3E", ["\uFB40", "\uFB41"], ["\uFB43", "\uFB44"], ["\uFB46", "\uFBB1"], ["\uFBD3", "\uFD3D"], ["\uFD50", "\uFD8F"], ["\uFD92", "\uFDC7"], ["\uFDF0", "\uFDFB"], ["\uFE70", "\uFE74"], ["\uFE76", "\uFEFC"], ["\uFF66", "\uFF6F"], ["\uFF71", "\uFF9D"], ["\uFFA0", "\uFFBE"], ["\uFFC2", "\uFFC7"], ["\uFFCA", "\uFFCF"], ["\uFFD2", "\uFFD7"], ["\uFFDA", "\uFFDC"]], false, false); - var peg$e68 = peg$classExpectation(["\u01C5", "\u01C8", "\u01CB", "\u01F2", ["\u1F88", "\u1F8F"], ["\u1F98", "\u1F9F"], ["\u1FA8", "\u1FAF"], "\u1FBC", "\u1FCC", "\u1FFC"], false, false); - var peg$e69 = peg$classExpectation([["A", "Z"], ["\xC0", "\xD6"], ["\xD8", "\xDE"], "\u0100", "\u0102", "\u0104", "\u0106", "\u0108", "\u010A", "\u010C", "\u010E", "\u0110", "\u0112", "\u0114", "\u0116", "\u0118", "\u011A", "\u011C", "\u011E", "\u0120", "\u0122", "\u0124", "\u0126", "\u0128", "\u012A", "\u012C", "\u012E", "\u0130", "\u0132", "\u0134", "\u0136", "\u0139", "\u013B", "\u013D", "\u013F", "\u0141", "\u0143", "\u0145", "\u0147", "\u014A", "\u014C", "\u014E", "\u0150", "\u0152", "\u0154", "\u0156", "\u0158", "\u015A", "\u015C", "\u015E", "\u0160", "\u0162", "\u0164", "\u0166", "\u0168", "\u016A", "\u016C", "\u016E", "\u0170", "\u0172", "\u0174", "\u0176", ["\u0178", "\u0179"], "\u017B", "\u017D", ["\u0181", "\u0182"], "\u0184", ["\u0186", "\u0187"], ["\u0189", "\u018B"], ["\u018E", "\u0191"], ["\u0193", "\u0194"], ["\u0196", "\u0198"], ["\u019C", "\u019D"], ["\u019F", "\u01A0"], "\u01A2", "\u01A4", ["\u01A6", "\u01A7"], "\u01A9", "\u01AC", ["\u01AE", "\u01AF"], ["\u01B1", "\u01B3"], "\u01B5", ["\u01B7", "\u01B8"], "\u01BC", "\u01C4", "\u01C7", "\u01CA", "\u01CD", "\u01CF", "\u01D1", "\u01D3", "\u01D5", "\u01D7", "\u01D9", "\u01DB", "\u01DE", "\u01E0", "\u01E2", "\u01E4", "\u01E6", "\u01E8", "\u01EA", "\u01EC", "\u01EE", "\u01F1", "\u01F4", ["\u01F6", "\u01F8"], "\u01FA", "\u01FC", "\u01FE", "\u0200", "\u0202", "\u0204", "\u0206", "\u0208", "\u020A", "\u020C", "\u020E", "\u0210", "\u0212", "\u0214", "\u0216", "\u0218", "\u021A", "\u021C", "\u021E", "\u0220", "\u0222", "\u0224", "\u0226", "\u0228", "\u022A", "\u022C", "\u022E", "\u0230", "\u0232", ["\u023A", "\u023B"], ["\u023D", "\u023E"], "\u0241", ["\u0243", "\u0246"], "\u0248", "\u024A", "\u024C", "\u024E", "\u0370", "\u0372", "\u0376", "\u037F", "\u0386", ["\u0388", "\u038A"], "\u038C", ["\u038E", "\u038F"], ["\u0391", "\u03A1"], ["\u03A3", "\u03AB"], "\u03CF", ["\u03D2", "\u03D4"], "\u03D8", "\u03DA", "\u03DC", "\u03DE", "\u03E0", "\u03E2", "\u03E4", "\u03E6", "\u03E8", "\u03EA", "\u03EC", "\u03EE", "\u03F4", "\u03F7", ["\u03F9", "\u03FA"], ["\u03FD", "\u042F"], "\u0460", "\u0462", "\u0464", "\u0466", "\u0468", "\u046A", "\u046C", "\u046E", "\u0470", "\u0472", "\u0474", "\u0476", "\u0478", "\u047A", "\u047C", "\u047E", "\u0480", "\u048A", "\u048C", "\u048E", "\u0490", "\u0492", "\u0494", "\u0496", "\u0498", "\u049A", "\u049C", "\u049E", "\u04A0", "\u04A2", "\u04A4", "\u04A6", "\u04A8", "\u04AA", "\u04AC", "\u04AE", "\u04B0", "\u04B2", "\u04B4", "\u04B6", "\u04B8", "\u04BA", "\u04BC", "\u04BE", ["\u04C0", "\u04C1"], "\u04C3", "\u04C5", "\u04C7", "\u04C9", "\u04CB", "\u04CD", "\u04D0", "\u04D2", "\u04D4", "\u04D6", "\u04D8", "\u04DA", "\u04DC", "\u04DE", "\u04E0", "\u04E2", "\u04E4", "\u04E6", "\u04E8", "\u04EA", "\u04EC", "\u04EE", "\u04F0", "\u04F2", "\u04F4", "\u04F6", "\u04F8", "\u04FA", "\u04FC", "\u04FE", "\u0500", "\u0502", "\u0504", "\u0506", "\u0508", "\u050A", "\u050C", "\u050E", "\u0510", "\u0512", "\u0514", "\u0516", "\u0518", "\u051A", "\u051C", "\u051E", "\u0520", "\u0522", "\u0524", "\u0526", "\u0528", "\u052A", "\u052C", "\u052E", ["\u0531", "\u0556"], ["\u10A0", "\u10C5"], "\u10C7", "\u10CD", ["\u13A0", "\u13F5"], "\u1E00", "\u1E02", "\u1E04", "\u1E06", "\u1E08", "\u1E0A", "\u1E0C", "\u1E0E", "\u1E10", "\u1E12", "\u1E14", "\u1E16", "\u1E18", "\u1E1A", "\u1E1C", "\u1E1E", "\u1E20", "\u1E22", "\u1E24", "\u1E26", "\u1E28", "\u1E2A", "\u1E2C", "\u1E2E", "\u1E30", "\u1E32", "\u1E34", "\u1E36", "\u1E38", "\u1E3A", "\u1E3C", "\u1E3E", "\u1E40", "\u1E42", "\u1E44", "\u1E46", "\u1E48", "\u1E4A", "\u1E4C", "\u1E4E", "\u1E50", "\u1E52", "\u1E54", "\u1E56", "\u1E58", "\u1E5A", "\u1E5C", "\u1E5E", "\u1E60", "\u1E62", "\u1E64", "\u1E66", "\u1E68", "\u1E6A", "\u1E6C", "\u1E6E", "\u1E70", "\u1E72", "\u1E74", "\u1E76", "\u1E78", "\u1E7A", "\u1E7C", "\u1E7E", "\u1E80", "\u1E82", "\u1E84", "\u1E86", "\u1E88", "\u1E8A", "\u1E8C", "\u1E8E", "\u1E90", "\u1E92", "\u1E94", "\u1E9E", "\u1EA0", "\u1EA2", "\u1EA4", "\u1EA6", "\u1EA8", "\u1EAA", "\u1EAC", "\u1EAE", "\u1EB0", "\u1EB2", "\u1EB4", "\u1EB6", "\u1EB8", "\u1EBA", "\u1EBC", "\u1EBE", "\u1EC0", "\u1EC2", "\u1EC4", "\u1EC6", "\u1EC8", "\u1ECA", "\u1ECC", "\u1ECE", "\u1ED0", "\u1ED2", "\u1ED4", "\u1ED6", "\u1ED8", "\u1EDA", "\u1EDC", "\u1EDE", "\u1EE0", "\u1EE2", "\u1EE4", "\u1EE6", "\u1EE8", "\u1EEA", "\u1EEC", "\u1EEE", "\u1EF0", "\u1EF2", "\u1EF4", "\u1EF6", "\u1EF8", "\u1EFA", "\u1EFC", "\u1EFE", ["\u1F08", "\u1F0F"], ["\u1F18", "\u1F1D"], ["\u1F28", "\u1F2F"], ["\u1F38", "\u1F3F"], ["\u1F48", "\u1F4D"], "\u1F59", "\u1F5B", "\u1F5D", "\u1F5F", ["\u1F68", "\u1F6F"], ["\u1FB8", "\u1FBB"], ["\u1FC8", "\u1FCB"], ["\u1FD8", "\u1FDB"], ["\u1FE8", "\u1FEC"], ["\u1FF8", "\u1FFB"], "\u2102", "\u2107", ["\u210B", "\u210D"], ["\u2110", "\u2112"], "\u2115", ["\u2119", "\u211D"], "\u2124", "\u2126", "\u2128", ["\u212A", "\u212D"], ["\u2130", "\u2133"], ["\u213E", "\u213F"], "\u2145", "\u2183", ["\u2C00", "\u2C2E"], "\u2C60", ["\u2C62", "\u2C64"], "\u2C67", "\u2C69", "\u2C6B", ["\u2C6D", "\u2C70"], "\u2C72", "\u2C75", ["\u2C7E", "\u2C80"], "\u2C82", "\u2C84", "\u2C86", "\u2C88", "\u2C8A", "\u2C8C", "\u2C8E", "\u2C90", "\u2C92", "\u2C94", "\u2C96", "\u2C98", "\u2C9A", "\u2C9C", "\u2C9E", "\u2CA0", "\u2CA2", "\u2CA4", "\u2CA6", "\u2CA8", "\u2CAA", "\u2CAC", "\u2CAE", "\u2CB0", "\u2CB2", "\u2CB4", "\u2CB6", "\u2CB8", "\u2CBA", "\u2CBC", "\u2CBE", "\u2CC0", "\u2CC2", "\u2CC4", "\u2CC6", "\u2CC8", "\u2CCA", "\u2CCC", "\u2CCE", "\u2CD0", "\u2CD2", "\u2CD4", "\u2CD6", "\u2CD8", "\u2CDA", "\u2CDC", "\u2CDE", "\u2CE0", "\u2CE2", "\u2CEB", "\u2CED", "\u2CF2", "\uA640", "\uA642", "\uA644", "\uA646", "\uA648", "\uA64A", "\uA64C", "\uA64E", "\uA650", "\uA652", "\uA654", "\uA656", "\uA658", "\uA65A", "\uA65C", "\uA65E", "\uA660", "\uA662", "\uA664", "\uA666", "\uA668", "\uA66A", "\uA66C", "\uA680", "\uA682", "\uA684", "\uA686", "\uA688", "\uA68A", "\uA68C", "\uA68E", "\uA690", "\uA692", "\uA694", "\uA696", "\uA698", "\uA69A", "\uA722", "\uA724", "\uA726", "\uA728", "\uA72A", "\uA72C", "\uA72E", "\uA732", "\uA734", "\uA736", "\uA738", "\uA73A", "\uA73C", "\uA73E", "\uA740", "\uA742", "\uA744", "\uA746", "\uA748", "\uA74A", "\uA74C", "\uA74E", "\uA750", "\uA752", "\uA754", "\uA756", "\uA758", "\uA75A", "\uA75C", "\uA75E", "\uA760", "\uA762", "\uA764", "\uA766", "\uA768", "\uA76A", "\uA76C", "\uA76E", "\uA779", "\uA77B", ["\uA77D", "\uA77E"], "\uA780", "\uA782", "\uA784", "\uA786", "\uA78B", "\uA78D", "\uA790", "\uA792", "\uA796", "\uA798", "\uA79A", "\uA79C", "\uA79E", "\uA7A0", "\uA7A2", "\uA7A4", "\uA7A6", "\uA7A8", ["\uA7AA", "\uA7AD"], ["\uA7B0", "\uA7B4"], "\uA7B6", ["\uFF21", "\uFF3A"]], false, false); - var peg$e70 = peg$classExpectation(["\u0903", "\u093B", ["\u093E", "\u0940"], ["\u0949", "\u094C"], ["\u094E", "\u094F"], ["\u0982", "\u0983"], ["\u09BE", "\u09C0"], ["\u09C7", "\u09C8"], ["\u09CB", "\u09CC"], "\u09D7", "\u0A03", ["\u0A3E", "\u0A40"], "\u0A83", ["\u0ABE", "\u0AC0"], "\u0AC9", ["\u0ACB", "\u0ACC"], ["\u0B02", "\u0B03"], "\u0B3E", "\u0B40", ["\u0B47", "\u0B48"], ["\u0B4B", "\u0B4C"], "\u0B57", ["\u0BBE", "\u0BBF"], ["\u0BC1", "\u0BC2"], ["\u0BC6", "\u0BC8"], ["\u0BCA", "\u0BCC"], "\u0BD7", ["\u0C01", "\u0C03"], ["\u0C41", "\u0C44"], ["\u0C82", "\u0C83"], "\u0CBE", ["\u0CC0", "\u0CC4"], ["\u0CC7", "\u0CC8"], ["\u0CCA", "\u0CCB"], ["\u0CD5", "\u0CD6"], ["\u0D02", "\u0D03"], ["\u0D3E", "\u0D40"], ["\u0D46", "\u0D48"], ["\u0D4A", "\u0D4C"], "\u0D57", ["\u0D82", "\u0D83"], ["\u0DCF", "\u0DD1"], ["\u0DD8", "\u0DDF"], ["\u0DF2", "\u0DF3"], ["\u0F3E", "\u0F3F"], "\u0F7F", ["\u102B", "\u102C"], "\u1031", "\u1038", ["\u103B", "\u103C"], ["\u1056", "\u1057"], ["\u1062", "\u1064"], ["\u1067", "\u106D"], ["\u1083", "\u1084"], ["\u1087", "\u108C"], "\u108F", ["\u109A", "\u109C"], "\u17B6", ["\u17BE", "\u17C5"], ["\u17C7", "\u17C8"], ["\u1923", "\u1926"], ["\u1929", "\u192B"], ["\u1930", "\u1931"], ["\u1933", "\u1938"], ["\u1A19", "\u1A1A"], "\u1A55", "\u1A57", "\u1A61", ["\u1A63", "\u1A64"], ["\u1A6D", "\u1A72"], "\u1B04", "\u1B35", "\u1B3B", ["\u1B3D", "\u1B41"], ["\u1B43", "\u1B44"], "\u1B82", "\u1BA1", ["\u1BA6", "\u1BA7"], "\u1BAA", "\u1BE7", ["\u1BEA", "\u1BEC"], "\u1BEE", ["\u1BF2", "\u1BF3"], ["\u1C24", "\u1C2B"], ["\u1C34", "\u1C35"], "\u1CE1", ["\u1CF2", "\u1CF3"], ["\u302E", "\u302F"], ["\uA823", "\uA824"], "\uA827", ["\uA880", "\uA881"], ["\uA8B4", "\uA8C3"], ["\uA952", "\uA953"], "\uA983", ["\uA9B4", "\uA9B5"], ["\uA9BA", "\uA9BB"], ["\uA9BD", "\uA9C0"], ["\uAA2F", "\uAA30"], ["\uAA33", "\uAA34"], "\uAA4D", "\uAA7B", "\uAA7D", "\uAAEB", ["\uAAEE", "\uAAEF"], "\uAAF5", ["\uABE3", "\uABE4"], ["\uABE6", "\uABE7"], ["\uABE9", "\uABEA"], "\uABEC"], false, false); - var peg$e71 = peg$classExpectation([["\u0300", "\u036F"], ["\u0483", "\u0487"], ["\u0591", "\u05BD"], "\u05BF", ["\u05C1", "\u05C2"], ["\u05C4", "\u05C5"], "\u05C7", ["\u0610", "\u061A"], ["\u064B", "\u065F"], "\u0670", ["\u06D6", "\u06DC"], ["\u06DF", "\u06E4"], ["\u06E7", "\u06E8"], ["\u06EA", "\u06ED"], "\u0711", ["\u0730", "\u074A"], ["\u07A6", "\u07B0"], ["\u07EB", "\u07F3"], ["\u0816", "\u0819"], ["\u081B", "\u0823"], ["\u0825", "\u0827"], ["\u0829", "\u082D"], ["\u0859", "\u085B"], ["\u08E3", "\u0902"], "\u093A", "\u093C", ["\u0941", "\u0948"], "\u094D", ["\u0951", "\u0957"], ["\u0962", "\u0963"], "\u0981", "\u09BC", ["\u09C1", "\u09C4"], "\u09CD", ["\u09E2", "\u09E3"], ["\u0A01", "\u0A02"], "\u0A3C", ["\u0A41", "\u0A42"], ["\u0A47", "\u0A48"], ["\u0A4B", "\u0A4D"], "\u0A51", ["\u0A70", "\u0A71"], "\u0A75", ["\u0A81", "\u0A82"], "\u0ABC", ["\u0AC1", "\u0AC5"], ["\u0AC7", "\u0AC8"], "\u0ACD", ["\u0AE2", "\u0AE3"], "\u0B01", "\u0B3C", "\u0B3F", ["\u0B41", "\u0B44"], "\u0B4D", "\u0B56", ["\u0B62", "\u0B63"], "\u0B82", "\u0BC0", "\u0BCD", "\u0C00", ["\u0C3E", "\u0C40"], ["\u0C46", "\u0C48"], ["\u0C4A", "\u0C4D"], ["\u0C55", "\u0C56"], ["\u0C62", "\u0C63"], "\u0C81", "\u0CBC", "\u0CBF", "\u0CC6", ["\u0CCC", "\u0CCD"], ["\u0CE2", "\u0CE3"], "\u0D01", ["\u0D41", "\u0D44"], "\u0D4D", ["\u0D62", "\u0D63"], "\u0DCA", ["\u0DD2", "\u0DD4"], "\u0DD6", "\u0E31", ["\u0E34", "\u0E3A"], ["\u0E47", "\u0E4E"], "\u0EB1", ["\u0EB4", "\u0EB9"], ["\u0EBB", "\u0EBC"], ["\u0EC8", "\u0ECD"], ["\u0F18", "\u0F19"], "\u0F35", "\u0F37", "\u0F39", ["\u0F71", "\u0F7E"], ["\u0F80", "\u0F84"], ["\u0F86", "\u0F87"], ["\u0F8D", "\u0F97"], ["\u0F99", "\u0FBC"], "\u0FC6", ["\u102D", "\u1030"], ["\u1032", "\u1037"], ["\u1039", "\u103A"], ["\u103D", "\u103E"], ["\u1058", "\u1059"], ["\u105E", "\u1060"], ["\u1071", "\u1074"], "\u1082", ["\u1085", "\u1086"], "\u108D", "\u109D", ["\u135D", "\u135F"], ["\u1712", "\u1714"], ["\u1732", "\u1734"], ["\u1752", "\u1753"], ["\u1772", "\u1773"], ["\u17B4", "\u17B5"], ["\u17B7", "\u17BD"], "\u17C6", ["\u17C9", "\u17D3"], "\u17DD", ["\u180B", "\u180D"], "\u18A9", ["\u1920", "\u1922"], ["\u1927", "\u1928"], "\u1932", ["\u1939", "\u193B"], ["\u1A17", "\u1A18"], "\u1A1B", "\u1A56", ["\u1A58", "\u1A5E"], "\u1A60", "\u1A62", ["\u1A65", "\u1A6C"], ["\u1A73", "\u1A7C"], "\u1A7F", ["\u1AB0", "\u1ABD"], ["\u1B00", "\u1B03"], "\u1B34", ["\u1B36", "\u1B3A"], "\u1B3C", "\u1B42", ["\u1B6B", "\u1B73"], ["\u1B80", "\u1B81"], ["\u1BA2", "\u1BA5"], ["\u1BA8", "\u1BA9"], ["\u1BAB", "\u1BAD"], "\u1BE6", ["\u1BE8", "\u1BE9"], "\u1BED", ["\u1BEF", "\u1BF1"], ["\u1C2C", "\u1C33"], ["\u1C36", "\u1C37"], ["\u1CD0", "\u1CD2"], ["\u1CD4", "\u1CE0"], ["\u1CE2", "\u1CE8"], "\u1CED", "\u1CF4", ["\u1CF8", "\u1CF9"], ["\u1DC0", "\u1DF5"], ["\u1DFC", "\u1DFF"], ["\u20D0", "\u20DC"], "\u20E1", ["\u20E5", "\u20F0"], ["\u2CEF", "\u2CF1"], "\u2D7F", ["\u2DE0", "\u2DFF"], ["\u302A", "\u302D"], ["\u3099", "\u309A"], "\uA66F", ["\uA674", "\uA67D"], ["\uA69E", "\uA69F"], ["\uA6F0", "\uA6F1"], "\uA802", "\uA806", "\uA80B", ["\uA825", "\uA826"], "\uA8C4", ["\uA8E0", "\uA8F1"], ["\uA926", "\uA92D"], ["\uA947", "\uA951"], ["\uA980", "\uA982"], "\uA9B3", ["\uA9B6", "\uA9B9"], "\uA9BC", "\uA9E5", ["\uAA29", "\uAA2E"], ["\uAA31", "\uAA32"], ["\uAA35", "\uAA36"], "\uAA43", "\uAA4C", "\uAA7C", "\uAAB0", ["\uAAB2", "\uAAB4"], ["\uAAB7", "\uAAB8"], ["\uAABE", "\uAABF"], "\uAAC1", ["\uAAEC", "\uAAED"], "\uAAF6", "\uABE5", "\uABE8", "\uABED", "\uFB1E", ["\uFE00", "\uFE0F"], ["\uFE20", "\uFE2F"]], false, false); - var peg$e72 = peg$classExpectation([["0", "9"], ["\u0660", "\u0669"], ["\u06F0", "\u06F9"], ["\u07C0", "\u07C9"], ["\u0966", "\u096F"], ["\u09E6", "\u09EF"], ["\u0A66", "\u0A6F"], ["\u0AE6", "\u0AEF"], ["\u0B66", "\u0B6F"], ["\u0BE6", "\u0BEF"], ["\u0C66", "\u0C6F"], ["\u0CE6", "\u0CEF"], ["\u0D66", "\u0D6F"], ["\u0DE6", "\u0DEF"], ["\u0E50", "\u0E59"], ["\u0ED0", "\u0ED9"], ["\u0F20", "\u0F29"], ["\u1040", "\u1049"], ["\u1090", "\u1099"], ["\u17E0", "\u17E9"], ["\u1810", "\u1819"], ["\u1946", "\u194F"], ["\u19D0", "\u19D9"], ["\u1A80", "\u1A89"], ["\u1A90", "\u1A99"], ["\u1B50", "\u1B59"], ["\u1BB0", "\u1BB9"], ["\u1C40", "\u1C49"], ["\u1C50", "\u1C59"], ["\uA620", "\uA629"], ["\uA8D0", "\uA8D9"], ["\uA900", "\uA909"], ["\uA9D0", "\uA9D9"], ["\uA9F0", "\uA9F9"], ["\uAA50", "\uAA59"], ["\uABF0", "\uABF9"], ["\uFF10", "\uFF19"]], false, false); - var peg$e73 = peg$classExpectation([["\u16EE", "\u16F0"], ["\u2160", "\u2182"], ["\u2185", "\u2188"], "\u3007", ["\u3021", "\u3029"], ["\u3038", "\u303A"], ["\uA6E6", "\uA6EF"]], false, false); - var peg$e74 = peg$classExpectation(["_", ["\u203F", "\u2040"], "\u2054", ["\uFE33", "\uFE34"], ["\uFE4D", "\uFE4F"], "\uFF3F"], false, false); - var peg$e75 = peg$classExpectation([" ", "\xA0", "\u1680", ["\u2000", "\u200A"], "\u202F", "\u205F", "\u3000"], false, false); - var peg$e76 = peg$literalExpectation(";", false); - - var peg$f0 = function(topLevelInitializer, initializer, rules) { + var peg$e0 = peg$literalExpectation("import", false); + var peg$e1 = peg$literalExpectation("{", false); + var peg$e2 = peg$literalExpectation(",", false); + var peg$e3 = peg$literalExpectation("}", false); + var peg$e4 = peg$literalExpectation("from", false); + var peg$e5 = peg$literalExpectation("as", false); + var peg$e6 = peg$literalExpectation("=", false); + var peg$e7 = peg$literalExpectation("/", false); + var peg$e8 = peg$literalExpectation("@", false); + var peg$e9 = peg$literalExpectation(":", false); + var peg$e10 = peg$literalExpectation("$", false); + var peg$e11 = peg$literalExpectation("&", false); + var peg$e12 = peg$literalExpectation("!", false); + var peg$e13 = peg$literalExpectation("?", false); + var peg$e14 = peg$literalExpectation("*", false); + var peg$e15 = peg$literalExpectation("+", false); + var peg$e16 = peg$literalExpectation("|", false); + var peg$e17 = peg$literalExpectation("..", false); + var peg$e18 = peg$literalExpectation("(", false); + var peg$e19 = peg$literalExpectation(")", false); + var peg$e20 = peg$anyExpectation(); + var peg$e21 = peg$otherExpectation("whitespace"); + var peg$e22 = peg$literalExpectation("\t", false); + var peg$e23 = peg$literalExpectation("\v", false); + var peg$e24 = peg$literalExpectation("\f", false); + var peg$e25 = peg$literalExpectation(" ", false); + var peg$e26 = peg$literalExpectation("\xA0", false); + var peg$e27 = peg$literalExpectation("\uFEFF", false); + var peg$e28 = peg$classExpectation(["\n", "\r", "\u2028", "\u2029"], false, false); + var peg$e29 = peg$otherExpectation("end of line"); + var peg$e30 = peg$literalExpectation("\n", false); + var peg$e31 = peg$literalExpectation("\r\n", false); + var peg$e32 = peg$literalExpectation("\r", false); + var peg$e33 = peg$literalExpectation("\u2028", false); + var peg$e34 = peg$literalExpectation("\u2029", false); + var peg$e35 = peg$otherExpectation("comment"); + var peg$e36 = peg$literalExpectation("/*", false); + var peg$e37 = peg$literalExpectation("*/", false); + var peg$e38 = peg$literalExpectation("//", false); + var peg$e39 = peg$otherExpectation("identifier"); + var peg$e40 = peg$literalExpectation("_", false); + var peg$e41 = peg$literalExpectation("\\", false); + var peg$e42 = peg$literalExpectation("\u200C", false); + var peg$e43 = peg$literalExpectation("\u200D", false); + var peg$e44 = peg$otherExpectation("literal"); + var peg$e45 = peg$literalExpectation("i", false); + var peg$e46 = peg$otherExpectation("string"); + var peg$e47 = peg$literalExpectation("\"", false); + var peg$e48 = peg$literalExpectation("'", false); + var peg$e49 = peg$otherExpectation("character class"); + var peg$e50 = peg$literalExpectation("[", false); + var peg$e51 = peg$literalExpectation("^", false); + var peg$e52 = peg$literalExpectation("]", false); + var peg$e53 = peg$literalExpectation("-", false); + var peg$e54 = peg$literalExpectation("0", false); + var peg$e55 = peg$literalExpectation("b", false); + var peg$e56 = peg$literalExpectation("f", false); + var peg$e57 = peg$literalExpectation("n", false); + var peg$e58 = peg$literalExpectation("r", false); + var peg$e59 = peg$literalExpectation("t", false); + var peg$e60 = peg$literalExpectation("v", false); + var peg$e61 = peg$literalExpectation("x", false); + var peg$e62 = peg$literalExpectation("u", false); + var peg$e63 = peg$classExpectation([["0", "9"]], false, false); + var peg$e64 = peg$classExpectation([["0", "9"], ["a", "f"]], false, true); + var peg$e65 = peg$literalExpectation(".", false); + var peg$e66 = peg$otherExpectation("code block"); + var peg$e67 = peg$classExpectation(["{", "}"], false, false); + var peg$e68 = peg$classExpectation([["a", "z"], "\xB5", ["\xDF", "\xF6"], ["\xF8", "\xFF"], "\u0101", "\u0103", "\u0105", "\u0107", "\u0109", "\u010B", "\u010D", "\u010F", "\u0111", "\u0113", "\u0115", "\u0117", "\u0119", "\u011B", "\u011D", "\u011F", "\u0121", "\u0123", "\u0125", "\u0127", "\u0129", "\u012B", "\u012D", "\u012F", "\u0131", "\u0133", "\u0135", ["\u0137", "\u0138"], "\u013A", "\u013C", "\u013E", "\u0140", "\u0142", "\u0144", "\u0146", ["\u0148", "\u0149"], "\u014B", "\u014D", "\u014F", "\u0151", "\u0153", "\u0155", "\u0157", "\u0159", "\u015B", "\u015D", "\u015F", "\u0161", "\u0163", "\u0165", "\u0167", "\u0169", "\u016B", "\u016D", "\u016F", "\u0171", "\u0173", "\u0175", "\u0177", "\u017A", "\u017C", ["\u017E", "\u0180"], "\u0183", "\u0185", "\u0188", ["\u018C", "\u018D"], "\u0192", "\u0195", ["\u0199", "\u019B"], "\u019E", "\u01A1", "\u01A3", "\u01A5", "\u01A8", ["\u01AA", "\u01AB"], "\u01AD", "\u01B0", "\u01B4", "\u01B6", ["\u01B9", "\u01BA"], ["\u01BD", "\u01BF"], "\u01C6", "\u01C9", "\u01CC", "\u01CE", "\u01D0", "\u01D2", "\u01D4", "\u01D6", "\u01D8", "\u01DA", ["\u01DC", "\u01DD"], "\u01DF", "\u01E1", "\u01E3", "\u01E5", "\u01E7", "\u01E9", "\u01EB", "\u01ED", ["\u01EF", "\u01F0"], "\u01F3", "\u01F5", "\u01F9", "\u01FB", "\u01FD", "\u01FF", "\u0201", "\u0203", "\u0205", "\u0207", "\u0209", "\u020B", "\u020D", "\u020F", "\u0211", "\u0213", "\u0215", "\u0217", "\u0219", "\u021B", "\u021D", "\u021F", "\u0221", "\u0223", "\u0225", "\u0227", "\u0229", "\u022B", "\u022D", "\u022F", "\u0231", ["\u0233", "\u0239"], "\u023C", ["\u023F", "\u0240"], "\u0242", "\u0247", "\u0249", "\u024B", "\u024D", ["\u024F", "\u0293"], ["\u0295", "\u02AF"], "\u0371", "\u0373", "\u0377", ["\u037B", "\u037D"], "\u0390", ["\u03AC", "\u03CE"], ["\u03D0", "\u03D1"], ["\u03D5", "\u03D7"], "\u03D9", "\u03DB", "\u03DD", "\u03DF", "\u03E1", "\u03E3", "\u03E5", "\u03E7", "\u03E9", "\u03EB", "\u03ED", ["\u03EF", "\u03F3"], "\u03F5", "\u03F8", ["\u03FB", "\u03FC"], ["\u0430", "\u045F"], "\u0461", "\u0463", "\u0465", "\u0467", "\u0469", "\u046B", "\u046D", "\u046F", "\u0471", "\u0473", "\u0475", "\u0477", "\u0479", "\u047B", "\u047D", "\u047F", "\u0481", "\u048B", "\u048D", "\u048F", "\u0491", "\u0493", "\u0495", "\u0497", "\u0499", "\u049B", "\u049D", "\u049F", "\u04A1", "\u04A3", "\u04A5", "\u04A7", "\u04A9", "\u04AB", "\u04AD", "\u04AF", "\u04B1", "\u04B3", "\u04B5", "\u04B7", "\u04B9", "\u04BB", "\u04BD", "\u04BF", "\u04C2", "\u04C4", "\u04C6", "\u04C8", "\u04CA", "\u04CC", ["\u04CE", "\u04CF"], "\u04D1", "\u04D3", "\u04D5", "\u04D7", "\u04D9", "\u04DB", "\u04DD", "\u04DF", "\u04E1", "\u04E3", "\u04E5", "\u04E7", "\u04E9", "\u04EB", "\u04ED", "\u04EF", "\u04F1", "\u04F3", "\u04F5", "\u04F7", "\u04F9", "\u04FB", "\u04FD", "\u04FF", "\u0501", "\u0503", "\u0505", "\u0507", "\u0509", "\u050B", "\u050D", "\u050F", "\u0511", "\u0513", "\u0515", "\u0517", "\u0519", "\u051B", "\u051D", "\u051F", "\u0521", "\u0523", "\u0525", "\u0527", "\u0529", "\u052B", "\u052D", "\u052F", ["\u0561", "\u0587"], ["\u13F8", "\u13FD"], ["\u1D00", "\u1D2B"], ["\u1D6B", "\u1D77"], ["\u1D79", "\u1D9A"], "\u1E01", "\u1E03", "\u1E05", "\u1E07", "\u1E09", "\u1E0B", "\u1E0D", "\u1E0F", "\u1E11", "\u1E13", "\u1E15", "\u1E17", "\u1E19", "\u1E1B", "\u1E1D", "\u1E1F", "\u1E21", "\u1E23", "\u1E25", "\u1E27", "\u1E29", "\u1E2B", "\u1E2D", "\u1E2F", "\u1E31", "\u1E33", "\u1E35", "\u1E37", "\u1E39", "\u1E3B", "\u1E3D", "\u1E3F", "\u1E41", "\u1E43", "\u1E45", "\u1E47", "\u1E49", "\u1E4B", "\u1E4D", "\u1E4F", "\u1E51", "\u1E53", "\u1E55", "\u1E57", "\u1E59", "\u1E5B", "\u1E5D", "\u1E5F", "\u1E61", "\u1E63", "\u1E65", "\u1E67", "\u1E69", "\u1E6B", "\u1E6D", "\u1E6F", "\u1E71", "\u1E73", "\u1E75", "\u1E77", "\u1E79", "\u1E7B", "\u1E7D", "\u1E7F", "\u1E81", "\u1E83", "\u1E85", "\u1E87", "\u1E89", "\u1E8B", "\u1E8D", "\u1E8F", "\u1E91", "\u1E93", ["\u1E95", "\u1E9D"], "\u1E9F", "\u1EA1", "\u1EA3", "\u1EA5", "\u1EA7", "\u1EA9", "\u1EAB", "\u1EAD", "\u1EAF", "\u1EB1", "\u1EB3", "\u1EB5", "\u1EB7", "\u1EB9", "\u1EBB", "\u1EBD", "\u1EBF", "\u1EC1", "\u1EC3", "\u1EC5", "\u1EC7", "\u1EC9", "\u1ECB", "\u1ECD", "\u1ECF", "\u1ED1", "\u1ED3", "\u1ED5", "\u1ED7", "\u1ED9", "\u1EDB", "\u1EDD", "\u1EDF", "\u1EE1", "\u1EE3", "\u1EE5", "\u1EE7", "\u1EE9", "\u1EEB", "\u1EED", "\u1EEF", "\u1EF1", "\u1EF3", "\u1EF5", "\u1EF7", "\u1EF9", "\u1EFB", "\u1EFD", ["\u1EFF", "\u1F07"], ["\u1F10", "\u1F15"], ["\u1F20", "\u1F27"], ["\u1F30", "\u1F37"], ["\u1F40", "\u1F45"], ["\u1F50", "\u1F57"], ["\u1F60", "\u1F67"], ["\u1F70", "\u1F7D"], ["\u1F80", "\u1F87"], ["\u1F90", "\u1F97"], ["\u1FA0", "\u1FA7"], ["\u1FB0", "\u1FB4"], ["\u1FB6", "\u1FB7"], "\u1FBE", ["\u1FC2", "\u1FC4"], ["\u1FC6", "\u1FC7"], ["\u1FD0", "\u1FD3"], ["\u1FD6", "\u1FD7"], ["\u1FE0", "\u1FE7"], ["\u1FF2", "\u1FF4"], ["\u1FF6", "\u1FF7"], "\u210A", ["\u210E", "\u210F"], "\u2113", "\u212F", "\u2134", "\u2139", ["\u213C", "\u213D"], ["\u2146", "\u2149"], "\u214E", "\u2184", ["\u2C30", "\u2C5E"], "\u2C61", ["\u2C65", "\u2C66"], "\u2C68", "\u2C6A", "\u2C6C", "\u2C71", ["\u2C73", "\u2C74"], ["\u2C76", "\u2C7B"], "\u2C81", "\u2C83", "\u2C85", "\u2C87", "\u2C89", "\u2C8B", "\u2C8D", "\u2C8F", "\u2C91", "\u2C93", "\u2C95", "\u2C97", "\u2C99", "\u2C9B", "\u2C9D", "\u2C9F", "\u2CA1", "\u2CA3", "\u2CA5", "\u2CA7", "\u2CA9", "\u2CAB", "\u2CAD", "\u2CAF", "\u2CB1", "\u2CB3", "\u2CB5", "\u2CB7", "\u2CB9", "\u2CBB", "\u2CBD", "\u2CBF", "\u2CC1", "\u2CC3", "\u2CC5", "\u2CC7", "\u2CC9", "\u2CCB", "\u2CCD", "\u2CCF", "\u2CD1", "\u2CD3", "\u2CD5", "\u2CD7", "\u2CD9", "\u2CDB", "\u2CDD", "\u2CDF", "\u2CE1", ["\u2CE3", "\u2CE4"], "\u2CEC", "\u2CEE", "\u2CF3", ["\u2D00", "\u2D25"], "\u2D27", "\u2D2D", "\uA641", "\uA643", "\uA645", "\uA647", "\uA649", "\uA64B", "\uA64D", "\uA64F", "\uA651", "\uA653", "\uA655", "\uA657", "\uA659", "\uA65B", "\uA65D", "\uA65F", "\uA661", "\uA663", "\uA665", "\uA667", "\uA669", "\uA66B", "\uA66D", "\uA681", "\uA683", "\uA685", "\uA687", "\uA689", "\uA68B", "\uA68D", "\uA68F", "\uA691", "\uA693", "\uA695", "\uA697", "\uA699", "\uA69B", "\uA723", "\uA725", "\uA727", "\uA729", "\uA72B", "\uA72D", ["\uA72F", "\uA731"], "\uA733", "\uA735", "\uA737", "\uA739", "\uA73B", "\uA73D", "\uA73F", "\uA741", "\uA743", "\uA745", "\uA747", "\uA749", "\uA74B", "\uA74D", "\uA74F", "\uA751", "\uA753", "\uA755", "\uA757", "\uA759", "\uA75B", "\uA75D", "\uA75F", "\uA761", "\uA763", "\uA765", "\uA767", "\uA769", "\uA76B", "\uA76D", "\uA76F", ["\uA771", "\uA778"], "\uA77A", "\uA77C", "\uA77F", "\uA781", "\uA783", "\uA785", "\uA787", "\uA78C", "\uA78E", "\uA791", ["\uA793", "\uA795"], "\uA797", "\uA799", "\uA79B", "\uA79D", "\uA79F", "\uA7A1", "\uA7A3", "\uA7A5", "\uA7A7", "\uA7A9", "\uA7B5", "\uA7B7", "\uA7FA", ["\uAB30", "\uAB5A"], ["\uAB60", "\uAB65"], ["\uAB70", "\uABBF"], ["\uFB00", "\uFB06"], ["\uFB13", "\uFB17"], ["\uFF41", "\uFF5A"]], false, false); + var peg$e69 = peg$classExpectation([["\u02B0", "\u02C1"], ["\u02C6", "\u02D1"], ["\u02E0", "\u02E4"], "\u02EC", "\u02EE", "\u0374", "\u037A", "\u0559", "\u0640", ["\u06E5", "\u06E6"], ["\u07F4", "\u07F5"], "\u07FA", "\u081A", "\u0824", "\u0828", "\u0971", "\u0E46", "\u0EC6", "\u10FC", "\u17D7", "\u1843", "\u1AA7", ["\u1C78", "\u1C7D"], ["\u1D2C", "\u1D6A"], "\u1D78", ["\u1D9B", "\u1DBF"], "\u2071", "\u207F", ["\u2090", "\u209C"], ["\u2C7C", "\u2C7D"], "\u2D6F", "\u2E2F", "\u3005", ["\u3031", "\u3035"], "\u303B", ["\u309D", "\u309E"], ["\u30FC", "\u30FE"], "\uA015", ["\uA4F8", "\uA4FD"], "\uA60C", "\uA67F", ["\uA69C", "\uA69D"], ["\uA717", "\uA71F"], "\uA770", "\uA788", ["\uA7F8", "\uA7F9"], "\uA9CF", "\uA9E6", "\uAA70", "\uAADD", ["\uAAF3", "\uAAF4"], ["\uAB5C", "\uAB5F"], "\uFF70", ["\uFF9E", "\uFF9F"]], false, false); + var peg$e70 = peg$classExpectation(["\xAA", "\xBA", "\u01BB", ["\u01C0", "\u01C3"], "\u0294", ["\u05D0", "\u05EA"], ["\u05F0", "\u05F2"], ["\u0620", "\u063F"], ["\u0641", "\u064A"], ["\u066E", "\u066F"], ["\u0671", "\u06D3"], "\u06D5", ["\u06EE", "\u06EF"], ["\u06FA", "\u06FC"], "\u06FF", "\u0710", ["\u0712", "\u072F"], ["\u074D", "\u07A5"], "\u07B1", ["\u07CA", "\u07EA"], ["\u0800", "\u0815"], ["\u0840", "\u0858"], ["\u08A0", "\u08B4"], ["\u0904", "\u0939"], "\u093D", "\u0950", ["\u0958", "\u0961"], ["\u0972", "\u0980"], ["\u0985", "\u098C"], ["\u098F", "\u0990"], ["\u0993", "\u09A8"], ["\u09AA", "\u09B0"], "\u09B2", ["\u09B6", "\u09B9"], "\u09BD", "\u09CE", ["\u09DC", "\u09DD"], ["\u09DF", "\u09E1"], ["\u09F0", "\u09F1"], ["\u0A05", "\u0A0A"], ["\u0A0F", "\u0A10"], ["\u0A13", "\u0A28"], ["\u0A2A", "\u0A30"], ["\u0A32", "\u0A33"], ["\u0A35", "\u0A36"], ["\u0A38", "\u0A39"], ["\u0A59", "\u0A5C"], "\u0A5E", ["\u0A72", "\u0A74"], ["\u0A85", "\u0A8D"], ["\u0A8F", "\u0A91"], ["\u0A93", "\u0AA8"], ["\u0AAA", "\u0AB0"], ["\u0AB2", "\u0AB3"], ["\u0AB5", "\u0AB9"], "\u0ABD", "\u0AD0", ["\u0AE0", "\u0AE1"], "\u0AF9", ["\u0B05", "\u0B0C"], ["\u0B0F", "\u0B10"], ["\u0B13", "\u0B28"], ["\u0B2A", "\u0B30"], ["\u0B32", "\u0B33"], ["\u0B35", "\u0B39"], "\u0B3D", ["\u0B5C", "\u0B5D"], ["\u0B5F", "\u0B61"], "\u0B71", "\u0B83", ["\u0B85", "\u0B8A"], ["\u0B8E", "\u0B90"], ["\u0B92", "\u0B95"], ["\u0B99", "\u0B9A"], "\u0B9C", ["\u0B9E", "\u0B9F"], ["\u0BA3", "\u0BA4"], ["\u0BA8", "\u0BAA"], ["\u0BAE", "\u0BB9"], "\u0BD0", ["\u0C05", "\u0C0C"], ["\u0C0E", "\u0C10"], ["\u0C12", "\u0C28"], ["\u0C2A", "\u0C39"], "\u0C3D", ["\u0C58", "\u0C5A"], ["\u0C60", "\u0C61"], ["\u0C85", "\u0C8C"], ["\u0C8E", "\u0C90"], ["\u0C92", "\u0CA8"], ["\u0CAA", "\u0CB3"], ["\u0CB5", "\u0CB9"], "\u0CBD", "\u0CDE", ["\u0CE0", "\u0CE1"], ["\u0CF1", "\u0CF2"], ["\u0D05", "\u0D0C"], ["\u0D0E", "\u0D10"], ["\u0D12", "\u0D3A"], "\u0D3D", "\u0D4E", ["\u0D5F", "\u0D61"], ["\u0D7A", "\u0D7F"], ["\u0D85", "\u0D96"], ["\u0D9A", "\u0DB1"], ["\u0DB3", "\u0DBB"], "\u0DBD", ["\u0DC0", "\u0DC6"], ["\u0E01", "\u0E30"], ["\u0E32", "\u0E33"], ["\u0E40", "\u0E45"], ["\u0E81", "\u0E82"], "\u0E84", ["\u0E87", "\u0E88"], "\u0E8A", "\u0E8D", ["\u0E94", "\u0E97"], ["\u0E99", "\u0E9F"], ["\u0EA1", "\u0EA3"], "\u0EA5", "\u0EA7", ["\u0EAA", "\u0EAB"], ["\u0EAD", "\u0EB0"], ["\u0EB2", "\u0EB3"], "\u0EBD", ["\u0EC0", "\u0EC4"], ["\u0EDC", "\u0EDF"], "\u0F00", ["\u0F40", "\u0F47"], ["\u0F49", "\u0F6C"], ["\u0F88", "\u0F8C"], ["\u1000", "\u102A"], "\u103F", ["\u1050", "\u1055"], ["\u105A", "\u105D"], "\u1061", ["\u1065", "\u1066"], ["\u106E", "\u1070"], ["\u1075", "\u1081"], "\u108E", ["\u10D0", "\u10FA"], ["\u10FD", "\u1248"], ["\u124A", "\u124D"], ["\u1250", "\u1256"], "\u1258", ["\u125A", "\u125D"], ["\u1260", "\u1288"], ["\u128A", "\u128D"], ["\u1290", "\u12B0"], ["\u12B2", "\u12B5"], ["\u12B8", "\u12BE"], "\u12C0", ["\u12C2", "\u12C5"], ["\u12C8", "\u12D6"], ["\u12D8", "\u1310"], ["\u1312", "\u1315"], ["\u1318", "\u135A"], ["\u1380", "\u138F"], ["\u1401", "\u166C"], ["\u166F", "\u167F"], ["\u1681", "\u169A"], ["\u16A0", "\u16EA"], ["\u16F1", "\u16F8"], ["\u1700", "\u170C"], ["\u170E", "\u1711"], ["\u1720", "\u1731"], ["\u1740", "\u1751"], ["\u1760", "\u176C"], ["\u176E", "\u1770"], ["\u1780", "\u17B3"], "\u17DC", ["\u1820", "\u1842"], ["\u1844", "\u1877"], ["\u1880", "\u18A8"], "\u18AA", ["\u18B0", "\u18F5"], ["\u1900", "\u191E"], ["\u1950", "\u196D"], ["\u1970", "\u1974"], ["\u1980", "\u19AB"], ["\u19B0", "\u19C9"], ["\u1A00", "\u1A16"], ["\u1A20", "\u1A54"], ["\u1B05", "\u1B33"], ["\u1B45", "\u1B4B"], ["\u1B83", "\u1BA0"], ["\u1BAE", "\u1BAF"], ["\u1BBA", "\u1BE5"], ["\u1C00", "\u1C23"], ["\u1C4D", "\u1C4F"], ["\u1C5A", "\u1C77"], ["\u1CE9", "\u1CEC"], ["\u1CEE", "\u1CF1"], ["\u1CF5", "\u1CF6"], ["\u2135", "\u2138"], ["\u2D30", "\u2D67"], ["\u2D80", "\u2D96"], ["\u2DA0", "\u2DA6"], ["\u2DA8", "\u2DAE"], ["\u2DB0", "\u2DB6"], ["\u2DB8", "\u2DBE"], ["\u2DC0", "\u2DC6"], ["\u2DC8", "\u2DCE"], ["\u2DD0", "\u2DD6"], ["\u2DD8", "\u2DDE"], "\u3006", "\u303C", ["\u3041", "\u3096"], "\u309F", ["\u30A1", "\u30FA"], "\u30FF", ["\u3105", "\u312D"], ["\u3131", "\u318E"], ["\u31A0", "\u31BA"], ["\u31F0", "\u31FF"], ["\u3400", "\u4DB5"], ["\u4E00", "\u9FD5"], ["\uA000", "\uA014"], ["\uA016", "\uA48C"], ["\uA4D0", "\uA4F7"], ["\uA500", "\uA60B"], ["\uA610", "\uA61F"], ["\uA62A", "\uA62B"], "\uA66E", ["\uA6A0", "\uA6E5"], "\uA78F", "\uA7F7", ["\uA7FB", "\uA801"], ["\uA803", "\uA805"], ["\uA807", "\uA80A"], ["\uA80C", "\uA822"], ["\uA840", "\uA873"], ["\uA882", "\uA8B3"], ["\uA8F2", "\uA8F7"], "\uA8FB", "\uA8FD", ["\uA90A", "\uA925"], ["\uA930", "\uA946"], ["\uA960", "\uA97C"], ["\uA984", "\uA9B2"], ["\uA9E0", "\uA9E4"], ["\uA9E7", "\uA9EF"], ["\uA9FA", "\uA9FE"], ["\uAA00", "\uAA28"], ["\uAA40", "\uAA42"], ["\uAA44", "\uAA4B"], ["\uAA60", "\uAA6F"], ["\uAA71", "\uAA76"], "\uAA7A", ["\uAA7E", "\uAAAF"], "\uAAB1", ["\uAAB5", "\uAAB6"], ["\uAAB9", "\uAABD"], "\uAAC0", "\uAAC2", ["\uAADB", "\uAADC"], ["\uAAE0", "\uAAEA"], "\uAAF2", ["\uAB01", "\uAB06"], ["\uAB09", "\uAB0E"], ["\uAB11", "\uAB16"], ["\uAB20", "\uAB26"], ["\uAB28", "\uAB2E"], ["\uABC0", "\uABE2"], ["\uAC00", "\uD7A3"], ["\uD7B0", "\uD7C6"], ["\uD7CB", "\uD7FB"], ["\uF900", "\uFA6D"], ["\uFA70", "\uFAD9"], "\uFB1D", ["\uFB1F", "\uFB28"], ["\uFB2A", "\uFB36"], ["\uFB38", "\uFB3C"], "\uFB3E", ["\uFB40", "\uFB41"], ["\uFB43", "\uFB44"], ["\uFB46", "\uFBB1"], ["\uFBD3", "\uFD3D"], ["\uFD50", "\uFD8F"], ["\uFD92", "\uFDC7"], ["\uFDF0", "\uFDFB"], ["\uFE70", "\uFE74"], ["\uFE76", "\uFEFC"], ["\uFF66", "\uFF6F"], ["\uFF71", "\uFF9D"], ["\uFFA0", "\uFFBE"], ["\uFFC2", "\uFFC7"], ["\uFFCA", "\uFFCF"], ["\uFFD2", "\uFFD7"], ["\uFFDA", "\uFFDC"]], false, false); + var peg$e71 = peg$classExpectation(["\u01C5", "\u01C8", "\u01CB", "\u01F2", ["\u1F88", "\u1F8F"], ["\u1F98", "\u1F9F"], ["\u1FA8", "\u1FAF"], "\u1FBC", "\u1FCC", "\u1FFC"], false, false); + var peg$e72 = peg$classExpectation([["A", "Z"], ["\xC0", "\xD6"], ["\xD8", "\xDE"], "\u0100", "\u0102", "\u0104", "\u0106", "\u0108", "\u010A", "\u010C", "\u010E", "\u0110", "\u0112", "\u0114", "\u0116", "\u0118", "\u011A", "\u011C", "\u011E", "\u0120", "\u0122", "\u0124", "\u0126", "\u0128", "\u012A", "\u012C", "\u012E", "\u0130", "\u0132", "\u0134", "\u0136", "\u0139", "\u013B", "\u013D", "\u013F", "\u0141", "\u0143", "\u0145", "\u0147", "\u014A", "\u014C", "\u014E", "\u0150", "\u0152", "\u0154", "\u0156", "\u0158", "\u015A", "\u015C", "\u015E", "\u0160", "\u0162", "\u0164", "\u0166", "\u0168", "\u016A", "\u016C", "\u016E", "\u0170", "\u0172", "\u0174", "\u0176", ["\u0178", "\u0179"], "\u017B", "\u017D", ["\u0181", "\u0182"], "\u0184", ["\u0186", "\u0187"], ["\u0189", "\u018B"], ["\u018E", "\u0191"], ["\u0193", "\u0194"], ["\u0196", "\u0198"], ["\u019C", "\u019D"], ["\u019F", "\u01A0"], "\u01A2", "\u01A4", ["\u01A6", "\u01A7"], "\u01A9", "\u01AC", ["\u01AE", "\u01AF"], ["\u01B1", "\u01B3"], "\u01B5", ["\u01B7", "\u01B8"], "\u01BC", "\u01C4", "\u01C7", "\u01CA", "\u01CD", "\u01CF", "\u01D1", "\u01D3", "\u01D5", "\u01D7", "\u01D9", "\u01DB", "\u01DE", "\u01E0", "\u01E2", "\u01E4", "\u01E6", "\u01E8", "\u01EA", "\u01EC", "\u01EE", "\u01F1", "\u01F4", ["\u01F6", "\u01F8"], "\u01FA", "\u01FC", "\u01FE", "\u0200", "\u0202", "\u0204", "\u0206", "\u0208", "\u020A", "\u020C", "\u020E", "\u0210", "\u0212", "\u0214", "\u0216", "\u0218", "\u021A", "\u021C", "\u021E", "\u0220", "\u0222", "\u0224", "\u0226", "\u0228", "\u022A", "\u022C", "\u022E", "\u0230", "\u0232", ["\u023A", "\u023B"], ["\u023D", "\u023E"], "\u0241", ["\u0243", "\u0246"], "\u0248", "\u024A", "\u024C", "\u024E", "\u0370", "\u0372", "\u0376", "\u037F", "\u0386", ["\u0388", "\u038A"], "\u038C", ["\u038E", "\u038F"], ["\u0391", "\u03A1"], ["\u03A3", "\u03AB"], "\u03CF", ["\u03D2", "\u03D4"], "\u03D8", "\u03DA", "\u03DC", "\u03DE", "\u03E0", "\u03E2", "\u03E4", "\u03E6", "\u03E8", "\u03EA", "\u03EC", "\u03EE", "\u03F4", "\u03F7", ["\u03F9", "\u03FA"], ["\u03FD", "\u042F"], "\u0460", "\u0462", "\u0464", "\u0466", "\u0468", "\u046A", "\u046C", "\u046E", "\u0470", "\u0472", "\u0474", "\u0476", "\u0478", "\u047A", "\u047C", "\u047E", "\u0480", "\u048A", "\u048C", "\u048E", "\u0490", "\u0492", "\u0494", "\u0496", "\u0498", "\u049A", "\u049C", "\u049E", "\u04A0", "\u04A2", "\u04A4", "\u04A6", "\u04A8", "\u04AA", "\u04AC", "\u04AE", "\u04B0", "\u04B2", "\u04B4", "\u04B6", "\u04B8", "\u04BA", "\u04BC", "\u04BE", ["\u04C0", "\u04C1"], "\u04C3", "\u04C5", "\u04C7", "\u04C9", "\u04CB", "\u04CD", "\u04D0", "\u04D2", "\u04D4", "\u04D6", "\u04D8", "\u04DA", "\u04DC", "\u04DE", "\u04E0", "\u04E2", "\u04E4", "\u04E6", "\u04E8", "\u04EA", "\u04EC", "\u04EE", "\u04F0", "\u04F2", "\u04F4", "\u04F6", "\u04F8", "\u04FA", "\u04FC", "\u04FE", "\u0500", "\u0502", "\u0504", "\u0506", "\u0508", "\u050A", "\u050C", "\u050E", "\u0510", "\u0512", "\u0514", "\u0516", "\u0518", "\u051A", "\u051C", "\u051E", "\u0520", "\u0522", "\u0524", "\u0526", "\u0528", "\u052A", "\u052C", "\u052E", ["\u0531", "\u0556"], ["\u10A0", "\u10C5"], "\u10C7", "\u10CD", ["\u13A0", "\u13F5"], "\u1E00", "\u1E02", "\u1E04", "\u1E06", "\u1E08", "\u1E0A", "\u1E0C", "\u1E0E", "\u1E10", "\u1E12", "\u1E14", "\u1E16", "\u1E18", "\u1E1A", "\u1E1C", "\u1E1E", "\u1E20", "\u1E22", "\u1E24", "\u1E26", "\u1E28", "\u1E2A", "\u1E2C", "\u1E2E", "\u1E30", "\u1E32", "\u1E34", "\u1E36", "\u1E38", "\u1E3A", "\u1E3C", "\u1E3E", "\u1E40", "\u1E42", "\u1E44", "\u1E46", "\u1E48", "\u1E4A", "\u1E4C", "\u1E4E", "\u1E50", "\u1E52", "\u1E54", "\u1E56", "\u1E58", "\u1E5A", "\u1E5C", "\u1E5E", "\u1E60", "\u1E62", "\u1E64", "\u1E66", "\u1E68", "\u1E6A", "\u1E6C", "\u1E6E", "\u1E70", "\u1E72", "\u1E74", "\u1E76", "\u1E78", "\u1E7A", "\u1E7C", "\u1E7E", "\u1E80", "\u1E82", "\u1E84", "\u1E86", "\u1E88", "\u1E8A", "\u1E8C", "\u1E8E", "\u1E90", "\u1E92", "\u1E94", "\u1E9E", "\u1EA0", "\u1EA2", "\u1EA4", "\u1EA6", "\u1EA8", "\u1EAA", "\u1EAC", "\u1EAE", "\u1EB0", "\u1EB2", "\u1EB4", "\u1EB6", "\u1EB8", "\u1EBA", "\u1EBC", "\u1EBE", "\u1EC0", "\u1EC2", "\u1EC4", "\u1EC6", "\u1EC8", "\u1ECA", "\u1ECC", "\u1ECE", "\u1ED0", "\u1ED2", "\u1ED4", "\u1ED6", "\u1ED8", "\u1EDA", "\u1EDC", "\u1EDE", "\u1EE0", "\u1EE2", "\u1EE4", "\u1EE6", "\u1EE8", "\u1EEA", "\u1EEC", "\u1EEE", "\u1EF0", "\u1EF2", "\u1EF4", "\u1EF6", "\u1EF8", "\u1EFA", "\u1EFC", "\u1EFE", ["\u1F08", "\u1F0F"], ["\u1F18", "\u1F1D"], ["\u1F28", "\u1F2F"], ["\u1F38", "\u1F3F"], ["\u1F48", "\u1F4D"], "\u1F59", "\u1F5B", "\u1F5D", "\u1F5F", ["\u1F68", "\u1F6F"], ["\u1FB8", "\u1FBB"], ["\u1FC8", "\u1FCB"], ["\u1FD8", "\u1FDB"], ["\u1FE8", "\u1FEC"], ["\u1FF8", "\u1FFB"], "\u2102", "\u2107", ["\u210B", "\u210D"], ["\u2110", "\u2112"], "\u2115", ["\u2119", "\u211D"], "\u2124", "\u2126", "\u2128", ["\u212A", "\u212D"], ["\u2130", "\u2133"], ["\u213E", "\u213F"], "\u2145", "\u2183", ["\u2C00", "\u2C2E"], "\u2C60", ["\u2C62", "\u2C64"], "\u2C67", "\u2C69", "\u2C6B", ["\u2C6D", "\u2C70"], "\u2C72", "\u2C75", ["\u2C7E", "\u2C80"], "\u2C82", "\u2C84", "\u2C86", "\u2C88", "\u2C8A", "\u2C8C", "\u2C8E", "\u2C90", "\u2C92", "\u2C94", "\u2C96", "\u2C98", "\u2C9A", "\u2C9C", "\u2C9E", "\u2CA0", "\u2CA2", "\u2CA4", "\u2CA6", "\u2CA8", "\u2CAA", "\u2CAC", "\u2CAE", "\u2CB0", "\u2CB2", "\u2CB4", "\u2CB6", "\u2CB8", "\u2CBA", "\u2CBC", "\u2CBE", "\u2CC0", "\u2CC2", "\u2CC4", "\u2CC6", "\u2CC8", "\u2CCA", "\u2CCC", "\u2CCE", "\u2CD0", "\u2CD2", "\u2CD4", "\u2CD6", "\u2CD8", "\u2CDA", "\u2CDC", "\u2CDE", "\u2CE0", "\u2CE2", "\u2CEB", "\u2CED", "\u2CF2", "\uA640", "\uA642", "\uA644", "\uA646", "\uA648", "\uA64A", "\uA64C", "\uA64E", "\uA650", "\uA652", "\uA654", "\uA656", "\uA658", "\uA65A", "\uA65C", "\uA65E", "\uA660", "\uA662", "\uA664", "\uA666", "\uA668", "\uA66A", "\uA66C", "\uA680", "\uA682", "\uA684", "\uA686", "\uA688", "\uA68A", "\uA68C", "\uA68E", "\uA690", "\uA692", "\uA694", "\uA696", "\uA698", "\uA69A", "\uA722", "\uA724", "\uA726", "\uA728", "\uA72A", "\uA72C", "\uA72E", "\uA732", "\uA734", "\uA736", "\uA738", "\uA73A", "\uA73C", "\uA73E", "\uA740", "\uA742", "\uA744", "\uA746", "\uA748", "\uA74A", "\uA74C", "\uA74E", "\uA750", "\uA752", "\uA754", "\uA756", "\uA758", "\uA75A", "\uA75C", "\uA75E", "\uA760", "\uA762", "\uA764", "\uA766", "\uA768", "\uA76A", "\uA76C", "\uA76E", "\uA779", "\uA77B", ["\uA77D", "\uA77E"], "\uA780", "\uA782", "\uA784", "\uA786", "\uA78B", "\uA78D", "\uA790", "\uA792", "\uA796", "\uA798", "\uA79A", "\uA79C", "\uA79E", "\uA7A0", "\uA7A2", "\uA7A4", "\uA7A6", "\uA7A8", ["\uA7AA", "\uA7AD"], ["\uA7B0", "\uA7B4"], "\uA7B6", ["\uFF21", "\uFF3A"]], false, false); + var peg$e73 = peg$classExpectation(["\u0903", "\u093B", ["\u093E", "\u0940"], ["\u0949", "\u094C"], ["\u094E", "\u094F"], ["\u0982", "\u0983"], ["\u09BE", "\u09C0"], ["\u09C7", "\u09C8"], ["\u09CB", "\u09CC"], "\u09D7", "\u0A03", ["\u0A3E", "\u0A40"], "\u0A83", ["\u0ABE", "\u0AC0"], "\u0AC9", ["\u0ACB", "\u0ACC"], ["\u0B02", "\u0B03"], "\u0B3E", "\u0B40", ["\u0B47", "\u0B48"], ["\u0B4B", "\u0B4C"], "\u0B57", ["\u0BBE", "\u0BBF"], ["\u0BC1", "\u0BC2"], ["\u0BC6", "\u0BC8"], ["\u0BCA", "\u0BCC"], "\u0BD7", ["\u0C01", "\u0C03"], ["\u0C41", "\u0C44"], ["\u0C82", "\u0C83"], "\u0CBE", ["\u0CC0", "\u0CC4"], ["\u0CC7", "\u0CC8"], ["\u0CCA", "\u0CCB"], ["\u0CD5", "\u0CD6"], ["\u0D02", "\u0D03"], ["\u0D3E", "\u0D40"], ["\u0D46", "\u0D48"], ["\u0D4A", "\u0D4C"], "\u0D57", ["\u0D82", "\u0D83"], ["\u0DCF", "\u0DD1"], ["\u0DD8", "\u0DDF"], ["\u0DF2", "\u0DF3"], ["\u0F3E", "\u0F3F"], "\u0F7F", ["\u102B", "\u102C"], "\u1031", "\u1038", ["\u103B", "\u103C"], ["\u1056", "\u1057"], ["\u1062", "\u1064"], ["\u1067", "\u106D"], ["\u1083", "\u1084"], ["\u1087", "\u108C"], "\u108F", ["\u109A", "\u109C"], "\u17B6", ["\u17BE", "\u17C5"], ["\u17C7", "\u17C8"], ["\u1923", "\u1926"], ["\u1929", "\u192B"], ["\u1930", "\u1931"], ["\u1933", "\u1938"], ["\u1A19", "\u1A1A"], "\u1A55", "\u1A57", "\u1A61", ["\u1A63", "\u1A64"], ["\u1A6D", "\u1A72"], "\u1B04", "\u1B35", "\u1B3B", ["\u1B3D", "\u1B41"], ["\u1B43", "\u1B44"], "\u1B82", "\u1BA1", ["\u1BA6", "\u1BA7"], "\u1BAA", "\u1BE7", ["\u1BEA", "\u1BEC"], "\u1BEE", ["\u1BF2", "\u1BF3"], ["\u1C24", "\u1C2B"], ["\u1C34", "\u1C35"], "\u1CE1", ["\u1CF2", "\u1CF3"], ["\u302E", "\u302F"], ["\uA823", "\uA824"], "\uA827", ["\uA880", "\uA881"], ["\uA8B4", "\uA8C3"], ["\uA952", "\uA953"], "\uA983", ["\uA9B4", "\uA9B5"], ["\uA9BA", "\uA9BB"], ["\uA9BD", "\uA9C0"], ["\uAA2F", "\uAA30"], ["\uAA33", "\uAA34"], "\uAA4D", "\uAA7B", "\uAA7D", "\uAAEB", ["\uAAEE", "\uAAEF"], "\uAAF5", ["\uABE3", "\uABE4"], ["\uABE6", "\uABE7"], ["\uABE9", "\uABEA"], "\uABEC"], false, false); + var peg$e74 = peg$classExpectation([["\u0300", "\u036F"], ["\u0483", "\u0487"], ["\u0591", "\u05BD"], "\u05BF", ["\u05C1", "\u05C2"], ["\u05C4", "\u05C5"], "\u05C7", ["\u0610", "\u061A"], ["\u064B", "\u065F"], "\u0670", ["\u06D6", "\u06DC"], ["\u06DF", "\u06E4"], ["\u06E7", "\u06E8"], ["\u06EA", "\u06ED"], "\u0711", ["\u0730", "\u074A"], ["\u07A6", "\u07B0"], ["\u07EB", "\u07F3"], ["\u0816", "\u0819"], ["\u081B", "\u0823"], ["\u0825", "\u0827"], ["\u0829", "\u082D"], ["\u0859", "\u085B"], ["\u08E3", "\u0902"], "\u093A", "\u093C", ["\u0941", "\u0948"], "\u094D", ["\u0951", "\u0957"], ["\u0962", "\u0963"], "\u0981", "\u09BC", ["\u09C1", "\u09C4"], "\u09CD", ["\u09E2", "\u09E3"], ["\u0A01", "\u0A02"], "\u0A3C", ["\u0A41", "\u0A42"], ["\u0A47", "\u0A48"], ["\u0A4B", "\u0A4D"], "\u0A51", ["\u0A70", "\u0A71"], "\u0A75", ["\u0A81", "\u0A82"], "\u0ABC", ["\u0AC1", "\u0AC5"], ["\u0AC7", "\u0AC8"], "\u0ACD", ["\u0AE2", "\u0AE3"], "\u0B01", "\u0B3C", "\u0B3F", ["\u0B41", "\u0B44"], "\u0B4D", "\u0B56", ["\u0B62", "\u0B63"], "\u0B82", "\u0BC0", "\u0BCD", "\u0C00", ["\u0C3E", "\u0C40"], ["\u0C46", "\u0C48"], ["\u0C4A", "\u0C4D"], ["\u0C55", "\u0C56"], ["\u0C62", "\u0C63"], "\u0C81", "\u0CBC", "\u0CBF", "\u0CC6", ["\u0CCC", "\u0CCD"], ["\u0CE2", "\u0CE3"], "\u0D01", ["\u0D41", "\u0D44"], "\u0D4D", ["\u0D62", "\u0D63"], "\u0DCA", ["\u0DD2", "\u0DD4"], "\u0DD6", "\u0E31", ["\u0E34", "\u0E3A"], ["\u0E47", "\u0E4E"], "\u0EB1", ["\u0EB4", "\u0EB9"], ["\u0EBB", "\u0EBC"], ["\u0EC8", "\u0ECD"], ["\u0F18", "\u0F19"], "\u0F35", "\u0F37", "\u0F39", ["\u0F71", "\u0F7E"], ["\u0F80", "\u0F84"], ["\u0F86", "\u0F87"], ["\u0F8D", "\u0F97"], ["\u0F99", "\u0FBC"], "\u0FC6", ["\u102D", "\u1030"], ["\u1032", "\u1037"], ["\u1039", "\u103A"], ["\u103D", "\u103E"], ["\u1058", "\u1059"], ["\u105E", "\u1060"], ["\u1071", "\u1074"], "\u1082", ["\u1085", "\u1086"], "\u108D", "\u109D", ["\u135D", "\u135F"], ["\u1712", "\u1714"], ["\u1732", "\u1734"], ["\u1752", "\u1753"], ["\u1772", "\u1773"], ["\u17B4", "\u17B5"], ["\u17B7", "\u17BD"], "\u17C6", ["\u17C9", "\u17D3"], "\u17DD", ["\u180B", "\u180D"], "\u18A9", ["\u1920", "\u1922"], ["\u1927", "\u1928"], "\u1932", ["\u1939", "\u193B"], ["\u1A17", "\u1A18"], "\u1A1B", "\u1A56", ["\u1A58", "\u1A5E"], "\u1A60", "\u1A62", ["\u1A65", "\u1A6C"], ["\u1A73", "\u1A7C"], "\u1A7F", ["\u1AB0", "\u1ABD"], ["\u1B00", "\u1B03"], "\u1B34", ["\u1B36", "\u1B3A"], "\u1B3C", "\u1B42", ["\u1B6B", "\u1B73"], ["\u1B80", "\u1B81"], ["\u1BA2", "\u1BA5"], ["\u1BA8", "\u1BA9"], ["\u1BAB", "\u1BAD"], "\u1BE6", ["\u1BE8", "\u1BE9"], "\u1BED", ["\u1BEF", "\u1BF1"], ["\u1C2C", "\u1C33"], ["\u1C36", "\u1C37"], ["\u1CD0", "\u1CD2"], ["\u1CD4", "\u1CE0"], ["\u1CE2", "\u1CE8"], "\u1CED", "\u1CF4", ["\u1CF8", "\u1CF9"], ["\u1DC0", "\u1DF5"], ["\u1DFC", "\u1DFF"], ["\u20D0", "\u20DC"], "\u20E1", ["\u20E5", "\u20F0"], ["\u2CEF", "\u2CF1"], "\u2D7F", ["\u2DE0", "\u2DFF"], ["\u302A", "\u302D"], ["\u3099", "\u309A"], "\uA66F", ["\uA674", "\uA67D"], ["\uA69E", "\uA69F"], ["\uA6F0", "\uA6F1"], "\uA802", "\uA806", "\uA80B", ["\uA825", "\uA826"], "\uA8C4", ["\uA8E0", "\uA8F1"], ["\uA926", "\uA92D"], ["\uA947", "\uA951"], ["\uA980", "\uA982"], "\uA9B3", ["\uA9B6", "\uA9B9"], "\uA9BC", "\uA9E5", ["\uAA29", "\uAA2E"], ["\uAA31", "\uAA32"], ["\uAA35", "\uAA36"], "\uAA43", "\uAA4C", "\uAA7C", "\uAAB0", ["\uAAB2", "\uAAB4"], ["\uAAB7", "\uAAB8"], ["\uAABE", "\uAABF"], "\uAAC1", ["\uAAEC", "\uAAED"], "\uAAF6", "\uABE5", "\uABE8", "\uABED", "\uFB1E", ["\uFE00", "\uFE0F"], ["\uFE20", "\uFE2F"]], false, false); + var peg$e75 = peg$classExpectation([["0", "9"], ["\u0660", "\u0669"], ["\u06F0", "\u06F9"], ["\u07C0", "\u07C9"], ["\u0966", "\u096F"], ["\u09E6", "\u09EF"], ["\u0A66", "\u0A6F"], ["\u0AE6", "\u0AEF"], ["\u0B66", "\u0B6F"], ["\u0BE6", "\u0BEF"], ["\u0C66", "\u0C6F"], ["\u0CE6", "\u0CEF"], ["\u0D66", "\u0D6F"], ["\u0DE6", "\u0DEF"], ["\u0E50", "\u0E59"], ["\u0ED0", "\u0ED9"], ["\u0F20", "\u0F29"], ["\u1040", "\u1049"], ["\u1090", "\u1099"], ["\u17E0", "\u17E9"], ["\u1810", "\u1819"], ["\u1946", "\u194F"], ["\u19D0", "\u19D9"], ["\u1A80", "\u1A89"], ["\u1A90", "\u1A99"], ["\u1B50", "\u1B59"], ["\u1BB0", "\u1BB9"], ["\u1C40", "\u1C49"], ["\u1C50", "\u1C59"], ["\uA620", "\uA629"], ["\uA8D0", "\uA8D9"], ["\uA900", "\uA909"], ["\uA9D0", "\uA9D9"], ["\uA9F0", "\uA9F9"], ["\uAA50", "\uAA59"], ["\uABF0", "\uABF9"], ["\uFF10", "\uFF19"]], false, false); + var peg$e76 = peg$classExpectation([["\u16EE", "\u16F0"], ["\u2160", "\u2182"], ["\u2185", "\u2188"], "\u3007", ["\u3021", "\u3029"], ["\u3038", "\u303A"], ["\uA6E6", "\uA6EF"]], false, false); + var peg$e77 = peg$classExpectation(["_", ["\u203F", "\u2040"], "\u2054", ["\uFE33", "\uFE34"], ["\uFE4D", "\uFE4F"], "\uFF3F"], false, false); + var peg$e78 = peg$classExpectation([" ", "\xA0", "\u1680", ["\u2000", "\u200A"], "\u202F", "\u205F", "\u3000"], false, false); + var peg$e79 = peg$literalExpectation(";", false); + + var peg$f0 = function(imports, topLevelInitializer, initializer, rules) { return { type: "grammar", + imports, topLevelInitializer, initializer, rules, location: location() }; }; - var peg$f1 = function(code) { + var peg$f1 = function(rules, path) { + return { + type: "import", + path, + rules, + location: location(), + }; + }; + var peg$f2 = function(name, alias) { + return { + type: "imported_rule", + name: name[0], + alias: alias !== null ? alias[0] : name[0], + nameLocation: name[1], + aliasLocation: alias !== null ? alias[1] : null, + location: location(), + }; + }; + var peg$f3 = function(code) { return { type: "top_level_initializer", code: code[0], @@ -359,7 +384,7 @@ function peg$parse(input, options) { location: location() }; }; - var peg$f2 = function(code) { + var peg$f4 = function(code) { return { type: "initializer", code: code[0], @@ -367,7 +392,7 @@ function peg$parse(input, options) { location: location() }; }; - var peg$f3 = function(name, displayName, expression) { + var peg$f5 = function(name, displayName, expression) { return { type: "rule", name: name[0], @@ -383,7 +408,7 @@ function peg$parse(input, options) { location: location() }; }; - var peg$f4 = function(head, tail) { + var peg$f6 = function(head, tail) { return tail.length > 0 ? { type: "choice", @@ -392,7 +417,7 @@ function peg$parse(input, options) { } : head; }; - var peg$f5 = function(expression, code) { + var peg$f7 = function(expression, code) { return code !== null ? { type: "action", @@ -403,7 +428,7 @@ function peg$parse(input, options) { } : expression; }; - var peg$f6 = function(head, tail) { + var peg$f8 = function(head, tail) { return ((tail.length > 0) || (head.type === "labeled" && head.pick)) ? { type: "sequence", @@ -412,7 +437,7 @@ function peg$parse(input, options) { } : head; }; - var peg$f7 = function(pluck, label, expression) { + var peg$f9 = function(pluck, label, expression) { if (expression.type.startsWith("semantic_")) { error("\"@\" cannot be used on a semantic predicate", pluck); } @@ -426,7 +451,7 @@ function peg$parse(input, options) { location: location() }; }; - var peg$f8 = function(label, expression) { + var peg$f10 = function(label, expression) { return { type: "labeled", label: label[0], @@ -435,29 +460,29 @@ function peg$parse(input, options) { location: location() }; }; - var peg$f9 = function() { return location(); }; - var peg$f10 = function(label) { + var peg$f11 = function() { return location(); }; + var peg$f12 = function(label) { if (reservedWords.indexOf(label[0]) >= 0) { error(`Label can't be a reserved word "${label[0]}"`, label[1]); } return label; }; - var peg$f11 = function(operator, expression) { + var peg$f13 = function(operator, expression) { return { type: OPS_TO_PREFIXED_TYPES[operator], expression, location: location() }; }; - var peg$f12 = function(expression, operator) { + var peg$f14 = function(expression, operator) { return { type: OPS_TO_SUFFIXED_TYPES[operator], expression, location: location() }; }; - var peg$f13 = function(expression, boundaries, delimiter) { + var peg$f15 = function(expression, boundaries, delimiter) { let min = boundaries[0]; let max = boundaries[1]; if (max.type === "constant" && max.value === 0) { @@ -473,16 +498,16 @@ function peg$parse(input, options) { location: location(), }; }; - var peg$f14 = function(min, max) { + var peg$f16 = function(min, max) { return [ min !== null ? min : { type: "constant", value: 0 }, max !== null ? max : { type: "constant", value: null }, ]; }; - var peg$f15 = function(exact) { return [null, exact]; }; - var peg$f16 = function(value) { return { type: "constant", value, location: location() }; }; - var peg$f17 = function(value) { return { type: "variable", value: value[0], location: location() }; }; - var peg$f18 = function(value) { + var peg$f17 = function(exact) { return [null, exact]; }; + var peg$f18 = function(value) { return { type: "constant", value, location: location() }; }; + var peg$f19 = function(value) { return { type: "variable", value: value[0], location: location() }; }; + var peg$f20 = function(value) { return { type: "function", value: value[0], @@ -490,7 +515,7 @@ function peg$parse(input, options) { location: location(), }; }; - var peg$f19 = function(expression) { + var peg$f21 = function(expression) { // The purpose of the "group" AST node is just to isolate label scope. We // don't need to put it around nodes that can't contain any labels or // nodes that already isolate label scope themselves. This leaves us with @@ -499,10 +524,10 @@ function peg$parse(input, options) { ? { type: "group", expression, location: location() } : expression; }; - var peg$f20 = function(name) { + var peg$f22 = function(name) { return { type: "rule_ref", name: name[0], location: location() }; }; - var peg$f21 = function(operator, code) { + var peg$f23 = function(operator, code) { return { type: OPS_TO_SEMANTIC_PREDICATE_TYPES[operator], code: code[0], @@ -510,10 +535,10 @@ function peg$parse(input, options) { location: location() }; }; - var peg$f22 = function(head, tail) { + var peg$f24 = function(head, tail) { return [head + tail.join(""), location()]; }; - var peg$f23 = function(value, ignoreCase) { + var peg$f25 = function(value, ignoreCase) { return { type: "literal", value, @@ -521,9 +546,9 @@ function peg$parse(input, options) { location: location() }; }; - var peg$f24 = function(chars) { return chars.join(""); }; - var peg$f25 = function(chars) { return chars.join(""); }; - var peg$f26 = function(inverted, parts, ignoreCase) { + var peg$f26 = function(chars) { return chars.join(""); }; + var peg$f27 = function(chars) { return chars.join(""); }; + var peg$f28 = function(inverted, parts, ignoreCase) { return { type: "class", parts: parts.filter(part => part !== ""), @@ -532,7 +557,7 @@ function peg$parse(input, options) { location: location() }; }; - var peg$f27 = function(begin, end) { + var peg$f29 = function(begin, end) { if (begin.charCodeAt(0) > end.charCodeAt(0)) { error( "Invalid character range: " + text() + "." @@ -541,23 +566,23 @@ function peg$parse(input, options) { return [begin, end]; }; - var peg$f28 = function() { return ""; }; - var peg$f29 = function() { return "\0"; }; - var peg$f30 = function() { return "\b"; }; - var peg$f31 = function() { return "\f"; }; - var peg$f32 = function() { return "\n"; }; - var peg$f33 = function() { return "\r"; }; - var peg$f34 = function() { return "\t"; }; - var peg$f35 = function() { return "\v"; }; - var peg$f36 = function(digits) { + var peg$f30 = function() { return ""; }; + var peg$f31 = function() { return "\0"; }; + var peg$f32 = function() { return "\b"; }; + var peg$f33 = function() { return "\f"; }; + var peg$f34 = function() { return "\n"; }; + var peg$f35 = function() { return "\r"; }; + var peg$f36 = function() { return "\t"; }; + var peg$f37 = function() { return "\v"; }; + var peg$f38 = function(digits) { return String.fromCharCode(parseInt(digits, 16)); }; - var peg$f37 = function(digits) { + var peg$f39 = function(digits) { return String.fromCharCode(parseInt(digits, 16)); }; - var peg$f38 = function() { return { type: "any", location: location() }; }; - var peg$f39 = function(code) { return [code, location()]; }; - var peg$f40 = function(digits) { return parseInt(digits, 10); }; + var peg$f40 = function() { return { type: "any", location: location() }; }; + var peg$f41 = function(code) { return [code, location()]; }; + var peg$f42 = function(digits) { return parseInt(digits, 10); }; var peg$currPos = 0; var peg$savedPos = 0; var peg$posDetailsCache = [{ line: 1, column: 1 }]; @@ -719,24 +744,34 @@ function peg$parse(input, options) { } function peg$parseGrammar() { - var s0, s1, s2, s3, s4, s5, s6, s7; + var s0, s1, s2, s3, s4, s5, s6, s7, s8; s0 = peg$currPos; s1 = peg$parse__(); - s2 = peg$currPos; - s3 = peg$parseTopLevelInitializer(); - if (s3 !== peg$FAILED) { - s4 = peg$parse__(); - s2 = s3; + s2 = []; + s3 = peg$currPos; + s4 = peg$parseImport(); + if (s4 !== peg$FAILED) { + s5 = peg$parse__(); + s3 = s4; } else { - peg$currPos = s2; - s2 = peg$FAILED; + peg$currPos = s3; + s3 = peg$FAILED; } - if (s2 === peg$FAILED) { - s2 = null; + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$parseImport(); + if (s4 !== peg$FAILED) { + s5 = peg$parse__(); + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } } s3 = peg$currPos; - s4 = peg$parseInitializer(); + s4 = peg$parseTopLevelInitializer(); if (s4 !== peg$FAILED) { s5 = peg$parse__(); s3 = s4; @@ -747,35 +782,216 @@ function peg$parse(input, options) { if (s3 === peg$FAILED) { s3 = null; } - s4 = []; - s5 = peg$currPos; - s6 = peg$parseRule(); + s4 = peg$currPos; + s5 = peg$parseInitializer(); + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 === peg$FAILED) { + s4 = null; + } + s5 = []; + s6 = peg$currPos; + s7 = peg$parseRule(); + if (s7 !== peg$FAILED) { + s8 = peg$parse__(); + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } if (s6 !== peg$FAILED) { - s7 = peg$parse__(); - s5 = s6; + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$currPos; + s7 = peg$parseRule(); + if (s7 !== peg$FAILED) { + s8 = peg$parse__(); + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } } else { - peg$currPos = s5; s5 = peg$FAILED; } if (s5 !== peg$FAILED) { - while (s5 !== peg$FAILED) { - s4.push(s5); - s5 = peg$currPos; - s6 = peg$parseRule(); - if (s6 !== peg$FAILED) { - s7 = peg$parse__(); - s5 = s6; + peg$savedPos = s0; + s0 = peg$f0(s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseImport() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 6) === peg$c0) { + s1 = peg$c0; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e0); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (input.charCodeAt(peg$currPos) === 123) { + s3 = peg$c1; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e1); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + s5 = []; + s6 = peg$parseImportedRule(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$currPos; + s7 = peg$currPos; + s8 = peg$parse__(); + if (input.charCodeAt(peg$currPos) === 44) { + s9 = peg$c2; + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e2); } + } + if (s9 !== peg$FAILED) { + s10 = peg$parse__(); + s8 = [s8, s9, s10]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s7 = peg$parseImportedRule(); + if (s7 === peg$FAILED) { + peg$currPos = s6; + s6 = peg$FAILED; + } else { + s6 = s7; + } + } else { + s6 = s7; + } + } + s6 = peg$currPos; + s7 = peg$parse__(); + if (input.charCodeAt(peg$currPos) === 44) { + s8 = peg$c2; + peg$currPos++; } else { - peg$currPos = s5; - s5 = peg$FAILED; + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e2); } + } + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 === peg$FAILED) { + s6 = null; + } + s7 = peg$parse__(); + if (input.charCodeAt(peg$currPos) === 125) { + s8 = peg$c3; + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e3); } } + if (s8 !== peg$FAILED) { + s9 = peg$parse__(); + if (input.substr(peg$currPos, 4) === peg$c4) { + s10 = peg$c4; + peg$currPos += 4; + } else { + s10 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e4); } + } + if (s10 !== peg$FAILED) { + s11 = peg$parse__(); + s12 = peg$parseStringLiteral(); + if (s12 !== peg$FAILED) { + s13 = peg$parseEOS(); + if (s13 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f1(s5, s12); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; } } else { - s4 = peg$FAILED; + peg$currPos = s0; + s0 = peg$FAILED; } - if (s4 !== peg$FAILED) { + + return s0; + } + + function peg$parseImportedRule() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = peg$parseIdentifierName(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parse__(); + if (input.substr(peg$currPos, 2) === peg$c5) { + s4 = peg$c5; + peg$currPos += 2; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e5); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parse__(); + s6 = peg$parseIdentifierName(); + if (s6 !== peg$FAILED) { + s2 = s6; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = null; + } peg$savedPos = s0; - s0 = peg$f0(s2, s3, s4); + s0 = peg$f2(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -789,27 +1005,27 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 123) { - s1 = peg$c0; + s1 = peg$c1; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e0); } + if (peg$silentFails === 0) { peg$fail(peg$e1); } } if (s1 !== peg$FAILED) { s2 = peg$parseCodeBlock(); if (s2 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 125) { - s3 = peg$c1; + s3 = peg$c3; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e1); } + if (peg$silentFails === 0) { peg$fail(peg$e3); } } if (s3 !== peg$FAILED) { s4 = peg$parseEOS(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f1(s2); + s0 = peg$f3(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -839,7 +1055,7 @@ function peg$parse(input, options) { s2 = peg$parseEOS(); if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f2(s1); + s0 = peg$f4(s1); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -872,11 +1088,11 @@ function peg$parse(input, options) { s3 = null; } if (input.charCodeAt(peg$currPos) === 61) { - s4 = peg$c2; + s4 = peg$c6; peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e2); } + if (peg$silentFails === 0) { peg$fail(peg$e6); } } if (s4 !== peg$FAILED) { s5 = peg$parse__(); @@ -885,7 +1101,7 @@ function peg$parse(input, options) { s7 = peg$parseEOS(); if (s7 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f3(s1, s3, s6); + s0 = peg$f5(s1, s3, s6); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -916,11 +1132,11 @@ function peg$parse(input, options) { s3 = peg$currPos; s4 = peg$parse__(); if (input.charCodeAt(peg$currPos) === 47) { - s5 = peg$c3; + s5 = peg$c7; peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e3); } + if (peg$silentFails === 0) { peg$fail(peg$e7); } } if (s5 !== peg$FAILED) { s6 = peg$parse__(); @@ -940,11 +1156,11 @@ function peg$parse(input, options) { s3 = peg$currPos; s4 = peg$parse__(); if (input.charCodeAt(peg$currPos) === 47) { - s5 = peg$c3; + s5 = peg$c7; peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e3); } + if (peg$silentFails === 0) { peg$fail(peg$e7); } } if (s5 !== peg$FAILED) { s6 = peg$parse__(); @@ -961,7 +1177,7 @@ function peg$parse(input, options) { } } peg$savedPos = s0; - s0 = peg$f4(s1, s2); + s0 = peg$f6(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -989,7 +1205,7 @@ function peg$parse(input, options) { s2 = null; } peg$savedPos = s0; - s0 = peg$f5(s1, s2); + s0 = peg$f7(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1027,7 +1243,7 @@ function peg$parse(input, options) { } } peg$savedPos = s0; - s0 = peg$f6(s1, s2); + s0 = peg$f8(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1049,7 +1265,7 @@ function peg$parse(input, options) { s3 = peg$parsePrefixedExpression(); if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f7(s1, s2, s3); + s0 = peg$f9(s1, s2, s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1066,7 +1282,7 @@ function peg$parse(input, options) { s3 = peg$parsePrefixedExpression(); if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f8(s1, s3); + s0 = peg$f10(s1, s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1088,15 +1304,15 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 64) { - s1 = peg$c4; + s1 = peg$c8; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e4); } + if (peg$silentFails === 0) { peg$fail(peg$e8); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f9(); + s1 = peg$f11(); } s0 = s1; @@ -1111,15 +1327,15 @@ function peg$parse(input, options) { if (s1 !== peg$FAILED) { s2 = peg$parse__(); if (input.charCodeAt(peg$currPos) === 58) { - s3 = peg$c5; + s3 = peg$c9; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e5); } + if (peg$silentFails === 0) { peg$fail(peg$e9); } } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f10(s1); + s0 = peg$f12(s1); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1142,7 +1358,7 @@ function peg$parse(input, options) { s3 = peg$parseSuffixedExpression(); if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f11(s1, s3); + s0 = peg$f13(s1, s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1162,27 +1378,27 @@ function peg$parse(input, options) { var s0; if (input.charCodeAt(peg$currPos) === 36) { - s0 = peg$c6; + s0 = peg$c10; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e6); } + if (peg$silentFails === 0) { peg$fail(peg$e10); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 38) { - s0 = peg$c7; + s0 = peg$c11; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e7); } + if (peg$silentFails === 0) { peg$fail(peg$e11); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 33) { - s0 = peg$c8; + s0 = peg$c12; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e8); } + if (peg$silentFails === 0) { peg$fail(peg$e12); } } } } @@ -1200,7 +1416,7 @@ function peg$parse(input, options) { s3 = peg$parseSuffixedOperator(); if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f12(s1, s3); + s0 = peg$f14(s1, s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1223,27 +1439,27 @@ function peg$parse(input, options) { var s0; if (input.charCodeAt(peg$currPos) === 63) { - s0 = peg$c9; + s0 = peg$c13; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e9); } + if (peg$silentFails === 0) { peg$fail(peg$e13); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 42) { - s0 = peg$c10; + s0 = peg$c14; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e10); } + if (peg$silentFails === 0) { peg$fail(peg$e14); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 43) { - s0 = peg$c11; + s0 = peg$c15; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e11); } + if (peg$silentFails === 0) { peg$fail(peg$e15); } } } } @@ -1259,11 +1475,11 @@ function peg$parse(input, options) { if (s1 !== peg$FAILED) { s2 = peg$parse__(); if (input.charCodeAt(peg$currPos) === 124) { - s3 = peg$c12; + s3 = peg$c16; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e12); } + if (peg$silentFails === 0) { peg$fail(peg$e16); } } if (s3 !== peg$FAILED) { s4 = peg$parse__(); @@ -1272,11 +1488,11 @@ function peg$parse(input, options) { s6 = peg$parse__(); s7 = peg$currPos; if (input.charCodeAt(peg$currPos) === 44) { - s8 = peg$c13; + s8 = peg$c2; peg$currPos++; } else { s8 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e13); } + if (peg$silentFails === 0) { peg$fail(peg$e2); } } if (s8 !== peg$FAILED) { s9 = peg$parse__(); @@ -1296,15 +1512,15 @@ function peg$parse(input, options) { s7 = null; } if (input.charCodeAt(peg$currPos) === 124) { - s8 = peg$c12; + s8 = peg$c16; peg$currPos++; } else { s8 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e12); } + if (peg$silentFails === 0) { peg$fail(peg$e16); } } if (s8 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f13(s1, s5, s7); + s0 = peg$f15(s1, s5, s7); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1334,12 +1550,12 @@ function peg$parse(input, options) { s1 = null; } s2 = peg$parse__(); - if (input.substr(peg$currPos, 2) === peg$c14) { - s3 = peg$c14; + if (input.substr(peg$currPos, 2) === peg$c17) { + s3 = peg$c17; peg$currPos += 2; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e14); } + if (peg$silentFails === 0) { peg$fail(peg$e17); } } if (s3 !== peg$FAILED) { s4 = peg$parse__(); @@ -1348,7 +1564,7 @@ function peg$parse(input, options) { s5 = null; } peg$savedPos = s0; - s0 = peg$f14(s1, s5); + s0 = peg$f16(s1, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1358,7 +1574,7 @@ function peg$parse(input, options) { s1 = peg$parseBoundary(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f15(s1); + s1 = peg$f17(s1); } s0 = s1; } @@ -1373,7 +1589,7 @@ function peg$parse(input, options) { s1 = peg$parseInteger(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f16(s1); + s1 = peg$f18(s1); } s0 = s1; if (s0 === peg$FAILED) { @@ -1381,7 +1597,7 @@ function peg$parse(input, options) { s1 = peg$parseIdentifierName(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f17(s1); + s1 = peg$f19(s1); } s0 = s1; if (s0 === peg$FAILED) { @@ -1389,7 +1605,7 @@ function peg$parse(input, options) { s1 = peg$parseCodeBlock(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f18(s1); + s1 = peg$f20(s1); } s0 = s1; } @@ -1413,11 +1629,11 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 40) { - s1 = peg$c15; + s1 = peg$c18; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e15); } + if (peg$silentFails === 0) { peg$fail(peg$e18); } } if (s1 !== peg$FAILED) { s2 = peg$parse__(); @@ -1425,15 +1641,15 @@ function peg$parse(input, options) { if (s3 !== peg$FAILED) { s4 = peg$parse__(); if (input.charCodeAt(peg$currPos) === 41) { - s5 = peg$c16; + s5 = peg$c19; peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e16); } + if (peg$silentFails === 0) { peg$fail(peg$e19); } } if (s5 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f19(s3); + s0 = peg$f21(s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1479,11 +1695,11 @@ function peg$parse(input, options) { s5 = null; } if (input.charCodeAt(peg$currPos) === 61) { - s6 = peg$c2; + s6 = peg$c6; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e2); } + if (peg$silentFails === 0) { peg$fail(peg$e6); } } if (s6 !== peg$FAILED) { s4 = [s4, s5, s6]; @@ -1501,7 +1717,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f20(s1); + s0 = peg$f22(s1); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1524,7 +1740,7 @@ function peg$parse(input, options) { s3 = peg$parseCodeBlock(); if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f21(s1, s3); + s0 = peg$f23(s1, s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1541,19 +1757,19 @@ function peg$parse(input, options) { var s0; if (input.charCodeAt(peg$currPos) === 38) { - s0 = peg$c7; + s0 = peg$c11; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e7); } + if (peg$silentFails === 0) { peg$fail(peg$e11); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 33) { - s0 = peg$c8; + s0 = peg$c12; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e8); } + if (peg$silentFails === 0) { peg$fail(peg$e12); } } } @@ -1568,7 +1784,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e17); } + if (peg$silentFails === 0) { peg$fail(peg$e20); } } return s0; @@ -1579,51 +1795,51 @@ function peg$parse(input, options) { peg$silentFails++; if (input.charCodeAt(peg$currPos) === 9) { - s0 = peg$c17; + s0 = peg$c20; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e19); } + if (peg$silentFails === 0) { peg$fail(peg$e22); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 11) { - s0 = peg$c18; + s0 = peg$c21; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e20); } + if (peg$silentFails === 0) { peg$fail(peg$e23); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 12) { - s0 = peg$c19; + s0 = peg$c22; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e21); } + if (peg$silentFails === 0) { peg$fail(peg$e24); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 32) { - s0 = peg$c20; + s0 = peg$c23; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e22); } + if (peg$silentFails === 0) { peg$fail(peg$e25); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 160) { - s0 = peg$c21; + s0 = peg$c24; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e23); } + if (peg$silentFails === 0) { peg$fail(peg$e26); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 65279) { - s0 = peg$c22; + s0 = peg$c25; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e24); } + if (peg$silentFails === 0) { peg$fail(peg$e27); } } if (s0 === peg$FAILED) { s0 = peg$parseZs(); @@ -1636,7 +1852,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e18); } + if (peg$silentFails === 0) { peg$fail(peg$e21); } } return s0; @@ -1650,7 +1866,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e25); } + if (peg$silentFails === 0) { peg$fail(peg$e28); } } return s0; @@ -1661,43 +1877,43 @@ function peg$parse(input, options) { peg$silentFails++; if (input.charCodeAt(peg$currPos) === 10) { - s0 = peg$c23; + s0 = peg$c26; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e27); } + if (peg$silentFails === 0) { peg$fail(peg$e30); } } if (s0 === peg$FAILED) { - if (input.substr(peg$currPos, 2) === peg$c24) { - s0 = peg$c24; + if (input.substr(peg$currPos, 2) === peg$c27) { + s0 = peg$c27; peg$currPos += 2; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e28); } + if (peg$silentFails === 0) { peg$fail(peg$e31); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 13) { - s0 = peg$c25; + s0 = peg$c28; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e29); } + if (peg$silentFails === 0) { peg$fail(peg$e32); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8232) { - s0 = peg$c26; + s0 = peg$c29; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e30); } + if (peg$silentFails === 0) { peg$fail(peg$e33); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8233) { - s0 = peg$c27; + s0 = peg$c30; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e31); } + if (peg$silentFails === 0) { peg$fail(peg$e34); } } } } @@ -1706,7 +1922,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e26); } + if (peg$silentFails === 0) { peg$fail(peg$e29); } } return s0; @@ -1723,7 +1939,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e32); } + if (peg$silentFails === 0) { peg$fail(peg$e35); } } return s0; @@ -1733,24 +1949,24 @@ function peg$parse(input, options) { var s0, s1, s2, s3, s4, s5; s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c28) { - s1 = peg$c28; + if (input.substr(peg$currPos, 2) === peg$c31) { + s1 = peg$c31; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e33); } + if (peg$silentFails === 0) { peg$fail(peg$e36); } } if (s1 !== peg$FAILED) { s2 = []; s3 = peg$currPos; s4 = peg$currPos; peg$silentFails++; - if (input.substr(peg$currPos, 2) === peg$c29) { - s5 = peg$c29; + if (input.substr(peg$currPos, 2) === peg$c32) { + s5 = peg$c32; peg$currPos += 2; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e34); } + if (peg$silentFails === 0) { peg$fail(peg$e37); } } peg$silentFails--; if (s5 === peg$FAILED) { @@ -1777,12 +1993,12 @@ function peg$parse(input, options) { s3 = peg$currPos; s4 = peg$currPos; peg$silentFails++; - if (input.substr(peg$currPos, 2) === peg$c29) { - s5 = peg$c29; + if (input.substr(peg$currPos, 2) === peg$c32) { + s5 = peg$c32; peg$currPos += 2; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e34); } + if (peg$silentFails === 0) { peg$fail(peg$e37); } } peg$silentFails--; if (s5 === peg$FAILED) { @@ -1805,12 +2021,12 @@ function peg$parse(input, options) { s3 = peg$FAILED; } } - if (input.substr(peg$currPos, 2) === peg$c29) { - s3 = peg$c29; + if (input.substr(peg$currPos, 2) === peg$c32) { + s3 = peg$c32; peg$currPos += 2; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e34); } + if (peg$silentFails === 0) { peg$fail(peg$e37); } } if (s3 !== peg$FAILED) { s1 = [s1, s2, s3]; @@ -1831,24 +2047,24 @@ function peg$parse(input, options) { var s0, s1, s2, s3, s4, s5; s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c28) { - s1 = peg$c28; + if (input.substr(peg$currPos, 2) === peg$c31) { + s1 = peg$c31; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e33); } + if (peg$silentFails === 0) { peg$fail(peg$e36); } } if (s1 !== peg$FAILED) { s2 = []; s3 = peg$currPos; s4 = peg$currPos; peg$silentFails++; - if (input.substr(peg$currPos, 2) === peg$c29) { - s5 = peg$c29; + if (input.substr(peg$currPos, 2) === peg$c32) { + s5 = peg$c32; peg$currPos += 2; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e34); } + if (peg$silentFails === 0) { peg$fail(peg$e37); } } if (s5 === peg$FAILED) { s5 = peg$parseLineTerminator(); @@ -1878,12 +2094,12 @@ function peg$parse(input, options) { s3 = peg$currPos; s4 = peg$currPos; peg$silentFails++; - if (input.substr(peg$currPos, 2) === peg$c29) { - s5 = peg$c29; + if (input.substr(peg$currPos, 2) === peg$c32) { + s5 = peg$c32; peg$currPos += 2; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e34); } + if (peg$silentFails === 0) { peg$fail(peg$e37); } } if (s5 === peg$FAILED) { s5 = peg$parseLineTerminator(); @@ -1909,12 +2125,12 @@ function peg$parse(input, options) { s3 = peg$FAILED; } } - if (input.substr(peg$currPos, 2) === peg$c29) { - s3 = peg$c29; + if (input.substr(peg$currPos, 2) === peg$c32) { + s3 = peg$c32; peg$currPos += 2; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e34); } + if (peg$silentFails === 0) { peg$fail(peg$e37); } } if (s3 !== peg$FAILED) { s1 = [s1, s2, s3]; @@ -1935,12 +2151,12 @@ function peg$parse(input, options) { var s0, s1, s2, s3, s4, s5; s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c30) { - s1 = peg$c30; + if (input.substr(peg$currPos, 2) === peg$c33) { + s1 = peg$c33; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e35); } + if (peg$silentFails === 0) { peg$fail(peg$e38); } } if (s1 !== peg$FAILED) { s2 = []; @@ -2019,7 +2235,7 @@ function peg$parse(input, options) { s3 = peg$parseIdentifierPart(); } peg$savedPos = s0; - s0 = peg$f22(s1, s2); + s0 = peg$f24(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2027,7 +2243,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e36); } + if (peg$silentFails === 0) { peg$fail(peg$e39); } } return s0; @@ -2039,28 +2255,28 @@ function peg$parse(input, options) { s0 = peg$parseUnicodeLetter(); if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 36) { - s0 = peg$c6; + s0 = peg$c10; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e6); } + if (peg$silentFails === 0) { peg$fail(peg$e10); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 95) { - s0 = peg$c31; + s0 = peg$c34; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e37); } + if (peg$silentFails === 0) { peg$fail(peg$e40); } } if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c32; + s1 = peg$c35; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s1 !== peg$FAILED) { s2 = peg$parseUnicodeEscapeSequence(); @@ -2093,19 +2309,19 @@ function peg$parse(input, options) { s0 = peg$parsePc(); if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8204) { - s0 = peg$c33; + s0 = peg$c36; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e39); } + if (peg$silentFails === 0) { peg$fail(peg$e42); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8205) { - s0 = peg$c34; + s0 = peg$c37; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e40); } + if (peg$silentFails === 0) { peg$fail(peg$e43); } } } } @@ -2158,17 +2374,17 @@ function peg$parse(input, options) { s1 = peg$parseStringLiteral(); if (s1 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 105) { - s2 = peg$c35; + s2 = peg$c38; peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e42); } + if (peg$silentFails === 0) { peg$fail(peg$e45); } } if (s2 === peg$FAILED) { s2 = null; } peg$savedPos = s0; - s0 = peg$f23(s1, s2); + s0 = peg$f25(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2176,7 +2392,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e41); } + if (peg$silentFails === 0) { peg$fail(peg$e44); } } return s0; @@ -2188,11 +2404,11 @@ function peg$parse(input, options) { peg$silentFails++; s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 34) { - s1 = peg$c36; + s1 = peg$c39; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e44); } + if (peg$silentFails === 0) { peg$fail(peg$e47); } } if (s1 !== peg$FAILED) { s2 = []; @@ -2202,15 +2418,15 @@ function peg$parse(input, options) { s3 = peg$parseDoubleStringCharacter(); } if (input.charCodeAt(peg$currPos) === 34) { - s3 = peg$c36; + s3 = peg$c39; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e44); } + if (peg$silentFails === 0) { peg$fail(peg$e47); } } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f24(s2); + s0 = peg$f26(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2222,11 +2438,11 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 39) { - s1 = peg$c37; + s1 = peg$c40; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e45); } + if (peg$silentFails === 0) { peg$fail(peg$e48); } } if (s1 !== peg$FAILED) { s2 = []; @@ -2236,15 +2452,15 @@ function peg$parse(input, options) { s3 = peg$parseSingleStringCharacter(); } if (input.charCodeAt(peg$currPos) === 39) { - s3 = peg$c37; + s3 = peg$c40; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e45); } + if (peg$silentFails === 0) { peg$fail(peg$e48); } } if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f25(s2); + s0 = peg$f27(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2257,7 +2473,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e43); } + if (peg$silentFails === 0) { peg$fail(peg$e46); } } return s0; @@ -2271,19 +2487,19 @@ function peg$parse(input, options) { s2 = peg$currPos; peg$silentFails++; if (input.charCodeAt(peg$currPos) === 34) { - s3 = peg$c36; + s3 = peg$c39; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e44); } + if (peg$silentFails === 0) { peg$fail(peg$e47); } } if (s3 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 92) { - s3 = peg$c32; + s3 = peg$c35; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s3 === peg$FAILED) { s3 = peg$parseLineTerminator(); @@ -2317,11 +2533,11 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c32; + s1 = peg$c35; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s1 !== peg$FAILED) { s2 = peg$parseEscapeSequence(); @@ -2351,19 +2567,19 @@ function peg$parse(input, options) { s2 = peg$currPos; peg$silentFails++; if (input.charCodeAt(peg$currPos) === 39) { - s3 = peg$c37; + s3 = peg$c40; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e45); } + if (peg$silentFails === 0) { peg$fail(peg$e48); } } if (s3 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 92) { - s3 = peg$c32; + s3 = peg$c35; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s3 === peg$FAILED) { s3 = peg$parseLineTerminator(); @@ -2397,11 +2613,11 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c32; + s1 = peg$c35; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s1 !== peg$FAILED) { s2 = peg$parseEscapeSequence(); @@ -2429,19 +2645,19 @@ function peg$parse(input, options) { peg$silentFails++; s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 91) { - s1 = peg$c38; + s1 = peg$c41; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e47); } + if (peg$silentFails === 0) { peg$fail(peg$e50); } } if (s1 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 94) { - s2 = peg$c39; + s2 = peg$c42; peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e48); } + if (peg$silentFails === 0) { peg$fail(peg$e51); } } if (s2 === peg$FAILED) { s2 = null; @@ -2459,25 +2675,25 @@ function peg$parse(input, options) { } } if (input.charCodeAt(peg$currPos) === 93) { - s4 = peg$c40; + s4 = peg$c43; peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e49); } + if (peg$silentFails === 0) { peg$fail(peg$e52); } } if (s4 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 105) { - s5 = peg$c35; + s5 = peg$c38; peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e42); } + if (peg$silentFails === 0) { peg$fail(peg$e45); } } if (s5 === peg$FAILED) { s5 = null; } peg$savedPos = s0; - s0 = peg$f26(s2, s3, s5); + s0 = peg$f28(s2, s3, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2489,7 +2705,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e46); } + if (peg$silentFails === 0) { peg$fail(peg$e49); } } return s0; @@ -2502,17 +2718,17 @@ function peg$parse(input, options) { s1 = peg$parseClassCharacter(); if (s1 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 45) { - s2 = peg$c41; + s2 = peg$c44; peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e50); } + if (peg$silentFails === 0) { peg$fail(peg$e53); } } if (s2 !== peg$FAILED) { s3 = peg$parseClassCharacter(); if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f27(s1, s3); + s0 = peg$f29(s1, s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2537,19 +2753,19 @@ function peg$parse(input, options) { s2 = peg$currPos; peg$silentFails++; if (input.charCodeAt(peg$currPos) === 93) { - s3 = peg$c40; + s3 = peg$c43; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e49); } + if (peg$silentFails === 0) { peg$fail(peg$e52); } } if (s3 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 92) { - s3 = peg$c32; + s3 = peg$c35; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s3 === peg$FAILED) { s3 = peg$parseLineTerminator(); @@ -2583,11 +2799,11 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c32; + s1 = peg$c35; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s1 !== peg$FAILED) { s2 = peg$parseEscapeSequence(); @@ -2614,17 +2830,17 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c32; + s1 = peg$c35; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s1 !== peg$FAILED) { s2 = peg$parseLineTerminatorSequence(); if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f28(); + s0 = peg$f30(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2644,11 +2860,11 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 48) { - s1 = peg$c42; + s1 = peg$c45; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e51); } + if (peg$silentFails === 0) { peg$fail(peg$e54); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2663,7 +2879,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f29(); + s0 = peg$f31(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2698,110 +2914,110 @@ function peg$parse(input, options) { var s0, s1; if (input.charCodeAt(peg$currPos) === 39) { - s0 = peg$c37; + s0 = peg$c40; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e45); } + if (peg$silentFails === 0) { peg$fail(peg$e48); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s0 = peg$c36; + s0 = peg$c39; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e44); } + if (peg$silentFails === 0) { peg$fail(peg$e47); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 92) { - s0 = peg$c32; + s0 = peg$c35; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 98) { - s1 = peg$c43; + s1 = peg$c46; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e52); } + if (peg$silentFails === 0) { peg$fail(peg$e55); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f30(); + s1 = peg$f32(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 102) { - s1 = peg$c44; + s1 = peg$c47; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e53); } + if (peg$silentFails === 0) { peg$fail(peg$e56); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f31(); + s1 = peg$f33(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 110) { - s1 = peg$c45; + s1 = peg$c48; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e54); } + if (peg$silentFails === 0) { peg$fail(peg$e57); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f32(); + s1 = peg$f34(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 114) { - s1 = peg$c46; + s1 = peg$c49; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e55); } + if (peg$silentFails === 0) { peg$fail(peg$e58); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f33(); + s1 = peg$f35(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 116) { - s1 = peg$c47; + s1 = peg$c50; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e56); } + if (peg$silentFails === 0) { peg$fail(peg$e59); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f34(); + s1 = peg$f36(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 118) { - s1 = peg$c48; + s1 = peg$c51; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e57); } + if (peg$silentFails === 0) { peg$fail(peg$e60); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f35(); + s1 = peg$f37(); } s0 = s1; } @@ -2864,19 +3080,19 @@ function peg$parse(input, options) { s0 = peg$parseDecimalDigit(); if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 120) { - s0 = peg$c49; + s0 = peg$c52; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e58); } + if (peg$silentFails === 0) { peg$fail(peg$e61); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 117) { - s0 = peg$c50; + s0 = peg$c53; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e59); } + if (peg$silentFails === 0) { peg$fail(peg$e62); } } } } @@ -2890,11 +3106,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 120) { - s1 = peg$c49; + s1 = peg$c52; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e58); } + if (peg$silentFails === 0) { peg$fail(peg$e61); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2920,7 +3136,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f36(s2); + s0 = peg$f38(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2938,11 +3154,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 117) { - s1 = peg$c50; + s1 = peg$c53; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e59); } + if (peg$silentFails === 0) { peg$fail(peg$e62); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2980,7 +3196,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f37(s2); + s0 = peg$f39(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3001,7 +3217,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e60); } + if (peg$silentFails === 0) { peg$fail(peg$e63); } } return s0; @@ -3015,7 +3231,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e61); } + if (peg$silentFails === 0) { peg$fail(peg$e64); } } return s0; @@ -3026,15 +3242,15 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 46) { - s1 = peg$c51; + s1 = peg$c54; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e62); } + if (peg$silentFails === 0) { peg$fail(peg$e65); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f38(); + s1 = peg$f40(); } s0 = s1; @@ -3047,20 +3263,20 @@ function peg$parse(input, options) { peg$silentFails++; s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 123) { - s1 = peg$c0; + s1 = peg$c1; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e0); } + if (peg$silentFails === 0) { peg$fail(peg$e1); } } if (s1 !== peg$FAILED) { s2 = peg$parseBareCodeBlock(); if (input.charCodeAt(peg$currPos) === 125) { - s3 = peg$c1; + s3 = peg$c3; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e1); } + if (peg$silentFails === 0) { peg$fail(peg$e3); } } if (s3 !== peg$FAILED) { s0 = s2; @@ -3075,7 +3291,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e63); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } return s0; @@ -3087,7 +3303,7 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parseCode(); peg$savedPos = s0; - s1 = peg$f39(s1); + s1 = peg$f41(s1); s0 = s1; return s0; @@ -3107,7 +3323,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } peg$silentFails--; if (s5 === peg$FAILED) { @@ -3140,7 +3356,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } peg$silentFails--; if (s5 === peg$FAILED) { @@ -3169,20 +3385,20 @@ function peg$parse(input, options) { if (s2 === peg$FAILED) { s2 = peg$currPos; if (input.charCodeAt(peg$currPos) === 123) { - s3 = peg$c0; + s3 = peg$c1; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e0); } + if (peg$silentFails === 0) { peg$fail(peg$e1); } } if (s3 !== peg$FAILED) { s4 = peg$parseCode(); if (input.charCodeAt(peg$currPos) === 125) { - s5 = peg$c1; + s5 = peg$c3; peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e1); } + if (peg$silentFails === 0) { peg$fail(peg$e3); } } if (s5 !== peg$FAILED) { s3 = [s3, s4, s5]; @@ -3207,7 +3423,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } peg$silentFails--; if (s5 === peg$FAILED) { @@ -3240,7 +3456,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } peg$silentFails--; if (s5 === peg$FAILED) { @@ -3269,20 +3485,20 @@ function peg$parse(input, options) { if (s2 === peg$FAILED) { s2 = peg$currPos; if (input.charCodeAt(peg$currPos) === 123) { - s3 = peg$c0; + s3 = peg$c1; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e0); } + if (peg$silentFails === 0) { peg$fail(peg$e1); } } if (s3 !== peg$FAILED) { s4 = peg$parseCode(); if (input.charCodeAt(peg$currPos) === 125) { - s5 = peg$c1; + s5 = peg$c3; peg$currPos++; } else { s5 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e1); } + if (peg$silentFails === 0) { peg$fail(peg$e3); } } if (s5 !== peg$FAILED) { s3 = [s3, s4, s5]; @@ -3324,7 +3540,7 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f40(s1); + s1 = peg$f42(s1); } s0 = s1; @@ -3339,7 +3555,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e65); } + if (peg$silentFails === 0) { peg$fail(peg$e68); } } return s0; @@ -3353,7 +3569,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e66); } + if (peg$silentFails === 0) { peg$fail(peg$e69); } } return s0; @@ -3367,7 +3583,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e67); } + if (peg$silentFails === 0) { peg$fail(peg$e70); } } return s0; @@ -3381,7 +3597,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e68); } + if (peg$silentFails === 0) { peg$fail(peg$e71); } } return s0; @@ -3395,7 +3611,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e69); } + if (peg$silentFails === 0) { peg$fail(peg$e72); } } return s0; @@ -3409,7 +3625,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e70); } + if (peg$silentFails === 0) { peg$fail(peg$e73); } } return s0; @@ -3423,7 +3639,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e71); } + if (peg$silentFails === 0) { peg$fail(peg$e74); } } return s0; @@ -3437,7 +3653,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e72); } + if (peg$silentFails === 0) { peg$fail(peg$e75); } } return s0; @@ -3451,7 +3667,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e73); } + if (peg$silentFails === 0) { peg$fail(peg$e76); } } return s0; @@ -3465,7 +3681,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e74); } + if (peg$silentFails === 0) { peg$fail(peg$e77); } } return s0; @@ -3479,7 +3695,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e75); } + if (peg$silentFails === 0) { peg$fail(peg$e78); } } return s0; @@ -3535,11 +3751,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parse__(); if (input.charCodeAt(peg$currPos) === 59) { - s2 = peg$c52; + s2 = peg$c55; peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e76); } + if (peg$silentFails === 0) { peg$fail(peg$e79); } } if (s2 !== peg$FAILED) { s1 = [s1, s2]; @@ -3590,7 +3806,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e17); } + if (peg$silentFails === 0) { peg$fail(peg$e20); } } peg$silentFails--; if (s1 === peg$FAILED) { diff --git a/lib/peg.d.ts b/lib/peg.d.ts index 01e00754..6553e13a 100644 --- a/lib/peg.d.ts +++ b/lib/peg.d.ts @@ -53,6 +53,8 @@ declare namespace ast { /** The main Peggy AST class returned by the parser. */ interface Grammar extends Node<"grammar"> { + /** List of import clauses with additional rules. */ + imports: Import[]; /** Initializer that run once when importing generated parser module. */ topLevelInitializer?: TopLevelInitializer; /** Initializer that run each time when `parser.parse()` method in invoked. */ @@ -77,6 +79,40 @@ declare namespace ast { locations?: LocationRange[]; } + /** The single `import` clause. */ + interface Import extends Node<"import"> { + /** Path to the grammar, relative to the current file. */ + path: string; + /** List of imported rules from another grammar. */ + rules: ImportedRule[]; + } + + /** + * A rule with an optional alias imported from another grammar. + * + * Alias name shares the same naming scope as the ordinal rules, + * so they should be unique within that scope. + */ + interface ImportedRule extends Node<"imported_rule"> { + /** Name of rule in the imported grammar. */ + name: string; + /** + * Name of the rule to use in the grammar. This property will be set to + * `name` if alias was not defined in the grammar. To distinguish between + * values, defined in the grammar and constructed from the rule name use + * the `aliasLocation` property. It will be `null` in case of constructed + * name. + */ + alias: string; + /** Span of the `name` string definition in the grammar. */ + nameLocation: LocationRange; + /** + * Span of the `alias` string definition in the grammar. + * `null` if the alias is not defined in the grammar. + */ + aliasLocation: LocationRange | null; + } + /** * Base interface for all initializer nodes with the code. * @@ -603,6 +639,7 @@ export namespace compiler { interface NodeTypes { /** * Default behavior: run visitor: + * - on each element in `imports` * - on the top level initializer, if it is defined * - on the initializer, if it is defined * - on each element in `rules` @@ -614,6 +651,22 @@ export namespace compiler { */ grammar?(node: ast.Grammar, ...args: any[]): any; + /** + * Default behavior: run visitor on each element in `rules`, + * return `undefined` + * + * @param node Node, representing one clause of imports from one another grammar + * @param args Any arguments passed to the `Visitor` + */ + import?(node: ast.Import, ...args: any[]): any; + /** + * Default behavior: do nothing + * + * @param node Node, representing imported one and possible renamed rule + * @param args Any arguments passed to the `Visitor` + */ + imported_rule?(node: ast.ImportedRule, ...args: any[]): any; + /** * Default behavior: do nothing * diff --git a/src/parser.pegjs b/src/parser.pegjs index 44fd6f02..cc3d6400 100644 --- a/src/parser.pegjs +++ b/src/parser.pegjs @@ -46,9 +46,10 @@ // ---- Syntactic Grammar ----- Grammar - = __ topLevelInitializer:(@TopLevelInitializer __)? initializer:(@Initializer __)? rules:(@Rule __)+ { + = __ imports:(@Import __)* topLevelInitializer:(@TopLevelInitializer __)? initializer:(@Initializer __)? rules:(@Rule __)+ { return { type: "grammar", + imports, topLevelInitializer, initializer, rules, @@ -56,6 +57,31 @@ Grammar }; } +Import + = "import" __ + "{" __ rules:ImportedRule|.., __ "," __| (__ ",")? __ "}" __ + "from" __ path:StringLiteral EOS + { + return { + type: "import", + path, + rules, + location: location(), + }; + } + +ImportedRule + = name:IdentifierName alias:(__ "as" __ @IdentifierName)? { + return { + type: "imported_rule", + name: name[0], + alias: alias !== null ? alias[0] : name[0], + nameLocation: name[1], + aliasLocation: alias !== null ? alias[1] : null, + location: location(), + }; + } + TopLevelInitializer = "{" code:CodeBlock "}" EOS { return { diff --git a/test/behavior/generated-parser-behavior.spec.js b/test/behavior/generated-parser-behavior.spec.js index 50030f3d..d4629376 100644 --- a/test/behavior/generated-parser-behavior.spec.js +++ b/test/behavior/generated-parser-behavior.spec.js @@ -2915,7 +2915,7 @@ describe("generated parser behavior", () => { } catch (er) { expect(er).to.be.an.instanceof(peg.parser.SyntaxError); expect(er.format([source])).to.equal(`\ -Error: Expected "{", code block, comment, end of line, identifier, or whitespace but "=" found. +Error: Expected "import", "{", code block, comment, end of line, identifier, or whitespace but "=" found. --> stdin:1:1 | 1 | === @@ -2927,7 +2927,7 @@ Error: Expected "{", code block, comment, end of line, identifier, or whitespace } catch (er) { expect(er).to.be.an.instanceof(peg.parser.SyntaxError); expect(er.format([])).to.equal(`\ -Error: Expected "{", code block, comment, end of line, identifier, or whitespace but "=" found. +Error: Expected "import", "{", code block, comment, end of line, identifier, or whitespace but "=" found. at stdin:1:1`); } }); @@ -2955,7 +2955,7 @@ Error: Expected "{", code block, comment, end of line, identifier, or whitespace // Check that all messages present in the list expect(messages).to.include.members([ - "Rule \"missingRule\" is not defined", + "Rule \"missingRule\" is not defined or imported", "Rule \"duplicatedRule\" is already defined", "Label \"duplicatedLabel\" is already defined", "Possible infinite loop when parsing (left recursion: duplicatedRule -> start -> leftRecursion -> duplicatedRule)", diff --git a/test/types/peg.test-d.ts b/test/types/peg.test-d.ts index f7695225..72652841 100644 --- a/test/types/peg.test-d.ts +++ b/test/types/peg.test-d.ts @@ -189,12 +189,16 @@ describe("peg.d.ts", () => { expectType(node); expectType<"grammar">(node.type); expectType(node.location); + expectType(node.imports); expectType( node.topLevelInitializer ); expectType(node.initializer); expectType(node.rules); + if (node.imports) { + node.imports.forEach(visit); + } if (node.topLevelInitializer) { visit(node.topLevelInitializer); } @@ -203,6 +207,26 @@ describe("peg.d.ts", () => { } node.rules.forEach(visit); }, + import(node) { + add(node.type); + expectType(node); + expectType<"import">(node.type); + expectType(node.location); + expectType(node.path); + expectType(node.rules); + + node.rules.forEach(visit); + }, + imported_rule(node) { + add(node.type); + expectType(node); + expectType<"imported_rule">(node.type); + expectType(node.location); + expectType(node.name); + expectType(node.alias); + expectType(node.nameLocation); + expectType(node.aliasLocation); + }, top_level_initializer(node) { add(node.type); expectType(node); diff --git a/test/unit/compiler/passes/generate-bytecode.spec.js b/test/unit/compiler/passes/generate-bytecode.spec.js index bea90657..f9f0d5cc 100644 --- a/test/unit/compiler/passes/generate-bytecode.spec.js +++ b/test/unit/compiler/passes/generate-bytecode.spec.js @@ -2394,6 +2394,15 @@ describe("compiler pass |generateBytecode|", () => { {}, ], }); + + expect(pass).to.changeAST([ + "import { imported } from '1';", + "start = imported", + ].join("\n"), { + rules: [{ + bytecode: [43, 0, 0], // IMPORTED_RULE + }], + }); }); }); diff --git a/test/unit/compiler/passes/remove-proxy-rules.spec.js b/test/unit/compiler/passes/remove-proxy-rules.spec.js index 831f80d6..bec49dc7 100644 --- a/test/unit/compiler/passes/remove-proxy-rules.spec.js +++ b/test/unit/compiler/passes/remove-proxy-rules.spec.js @@ -28,6 +28,23 @@ describe("compiler pass |removeProxyRules|", () => { }, { allowedStartRules: ["start"] } ); + + expect(pass).to.changeAST( + [ + "import { imported } from '';", + "start = proxy", + "proxy = imported", + ].join("\n"), + { + rules: [ + { + name: "start", + expression: { type: "rule_ref", name: "imported" }, + }, + ], + }, + { allowedStartRules: ["start"] } + ); }); }); @@ -54,6 +71,27 @@ describe("compiler pass |removeProxyRules|", () => { }, { allowedStartRules: ["start", "proxy"] } ); + + expect(pass).to.changeAST( + [ + "import { imported } from '';", + "start = proxy", + "proxy = imported", + ].join("\n"), + { + rules: [ + { + name: "start", + expression: { type: "rule_ref", name: "imported" }, + }, + { + name: "proxy", + expression: { type: "rule_ref", name: "imported" }, + }, + ], + }, + { allowedStartRules: ["start", "proxy"] } + ); }); }); }); diff --git a/test/unit/compiler/passes/report-duplicate-rules.spec.js b/test/unit/compiler/passes/report-duplicate-rules.spec.js index 17c2234b..5a3934fd 100644 --- a/test/unit/compiler/passes/report-duplicate-rules.spec.js +++ b/test/unit/compiler/passes/report-duplicate-rules.spec.js @@ -30,4 +30,48 @@ describe("compiler pass |reportDuplicateRules|", () => { }], }); }); + + it("reports duplicate imports", () => { + expect(pass).to.reportError([ + "import { rule, rule } from '';", + "start = 'a'", + ].join("\n"), { + message: "Rule \"rule\" is already imported", + location: { + source: undefined, + start: { offset: 15, line: 1, column: 16 }, + end: { offset: 19, line: 1, column: 20 }, + }, + diagnostics: [{ + message: "Original import location", + location: { + source: undefined, + start: { offset: 9, line: 1, column: 10 }, + end: { offset: 13, line: 1, column: 14 }, + }, + }], + }); + }); + + it("reports overrides of imported rules", () => { + expect(pass).to.reportError([ + "import { start } from '';", + "start = 'a'", + ].join("\n"), { + message: "Rule with the same name \"start\" is already defined in the grammar, try to add `as ` to the imported one", + location: { + source: undefined, + start: { offset: 9, line: 1, column: 10 }, + end: { offset: 14, line: 1, column: 15 }, + }, + diagnostics: [{ + message: "Rule defined here", + location: { + source: undefined, + start: { offset: 26, line: 2, column: 1 }, + end: { offset: 31, line: 2, column: 6 }, + }, + }], + }); + }); }); diff --git a/test/unit/compiler/passes/report-undefined-rules.spec.js b/test/unit/compiler/passes/report-undefined-rules.spec.js index 1c8054b3..3079f00f 100644 --- a/test/unit/compiler/passes/report-undefined-rules.spec.js +++ b/test/unit/compiler/passes/report-undefined-rules.spec.js @@ -11,7 +11,7 @@ const expect = chai.expect; describe("compiler pass |reportUndefinedRules|", () => { it("reports undefined rules", () => { expect(pass).to.reportError("start = undefined", { - message: "Rule \"undefined\" is not defined", + message: "Rule \"undefined\" is not defined or imported", location: { source: undefined, start: { offset: 8, line: 1, column: 9 }, @@ -19,4 +19,16 @@ describe("compiler pass |reportUndefinedRules|", () => { }, }); }); + + it("do not report imported rules as undefined", () => { + expect(pass).to.not.reportError([ + "import { imported } from '';", + "start = imported;", + ].join("\n")); + + expect(pass).to.not.reportError( + "import { imported } from ''; start = 'a'", + { allowedStartRules: ["imported"] } + ); + }); }); diff --git a/test/unit/parser.spec.js b/test/unit/parser.spec.js index 799ef474..8ae5ca09 100644 --- a/test/unit/parser.spec.js +++ b/test/unit/parser.spec.js @@ -66,6 +66,7 @@ describe("Peggy grammar parser", () => { function oneRuleGrammar(expression) { return { type: "grammar", + imports: [], topLevelInitializer: null, initializer: null, rules: [{ type: "rule", name: "start", expression }], @@ -123,6 +124,7 @@ describe("Peggy grammar parser", () => { const trivialGrammar = literalGrammar("abcd", false); const twoRuleGrammar = { type: "grammar", + imports: [], topLevelInitializer: null, initializer: null, rules: [ruleA, ruleB], @@ -140,6 +142,7 @@ describe("Peggy grammar parser", () => { delete node.codeLocation; delete node.nameLocation; delete node.labelLocation; + delete node.aliasLocation; } function stripExpression(node) { @@ -169,6 +172,10 @@ describe("Peggy grammar parser", () => { delete node.nameLocation; delete node.labelLocation; + if (node.imports) { + node.imports.forEach(strip); + } + if (node.topLevelInitializer) { strip(node.topLevelInitializer); } @@ -178,6 +185,8 @@ describe("Peggy grammar parser", () => { node.rules.forEach(strip); }, + import: stripChildren("rules"), + imported_rule: stripLeaf, top_level_initializer: stripLeaf, initializer: stripLeaf, rule: stripExpression, @@ -280,33 +289,121 @@ describe("Peggy grammar parser", () => { // Canonical Grammar is "a = 'abcd'; b = 'efgh'; c = 'ijkl';". it("parses Grammar", () => { expect("\na = 'abcd';\n").to.parseAs( - { type: "grammar", topLevelInitializer: null, initializer: null, rules: [ruleA] } + { type: "grammar", imports: [], topLevelInitializer: null, initializer: null, rules: [ruleA] } ); expect("\na = 'abcd';\nb = 'efgh';\nc = 'ijkl';\n").to.parseAs( - { type: "grammar", topLevelInitializer: null, initializer: null, rules: [ruleA, ruleB, ruleC] } + { type: "grammar", imports: [], topLevelInitializer: null, initializer: null, rules: [ruleA, ruleB, ruleC] } ); expect("\n{ code };\na = 'abcd';\n").to.parseAs( - { type: "grammar", topLevelInitializer: null, initializer, rules: [ruleA] } + { type: "grammar", imports: [], topLevelInitializer: null, initializer, rules: [ruleA] } ); expect("\n{{ top level code }};\na = 'abcd';\n").to.parseAs( - { type: "grammar", topLevelInitializer, initializer: null, rules: [ruleA] } + { type: "grammar", imports: [], topLevelInitializer, initializer: null, rules: [ruleA] } ); expect("\n{{ top level code }};\n{ code };\na = 'abcd';\n").to.parseAs( - { type: "grammar", topLevelInitializer, initializer, rules: [ruleA] } + { type: "grammar", imports: [], topLevelInitializer, initializer, rules: [ruleA] } ); }); + // Canonical Import is "import { rule } from 'path';". + it("parses Import", () => { + expect("import { rule } from \"path/to/grammar\";start = 'abcd'").to.parseAs({ + type: "grammar", + imports: [ + { + type: "import", + path: "path/to/grammar", + rules: [{ type: "imported_rule", name: "rule", alias: "rule" }], + }, + ], + topLevelInitializer: null, + initializer: null, + rules: [ruleStart], + }); + + expect([ + "import", + "{", + "rule1", + ",", + "rule2", + "}", + "from", + "'path/to/grammar';start = 'abcd'", + ].join("\n")).to.parseAs({ + type: "grammar", + imports: [{ + type: "import", + path: "path/to/grammar", + rules: [ + { type: "imported_rule", name: "rule1", alias: "rule1" }, + { type: "imported_rule", name: "rule2", alias: "rule2" }, + ], + }], + topLevelInitializer: null, + initializer: null, + rules: [ruleStart], + }); + + expect([ + "import { rule1 } from 'path/to/grammar1'", + "import { rule2 } from 'path/to/grammar2'", + "start = 'abcd'", + ].join("\n")).to.parseAs({ + type: "grammar", + imports: [ + { + type: "import", + path: "path/to/grammar1", + rules: [{ type: "imported_rule", name: "rule1", alias: "rule1" }], + }, + { + type: "import", + path: "path/to/grammar2", + rules: [{ type: "imported_rule", name: "rule2", alias: "rule2" }], + }, + ], + topLevelInitializer: null, + initializer: null, + rules: [ruleStart], + }); + + expect("import { rule } from 'path/to/grammar';{ code };start = 'abcd'").to.parseAs({ + type: "grammar", + imports: [{ + type: "import", + path: "path/to/grammar", + rules: [{ type: "imported_rule", name: "rule", alias: "rule" }], + }], + topLevelInitializer: null, + initializer, + rules: [ruleStart], + }); + + expect("import { rule } from 'path/to/grammar';{{ top level code }};start = 'abcd'").to.parseAs({ + type: "grammar", + imports: [{ + type: "import", + path: "path/to/grammar", + rules: [{ type: "imported_rule", name: "rule", alias: "rule" }], + }], + topLevelInitializer, + initializer: null, + rules: [ruleStart], + }); + }); + // Canonical Top-Level Initializer is "{ top level code }". it("parses Top-Level Initializer", () => { expect("{{ top level code }};start = 'abcd'").to.parseAs( - { type: "grammar", topLevelInitializer, initializer: null, rules: [ruleStart] } + { type: "grammar", imports: [], topLevelInitializer, initializer: null, rules: [ruleStart] } ); }); // Canonical Initializer is "{ code }". it("parses Initializer", () => { expect("{ code };start = 'abcd'").to.parseAs( - { type: "grammar", topLevelInitializer: null, initializer, rules: [ruleStart] } + { type: "grammar", imports: [], topLevelInitializer: null, initializer, rules: [ruleStart] } ); }); @@ -1116,6 +1213,7 @@ describe("Peggy grammar parser", () => { it("generates codeLocation / nameLocation / labelLocation", () => { const result = parser.parse(` +import { d, e as f } from 'library'; {{ const foo = 12; }} @@ -1128,18 +1226,65 @@ c = @'ijkl' `); expect(result).to.eql({ type: "grammar", + imports: [{ + type: "import", + path: "library", + rules: [ + { + type: "imported_rule", + name: "d", + alias: "d", + nameLocation: { + source: undefined, + start: { offset: 10, line: 2, column: 10 }, + end: { offset: 11, line: 2, column: 11 }, + }, + aliasLocation: null, + location: { + source: undefined, + start: { offset: 10, line: 2, column: 10 }, + end: { offset: 11, line: 2, column: 11 }, + }, + }, + { + type: "imported_rule", + name: "e", + alias: "f", + nameLocation: { + source: undefined, + start: { offset: 13, line: 2, column: 13 }, + end: { offset: 14, line: 2, column: 14 }, + }, + aliasLocation: { + source: undefined, + start: { offset: 18, line: 2, column: 18 }, + end: { offset: 19, line: 2, column: 19 }, + }, + location: { + source: undefined, + start: { offset: 13, line: 2, column: 13 }, + end: { offset: 19, line: 2, column: 19 }, + }, + }, + ], + location: { + source: undefined, + start: { offset: 1, line: 2, column: 1 }, + end: { offset: 37, line: 2, column: 37 }, + }, + }], topLevelInitializer: { type: "top_level_initializer", code: "\n const foo = 12;\n", codeLocation: { source: undefined, - start: { offset: 3, line: 2, column: 3 }, - end: { offset: 22, line: 4, column: 1 }, + start: { offset: 40, line: 3, column: 3 }, + end: { offset: 59, line: 5, column: 1 }, }, location: { source: undefined, - start: { offset: 1, line: 2, column: 1 }, - end: { offset: 25, line: 5, column: 1 }, + start: { offset: 38, line: 3, column: 1 }, + end: { offset: 62, line: 6, column: 1 }, }, }, initializer: { @@ -1147,13 +1292,13 @@ c = @'ijkl' code: "\n const bar = 13;\n", codeLocation: { source: undefined, - start: { offset: 26, line: 5, column: 2 }, - end: { offset: 45, line: 7, column: 1 }, + start: { offset: 63, line: 6, column: 2 }, + end: { offset: 82, line: 8, column: 1 }, }, location: { source: undefined, - start: { offset: 25, line: 5, column: 1 }, - end: { offset: 47, line: 8, column: 1 }, + start: { offset: 62, line: 6, column: 1 }, + end: { offset: 84, line: 9, column: 1 }, }, }, rules: [ @@ -1162,8 +1307,8 @@ c = @'ijkl' name: "a", nameLocation: { source: undefined, - start: { offset: 47, line: 8, column: 1 }, - end: { offset: 48, line: 8, column: 2 }, + start: { offset: 84, line: 9, column: 1 }, + end: { offset: 85, line: 9, column: 2 }, }, expression: { type: "action", @@ -1175,8 +1320,8 @@ c = @'ijkl' label: "label", labelLocation: { source: undefined, - start: { offset: 51, line: 8, column: 5 }, - end: { offset: 56, line: 8, column: 10 }, + start: { offset: 88, line: 9, column: 5 }, + end: { offset: 93, line: 9, column: 10 }, }, expression: { type: "literal", @@ -1184,14 +1329,14 @@ c = @'ijkl' ignoreCase: false, location: { source: undefined, - start: { offset: 57, line: 8, column: 11 }, - end: { offset: 63, line: 8, column: 17 }, + start: { offset: 94, line: 9, column: 11 }, + end: { offset: 100, line: 9, column: 17 }, }, }, location: { source: undefined, - start: { offset: 51, line: 8, column: 5 }, - end: { offset: 63, line: 8, column: 17 }, + start: { offset: 88, line: 9, column: 5 }, + end: { offset: 100, line: 9, column: 17 }, }, }, { @@ -1199,13 +1344,13 @@ c = @'ijkl' code: " return true; ", codeLocation: { source: undefined, - start: { offset: 66, line: 8, column: 20 }, - end: { offset: 80, line: 8, column: 34 }, + start: { offset: 103, line: 9, column: 20 }, + end: { offset: 117, line: 9, column: 34 }, }, location: { source: undefined, - start: { offset: 64, line: 8, column: 18 }, - end: { offset: 81, line: 8, column: 35 }, + start: { offset: 101, line: 9, column: 18 }, + end: { offset: 118, line: 9, column: 35 }, }, }, { @@ -1213,38 +1358,38 @@ c = @'ijkl' code: " return false; ", codeLocation: { source: undefined, - start: { offset: 84, line: 8, column: 38 }, - end: { offset: 99, line: 8, column: 53 }, + start: { offset: 121, line: 9, column: 38 }, + end: { offset: 136, line: 9, column: 53 }, }, location: { source: undefined, - start: { offset: 82, line: 8, column: 36 }, - end: { offset: 100, line: 8, column: 54 }, + start: { offset: 119, line: 9, column: 36 }, + end: { offset: 137, line: 9, column: 54 }, }, }, ], location: { source: undefined, - start: { offset: 51, line: 8, column: 5 }, - end: { offset: 100, line: 8, column: 54 }, + start: { offset: 88, line: 9, column: 5 }, + end: { offset: 137, line: 9, column: 54 }, }, }, code: " return 'so true'; ", codeLocation: { source: undefined, - start: { offset: 102, line: 8, column: 56 }, - end: { offset: 121, line: 8, column: 75 }, + start: { offset: 139, line: 9, column: 56 }, + end: { offset: 158, line: 9, column: 75 }, }, location: { source: undefined, - start: { offset: 51, line: 8, column: 5 }, - end: { offset: 122, line: 8, column: 76 }, + start: { offset: 88, line: 9, column: 5 }, + end: { offset: 159, line: 9, column: 76 }, }, }, location: { source: undefined, - start: { offset: 47, line: 8, column: 1 }, - end: { offset: 123, line: 9, column: 1 }, + start: { offset: 84, line: 9, column: 1 }, + end: { offset: 160, line: 10, column: 1 }, }, }, { @@ -1252,8 +1397,8 @@ c = @'ijkl' name: "b", nameLocation: { source: undefined, - start: { offset: 123, line: 9, column: 1 }, - end: { offset: 124, line: 9, column: 2 }, + start: { offset: 160, line: 10, column: 1 }, + end: { offset: 161, line: 10, column: 2 }, }, expression: { type: "sequence", @@ -1262,8 +1407,8 @@ c = @'ijkl' label: "LABEL", labelLocation: { source: undefined, - start: { offset: 128, line: 9, column: 6 }, - end: { offset: 133, line: 9, column: 11 }, + start: { offset: 165, line: 10, column: 6 }, + end: { offset: 170, line: 10, column: 11 }, }, pick: true, expression: { @@ -1272,26 +1417,26 @@ c = @'ijkl' ignoreCase: false, location: { source: undefined, - start: { offset: 134, line: 9, column: 12 }, - end: { offset: 140, line: 9, column: 18 }, + start: { offset: 171, line: 10, column: 12 }, + end: { offset: 177, line: 10, column: 18 }, }, }, location: { source: undefined, - start: { offset: 127, line: 9, column: 5 }, - end: { offset: 140, line: 9, column: 18 }, + start: { offset: 164, line: 10, column: 5 }, + end: { offset: 177, line: 10, column: 18 }, }, }], location: { source: undefined, - start: { offset: 127, line: 9, column: 5 }, - end: { offset: 140, line: 9, column: 18 }, + start: { offset: 164, line: 10, column: 5 }, + end: { offset: 177, line: 10, column: 18 }, }, }, location: { source: undefined, - start: { offset: 123, line: 9, column: 1 }, - end: { offset: 141, line: 10, column: 1 }, + start: { offset: 160, line: 10, column: 1 }, + end: { offset: 178, line: 11, column: 1 }, }, }, { @@ -1299,8 +1444,8 @@ c = @'ijkl' name: "c", nameLocation: { source: undefined, - start: { offset: 141, line: 10, column: 1 }, - end: { offset: 142, line: 10, column: 2 }, + start: { offset: 178, line: 11, column: 1 }, + end: { offset: 179, line: 11, column: 2 }, }, expression: { type: "sequence", @@ -1309,8 +1454,8 @@ c = @'ijkl' label: null, labelLocation: { source: undefined, - start: { offset: 145, line: 10, column: 5 }, - end: { offset: 146, line: 10, column: 6 }, + start: { offset: 182, line: 11, column: 5 }, + end: { offset: 183, line: 11, column: 6 }, }, pick: true, expression: { @@ -1319,33 +1464,33 @@ c = @'ijkl' ignoreCase: false, location: { source: undefined, - start: { offset: 146, line: 10, column: 6 }, - end: { offset: 152, line: 10, column: 12 }, + start: { offset: 183, line: 11, column: 6 }, + end: { offset: 189, line: 11, column: 12 }, }, }, location: { source: undefined, - start: { offset: 145, line: 10, column: 5 }, - end: { offset: 152, line: 10, column: 12 }, + start: { offset: 182, line: 11, column: 5 }, + end: { offset: 189, line: 11, column: 12 }, }, }], location: { source: undefined, - start: { offset: 145, line: 10, column: 5 }, - end: { offset: 152, line: 10, column: 12 }, + start: { offset: 182, line: 11, column: 5 }, + end: { offset: 189, line: 11, column: 12 }, }, }, location: { source: undefined, - start: { offset: 141, line: 10, column: 1 }, - end: { offset: 153, line: 11, column: 1 }, + start: { offset: 178, line: 11, column: 1 }, + end: { offset: 190, line: 12, column: 1 }, }, }, ], location: { source: undefined, start: { offset: 0, line: 1, column: 1 }, - end: { offset: 153, line: 11, column: 1 }, + end: { offset: 190, line: 12, column: 1 }, }, }); });