occam-verify-cli 0.0.477 → 0.0.479

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.
@@ -23,16 +23,19 @@ function verifyStatement(statementNode, proofContext) {
23
23
  proofContext.begin(statementNode);
24
24
  var equalityNode = equalityNodeQuery(statementNode), statementString = (0, _string.nodeAsString)(statementNode), typeAssertionNode = typeAssertionNodeQuery(statementNode);
25
25
  proofContext.debug("Verifying the '".concat(statementString, "' statement..."));
26
- if (equalityNode !== null) {
26
+ if (false) {
27
+ ///
28
+ } else if (equalityNode !== null) {
27
29
  var equalityVerified = (0, _equality.default)(equalityNode, proofContext);
28
30
  statementVerified = equalityVerified; ///
29
- }
30
- if (typeAssertionNode !== null) {
31
+ } else if (typeAssertionNode !== null) {
31
32
  var typeAssertionVerified = (0, _type.default)(typeAssertionNode, proofContext);
32
33
  statementVerified = typeAssertionVerified; ///
34
+ } else {
35
+ statementVerified = true;
33
36
  }
34
37
  statementVerified ? proofContext.complete(statementNode) : proofContext.halt(statementNode);
35
38
  return statementVerified;
36
39
  }
37
40
 
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgdmVyaWZ5RXF1YWxpdHkgZnJvbSBcIi4uL3ZlcmlmeS9lcXVhbGl0eVwiO1xuaW1wb3J0IHZlcmlmeVR5cGVBc3NlcnRpb24gZnJvbSBcIi4uL3ZlcmlmeS9hc3NlcnRpb24vdHlwZVwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBub2RlQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5jb25zdCBlcXVhbGl0eU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvZXF1YWxpdHkhXCIpLFxuICAgICAgdHlwZUFzc2VydGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvdHlwZUFzc2VydGlvbiFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkID0gZmFsc2U7XG5cbiAgcHJvb2ZDb250ZXh0LmJlZ2luKHN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5Tm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgIHR5cGVBc3NlcnRpb25Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBwcm9vZkNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50Li4uYCk7XG5cbiAgaWYgKGVxdWFsaXR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGVxdWFsaXR5VmVyaWZpZWQgPSB2ZXJpZnlFcXVhbGl0eShlcXVhbGl0eU5vZGUsIHByb29mQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZCA9IGVxdWFsaXR5VmVyaWZpZWQ7IC8vL1xuICB9XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZlcmlmaWVkID0gdHlwZUFzc2VydGlvblZlcmlmaWVkOyAvLy9cbiAgfVxuXG4gIHN0YXRlbWVudFZlcmlmaWVkID9cbiAgICBwcm9vZkNvbnRleHQuY29tcGxldGUoc3RhdGVtZW50Tm9kZSkgOlxuICAgICAgcHJvb2ZDb250ZXh0LmhhbHQoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVN0YXRlbWVudCIsImVxdWFsaXR5Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidHlwZUFzc2VydGlvbk5vZGVRdWVyeSIsInN0YXRlbWVudE5vZGUiLCJwcm9vZkNvbnRleHQiLCJzdGF0ZW1lbnRWZXJpZmllZCIsImJlZ2luIiwiZXF1YWxpdHlOb2RlIiwic3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwidHlwZUFzc2VydGlvbk5vZGUiLCJkZWJ1ZyIsImVxdWFsaXR5VmVyaWZpZWQiLCJ2ZXJpZnlFcXVhbGl0eSIsInR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVR5cGVBc3NlcnRpb24iLCJjb21wbGV0ZSIsImhhbHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBd0JBOzs7NkRBVEc7eURBQ0s7cUJBRU47c0JBQ0c7Ozs7OztBQUU3QixJQUFNQyxvQkFBb0JDLElBQUFBLGdCQUFTLEVBQUMseUJBQzlCQyx5QkFBeUJELElBQUFBLGdCQUFTLEVBQUM7QUFFMUIsU0FBU0YsZ0JBQWdCSSxhQUFhLEVBQUVDLFlBQVksRUFBRTtJQUNuRSxJQUFJQyxvQkFBb0IsS0FBSztJQUU3QkQsYUFBYUUsS0FBSyxDQUFDSDtJQUVuQixJQUFNSSxlQUFlUCxrQkFBa0JHLGdCQUNqQ0ssa0JBQWtCQyxJQUFBQSxvQkFBWSxFQUFDTixnQkFDL0JPLG9CQUFvQlIsdUJBQXVCQztJQUVqREMsYUFBYU8sS0FBSyxDQUFDLEFBQUMsa0JBQWlDLE9BQWhCSCxpQkFBZ0I7SUFFckQsSUFBSUQsaUJBQWlCLElBQUksRUFBRTtRQUN6QixJQUFNSyxtQkFBbUJDLElBQUFBLGlCQUFjLEVBQUNOLGNBQWNIO1FBRXREQyxvQkFBb0JPLGtCQUFrQixHQUFHO0lBQzNDLENBQUM7SUFFRCxJQUFJRixzQkFBc0IsSUFBSSxFQUFFO1FBQzlCLElBQU1JLHdCQUF3QkMsSUFBQUEsYUFBbUIsRUFBQ0wsbUJBQW1CTjtRQUVyRUMsb0JBQW9CUyx1QkFBdUIsR0FBRztJQUNoRCxDQUFDO0lBRURULG9CQUNFRCxhQUFhWSxRQUFRLENBQUNiLGlCQUNwQkMsYUFBYWEsSUFBSSxDQUFDZCxjQUFjO0lBRXBDLE9BQU9FO0FBQ1QifQ==
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgdmVyaWZ5RXF1YWxpdHkgZnJvbSBcIi4uL3ZlcmlmeS9lcXVhbGl0eVwiO1xuaW1wb3J0IHZlcmlmeVR5cGVBc3NlcnRpb24gZnJvbSBcIi4uL3ZlcmlmeS9hc3NlcnRpb24vdHlwZVwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBub2RlQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5jb25zdCBlcXVhbGl0eU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvZXF1YWxpdHkhXCIpLFxuICAgICAgdHlwZUFzc2VydGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvdHlwZUFzc2VydGlvbiFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkID0gZmFsc2U7XG5cbiAgcHJvb2ZDb250ZXh0LmJlZ2luKHN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5Tm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgIHR5cGVBc3NlcnRpb25Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBwcm9vZkNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50Li4uYCk7XG5cbiAgaWYgKGZhbHNlKSB7XG4gICAgLy8vXG4gIH0gZWxzZSBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgZXF1YWxpdHlWZXJpZmllZCA9IHZlcmlmeUVxdWFsaXR5KGVxdWFsaXR5Tm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZlcmlmaWVkID0gZXF1YWxpdHlWZXJpZmllZDsgLy8vXG4gIH0gZWxzZSBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2ZXJpZnlUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWQgPSB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQ7IC8vL1xuICB9IGVsc2Uge1xuICAgIHN0YXRlbWVudFZlcmlmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRlbWVudFZlcmlmaWVkID9cbiAgICBwcm9vZkNvbnRleHQuY29tcGxldGUoc3RhdGVtZW50Tm9kZSkgOlxuICAgICAgcHJvb2ZDb250ZXh0LmhhbHQoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVN0YXRlbWVudCIsImVxdWFsaXR5Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidHlwZUFzc2VydGlvbk5vZGVRdWVyeSIsInN0YXRlbWVudE5vZGUiLCJwcm9vZkNvbnRleHQiLCJzdGF0ZW1lbnRWZXJpZmllZCIsImJlZ2luIiwiZXF1YWxpdHlOb2RlIiwic3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwidHlwZUFzc2VydGlvbk5vZGUiLCJkZWJ1ZyIsImVxdWFsaXR5VmVyaWZpZWQiLCJ2ZXJpZnlFcXVhbGl0eSIsInR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVR5cGVBc3NlcnRpb24iLCJjb21wbGV0ZSIsImhhbHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBd0JBOzs7NkRBVEc7eURBQ0s7cUJBRU47c0JBQ0c7Ozs7OztBQUU3QixJQUFNQyxvQkFBb0JDLElBQUFBLGdCQUFTLEVBQUMseUJBQzlCQyx5QkFBeUJELElBQUFBLGdCQUFTLEVBQUM7QUFFMUIsU0FBU0YsZ0JBQWdCSSxhQUFhLEVBQUVDLFlBQVksRUFBRTtJQUNuRSxJQUFJQyxvQkFBb0IsS0FBSztJQUU3QkQsYUFBYUUsS0FBSyxDQUFDSDtJQUVuQixJQUFNSSxlQUFlUCxrQkFBa0JHLGdCQUNqQ0ssa0JBQWtCQyxJQUFBQSxvQkFBWSxFQUFDTixnQkFDL0JPLG9CQUFvQlIsdUJBQXVCQztJQUVqREMsYUFBYU8sS0FBSyxDQUFDLEFBQUMsa0JBQWlDLE9BQWhCSCxpQkFBZ0I7SUFFckQsSUFBSSxLQUFLLEVBQUU7SUFDVCxHQUFHO0lBQ0wsT0FBTyxJQUFJRCxpQkFBaUIsSUFBSSxFQUFFO1FBQ2hDLElBQU1LLG1CQUFtQkMsSUFBQUEsaUJBQWMsRUFBQ04sY0FBY0g7UUFFdERDLG9CQUFvQk8sa0JBQWtCLEdBQUc7SUFDM0MsT0FBTyxJQUFJRixzQkFBc0IsSUFBSSxFQUFFO1FBQ3JDLElBQU1JLHdCQUF3QkMsSUFBQUEsYUFBbUIsRUFBQ0wsbUJBQW1CTjtRQUVyRUMsb0JBQW9CUyx1QkFBdUIsR0FBRztJQUNoRCxPQUFPO1FBQ0xULG9CQUFvQixJQUFJO0lBQzFCLENBQUM7SUFFREEsb0JBQ0VELGFBQWFZLFFBQVEsQ0FBQ2IsaUJBQ3BCQyxhQUFhYSxJQUFJLENBQUNkLGNBQWM7SUFFcEMsT0FBT0U7QUFDVCJ9
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "0.0.477",
4
+ "version": "0.0.479",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -12,9 +12,9 @@
12
12
  "dependencies": {
13
13
  "argumentative": "^2.0.21",
14
14
  "necessary": "^11.2.1",
15
- "occam-custom-grammars": "^5.0.375",
15
+ "occam-custom-grammars": "^5.0.376",
16
16
  "occam-dom": "^3.1.1",
17
- "occam-file-system": "^5.0.134",
17
+ "occam-file-system": "^5.0.135",
18
18
  "occam-grammar-utilities": "^7.0.66"
19
19
  },
20
20
  "devDependencies": {
package/src/conclusion.js CHANGED
@@ -4,7 +4,7 @@ import { first } from "./utilities/array";
4
4
  import { nodeAsString } from "./utilities/string";
5
5
  import { metavariableNameFromMetavariableNode } from "./utilities/query";
6
6
  import { metastatementNodeFromMetastatementString } from "./utilities/string";
7
- import { METAVARIABLE_RULE_NAME, METASTATEMENT_RULE_NAME } from "./ruleNames";
7
+ import { STATEMENT_RULE_NAME, METASTATEMENT_RULE_NAME, METAVARIABLE_RULE_NAME } from "./ruleNames";
8
8
 
9
9
  export default class Conclusion {
10
10
  constructor(metastatementNode) {
@@ -15,10 +15,19 @@ export default class Conclusion {
15
15
  return this.metastatementNode;
16
16
  }
17
17
 
18
+ matchStatementNode(statementNode, substitutions) {
19
+ const nonTerminalNode = statementNode, ///
20
+ conclusionNonTerminalNode = this.metastatementNode, ///
21
+ conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions),
22
+ statementNodeMatches = conclusionNonTerminalNodeMatches; ///
23
+
24
+ return statementNodeMatches;
25
+ }
26
+
18
27
  matchMetastatementNode(metastatementNode, metaSubstitutions) {
19
28
  const nonTerminalNode = metastatementNode, ///
20
29
  conclusionNonTerminalNode = this.metastatementNode, ///
21
- conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions),
30
+ conclusionNonTerminalNodeMatches = metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions),
22
31
  metastatementNodeMatches = conclusionNonTerminalNodeMatches; ///
23
32
 
24
33
  return metastatementNodeMatches;
@@ -50,7 +59,7 @@ export default class Conclusion {
50
59
  }
51
60
  }
52
61
 
53
- function matchConclusionNode(conclusionNode, node, metaSubstitutions) {
62
+ function matchConclusionNode(conclusionNode, node, substitutions) {
54
63
  let conclusionNodeMatches = false;
55
64
 
56
65
  const nodeTerminalNode = node.isTerminalNode(),
@@ -60,13 +69,13 @@ function matchConclusionNode(conclusionNode, node, metaSubstitutions) {
60
69
  if (nodeTerminalNode) {
61
70
  const terminalNode = node, ///
62
71
  conclusionTerminalNode = conclusionNode, ///
63
- conclusionTerminalNodeMatches = matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions);
72
+ conclusionTerminalNodeMatches = matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, substitutions);
64
73
 
65
74
  conclusionNodeMatches = conclusionTerminalNodeMatches; ///
66
75
  } else {
67
76
  const nonTerminalNode = node, ///
68
77
  conclusionNonTerminalNode = conclusionNode, ///
69
- conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions);
78
+ conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions);
70
79
 
71
80
  conclusionNodeMatches = conclusionNonTerminalNodeMatches; ///
72
81
  }
