occam-verify-cli 0.0.478 → 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.
- package/lib/conclusion.js +113 -29
- package/lib/metaSubstitution.js +5 -5
- package/lib/premise.js +145 -39
- package/lib/rule.js +74 -16
- package/lib/ruleNames.js +13 -9
- package/lib/substitution.js +12 -12
- package/lib/type.js +22 -21
- package/lib/variable.js +12 -19
- package/lib/verify/assertion/type.js +3 -2
- package/lib/verify/equality.js +85 -20
- package/lib/verify/statement/qualified.js +6 -3
- package/lib/verify/statement.js +7 -4
- package/package.json +3 -3
- package/src/conclusion.js +181 -32
- package/src/metaSubstitution.js +2 -2
- package/src/premise.js +233 -45
- package/src/rule.js +96 -16
- package/src/ruleNames.js +3 -2
- package/src/substitution.js +8 -8
- package/src/type.js +26 -20
- package/src/variable.js +10 -16
- package/src/verify/assertion/type.js +5 -2
- package/src/verify/equality.js +79 -35
- package/src/verify/statement/qualified.js +7 -2
- package/src/verify/statement.js +6 -4
package/lib/verify/statement.js
CHANGED
|
@@ -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 (
|
|
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,
|
|
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.
|
|
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.
|
|
15
|
+
"occam-custom-grammars": "^5.0.376",
|
|
16
16
|
"occam-dom": "^3.1.1",
|
|
17
|
-
"occam-file-system": "^5.0.
|
|
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 {
|
|
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 =
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
|
104
|
+
return conclusionNodesMatch;
|
|
96
105
|
}
|
|
97
106
|
|
|
98
|
-
function
|
|
99
|
-
|
|
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
|
-
|
|
103
|
-
const metavariableName =
|
|
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 (
|
|
111
|
-
const
|
|
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
|
-
|
|
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
|
|
244
|
+
return conclusionNodesMatch;
|
|
117
245
|
}
|
|
118
246
|
|
|
119
|
-
function
|
|
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
|
|
254
|
+
function metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions) {
|
|
127
255
|
let conclusionNonTerminalNodeMatches = false;
|
|
128
256
|
|
|
129
257
|
const ruleName = nonTerminalNode.getRuleName(),
|
|
130
|
-
|
|
258
|
+
conclusionNonTerminalNodeRuleName = conclusionNonTerminalNode.getRuleName();
|
|
131
259
|
|
|
132
|
-
if (ruleName ===
|
|
260
|
+
if (ruleName === conclusionNonTerminalNodeRuleName) {
|
|
133
261
|
const childNodes = nonTerminalNode.getChildNodes(),
|
|
134
|
-
|
|
262
|
+
conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
|
|
135
263
|
nodes = childNodes, ///
|
|
136
|
-
conclusionNodes =
|
|
137
|
-
|
|
264
|
+
conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
|
|
265
|
+
conclusionNonTerminalNodeChildNodesMatches = metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions);
|
|
138
266
|
|
|
139
|
-
conclusionNonTerminalNodeMatches =
|
|
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 =
|
|
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
|
|
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
|
-
|
|
162
|
-
|
|
310
|
+
conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
|
|
311
|
+
conclusionNonTerminalNodeChildNodesLength = conclusionNonTerminalNodeChildNodes.length;
|
|
163
312
|
|
|
164
|
-
if (
|
|
165
|
-
const firstConclusionChildNode = first(
|
|
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
|
-
|
|
328
|
+
conclusionMetavariableNodeMatches = metaMatchConclusionMetavariableNode(conclusionMetavariableNode, nodes, metaSubstitutions);
|
|
180
329
|
|
|
181
|
-
conclusionMetastatementNodeMatches =
|
|
330
|
+
conclusionMetastatementNodeMatches = conclusionMetavariableNodeMatches; ///
|
|
182
331
|
}
|
|
183
332
|
}
|
|
184
333
|
}
|
package/src/metaSubstitution.js
CHANGED
|
@@ -21,9 +21,9 @@ export default class MetaSubstitution {
|
|
|
21
21
|
|
|
22
22
|
const nodesA = this.nodes, ///
|
|
23
23
|
nodesB = nodes,
|
|
24
|
-
|
|
24
|
+
nodesMatch = matchNodes(nodesA, nodesB);
|
|
25
25
|
|
|
26
|
-
matches =
|
|
26
|
+
matches = nodesMatch; ///
|
|
27
27
|
|
|
28
28
|
if (!matches) {
|
|
29
29
|
const childNodes = nodes, ///
|