occam-custom-grammars 5.0.1228 → 5.0.1230

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get validateBNF () {
13
+ return validateBNF;
14
+ },
15
+ get validateVocabulary () {
16
+ return validateVocabulary;
17
+ }
18
+ });
19
+ var _necessary = require("necessary");
20
+ var _typesMap = /*#__PURE__*/ _interop_require_default(require("../typesMap"));
21
+ var _nominal = require("../utilities/nominal");
22
+ var _constants = require("../constants");
23
+ var _query = require("../utilities/query");
24
+ var _grammar = require("../utilities/grammar");
25
+ function _interop_require_default(obj) {
26
+ return obj && obj.__esModule ? obj : {
27
+ default: obj
28
+ };
29
+ }
30
+ var first = _necessary.arrayUtilities.first, second = _necessary.arrayUtilities.second;
31
+ var expressionNodesQuery = (0, _query.nodesQuery)("//expression"), ruleNameTerminalNodeQuery = (0, _query.nodeQuery)("/document/rule/name/@*!"), stringLiteralTerminalNodesQuery = (0, _query.nodesQuery)("//stringLiteral/@*!"), significantTokenTypeTerminalNodesQuery = (0, _query.nodesQuery)("//significantTokenType/@*!");
32
+ function validateBNF(bnf, ruleName) {
33
+ var content = bnf, tokens = _grammar.customGrammarBNFLexer.tokenise(content), node = _grammar.customGrammarBNFParser.parse(tokens);
34
+ if (node === null) {
35
+ return;
36
+ }
37
+ var ruleNameTerminalNode = ruleNameTerminalNodeQuery(node);
38
+ if (ruleNameTerminalNode !== null) {
39
+ var name = nameFromRuleNameTerminalNode(ruleNameTerminalNode);
40
+ if (name !== ruleName) {
41
+ throw new Error("The '".concat(name, "' rule should be named '").concat(ruleName, "'."));
42
+ }
43
+ }
44
+ var types = _typesMap.default[ruleName], significantTokenTypeTerminalNodes = significantTokenTypeTerminalNodesQuery(node);
45
+ significantTokenTypeTerminalNodes.forEach(function(significantTokenTypeTerminalNode) {
46
+ var type = typeFromSignificantTokenTypeTerminalNode(significantTokenTypeTerminalNode), typesIncludeType = types.includes(type);
47
+ if (!typesIncludeType) {
48
+ throw new Error("The '".concat(type, "' type is not included in the '").concat(ruleName, "' rule's types."));
49
+ }
50
+ });
51
+ var stringLiteralTerminalNodes = stringLiteralTerminalNodesQuery(node);
52
+ stringLiteralTerminalNodes.forEach(function(stringLiteralTerminalNode) {
53
+ var content = contentFromStringLiteralTerminalNode(stringLiteralTerminalNode);
54
+ if (content === _constants.UNDERSCORE_CHARACTER) {
55
+ throw new Error('The "'.concat(content, '" string literal cannot be an underscore.'));
56
+ }
57
+ var tokens = _nominal.nominalLexer.tokenise(content), tokensLength = tokens.length;
58
+ if (tokensLength !== 1) {
59
+ throw new Error('Tokenising the "'.concat(content, '" string literal does not result in a single token.'));
60
+ }
61
+ var firstToken = first(tokens), token = firstToken, type = token.getType(), typesIncludeType = types.includes(type);
62
+ if (!typesIncludeType) {
63
+ throw new Error('The "'.concat(content, "\" string literal's token's '").concat(type, "' type is not included in the '").concat(ruleName, "' rule's types."));
64
+ }
65
+ });
66
+ }
67
+ function validateVocabulary(vocabulary) {
68
+ var content = vocabulary, tokens = _grammar.customGrammarVocabularyLexer.tokenise(content), node = _grammar.customGrammarVocabularyParser.parse(tokens);
69
+ if (node === null) {
70
+ return;
71
+ }
72
+ var expressionNodes = expressionNodesQuery(node);
73
+ expressionNodes.forEach(function(expressionNode) {
74
+ var content = contentFromExpressionNode(expressionNode), tokens = _nominal.nominalLexer.tokenise(content), tokensLength = tokens.length;
75
+ if (tokensLength > 1) {
76
+ throw new Error("Tokenising the '".concat(content, "' content results in more than one token."));
77
+ }
78
+ var firstToken = first(tokens), token = firstToken, type = token.getType();
79
+ if (type !== UNASSIGNED_TYPE) {
80
+ throw new Error("The '".concat(type, "' type of the '").concat(content, "' token is not 'unassigned'."));
81
+ }
82
+ if (content === _constants.UNDERSCORE_CHARACTER) {
83
+ throw new Error("The '".concat(content, "' token cannot be an underscore."));
84
+ }
85
+ });
86
+ }
87
+ function nameFromRuleNameTerminalNode(ruleNameTerminalNode) {
88
+ var name;
89
+ var content = ruleNameTerminalNode.getContent();
90
+ name = content; ///
91
+ return name;
92
+ }
93
+ function contentFromStringLiteralTerminalNode(stringLiteralTerminalNode) {
94
+ var content;
95
+ content = stringLiteralTerminalNode.getContent();
96
+ var matches = content.match(/"([^"]*)"/), secondMatch = second(matches);
97
+ content = secondMatch; ///
98
+ return content;
99
+ }
100
+ function typeFromSignificantTokenTypeTerminalNode(significantTokenTypeTerminalNode) {
101
+ var type;
102
+ var content = significantTokenTypeTerminalNode.getContent(), matches = content.match(/\[([^\]]*)\]/), secondMatch = second(matches);
103
+ type = secondMatch; ///
104
+ return type;
105
+ }
106
+
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgdHlwZXNNYXAgZnJvbSBcIi4uL3R5cGVzTWFwXCI7XG5cbmltcG9ydCB7IG5vbWluYWxMZXhlciB9IGZyb20gXCIuLi91dGlsaXRpZXMvbm9taW5hbFwiO1xuaW1wb3J0IHsgVU5ERVJTQ09SRV9DSEFSQUNURVIgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIG5vZGVzUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBjdXN0b21HcmFtbWFyQk5GTGV4ZXIsIGN1c3RvbUdyYW1tYXJCTkZQYXJzZXIsIGN1c3RvbUdyYW1tYXJWb2NhYnVsYXJ5TGV4ZXIsIGN1c3RvbUdyYW1tYXJWb2NhYnVsYXJ5UGFyc2VyIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ncmFtbWFyXCI7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNvbnN0IGV4cHJlc3Npb25Ob2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi8vZXhwcmVzc2lvblwiKSxcbiAgICAgIHJ1bGVOYW1lVGVybWluYWxOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZG9jdW1lbnQvcnVsZS9uYW1lL0AqIVwiKSxcbiAgICAgIHN0cmluZ0xpdGVyYWxUZXJtaW5hbE5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiLy9zdHJpbmdMaXRlcmFsL0AqIVwiKSxcbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlVGVybWluYWxOb2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi8vc2lnbmlmaWNhbnRUb2tlblR5cGUvQCohXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCTkYoYm5mLCBydWxlTmFtZSkge1xuICBjb25zdCBjb250ZW50ID0gYm5mLFxuICAgICAgICB0b2tlbnMgPSBjdXN0b21HcmFtbWFyQk5GTGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgIG5vZGUgPSBjdXN0b21HcmFtbWFyQk5GUGFyc2VyLnBhcnNlKHRva2Vucyk7XG5cbiAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBydWxlTmFtZVRlcm1pbmFsTm9kZSA9IHJ1bGVOYW1lVGVybWluYWxOb2RlUXVlcnkobm9kZSk7XG5cbiAgaWYgKHJ1bGVOYW1lVGVybWluYWxOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgbmFtZSA9IG5hbWVGcm9tUnVsZU5hbWVUZXJtaW5hbE5vZGUocnVsZU5hbWVUZXJtaW5hbE5vZGUpO1xuXG4gICAgaWYgKG5hbWUgIT09IHJ1bGVOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtuYW1lfScgcnVsZSBzaG91bGQgYmUgbmFtZWQgJyR7cnVsZU5hbWV9Jy5gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0eXBlcyA9IHR5cGVzTWFwW3J1bGVOYW1lXSxcbiAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVUZXJtaW5hbE5vZGVzID0gc2lnbmlmaWNhbnRUb2tlblR5cGVUZXJtaW5hbE5vZGVzUXVlcnkobm9kZSk7XG5cbiAgc2lnbmlmaWNhbnRUb2tlblR5cGVUZXJtaW5hbE5vZGVzLmZvckVhY2goKHNpZ25pZmljYW50VG9rZW5UeXBlVGVybWluYWxOb2RlKSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHR5cGVGcm9tU2lnbmlmaWNhbnRUb2tlblR5cGVUZXJtaW5hbE5vZGUoc2lnbmlmaWNhbnRUb2tlblR5cGVUZXJtaW5hbE5vZGUpLFxuICAgICAgICAgIHR5cGVzSW5jbHVkZVR5cGUgPSB0eXBlcy5pbmNsdWRlcyh0eXBlKTtcblxuICAgIGlmICghdHlwZXNJbmNsdWRlVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7dHlwZX0nIHR5cGUgaXMgbm90IGluY2x1ZGVkIGluIHRoZSAnJHtydWxlTmFtZX0nIHJ1bGUncyB0eXBlcy5gKVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qgc3RyaW5nTGl0ZXJhbFRlcm1pbmFsTm9kZXMgPSBzdHJpbmdMaXRlcmFsVGVybWluYWxOb2Rlc1F1ZXJ5KG5vZGUpO1xuXG4gIHN0cmluZ0xpdGVyYWxUZXJtaW5hbE5vZGVzLmZvckVhY2goKHN0cmluZ0xpdGVyYWxUZXJtaW5hbE5vZGUpID0+IHtcbiAgICBjb25zdCBjb250ZW50ID0gY29udGVudEZyb21TdHJpbmdMaXRlcmFsVGVybWluYWxOb2RlKHN0cmluZ0xpdGVyYWxUZXJtaW5hbE5vZGUpO1xuXG4gICAgaWYgKGNvbnRlbnQgPT09IFVOREVSU0NPUkVfQ0hBUkFDVEVSKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBcIiR7Y29udGVudH1cIiBzdHJpbmcgbGl0ZXJhbCBjYW5ub3QgYmUgYW4gdW5kZXJzY29yZS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbnMgPSBub21pbmFsTGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgICAgdG9rZW5zTGVuZ3RoID0gdG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0b2tlbnNMZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVG9rZW5pc2luZyB0aGUgXCIke2NvbnRlbnR9XCIgc3RyaW5nIGxpdGVyYWwgZG9lcyBub3QgcmVzdWx0IGluIGEgc2luZ2xlIHRva2VuLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0VG9rZW4gPSBmaXJzdCh0b2tlbnMpLFxuICAgICAgICAgIHRva2VuID0gZmlyc3RUb2tlbiwgLy8vXG4gICAgICAgICAgdHlwZSA9IHRva2VuLmdldFR5cGUoKSxcbiAgICAgICAgICB0eXBlc0luY2x1ZGVUeXBlID0gdHlwZXMuaW5jbHVkZXModHlwZSk7XG5cbiAgICBpZiAoIXR5cGVzSW5jbHVkZVR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIFwiJHtjb250ZW50fVwiIHN0cmluZyBsaXRlcmFsJ3MgdG9rZW4ncyAnJHt0eXBlfScgdHlwZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlICcke3J1bGVOYW1lfScgcnVsZSdzIHR5cGVzLmApXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVm9jYWJ1bGFyeSh2b2NhYnVsYXJ5KSB7XG4gIGNvbnN0IGNvbnRlbnQgPSB2b2NhYnVsYXJ5LCAvLy9cbiAgICAgICAgdG9rZW5zID0gY3VzdG9tR3JhbW1hclZvY2FidWxhcnlMZXhlci50b2tlbmlzZShjb250ZW50KSxcbiAgICAgICAgbm9kZSA9IGN1c3RvbUdyYW1tYXJWb2NhYnVsYXJ5UGFyc2VyLnBhcnNlKHRva2Vucyk7XG5cbiAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBleHByZXNzaW9uTm9kZXMgPSBleHByZXNzaW9uTm9kZXNRdWVyeShub2RlKTtcblxuICBleHByZXNzaW9uTm9kZXMuZm9yRWFjaCgoZXhwcmVzc2lvbk5vZGUpID0+IHtcbiAgICBjb25zdCBjb250ZW50ID0gY29udGVudEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSksXG4gICAgICAgICAgdG9rZW5zID0gbm9taW5hbExleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICAgIHRva2Vuc0xlbmd0aCA9IHRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodG9rZW5zTGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbmlzaW5nIHRoZSAnJHtjb250ZW50fScgY29udGVudCByZXN1bHRzIGluIG1vcmUgdGhhbiBvbmUgdG9rZW4uYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RUb2tlbiA9IGZpcnN0KHRva2VucyksXG4gICAgICAgICAgdG9rZW4gPSBmaXJzdFRva2VuLFxuICAgICAgICAgIHR5cGUgPSB0b2tlbi5nZXRUeXBlKCk7XG5cbiAgICBpZiAodHlwZSAhPT0gVU5BU1NJR05FRF9UWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHt0eXBlfScgdHlwZSBvZiB0aGUgJyR7Y29udGVudH0nIHRva2VuIGlzIG5vdCAndW5hc3NpZ25lZCcuYCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnQgPT09IFVOREVSU0NPUkVfQ0hBUkFDVEVSKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtjb250ZW50fScgdG9rZW4gY2Fubm90IGJlIGFuIHVuZGVyc2NvcmUuYCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gbmFtZUZyb21SdWxlTmFtZVRlcm1pbmFsTm9kZShydWxlTmFtZVRlcm1pbmFsTm9kZSkge1xuICBsZXQgbmFtZTtcblxuICBjb25zdCBjb250ZW50ID0gcnVsZU5hbWVUZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gIG5hbWUgPSBjb250ZW50OyAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZnVuY3Rpb24gY29udGVudEZyb21TdHJpbmdMaXRlcmFsVGVybWluYWxOb2RlKHN0cmluZ0xpdGVyYWxUZXJtaW5hbE5vZGUpIHtcbiAgbGV0IGNvbnRlbnQ7XG5cbiAgY29udGVudCA9IHN0cmluZ0xpdGVyYWxUZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKC9cIihbXlwiXSopXCIvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgY29udGVudCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuZnVuY3Rpb24gdHlwZUZyb21TaWduaWZpY2FudFRva2VuVHlwZVRlcm1pbmFsTm9kZShzaWduaWZpY2FudFRva2VuVHlwZVRlcm1pbmFsTm9kZSkge1xuICBsZXQgdHlwZTtcblxuICBjb25zdCBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlblR5cGVUZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaCgvXFxbKFteXFxdXSopXFxdLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gIHR5cGUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgcmV0dXJuIHR5cGU7XG59XG4iXSwibmFtZXMiOlsidmFsaWRhdGVCTkYiLCJ2YWxpZGF0ZVZvY2FidWxhcnkiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwic2Vjb25kIiwiZXhwcmVzc2lvbk5vZGVzUXVlcnkiLCJub2Rlc1F1ZXJ5IiwicnVsZU5hbWVUZXJtaW5hbE5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInN0cmluZ0xpdGVyYWxUZXJtaW5hbE5vZGVzUXVlcnkiLCJzaWduaWZpY2FudFRva2VuVHlwZVRlcm1pbmFsTm9kZXNRdWVyeSIsImJuZiIsInJ1bGVOYW1lIiwiY29udGVudCIsInRva2VucyIsImN1c3RvbUdyYW1tYXJCTkZMZXhlciIsInRva2VuaXNlIiwibm9kZSIsImN1c3RvbUdyYW1tYXJCTkZQYXJzZXIiLCJwYXJzZSIsInJ1bGVOYW1lVGVybWluYWxOb2RlIiwibmFtZSIsIm5hbWVGcm9tUnVsZU5hbWVUZXJtaW5hbE5vZGUiLCJFcnJvciIsInR5cGVzIiwidHlwZXNNYXAiLCJzaWduaWZpY2FudFRva2VuVHlwZVRlcm1pbmFsTm9kZXMiLCJmb3JFYWNoIiwic2lnbmlmaWNhbnRUb2tlblR5cGVUZXJtaW5hbE5vZGUiLCJ0eXBlIiwidHlwZUZyb21TaWduaWZpY2FudFRva2VuVHlwZVRlcm1pbmFsTm9kZSIsInR5cGVzSW5jbHVkZVR5cGUiLCJpbmNsdWRlcyIsInN0cmluZ0xpdGVyYWxUZXJtaW5hbE5vZGVzIiwic3RyaW5nTGl0ZXJhbFRlcm1pbmFsTm9kZSIsImNvbnRlbnRGcm9tU3RyaW5nTGl0ZXJhbFRlcm1pbmFsTm9kZSIsIlVOREVSU0NPUkVfQ0hBUkFDVEVSIiwibm9taW5hbExleGVyIiwidG9rZW5zTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3RUb2tlbiIsInRva2VuIiwiZ2V0VHlwZSIsInZvY2FidWxhcnkiLCJjdXN0b21HcmFtbWFyVm9jYWJ1bGFyeUxleGVyIiwiY3VzdG9tR3JhbW1hclZvY2FidWxhcnlQYXJzZXIiLCJleHByZXNzaW9uTm9kZXMiLCJleHByZXNzaW9uTm9kZSIsImNvbnRlbnRGcm9tRXhwcmVzc2lvbk5vZGUiLCJVTkFTU0lHTkVEX1RZUEUiLCJnZXRDb250ZW50IiwibWF0Y2hlcyIsIm1hdGNoIiwic2Vjb25kTWF0Y2giXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWtCZ0JBO2VBQUFBOztRQTBEQUM7ZUFBQUE7Ozt5QkExRWU7K0RBRVY7dUJBRVE7eUJBQ1E7cUJBQ0M7dUJBQ3FGOzs7Ozs7QUFFM0gsSUFBUUMsUUFBa0JDLHlCQUFjLENBQWhDRCxPQUFPRSxTQUFXRCx5QkFBYyxDQUF6QkM7QUFFZixJQUFNQyx1QkFBdUJDLElBQUFBLGlCQUFVLEVBQUMsaUJBQ2xDQyw0QkFBNEJDLElBQUFBLGdCQUFTLEVBQUMsNEJBQ3RDQyxrQ0FBa0NILElBQUFBLGlCQUFVLEVBQUMsd0JBQzdDSSx5Q0FBeUNKLElBQUFBLGlCQUFVLEVBQUM7QUFFbkQsU0FBU04sWUFBWVcsR0FBRyxFQUFFQyxRQUFRO0lBQ3ZDLElBQU1DLFVBQVVGLEtBQ1ZHLFNBQVNDLDhCQUFxQixDQUFDQyxRQUFRLENBQUNILFVBQ3hDSSxPQUFPQywrQkFBc0IsQ0FBQ0MsS0FBSyxDQUFDTDtJQUUxQyxJQUFJRyxTQUFTLE1BQU07UUFDakI7SUFDRjtJQUVBLElBQU1HLHVCQUF1QmIsMEJBQTBCVTtJQUV2RCxJQUFJRyx5QkFBeUIsTUFBTTtRQUNqQyxJQUFNQyxPQUFPQyw2QkFBNkJGO1FBRTFDLElBQUlDLFNBQVNULFVBQVU7WUFDckIsTUFBTSxJQUFJVyxNQUFNLEFBQUMsUUFBc0NYLE9BQS9CUyxNQUFLLDRCQUFtQyxPQUFUVCxVQUFTO1FBQ2xF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
@@ -2,60 +2,23 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get expressionsFromVocabulary () {
5
+ Object.defineProperty(exports, "expressionsFromVocabulary", {
6
+ enumerable: true,
7
+ get: function() {
13
8
  return expressionsFromVocabulary;
14
- },
15
- get validateVocabulary () {
16
- return validateVocabulary;
17
9
  }
18
10
  });
19
- var _occamlexers = require("occam-lexers");
20
- var _occamgrammars = require("occam-grammars");
21
11
  var _necessary = require("necessary");
22
12
  var _query = require("../utilities/query");
23
- var _constants = require("../constants");
24
- var errorNodesQuery = (0, _query.nodesQuery)("//error"), expressionNodesQuery = (0, _query.nodesQuery)("//expression");
25
- var nominalLexer = _occamlexers.CommonLexer.fromNothing(_occamgrammars.NominalLexer), customGrammarVocabularyLexer = _occamgrammars.CustomGrammarVocabularyLexer.fromNothing(), customGrammarVocabularyParser = _occamgrammars.CustomGrammarVocabularyParser.fromNothing();
26
- var first = _necessary.arrayUtilities.first, second = _necessary.arrayUtilities.second;
27
- function validateVocabulary(vocabulary) {
28
- if (vocabulary === null || vocabulary === _constants.EMPTY_STRING) {
29
- return;
30
- }
31
- var content = vocabulary, tokens = customGrammarVocabularyLexer.tokenise(content), node = customGrammarVocabularyParser.parse(tokens);
32
- if (node === null) {
33
- throw new Error("The vocabulary cannot be parsed.");
34
- }
35
- var errorNodes = errorNodesQuery(node), errorNodesLength = errorNodes.length;
36
- if (errorNodesLength > 0) {
37
- throw new Error("The vocabulary contains errors.");
38
- }
39
- var expressionNodes = expressionNodesQuery(node);
40
- expressionNodes.forEach(function(expressionNode) {
41
- var content = contentFromExpressionNode(expressionNode), tokens = nominalLexer.tokenise(content), tokensLength = tokens.length;
42
- if (tokensLength > 1) {
43
- throw new Error("Tokenising '".concat(content, "' results in more than one token."));
44
- }
45
- var firstToken = first(tokens), token = firstToken, type = token.getType();
46
- if (type !== _constants.UNASSIGNED_TYPE) {
47
- throw new Error("The '".concat(type, "' type of the '").concat(content, "' token is not 'unassigned'."));
48
- }
49
- if (content === _constants.UNDERSCORE_CHARACTER) {
50
- throw new Error("The '".concat(content, "' token cannot be an underscore."));
51
- }
52
- });
53
- }
13
+ var _grammar = require("../utilities/grammar");
14
+ var second = _necessary.arrayUtilities.second;
15
+ var expressionNodesQuery = (0, _query.nodesQuery)("//expression");
54
16
  function expressionsFromVocabulary(vocabulary, expressions) {
55
- if (vocabulary === null || vocabulary === _constants.EMPTY_STRING) {
17
+ var content = vocabulary, tokens = _grammar.customGrammarVocabularyLexer.tokenise(content), node = _grammar.customGrammarVocabularyParser.parse(tokens);
18
+ if (node === null) {
56
19
  return;
57
20
  }
58
- var content = vocabulary, tokens = customGrammarVocabularyLexer.tokenise(content), node = customGrammarVocabularyParser.parse(tokens), expressionNodes = expressionNodesQuery(node);
21
+ var expressionNodes = expressionNodesQuery(node);
59
22
  expressionNodes.forEach(function(expressionNode) {
60
23
  var content = contentFromExpressionNode(expressionNode), expression = content; ///
61
24
  expressions.push(expression);
@@ -66,4 +29,4 @@ function contentFromExpressionNode(expressionNode) {
66
29
  return content;
67
30
  }
68
31
 
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdm9jYWJ1bGFyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5pbXBvcnQgeyBOb21pbmFsTGV4ZXIgfSBmcm9tIFwib2NjYW0tZ3JhbW1hcnNcIjtcbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgQ3VzdG9tR3JhbW1hclZvY2FidWxhcnlMZXhlciwgQ3VzdG9tR3JhbW1hclZvY2FidWxhcnlQYXJzZXIgfSBmcm9tIFwib2NjYW0tZ3JhbW1hcnNcIjtcblxuaW1wb3J0IHsgbm9kZXNRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORywgVU5BU1NJR05FRF9UWVBFLCBVTkRFUlNDT1JFX0NIQVJBQ1RFUiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgZXJyb3JOb2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi8vZXJyb3JcIiksXG4gICAgICBleHByZXNzaW9uTm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvL2V4cHJlc3Npb25cIilcblxuY29uc3Qgbm9taW5hbExleGVyID0gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoTm9taW5hbExleGVyKSxcbiAgICAgIGN1c3RvbUdyYW1tYXJWb2NhYnVsYXJ5TGV4ZXIgPSBDdXN0b21HcmFtbWFyVm9jYWJ1bGFyeUxleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBjdXN0b21HcmFtbWFyVm9jYWJ1bGFyeVBhcnNlciA9IEN1c3RvbUdyYW1tYXJWb2NhYnVsYXJ5UGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVZvY2FidWxhcnkodm9jYWJ1bGFyeSkge1xuICBpZiAoKHZvY2FidWxhcnkgPT09IG51bGwpIHx8ICh2b2NhYnVsYXJ5ID09PSBFTVBUWV9TVFJJTkcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29udGVudCA9IHZvY2FidWxhcnksIC8vL1xuICAgICAgICB0b2tlbnMgPSBjdXN0b21HcmFtbWFyVm9jYWJ1bGFyeUxleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICBub2RlID0gY3VzdG9tR3JhbW1hclZvY2FidWxhcnlQYXJzZXIucGFyc2UodG9rZW5zKTtcblxuICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSB2b2NhYnVsYXJ5IGNhbm5vdCBiZSBwYXJzZWQuXCIpO1xuICB9XG5cbiAgY29uc3QgZXJyb3JOb2RlcyA9IGVycm9yTm9kZXNRdWVyeShub2RlKSxcbiAgICAgICAgZXJyb3JOb2Rlc0xlbmd0aCA9IGVycm9yTm9kZXMubGVuZ3RoO1xuXG4gIGlmIChlcnJvck5vZGVzTGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSB2b2NhYnVsYXJ5IGNvbnRhaW5zIGVycm9ycy5cIik7XG4gIH1cblxuICBjb25zdCBleHByZXNzaW9uTm9kZXMgPSBleHByZXNzaW9uTm9kZXNRdWVyeShub2RlKTtcblxuICBleHByZXNzaW9uTm9kZXMuZm9yRWFjaCgoZXhwcmVzc2lvbk5vZGUpID0+IHtcbiAgICBjb25zdCBjb250ZW50ID0gY29udGVudEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSksXG4gICAgICAgICAgdG9rZW5zID0gbm9taW5hbExleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICAgIHRva2Vuc0xlbmd0aCA9IHRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodG9rZW5zTGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbmlzaW5nICcke2NvbnRlbnR9JyByZXN1bHRzIGluIG1vcmUgdGhhbiBvbmUgdG9rZW4uYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RUb2tlbiA9IGZpcnN0KHRva2VucyksXG4gICAgICAgICAgdG9rZW4gPSBmaXJzdFRva2VuLFxuICAgICAgICAgIHR5cGUgPSB0b2tlbi5nZXRUeXBlKCk7XG5cbiAgICBpZiAodHlwZSAhPT0gVU5BU1NJR05FRF9UWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHt0eXBlfScgdHlwZSBvZiB0aGUgJyR7Y29udGVudH0nIHRva2VuIGlzIG5vdCAndW5hc3NpZ25lZCcuYCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnQgPT09IFVOREVSU0NPUkVfQ0hBUkFDVEVSKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtjb250ZW50fScgdG9rZW4gY2Fubm90IGJlIGFuIHVuZGVyc2NvcmUuYCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25zRnJvbVZvY2FidWxhcnkodm9jYWJ1bGFyeSwgZXhwcmVzc2lvbnMpIHtcbiAgaWYgKCh2b2NhYnVsYXJ5ID09PSBudWxsKSB8fCAodm9jYWJ1bGFyeSA9PT0gRU1QVFlfU1RSSU5HKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnQgPSB2b2NhYnVsYXJ5LCAvLy9cbiAgICAgICAgdG9rZW5zID0gY3VzdG9tR3JhbW1hclZvY2FidWxhcnlMZXhlci50b2tlbmlzZShjb250ZW50KSxcbiAgICAgICAgbm9kZSA9IGN1c3RvbUdyYW1tYXJWb2NhYnVsYXJ5UGFyc2VyLnBhcnNlKHRva2VucyksXG4gICAgICAgIGV4cHJlc3Npb25Ob2RlcyA9IGV4cHJlc3Npb25Ob2Rlc1F1ZXJ5KG5vZGUpO1xuXG4gIGV4cHJlc3Npb25Ob2Rlcy5mb3JFYWNoKChleHByZXNzaW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBjb250ZW50RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSxcbiAgICAgICAgICBleHByZXNzaW9uID0gY29udGVudDsgLy8vXG5cbiAgICBleHByZXNzaW9ucy5wdXNoKGV4cHJlc3Npb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY29udGVudEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSkge1xuICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBleHByZXNzaW9uTm9kZSwgLy8vXG4gICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBzZWNvbmRDaGlsZE5vZGUgPSBzZWNvbmQoY2hpbGROb2RlcyksXG4gICAgICAgIHVuYXNzaWduZWRUZXJtaW5hbE5vZGUgPSBzZWNvbmRDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgY29udGVudCA9IHVuYXNzaWduZWRUZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gIHJldHVybiBjb250ZW50O1xufVxuIl0sIm5hbWVzIjpbImV4cHJlc3Npb25zRnJvbVZvY2FidWxhcnkiLCJ2YWxpZGF0ZVZvY2FidWxhcnkiLCJlcnJvck5vZGVzUXVlcnkiLCJub2Rlc1F1ZXJ5IiwiZXhwcmVzc2lvbk5vZGVzUXVlcnkiLCJub21pbmFsTGV4ZXIiLCJDb21tb25MZXhlciIsImZyb21Ob3RoaW5nIiwiTm9taW5hbExleGVyIiwiY3VzdG9tR3JhbW1hclZvY2FidWxhcnlMZXhlciIsIkN1c3RvbUdyYW1tYXJWb2NhYnVsYXJ5TGV4ZXIiLCJjdXN0b21HcmFtbWFyVm9jYWJ1bGFyeVBhcnNlciIsIkN1c3RvbUdyYW1tYXJWb2NhYnVsYXJ5UGFyc2VyIiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsInNlY29uZCIsInZvY2FidWxhcnkiLCJFTVBUWV9TVFJJTkciLCJjb250ZW50IiwidG9rZW5zIiwidG9rZW5pc2UiLCJub2RlIiwicGFyc2UiLCJFcnJvciIsImVycm9yTm9kZXMiLCJlcnJvck5vZGVzTGVuZ3RoIiwibGVuZ3RoIiwiZXhwcmVzc2lvbk5vZGVzIiwiZm9yRWFjaCIsImV4cHJlc3Npb25Ob2RlIiwiY29udGVudEZyb21FeHByZXNzaW9uTm9kZSIsInRva2Vuc0xlbmd0aCIsImZpcnN0VG9rZW4iLCJ0b2tlbiIsInR5cGUiLCJnZXRUeXBlIiwiVU5BU1NJR05FRF9UWVBFIiwiVU5ERVJTQ09SRV9DSEFSQUNURVIiLCJleHByZXNzaW9ucyIsImV4cHJlc3Npb24iLCJwdXNoIiwibm9uVGVybWluYWxOb2RlIiwiY2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJzZWNvbmRDaGlsZE5vZGUiLCJ1bmFzc2lnbmVkVGVybWluYWxOb2RlIiwiZ2V0Q29udGVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBZ0VnQkE7ZUFBQUE7O1FBN0NBQztlQUFBQTs7OzJCQWpCWTs2QkFDQzt5QkFDRTtxQkFHSjt5QkFDeUM7QUFFcEUsSUFBTUMsa0JBQWtCQyxJQUFBQSxpQkFBVSxFQUFDLFlBQzdCQyx1QkFBdUJELElBQUFBLGlCQUFVLEVBQUM7QUFFeEMsSUFBTUUsZUFBZUMsd0JBQVcsQ0FBQ0MsV0FBVyxDQUFDQywyQkFBWSxHQUNuREMsK0JBQStCQywyQ0FBNEIsQ0FBQ0gsV0FBVyxJQUN2RUksZ0NBQWdDQyw0Q0FBNkIsQ0FBQ0wsV0FBVztBQUUvRSxJQUFRTSxRQUFrQkMseUJBQWMsQ0FBaENELE9BQU9FLFNBQVdELHlCQUFjLENBQXpCQztBQUVSLFNBQVNkLG1CQUFtQmUsVUFBVTtJQUMzQyxJQUFJLEFBQUNBLGVBQWUsUUFBVUEsZUFBZUMsdUJBQVksRUFBRztRQUMxRDtJQUNGO0lBRUEsSUFBTUMsVUFBVUYsWUFDVkcsU0FBU1YsNkJBQTZCVyxRQUFRLENBQUNGLFVBQy9DRyxPQUFPViw4QkFBOEJXLEtBQUssQ0FBQ0g7SUFFakQsSUFBSUUsU0FBUyxNQUFNO1FBQ2pCLE1BQU0sSUFBSUUsTUFBTTtJQUNsQjtJQUVBLElBQU1DLGFBQWF0QixnQkFBZ0JtQixPQUM3QkksbUJBQW1CRCxXQUFXRSxNQUFNO0lBRTFDLElBQUlELG1CQUFtQixHQUFHO1FBQ3hCLE1BQU0sSUFBSUYsTUFBTTtJQUNsQjtJQUVBLElBQU1JLGtCQUFrQnZCLHFCQUFxQmlCO0lBRTdDTSxnQkFBZ0JDLE9BQU8sQ0FBQyxTQUFDQztRQUN2QixJQUFNWCxVQUFVWSwwQkFBMEJELGlCQUNwQ1YsU0FBU2QsYUFBYWUsUUFBUSxDQUFDRixVQUMvQmEsZUFBZVosT0FBT08sTUFBTTtRQUVsQyxJQUFJSyxlQUFlLEdBQUc7WUFDcEIsTUFBTSxJQUFJUixNQUFNLEFBQUMsZUFBc0IsT0FBUkwsU0FBUTtRQUN6QztRQUVBLElBQU1jLGFBQWFuQixNQUFNTSxTQUNuQmMsUUFBUUQsWUFDUkUsT0FBT0QsTUFBTUUsT0FBTztRQUUxQixJQUFJRCxTQUFTRSwwQkFBZSxFQUFFO1lBQzVCLE1BQU0sSUFBSWIsTUFBTSxBQUFDLFFBQTZCTCxPQUF0QmdCLE1BQUssbUJBQXlCLE9BQVJoQixTQUFRO1FBQ3hEO1FBRUEsSUFBSUEsWUFBWW1CLCtCQUFvQixFQUFFO1lBQ3BDLE1BQU0sSUFBSWQsTUFBTSxBQUFDLFFBQWUsT0FBUkwsU0FBUTtRQUNsQztJQUNGO0FBQ0Y7QUFFTyxTQUFTbEIsMEJBQTBCZ0IsVUFBVSxFQUFFc0IsV0FBVztJQUMvRCxJQUFJLEFBQUN0QixlQUFlLFFBQVVBLGVBQWVDLHVCQUFZLEVBQUc7UUFDMUQ7SUFDRjtJQUVBLElBQU1DLFVBQVVGLFlBQ1ZHLFNBQVNWLDZCQUE2QlcsUUFBUSxDQUFDRixVQUMvQ0csT0FBT1YsOEJBQThCVyxLQUFLLENBQUNILFNBQzNDUSxrQkFBa0J2QixxQkFBcUJpQjtJQUU3Q00sZ0JBQWdCQyxPQUFPLENBQUMsU0FBQ0M7UUFDdkIsSUFBTVgsVUFBVVksMEJBQTBCRCxpQkFDcENVLGFBQWFyQixTQUFTLEdBQUc7UUFFL0JvQixZQUFZRSxJQUFJLENBQUNEO0lBQ25CO0FBQ0Y7QUFFQSxTQUFTVCwwQkFBMEJELGNBQWM7SUFDL0MsSUFBTVksa0JBQWtCWixnQkFDbEJhLGFBQWFELGdCQUFnQkUsYUFBYSxJQUMxQ0Msa0JBQWtCN0IsT0FBTzJCLGFBQ3pCRyx5QkFBeUJELGlCQUN6QjFCLFVBQVUyQix1QkFBdUJDLFVBQVU7SUFFakQsT0FBTzVCO0FBQ1QifQ==
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdm9jYWJ1bGFyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IG5vZGVzUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBjdXN0b21HcmFtbWFyVm9jYWJ1bGFyeUxleGVyLCBjdXN0b21HcmFtbWFyVm9jYWJ1bGFyeVBhcnNlciB9IGZyb20gXCIuLi91dGlsaXRpZXMvZ3JhbW1hclwiXG5cbmNvbnN0IHsgc2Vjb25kIH0gPSBhcnJheVV0aWxpdGllcztcblxuY29uc3QgZXhwcmVzc2lvbk5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiLy9leHByZXNzaW9uXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbnNGcm9tVm9jYWJ1bGFyeSh2b2NhYnVsYXJ5LCBleHByZXNzaW9ucykge1xuICBjb25zdCBjb250ZW50ID0gdm9jYWJ1bGFyeSwgLy8vXG4gICAgICAgIHRva2VucyA9IGN1c3RvbUdyYW1tYXJWb2NhYnVsYXJ5TGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgIG5vZGUgPSBjdXN0b21HcmFtbWFyVm9jYWJ1bGFyeVBhcnNlci5wYXJzZSh0b2tlbnMpO1xuXG4gIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZXhwcmVzc2lvbk5vZGVzID0gZXhwcmVzc2lvbk5vZGVzUXVlcnkobm9kZSk7XG5cbiAgZXhwcmVzc2lvbk5vZGVzLmZvckVhY2goKGV4cHJlc3Npb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgY29udGVudCA9IGNvbnRlbnRGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUpLFxuICAgICAgICAgIGV4cHJlc3Npb24gPSBjb250ZW50OyAvLy9cblxuICAgIGV4cHJlc3Npb25zLnB1c2goZXhwcmVzc2lvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb250ZW50RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSB7XG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAvLy9cbiAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIHNlY29uZENoaWxkTm9kZSA9IHNlY29uZChjaGlsZE5vZGVzKSxcbiAgICAgICAgdW5hc3NpZ25lZFRlcm1pbmFsTm9kZSA9IHNlY29uZENoaWxkTm9kZSwgIC8vL1xuICAgICAgICBjb250ZW50ID0gdW5hc3NpZ25lZFRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iXSwibmFtZXMiOlsiZXhwcmVzc2lvbnNGcm9tVm9jYWJ1bGFyeSIsInNlY29uZCIsImFycmF5VXRpbGl0aWVzIiwiZXhwcmVzc2lvbk5vZGVzUXVlcnkiLCJub2Rlc1F1ZXJ5Iiwidm9jYWJ1bGFyeSIsImV4cHJlc3Npb25zIiwiY29udGVudCIsInRva2VucyIsImN1c3RvbUdyYW1tYXJWb2NhYnVsYXJ5TGV4ZXIiLCJ0b2tlbmlzZSIsIm5vZGUiLCJjdXN0b21HcmFtbWFyVm9jYWJ1bGFyeVBhcnNlciIsInBhcnNlIiwiZXhwcmVzc2lvbk5vZGVzIiwiZm9yRWFjaCIsImV4cHJlc3Npb25Ob2RlIiwiY29udGVudEZyb21FeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb24iLCJwdXNoIiwibm9uVGVybWluYWxOb2RlIiwiY2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJzZWNvbmRDaGlsZE5vZGUiLCJ1bmFzc2lnbmVkVGVybWluYWxOb2RlIiwiZ2V0Q29udGVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBV2dCQTs7O2VBQUFBOzs7eUJBVGU7cUJBRUo7dUJBQ2lEO0FBRTVFLElBQU0sQUFBRUMsU0FBV0MseUJBQWMsQ0FBekJEO0FBRVIsSUFBTUUsdUJBQXVCQyxJQUFBQSxpQkFBVSxFQUFDO0FBRWpDLFNBQVNKLDBCQUEwQkssVUFBVSxFQUFFQyxXQUFXO0lBQy9ELElBQU1DLFVBQVVGLFlBQ1ZHLFNBQVNDLHFDQUE0QixDQUFDQyxRQUFRLENBQUNILFVBQy9DSSxPQUFPQyxzQ0FBNkIsQ0FBQ0MsS0FBSyxDQUFDTDtJQUVqRCxJQUFJRyxTQUFTLE1BQU07UUFDakI7SUFDRjtJQUVBLElBQU1HLGtCQUFrQlgscUJBQXFCUTtJQUU3Q0csZ0JBQWdCQyxPQUFPLENBQUMsU0FBQ0M7UUFDdkIsSUFBTVQsVUFBVVUsMEJBQTBCRCxpQkFDcENFLGFBQWFYLFNBQVMsR0FBRztRQUUvQkQsWUFBWWEsSUFBSSxDQUFDRDtJQUNuQjtBQUNGO0FBRUEsU0FBU0QsMEJBQTBCRCxjQUFjO0lBQy9DLElBQU1JLGtCQUFrQkosZ0JBQ2xCSyxhQUFhRCxnQkFBZ0JFLGFBQWEsSUFDMUNDLGtCQUFrQnRCLE9BQU9vQixhQUN6QkcseUJBQXlCRCxpQkFDekJoQixVQUFVaUIsdUJBQXVCQyxVQUFVO0lBRWpELE9BQU9sQjtBQUNUIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-custom-grammars",
3
3
  "author": "James Smith",
4
- "version": "5.0.1228",
4
+ "version": "5.0.1230",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-custom-grammars",
7
7
  "description": "Occam's custom grammars.",
@@ -14,7 +14,7 @@
14
14
  "occam-grammar-utilities": "^8.0.345",
15
15
  "occam-grammars": "^1.3.311",
16
16
  "occam-lexers": "^23.1.1",
17
- "occam-parsers": "^23.1.1",
17
+ "occam-parsers": "^23.1.3",
18
18
  "occam-query": "^4.1.109"
19
19
  },
20
20
  "devDependencies": {
package/src/constants.js CHANGED
@@ -2,5 +2,10 @@
2
2
 
3
3
  export const EMPTY_STRING = "";
4
4
  export const VERTICAL_BAR = "|";
5
+ export const VERTICAL_SPACE = `
6
+
7
+ `
5
8
  export const UNASSIGNED_TYPE = "unassigned";
9
+ export const STUFF_RULE_NAME = "stuff";
10
+ export const NONSENSE_RULE_NAME = "nonsense";
6
11
  export const UNDERSCORE_CHARACTER = "_";
@@ -1,17 +1,21 @@
1
1
  "use strict";
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
+ import { specialSymbols } from "occam-lexers";
4
5
  import { parserUtilities } from "occam-parsers";
5
6
  import { eliminateLeftRecursion } from "occam-grammar-utilities";
6
7
 
7
8
  import defaultCustomGrammar from "../customGrammar/default";
8
9
 
9
- import { EMPTY_STRING, VERTICAL_BAR } from "../constants";
10
- import { validateVocabulary, expressionsFromVocabulary } from "../utilities/vocabulary";
10
+ import { expressionsFromVocabulary } from "../utilities/vocabulary";
11
+ import { VERTICAL_BAR, VERTICAL_SPACE } from "../constants";
12
+ import { validateBNF, validateVocabulary } from "../utilities/validate";
13
+ import { TERM_RULE_NAME, STATEMENT_RULE_NAME } from "../ruleNames";
11
14
  import { TYPE_VOCABULARY_NAME, SYMBOL_VOCABULARY_NAME } from "../vocabularyNames";
12
15
 
13
- const { rulesFromBNF } = parserUtilities,
14
- { unshift, backwardsForEach } = arrayUtilities;
16
+ const { opaque } = specialSymbols,
17
+ { rulesFromBNF } = parserUtilities,
18
+ { unshift, forwardsForEach, backwardsForEach } = arrayUtilities;
15
19
 
16
20
  export default class CombinedCustomGrammar {
17
21
  constructor(rules, entries) {
@@ -45,7 +49,7 @@ export default class CombinedCustomGrammar {
45
49
  customGrammars = [ defaultCustomGrammar, ...customGrammars ]; ///
46
50
  }
47
51
 
48
- const rules = rulesFromCustomGrammarsAndDefaultBNF(customGrammars),
52
+ const rules = rulesFromCustomGrammars(customGrammars),
49
53
  entries = entriesFromCustomGrammars(customGrammars),
50
54
  combinedCustomGrammar = new CombinedCustomGrammar(rules, entries);
51
55
 
@@ -57,7 +61,7 @@ export default class CombinedCustomGrammar {
57
61
  customGrammars = [ defaultCustomGrammar, ...customGrammars ]; ///
58
62
  }
59
63
 
60
- const rules = rulesFromCustomGrammarsAndDefaultBNF(customGrammars),
64
+ const rules = rulesFromCustomGrammars(customGrammars),
61
65
  entries = entriesFromCustomGrammars(customGrammars),
62
66
  combinedCustomGrammar = new CombinedCustomGrammar(rules, entries);
63
67
 
@@ -65,16 +69,34 @@ export default class CombinedCustomGrammar {
65
69
  }
66
70
  }
67
71
 
68
- function rulesFromCustomGrammarsAndDefaultBNF(customGrammars) {
69
- const bnfs = customGrammars.map((customGrammar) => {
70
- const bnf = customGrammar.getBNF();
72
+ function rulesFromCustomGrammars(customGrammars) {
73
+ const ruleNames = [
74
+ TERM_RULE_NAME,
75
+ STATEMENT_RULE_NAME,
76
+ ],
77
+ bnfs = ruleNames.map((ruleName) => {
78
+ const bnf = bnfFromCustomGrammars(customGrammars, ruleName);
71
79
 
72
80
  return bnf;
73
81
  }),
74
- bnf = bnfs.join(EMPTY_STRING),
82
+ bnf = bnfs.join(VERTICAL_SPACE),
75
83
  rules = rulesFromBNF(bnf);
76
84
 
77
- combineRules(rules)
85
+ combineRules(rules);
86
+
87
+ const opacity = opaque; ///
88
+
89
+ ruleNames.forEach((ruleName) => {
90
+ const rule = rules.find((rule) => {
91
+ const name = rule.getName();
92
+
93
+ if (name === ruleName) {
94
+ return true;
95
+ }
96
+ });
97
+
98
+ rule.setOpacity(opacity);
99
+ });
78
100
 
79
101
  return rules;
80
102
  }
@@ -117,6 +139,25 @@ function entryFromCustomGrammars(customGrammars, vocabularyName) {
117
139
  return entry;
118
140
  }
119
141
 
142
+ function bnfFromCustomGrammars(customGrammars, ruleName) {
143
+ const bnfs = [];
144
+
145
+ forwardsForEach(customGrammars, (customGrammar) => {
146
+ const bnf = customGrammar.getBNF(ruleName),
147
+ customGrammarDefaultCustomGrammar = customGrammar.isDefaultCustomGrammar();
148
+
149
+ if (!customGrammarDefaultCustomGrammar) {
150
+ validateBNF(bnf, ruleName);
151
+ }
152
+
153
+ bnfs.push(bnf);
154
+ });
155
+
156
+ const bnf = bnfs.join(VERTICAL_SPACE);
157
+
158
+ return bnf;
159
+ }
160
+
120
161
  function combineRules(rules) {
121
162
  let outerIndex = 0,
122
163
  length = rules.length;
@@ -4,13 +4,13 @@ import CustomGrammar from "../customGrammar";
4
4
 
5
5
  import { DEFAULT_CUSTOM_GRAMMAR_NAME } from "../grammarNames";
6
6
 
7
- export const termBNF = `term. ::= "(" argument ")"
7
+ export const termBNF = `term ::= "(" argument ")"
8
8
 
9
9
  | variable
10
10
 
11
11
  ;`;
12
12
 
13
- export const statementBNF = `statement. ::= "(" metaArgument ")"
13
+ export const statementBNF = `statement ::= "(" metaArgument ")"
14
14
 
15
15
  | equality
16
16
 
@@ -34,34 +34,12 @@ export default class CustomGrammar {
34
34
  return this.symbolVocabulary;
35
35
  }
36
36
 
37
- getBNF(ruleName = null) {
37
+ getBNF(ruleName) {
38
38
  let bnf;
39
39
 
40
40
  switch (ruleName) {
41
41
  case TERM_RULE_NAME: bnf = this.termBNF; break;
42
42
  case STATEMENT_RULE_NAME: bnf = this.statementBNF; break;
43
-
44
- default: {
45
- const ruleNames = [
46
- TERM_RULE_NAME,
47
- STATEMENT_RULE_NAME
48
- ],
49
- combinedBNF = ruleNames.reduce((combinedBNF, ruleName) => {
50
- const bnf = this.getBNF(ruleName);
51
-
52
- if (bnf !== EMPTY_STRING) {
53
- combinedBNF = `${combinedBNF}
54
-
55
- ${bnf}`;
56
- }
57
-
58
- return combinedBNF;
59
- }, EMPTY_STRING);
60
-
61
- bnf = combinedBNF; ///
62
-
63
- break;
64
- }
65
43
  }
66
44
 
67
45
  return bnf;
@@ -30,7 +30,7 @@ const { rulesAsString } = rulesUtilities,
30
30
 
31
31
  class View extends Element {
32
32
  keyUpHandler = (event, element) => {
33
- try {
33
+ // try {
34
34
  const bnf = this.getBNF(),
35
35
  name = this.getName(),
36
36
  ruleName = this.getRuleName(),
@@ -78,13 +78,13 @@ class View extends Element {
78
78
  nominalBNF = rulesString; ///
79
79
 
80
80
  this.setNominalBNF(nominalBNF);
81
- } catch (error) {
82
- console.log(error);
83
-
84
- this.clearParseTree();
85
-
86
- this.clearNominalBNF();
87
- }
81
+ // } catch (error) {
82
+ // console.log(error);
83
+ //
84
+ // this.clearParseTree();
85
+ //
86
+ // this.clearNominalBNF();
87
+ // }
88
88
  }
89
89
 
90
90
  changeHandler = (event, element) => {
@@ -132,16 +132,16 @@ class View extends Element {
132
132
  Custom grammar
133
133
  </SubHeading>
134
134
  <NameSelect onChange={changeHandler} />
135
- <SubHeading>
136
- BNF
137
- </SubHeading>
138
- <RuleNameSelect onChange={changeHandler} />
139
- <BNFTextarea onKeyUp={keyUpHandler} />
140
135
  <SubHeading>
141
136
  Vocabulary
142
137
  </SubHeading>
143
138
  <VocabularyNameSelect onChange={changeHandler} />
144
139
  <VocabularyTextarea onKeyUp={keyUpHandler} />
140
+ <SubHeading>
141
+ BNF
142
+ </SubHeading>
143
+ <RuleNameSelect onChange={changeHandler} />
144
+ <BNFTextarea onKeyUp={keyUpHandler} />
145
145
  <SubHeading>
146
146
  Start rule
147
147
  </SubHeading>
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import { nominalParser } from "./utilities/nominal";
6
+ import { TERM_RULE_NAME, STATEMENT_RULE_NAME } from "./ruleNames";
7
+ import { STUFF_RULE_NAME, NONSENSE_RULE_NAME } from "./constants";
8
+
9
+ const { first } = arrayUtilities;
10
+
11
+ const ruleMap = nominalParser.getRuleMap(),
12
+ stuffRule = ruleMap[STUFF_RULE_NAME],
13
+ nonsenseRule = ruleMap[NONSENSE_RULE_NAME],
14
+ stuffTypes = typesFromRule(stuffRule),
15
+ nonsenseTypes = typesFromRule(nonsenseRule),
16
+ termTypes = stuffTypes, ///
17
+ statementTypes = nonsenseTypes,
18
+ typesMap = {
19
+ [TERM_RULE_NAME]: termTypes,
20
+ [STATEMENT_RULE_NAME]: statementTypes
21
+ };
22
+
23
+ export default typesMap;
24
+
25
+ function typesFromRule(rule) {
26
+ let parts;
27
+
28
+ const definitions = rule.getDefinitions(),
29
+ firstDDefinition = first(definitions),
30
+ definition = firstDDefinition; ///
31
+
32
+ parts = definition.getParts();
33
+
34
+ const firstPart = first(parts),
35
+ oneOrMorePartsPart = firstPart, ///
36
+ part = oneOrMorePartsPart.getPart(),
37
+ choiceOrPartsPart = part; ///
38
+
39
+ parts = choiceOrPartsPart.getParts();
40
+
41
+ const types = parts.map((part) => {
42
+ const significantTokenTypePart = part, ///
43
+ significantTokenType = significantTokenTypePart.getSignificantTokenType(),
44
+ type = significantTokenType; ///
45
+
46
+ return type;
47
+ });
48
+
49
+ return types;
50
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ import { CustomGrammarBNFLexer, CustomGrammarBNFParser } from "occam-grammars";
4
+ import { CustomGrammarVocabularyLexer, CustomGrammarVocabularyParser } from "occam-grammars";
5
+
6
+ export const customGrammarBNFLexer = CustomGrammarBNFLexer.fromNothing();
7
+
8
+ export const customGrammarBNFParser = CustomGrammarBNFParser.fromNothing();
9
+
10
+ export const customGrammarVocabularyLexer = CustomGrammarVocabularyLexer.fromNothing();
11
+
12
+ export const customGrammarVocabularyParser = CustomGrammarVocabularyParser.fromNothing();
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ import { CommonLexer } from "occam-lexers";
4
+ import { CommonParser } from "occam-parsers";
5
+ import { NominalLexer, NominalParser } from "occam-grammars";
6
+
7
+ export const nominalLexer = CommonLexer.fromNothing(NominalLexer);
8
+
9
+ export const nominalParser = CommonParser.fromNothing(NominalParser);