@@ -76,13 +85,13 @@ function matchConclusionNode(conclusionNode, node, metaSubstitutions) {
76
85
  }
77
86
 
78
87
  function matchConclusionNodes(conclusionNodes, nodes, metaSubstitutions) {
79
- let conclusionNodesMatches = false;
88
+ let conclusionNodesMatch = false;
80
89
 
81
90
  const nodesLength = nodes.length,
82
91
  conclusionNodesLength = conclusionNodes.length;
83
92
 
84
93
  if (nodesLength === conclusionNodesLength) {
85
- conclusionNodesMatches = nodes.every((node, index) => {
94
+ conclusionNodesMatch = nodes.every((node, index) => {
86
95
  const conclusionNode = conclusionNodes[index],
87
96
  conclusionNodeMatches = matchConclusionNode(conclusionNode, node, metaSubstitutions);
88
97
 
@@ -92,51 +101,170 @@ function matchConclusionNodes(conclusionNodes, nodes, metaSubstitutions) {
92
101
  });
93
102
  }
94
103
 
95
- return conclusionNodesMatches;
104
+ return conclusionNodesMatch;
96
105
  }
97
106
 
98
- function matchConclusionMetavariable(conclusionMetavariableNode, nodes, metaSubstitutions) {
99
- let conclusionMetavariableMatches = true;
107
+ function matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, substitutions) {
108
+ const matches = conclusionTerminalNode.match(terminalNode),
109
+ conclusionTerminalNodeMatches = matches; ///
110
+
111
+ return conclusionTerminalNodeMatches;
112
+ }
113
+
114
+ function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions) {
115
+ let conclusionNonTerminalNodeMatches = false;
116
+
117
+ const ruleName = nonTerminalNode.getRuleName(),
118
+ childNodes = nonTerminalNode.getChildNodes(),
119
+ conclusionNonTerminalNodeRuleName = conclusionNonTerminalNode.getRuleName(),
120
+ conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
121
+ ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME),
122
+ conclusionNonTerminalNodeRuleNameMetastatementRuleName = (conclusionNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
123
+
124
+ if (ruleNameStatementRuleName && conclusionNonTerminalNodeRuleNameMetastatementRuleName) {
125
+ const statementNode = nonTerminalNode, ///
126
+ conclusionMetastatementNode = conclusionNonTerminalNode, ///
127
+ conclusionMetastatementNodeMatches = matchConclusionMetastatementNode(conclusionMetastatementNode, statementNode, substitutions);
128
+
129
+ if (conclusionMetastatementNodeMatches) {
130
+ conclusionNonTerminalNodeMatches = true; ///
131
+ } else {
132
+ const nodes = childNodes, ///
133
+ conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
134
+ conclusionNonTerminalNodeChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, substitutions);
135
+
136
+ conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
137
+ }
138
+ } else if (ruleName === conclusionNonTerminalNodeRuleName) {
139
+ const nodes = childNodes, ///
140
+ conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
141
+ conclusionNonTerminalNodeChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, substitutions);
142
+
143
+ conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
144
+ }
145
+
146
+ return conclusionNonTerminalNodeMatches;
147
+ }
148
+
149
+ function matchConclusionMetavariableNode(conclusionMetavariableNode, nodes, substitutions) {
150
+ let conclusionMetavariableNodeMatches = true;
100
151
 
101
152
  const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
102
- metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
103
- const metavariableName = metaSubstitution.getMetavariableName();
153
+ substitution = substitutions.find((substitution) => {
154
+ const metavariableName = substitution.getMetavariableName();
104
155
 
105
156
  if (metavariableName === conclusionMetavariableName) {
106
157
  return true;
107
158
  }
108
159
  }) || null;
109
160
 
110
- if (metaSubstitution !== null) {
111
- const metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
161
+ if (substitution !== null) {
162
+ const substitutionNodesMatch = substitution.matchNodes(nodes);
163
+
164
+ conclusionMetavariableNodeMatches = substitutionNodesMatch; ///
165
+ }
166
+
167
+ return conclusionMetavariableNodeMatches;
168
+ }
169
+
170
+ function matchConclusionMetastatementNode(conclusionMetastatementNode, statementNode, substitutions) {
171
+ let conclusionMetastatementNodeMatches = false;
172
+
173
+ const conclusionNonTerminalNode = conclusionMetastatementNode, ///
174
+ conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
175
+ conclusionNonTerminalNodeChildNodesLength = conclusionNonTerminalNodeChildNodes.length;
176
+
177
+ if (conclusionNonTerminalNodeChildNodesLength === 1) {
178
+ const firstConclusionChildNode = first(conclusionNonTerminalNodeChildNodes),
179
+ conclusionChildNode = firstConclusionChildNode, ///
180
+ conclusionChildNodeNonTerminalNode = conclusionChildNode.isNonTerminalNode();
181
+
182
+ if (conclusionChildNodeNonTerminalNode) {
183
+ const conclusionNonTerminalChildNode = conclusionChildNode, ///
184
+ conclusionNonTerminalChildNodeRuleName = conclusionNonTerminalChildNode.getRuleName(),
185
+ conclusionNonTerminalChildNodeRuleNameMetavariableRuleName = (conclusionNonTerminalChildNodeRuleName === METAVARIABLE_RULE_NAME);
186
+
187
+ if (conclusionNonTerminalChildNodeRuleNameMetavariableRuleName) {
188
+ const conclusionMetavariableNode = conclusionNonTerminalChildNode, ///
189
+ nonTerminalNode = statementNode, ///
190
+ childNodes = nonTerminalNode.getChildNodes(),
191
+ nodes = childNodes, ///
192
+ conclusionMetavariableNodeMatches = matchConclusionMetavariableNode(conclusionMetavariableNode, nodes, substitutions);
193
+
194
+ conclusionMetastatementNodeMatches = conclusionMetavariableNodeMatches; ///
195
+ }
196
+ }
197
+ }
112
198
 
113
- conclusionMetavariableMatches = metaSubstitutionNodesMatch; ///
199
+ return conclusionMetastatementNodeMatches;
200
+ }
201
+
202
+ function metaMatchConclusionNode(conclusionNode, node, metaSubstitutions) {
203
+ let conclusionNodeMatches = false;
204
+
205
+ const nodeTerminalNode = node.isTerminalNode(),
206
+ ruleNodeTerminalNode = conclusionNode.isTerminalNode();
207
+
208
+ if (nodeTerminalNode === ruleNodeTerminalNode) {
209
+ if (nodeTerminalNode) {
210
+ const terminalNode = node, ///
211
+ conclusionTerminalNode = conclusionNode, ///
212
+ conclusionTerminalNodeMatches = metaMatchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions);
213
+
214
+ conclusionNodeMatches = conclusionTerminalNodeMatches; ///
215
+ } else {
216
+ const nonTerminalNode = node, ///
217
+ conclusionNonTerminalNode = conclusionNode, ///
218
+ conclusionNonTerminalNodeMatches = metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions);
219
+
220
+ conclusionNodeMatches = conclusionNonTerminalNodeMatches; ///
221
+ }
222
+ }
223
+
224
+ return conclusionNodeMatches;
225
+ }
226
+
227
+ function metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions) {
228
+ let conclusionNodesMatch = false;
229
+
230
+ const nodesLength = nodes.length,
231
+ conclusionNodesLength = conclusionNodes.length;
232
+
233
+ if (nodesLength === conclusionNodesLength) {
234
+ conclusionNodesMatch = nodes.every((node, index) => {
235
+ const conclusionNode = conclusionNodes[index],
236
+ conclusionNodeMatches = metaMatchConclusionNode(conclusionNode, node, metaSubstitutions);
237
+
238
+ if (conclusionNodeMatches) {
239
+ return true;
240
+ }
241
+ });
114
242
  }
115
243
 
116
- return conclusionMetavariableMatches;
244
+ return conclusionNodesMatch;
117
245
  }
118
246
 
119
- function matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions) {
247
+ function metaMatchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions) {
120
248
  const matches = conclusionTerminalNode.match(terminalNode),
121
249
  conclusionTerminalNodeMatches = matches; ///
122
250
 
123
251
  return conclusionTerminalNodeMatches;
124
252
  }
125
253
 
126
- function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions) {
254
+ function metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions) {
127
255
  let conclusionNonTerminalNodeMatches = false;
128
256
 
129
257
  const ruleName = nonTerminalNode.getRuleName(),
130
- conclusionRuleName = conclusionNonTerminalNode.getRuleName(); ///
258
+ conclusionNonTerminalNodeRuleName = conclusionNonTerminalNode.getRuleName();
131
259
 
132
- if (ruleName === conclusionRuleName) {
260
+ if (ruleName === conclusionNonTerminalNodeRuleName) {
133
261
  const childNodes = nonTerminalNode.getChildNodes(),
134
- conclusionChildNodes = conclusionNonTerminalNode.getChildNodes(),
262
+ conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
135
263
  nodes = childNodes, ///
136
- conclusionNodes = conclusionChildNodes, ///
137
- conclusionChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, metaSubstitutions);
264
+ conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
265
+ conclusionNonTerminalNodeChildNodesMatches = metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions);
138
266
 
139
- conclusionNonTerminalNodeMatches = conclusionChildNodesMatches; ///
267
+ conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
140
268
 
141
269
  if (!conclusionNonTerminalNodeMatches) {
142
270
  const ruleNameMetastatementRuleName = (ruleName === METASTATEMENT_RULE_NAME);
@@ -144,7 +272,7 @@ function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNo
144
272
  if (ruleNameMetastatementRuleName) {
145
273
  const metastatementNode = nonTerminalNode, ///
146
274
  conclusionMetastatementNode = conclusionNonTerminalNode, ///
147
- conclusionMetastatementNodeMatches = matchConclusionMetastatementNode(conclusionMetastatementNode, metastatementNode, metaSubstitutions);
275
+ conclusionMetastatementNodeMatches = metaMatchConclusionMetastatementNode(conclusionMetastatementNode, metastatementNode, metaSubstitutions);
148
276
 
149
277
  conclusionNonTerminalNodeMatches = conclusionMetastatementNodeMatches; ///
150
278
  }
@@ -154,15 +282,36 @@ function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNo
154
282
  return conclusionNonTerminalNodeMatches;
155
283
  }
156
284
 
157
- function matchConclusionMetastatementNode(conclusionMetastatementNode, metastatementNode, metaSubstitutions) {
285
+ function metaMatchConclusionMetavariableNode(conclusionMetavariableNode, nodes, metaSubstitutions) {
286
+ let conclusionMetavariableNodeMatches = true;
287
+
288
+ const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
289
+ metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
290
+ const metavariableName = metaSubstitution.getMetavariableName();
291
+
292
+ if (metavariableName === conclusionMetavariableName) {
293
+ return true;
294
+ }
295
+ }) || null;
296
+
297
+ if (metaSubstitution !== null) {
298
+ const metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
299
+
300
+ conclusionMetavariableNodeMatches = metaSubstitutionNodesMatch; ///
301
+ }
302
+
303
+ return conclusionMetavariableNodeMatches;
304
+ }
305
+
306
+ function metaMatchConclusionMetastatementNode(conclusionMetastatementNode, metastatementNode, metaSubstitutions) {
158
307
  let conclusionMetastatementNodeMatches = false;
159
308
 
160
309
  const conclusionNonTerminalNode = conclusionMetastatementNode, ///
161
- conclusionChildNodes = conclusionNonTerminalNode.getChildNodes(),
162
- conclusionChildNodesLength = conclusionChildNodes.length;
310
+ conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
311
+ conclusionNonTerminalNodeChildNodesLength = conclusionNonTerminalNodeChildNodes.length;
163
312
 
164
- if (conclusionChildNodesLength === 1) {
165
- const firstConclusionChildNode = first(conclusionChildNodes),
313
+ if (conclusionNonTerminalNodeChildNodesLength === 1) {
314
+ const firstConclusionChildNode = first(conclusionNonTerminalNodeChildNodes),
166
315
  conclusionChildNode = firstConclusionChildNode, ///
167
316
  conclusionChildNodeNonTerminalNode = conclusionChildNode.isNonTerminalNode();
168
317
 
@@ -176,9 +325,9 @@ function matchConclusionMetastatementNode(conclusionMetastatementNode, metastate
176
325
  nonTerminalNode = metastatementNode, ///
177
326
  childNodes = nonTerminalNode.getChildNodes(),
178
327
  nodes = childNodes, ///
179
- conclusionMetaVariableMatches = matchConclusionMetavariable(conclusionMetavariableNode, nodes, metaSubstitutions);
328
+ conclusionMetavariableNodeMatches = metaMatchConclusionMetavariableNode(conclusionMetavariableNode, nodes, metaSubstitutions);
180
329
 
181
- conclusionMetastatementNodeMatches = conclusionMetaVariableMatches; ///
330
+ conclusionMetastatementNodeMatches = conclusionMetavariableNodeMatches; ///
182
331
  }
183
332
  }
184
333
  }
@@ -21,9 +21,9 @@ export default class MetaSubstitution {
21
21
 
22
22
  const nodesA = this.nodes, ///
23
23
  nodesB = nodes,
24
- metaSubstitutionNodesMatch = matchNodes(nodesA, nodesB);
24
+ nodesMatch = matchNodes(nodesA, nodesB);
25
25
 
26
- matches = metaSubstitutionNodesMatch; ///
26
+ matches = nodesMatch; ///
27
27
 
28
28
  if (!matches) {
29
29
  const childNodes = nodes, ///