occam-verify-cli 0.0.506 → 0.0.507

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.
Files changed (48) hide show
  1. package/lib/conclusion.js +5 -160
  2. package/lib/consequence.js +3 -81
  3. package/lib/matcher/conclusion.js +194 -0
  4. package/lib/matcher/consequence.js +194 -0
  5. package/lib/matcher/premise.js +199 -0
  6. package/lib/matcher/supposition.js +199 -0
  7. package/lib/matcher.js +36 -0
  8. package/lib/metaMatcher/conclusion.js +194 -0
  9. package/lib/metaMatcher/premise.js +199 -0
  10. package/lib/metaMatcher.js +36 -0
  11. package/lib/metaSubstitution.js +7 -6
  12. package/lib/mixins/matcher.js +109 -0
  13. package/lib/premise.js +9 -178
  14. package/lib/ruleNames.js +5 -1
  15. package/lib/step/metaproof.js +5 -5
  16. package/lib/substitution.js +7 -6
  17. package/lib/supposition.js +5 -92
  18. package/lib/utilities/substitution.js +61 -0
  19. package/lib/verify/metaproof.js +3 -3
  20. package/lib/verify/proof.js +3 -3
  21. package/lib/verify/ruleProof.js +3 -3
  22. package/package.json +1 -1
  23. package/src/conclusion.js +6 -277
  24. package/src/consequence.js +3 -141
  25. package/src/matcher/conclusion.js +86 -0
  26. package/src/matcher/consequence.js +89 -0
  27. package/src/matcher/premise.js +94 -0
  28. package/src/matcher/supposition.js +97 -0
  29. package/src/matcher.js +9 -0
  30. package/src/metaMatcher/conclusion.js +86 -0
  31. package/src/metaMatcher/premise.js +94 -0
  32. package/src/metaMatcher.js +9 -0
  33. package/src/metaSubstitution.js +4 -3
  34. package/src/mixins/matcher.js +81 -0
  35. package/src/premise.js +10 -298
  36. package/src/ruleNames.js +1 -0
  37. package/src/step/metaproof.js +1 -1
  38. package/src/substitution.js +3 -2
  39. package/src/supposition.js +12 -159
  40. package/src/utilities/{node.js → substitution.js} +4 -74
  41. package/src/verify/metaproof.js +2 -2
  42. package/src/verify/proof.js +2 -2
  43. package/src/verify/ruleProof.js +2 -2
  44. package/lib/metaSupposition.js +0 -167
  45. package/lib/utilities/node.js +0 -106
  46. package/lib/verify/metaSupposition.js +0 -41
  47. package/src/metaSupposition.js +0 -196
  48. package/src/verify/metaSupposition.js +0 -44
package/src/conclusion.js CHANGED
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
 
3
- import { first } from "./utilities/array";
4
3
  import { nodeAsString } from "./utilities/string";
5
- import { metavariableNameFromMetavariableNode } from "./utilities/query";
4
+ import { conclusionMatcher } from "./matcher/conclusion";
5
+ import { conclusionMetaMatcher } from "./metaMatcher/conclusion";
6
6
  import { metastatementNodeFromMetastatementString } from "./utilities/string";
7
- import { STATEMENT_RULE_NAME, METASTATEMENT_RULE_NAME, METAVARIABLE_RULE_NAME } from "./ruleNames";
8
7
 
9
8
  export default class Conclusion {
10
9
  constructor(metastatementNode) {
@@ -18,8 +17,8 @@ export default class Conclusion {
18
17
  matchStatementNode(statementNode, substitutions) {
19
18
  const nonTerminalNode = statementNode, ///
20
19
  conclusionNonTerminalNode = this.metastatementNode, ///
21
- conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions),
22
- statementNodeMatches = conclusionNonTerminalNodeMatches; ///
20
+ nonTerminalNodeMatches = conclusionMatcher.matchNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions),
21
+ statementNodeMatches = nonTerminalNodeMatches; ///
23
22
 
24
23
  return statementNodeMatches;
25
24
  }
@@ -27,8 +26,8 @@ export default class Conclusion {
27
26
  matchMetastatementNode(metastatementNode, metaSubstitutions) {
28
27
  const nonTerminalNode = metastatementNode, ///
29
28
  conclusionNonTerminalNode = this.metastatementNode, ///
30
- conclusionNonTerminalNodeMatches = metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions),
31
- metastatementNodeMatches = conclusionNonTerminalNodeMatches; ///
29
+ nonTerminalNodeMatches = conclusionMetaMatcher.matchNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions),
30
+ metastatementNodeMatches = nonTerminalNodeMatches; ///
32
31
 
33
32
  return metastatementNodeMatches;
34
33
  }
@@ -58,273 +57,3 @@ export default class Conclusion {
58
57
  return conclusion;
59
58
  }
60
59
  }
61
-
62
- function matchConclusionNode(conclusionNode, node, substitutions) {
63
- let conclusionNodeMatches = false;
64
-
65
- const nodeTerminalNode = node.isTerminalNode(),
66
- ruleNodeTerminalNode = conclusionNode.isTerminalNode();
67
-
68
- if (nodeTerminalNode === ruleNodeTerminalNode) {
69
- if (nodeTerminalNode) {
70
- const terminalNode = node, ///
71
- conclusionTerminalNode = conclusionNode, ///
72
- conclusionTerminalNodeMatches = matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, substitutions);
73
-
74
- conclusionNodeMatches = conclusionTerminalNodeMatches; ///
75
- } else {
76
- const nonTerminalNode = node, ///
77
- conclusionNonTerminalNode = conclusionNode, ///
78
- conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions);
79
-
80
- conclusionNodeMatches = conclusionNonTerminalNodeMatches; ///
81
- }
82
- }
83
-
84
- return conclusionNodeMatches;
85
- }
86
-
87
- function matchConclusionNodes(conclusionNodes, nodes, metaSubstitutions) {
88
- let conclusionNodesMatch = false;
89
-
90
- const nodesLength = nodes.length,
91
- conclusionNodesLength = conclusionNodes.length;
92
-
93
- if (nodesLength === conclusionNodesLength) {
94
- conclusionNodesMatch = nodes.every((node, index) => {
95
- const conclusionNode = conclusionNodes[index],
96
- conclusionNodeMatches = matchConclusionNode(conclusionNode, node, metaSubstitutions);
97
-
98
- if (conclusionNodeMatches) {
99
- return true;
100
- }
101
- });
102
- }
103
-
104
- return conclusionNodesMatch;
105
- }
106
-
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
- nodes = childNodes, ///
122
- conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
123
- ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME),
124
- conclusionNonTerminalNodeRuleNameMetastatementRuleName = (conclusionNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
125
-
126
- if (ruleNameStatementRuleName && conclusionNonTerminalNodeRuleNameMetastatementRuleName) {
127
- const statementNode = nonTerminalNode, ///
128
- conclusionMetastatementNode = conclusionNonTerminalNode, ///
129
- conclusionMetastatementNodeMatches = matchConclusionMetastatementNode(conclusionMetastatementNode, statementNode, substitutions);
130
-
131
- if (conclusionMetastatementNodeMatches) {
132
- conclusionNonTerminalNodeMatches = true; ///
133
- } else {
134
- const conclusionNonTerminalNodeChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, substitutions);
135
-
136
- conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
137
- }
138
- } else if (ruleName === conclusionNonTerminalNodeRuleName) {
139
- const conclusionNonTerminalNodeChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, substitutions);
140
-
141
- conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
142
- }
143
-
144
- return conclusionNonTerminalNodeMatches;
145
- }
146
-
147
- function matchConclusionMetavariableNode(conclusionMetavariableNode, statementNode, substitutions) {
148
- let conclusionMetavariableNodeMatches = true;
149
-
150
- const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
151
- substitution = substitutions.find((substitution) => {
152
- const metavariableName = substitution.getMetavariableName();
153
-
154
- if (metavariableName === conclusionMetavariableName) {
155
- return true;
156
- }
157
- }) || null;
158
-
159
- if (substitution !== null) {
160
- const substitutionNodesMatch = substitution.matchStatementNode(statementNode);
161
-
162
- conclusionMetavariableNodeMatches = substitutionNodesMatch; ///
163
- }
164
-
165
- return conclusionMetavariableNodeMatches;
166
- }
167
-
168
- function matchConclusionMetastatementNode(conclusionMetastatementNode, statementNode, substitutions) {
169
- let conclusionMetastatementNodeMatches = false;
170
-
171
- const conclusionNonTerminalNode = conclusionMetastatementNode, ///
172
- conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
173
- conclusionNonTerminalNodeChildNodesLength = conclusionNonTerminalNodeChildNodes.length;
174
-
175
- if (conclusionNonTerminalNodeChildNodesLength === 1) {
176
- const firstConclusionChildNode = first(conclusionNonTerminalNodeChildNodes),
177
- conclusionChildNode = firstConclusionChildNode, ///
178
- conclusionChildNodeNonTerminalNode = conclusionChildNode.isNonTerminalNode();
179
-
180
- if (conclusionChildNodeNonTerminalNode) {
181
- const conclusionNonTerminalChildNode = conclusionChildNode, ///
182
- conclusionNonTerminalChildNodeRuleName = conclusionNonTerminalChildNode.getRuleName(),
183
- conclusionNonTerminalChildNodeRuleNameMetavariableRuleName = (conclusionNonTerminalChildNodeRuleName === METAVARIABLE_RULE_NAME);
184
-
185
- if (conclusionNonTerminalChildNodeRuleNameMetavariableRuleName) {
186
- const conclusionMetavariableNode = conclusionNonTerminalChildNode, ///
187
- conclusionMetavariableNodeMatches = matchConclusionMetavariableNode(conclusionMetavariableNode, statementNode, substitutions);
188
-
189
- conclusionMetastatementNodeMatches = conclusionMetavariableNodeMatches; ///
190
- }
191
- }
192
- }
193
-
194
- return conclusionMetastatementNodeMatches;
195
- }
196
-
197
- function metaMatchConclusionNode(conclusionNode, node, metaSubstitutions) {
198
- let conclusionNodeMatches = false;
199
-
200
- const nodeTerminalNode = node.isTerminalNode(),
201
- ruleNodeTerminalNode = conclusionNode.isTerminalNode();
202
-
203
- if (nodeTerminalNode === ruleNodeTerminalNode) {
204
- if (nodeTerminalNode) {
205
- const terminalNode = node, ///
206
- conclusionTerminalNode = conclusionNode, ///
207
- conclusionTerminalNodeMatches = metaMatchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions);
208
-
209
- conclusionNodeMatches = conclusionTerminalNodeMatches; ///
210
- } else {
211
- const nonTerminalNode = node, ///
212
- conclusionNonTerminalNode = conclusionNode, ///
213
- conclusionNonTerminalNodeMatches = metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions);
214
-
215
- conclusionNodeMatches = conclusionNonTerminalNodeMatches; ///
216
- }
217
- }
218
-
219
- return conclusionNodeMatches;
220
- }
221
-
222
- function metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions) {
223
- let conclusionNodesMatch = false;
224
-
225
- const nodesLength = nodes.length,
226
- conclusionNodesLength = conclusionNodes.length;
227
-
228
- if (nodesLength === conclusionNodesLength) {
229
- conclusionNodesMatch = nodes.every((node, index) => {
230
- const conclusionNode = conclusionNodes[index],
231
- conclusionNodeMatches = metaMatchConclusionNode(conclusionNode, node, metaSubstitutions);
232
-
233
- if (conclusionNodeMatches) {
234
- return true;
235
- }
236
- });
237
- }
238
-
239
- return conclusionNodesMatch;
240
- }
241
-
242
- function metaMatchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions) {
243
- const matches = conclusionTerminalNode.match(terminalNode),
244
- conclusionTerminalNodeMatches = matches; ///
245
-
246
- return conclusionTerminalNodeMatches;
247
- }
248
-
249
- function metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions) {
250
- let conclusionNonTerminalNodeMatches = false;
251
-
252
- const ruleName = nonTerminalNode.getRuleName(),
253
- childNodes = nonTerminalNode.getChildNodes(),
254
- conclusionNonTerminalNodeRuleName = conclusionNonTerminalNode.getRuleName(),
255
- conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
256
- nodes = childNodes, ///
257
- conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
258
- ruleNameMetastatementRuleName = (ruleName === METASTATEMENT_RULE_NAME),
259
- conclusionNonTerminalNodeRuleNameMetastatementRuleName = (conclusionNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
260
-
261
- if (ruleNameMetastatementRuleName && conclusionNonTerminalNodeRuleNameMetastatementRuleName) {
262
- const statementNode = nonTerminalNode, ///
263
- conclusionMetastatementNode = conclusionNonTerminalNode, ///
264
- conclusionMetastatementNodeMatches = metaMatchConclusionMetastatementNode(conclusionMetastatementNode, statementNode, metaSubstitutions);
265
-
266
- if (conclusionMetastatementNodeMatches) {
267
- conclusionNonTerminalNodeMatches = true; ///
268
- } else {
269
- const conclusionNonTerminalNodeChildNodesMatches = metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions);
270
-
271
- conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
272
- }
273
- } else if (ruleName === conclusionNonTerminalNodeRuleName) {
274
- const conclusionNonTerminalNodeChildNodesMatches = metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions);
275
-
276
- conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
277
- }
278
-
279
- return conclusionNonTerminalNodeMatches;
280
- }
281
-
282
- function metaMatchConclusionMetavariableNode(conclusionMetavariableNode, metastatementNode, metaSubstitutions) {
283
- let conclusionMetavariableNodeMatches = true;
284
-
285
- const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
286
- metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
287
- const metavariableName = metaSubstitution.getMetavariableName();
288
-
289
- if (metavariableName === conclusionMetavariableName) {
290
- return true;
291
- }
292
- }) || null;
293
-
294
- if (metaSubstitution !== null) {
295
- const metaSubstitutionNodesMatch = metaSubstitution.matchMetastatementNode(metastatementNode);
296
-
297
- conclusionMetavariableNodeMatches = metaSubstitutionNodesMatch; ///
298
- }
299
-
300
- return conclusionMetavariableNodeMatches;
301
- }
302
-
303
- function metaMatchConclusionMetastatementNode(conclusionMetastatementNode, metastatementNode, metaSubstitutions) {
304
- let conclusionMetastatementNodeMatches = false;
305
-
306
- const conclusionNonTerminalNode = conclusionMetastatementNode, ///
307
- conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
308
- conclusionNonTerminalNodeChildNodesLength = conclusionNonTerminalNodeChildNodes.length;
309
-
310
- if (conclusionNonTerminalNodeChildNodesLength === 1) {
311
- const firstConclusionChildNode = first(conclusionNonTerminalNodeChildNodes),
312
- conclusionChildNode = firstConclusionChildNode, ///
313
- conclusionChildNodeNonTerminalNode = conclusionChildNode.isNonTerminalNode();
314
-
315
- if (conclusionChildNodeNonTerminalNode) {
316
- const conclusionNonTerminalChildNode = conclusionChildNode, ///
317
- conclusionNonTerminalChildNodeRuleName = conclusionNonTerminalChildNode.getRuleName(),
318
- conclusionNonTerminalChildNodeRuleNameMetavariableRuleName = (conclusionNonTerminalChildNodeRuleName === METAVARIABLE_RULE_NAME);
319
-
320
- if (conclusionNonTerminalChildNodeRuleNameMetavariableRuleName) {
321
- const conclusionMetavariableNode = conclusionNonTerminalChildNode, ///
322
- conclusionMetavariableNodeMatches = metaMatchConclusionMetavariableNode(conclusionMetavariableNode, metastatementNode, metaSubstitutions);
323
-
324
- conclusionMetastatementNodeMatches = conclusionMetavariableNodeMatches; ///
325
- }
326
- }
327
- }
328
-
329
- return conclusionMetastatementNodeMatches;
330
- }
@@ -1,10 +1,8 @@
1
1
  "use strict";
2
2
 
3
- import { first } from "./utilities/array";
4
3
  import { nodeAsString } from "./utilities/string";
5
- import { variableNameFromVariableNode } from "./utilities/query";
4
+ import { consequenceMatcher } from "./matcher/consequence";
6
5
  import { statementNodeFromStatementString } from "./utilities/string";
7
- import { VARIABLE_RULE_NAME, STATEMENT_RULE_NAME } from "./ruleNames";
8
6
 
9
7
  export default class Consequence {
10
8
  constructor(statementNode) {
@@ -18,8 +16,8 @@ export default class Consequence {
18
16
  matchStatementNode(statementNode, metaSubstitutions) {
19
17
  const nonTerminalNode = statementNode, ///
20
18
  consequenceNonTerminalNode = this.statementNode, ///
21
- consequenceNonTerminalNodeMatches = matchConsequenceNonTerminalNode(consequenceNonTerminalNode, nonTerminalNode, metaSubstitutions),
22
- statementNodeMatches = consequenceNonTerminalNodeMatches; ///
19
+ nonTerminalNodeMatches = consequenceMatcher.matchNonTerminalNode(consequenceNonTerminalNode, nonTerminalNode, metaSubstitutions),
20
+ statementNodeMatches = nonTerminalNodeMatches; ///
23
21
 
24
22
  return statementNodeMatches;
25
23
  }
@@ -49,139 +47,3 @@ export default class Consequence {
49
47
  return consequence;
50
48
  }
51
49
  }
52
-
53
- function matchConsequenceNode(consequenceNode, node, metaSubstitutions) {
54
- let consequenceNodeMatches = false;
55
-
56
- const nodeTerminalNode = node.isTerminalNode(),
57
- ruleNodeTerminalNode = consequenceNode.isTerminalNode();
58
-
59
- if (nodeTerminalNode === ruleNodeTerminalNode) {
60
- if (nodeTerminalNode) {
61
- const terminalNode = node, ///
62
- consequenceTerminalNode = consequenceNode, ///
63
- consequenceTerminalNodeMatches = matchConsequenceTerminalNode(consequenceTerminalNode, terminalNode, metaSubstitutions);
64
-
65
- consequenceNodeMatches = consequenceTerminalNodeMatches; ///
66
- } else {
67
- const nonTerminalNode = node, ///
68
- consequenceNonTerminalNode = consequenceNode, ///
69
- consequenceNonTerminalNodeMatches = matchConsequenceNonTerminalNode(consequenceNonTerminalNode, nonTerminalNode, metaSubstitutions);
70
-
71
- consequenceNodeMatches = consequenceNonTerminalNodeMatches; ///
72
- }
73
- }
74
-
75
- return consequenceNodeMatches;
76
- }
77
-
78
- function matchConsequenceNodes(consequenceNodes, nodes, metaSubstitutions) {
79
- let consequenceNodesMatches = false;
80
-
81
- const nodesLength = nodes.length,
82
- consequenceNodesLength = consequenceNodes.length;
83
-
84
- if (nodesLength === consequenceNodesLength) {
85
- consequenceNodesMatches = nodes.every((node, index) => {
86
- const consequenceNode = consequenceNodes[index],
87
- consequenceNodeMatches = matchConsequenceNode(consequenceNode, node, metaSubstitutions);
88
-
89
- if (consequenceNodeMatches) {
90
- return true;
91
- }
92
- });
93
- }
94
-
95
- return consequenceNodesMatches;
96
- }
97
-
98
- function matchConsequenceVariable(consequenceVariableNode, nodes, metaSubstitutions) {
99
- let consequenceVariableMatches = true;
100
-
101
- const consequenceVariableName = variableNameFromVariableNode(consequenceVariableNode),
102
- metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
103
- const variableName = metaSubstitution.getVariableName();
104
-
105
- if (variableName === consequenceVariableName) {
106
- return true;
107
- }
108
- }) || null;
109
-
110
- if (metaSubstitution !== null) {
111
- const metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
112
-
113
- consequenceVariableMatches = metaSubstitutionNodesMatch; ///
114
- }
115
-
116
- return consequenceVariableMatches;
117
- }
118
-
119
- function matchConsequenceTerminalNode(consequenceTerminalNode, terminalNode, metaSubstitutions) {
120
- const matches = consequenceTerminalNode.match(terminalNode),
121
- consequenceTerminalNodeMatches = matches; ///
122
-
123
- return consequenceTerminalNodeMatches;
124
- }
125
-
126
- function matchConsequenceNonTerminalNode(consequenceNonTerminalNode, nonTerminalNode, metaSubstitutions) {
127
- let consequenceNonTerminalNodeMatches = false;
128
-
129
- const ruleName = nonTerminalNode.getRuleName(),
130
- consequenceRuleName = consequenceNonTerminalNode.getRuleName(); ///
131
-
132
- if (ruleName === consequenceRuleName) {
133
- const childNodes = nonTerminalNode.getChildNodes(),
134
- consequenceChildNodes = consequenceNonTerminalNode.getChildNodes(),
135
- nodes = childNodes, ///
136
- consequenceNodes = consequenceChildNodes, ///
137
- consequenceChildNodesMatches = matchConsequenceNodes(consequenceNodes, nodes, metaSubstitutions);
138
-
139
- consequenceNonTerminalNodeMatches = consequenceChildNodesMatches; ///
140
-
141
- if (!consequenceNonTerminalNodeMatches) {
142
- const ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME);
143
-
144
- if (ruleNameStatementRuleName) {
145
- const statementNode = nonTerminalNode, ///
146
- consequenceStatementNode = consequenceNonTerminalNode, ///
147
- consequenceStatementNodeMatches = matchConsequenceStatementNode(consequenceStatementNode, statementNode, metaSubstitutions);
148
-
149
- consequenceNonTerminalNodeMatches = consequenceStatementNodeMatches; ///
150
- }
151
- }
152
- }
153
-
154
- return consequenceNonTerminalNodeMatches;
155
- }
156
-
157
- function matchConsequenceStatementNode(consequenceStatementNode, statementNode, metaSubstitutions) {
158
- let consequenceStatementNodeMatches = false;
159
-
160
- const consequenceNonTerminalNode = consequenceStatementNode, ///
161
- consequenceChildNodes = consequenceNonTerminalNode.getChildNodes(),
162
- consequenceChildNodesLength = consequenceChildNodes.length;
163
-
164
- if (consequenceChildNodesLength === 1) {
165
- const firstConsequenceChildNode = first(consequenceChildNodes),
166
- consequenceChildNode = firstConsequenceChildNode, ///
167
- consequenceChildNodeNonTerminalNode = consequenceChildNode.isNonTerminalNode();
168
-
169
- if (consequenceChildNodeNonTerminalNode) {
170
- const consequenceNonTerminalChildNode = consequenceChildNode, ///
171
- consequenceNonTerminalChildNodeRuleName = consequenceNonTerminalChildNode.getRuleName(),
172
- consequenceNonTerminalChildNodeRuleNameVariableRuleName = (consequenceNonTerminalChildNodeRuleName === VARIABLE_RULE_NAME);
173
-
174
- if (consequenceNonTerminalChildNodeRuleNameVariableRuleName) {
175
- const consequenceVariableNode = consequenceNonTerminalChildNode, ///
176
- nonTerminalNode = statementNode, ///
177
- childNodes = nonTerminalNode.getChildNodes(),
178
- nodes = childNodes, ///
179
- consequenceMetaVariableMatches = matchConsequenceVariable(consequenceVariableNode, nodes, metaSubstitutions);
180
-
181
- consequenceStatementNodeMatches = consequenceMetaVariableMatches; ///
182
- }
183
- }
184
- }
185
-
186
- return consequenceStatementNodeMatches;
187
- }
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ import Matcher from "../matcher";
4
+
5
+ import { first } from "../utilities/array";
6
+ import { metavariableNameFromMetavariableNode } from "../utilities/query";
7
+ import { STATEMENT_RULE_NAME, METAVARIABLE_RULE_NAME, METASTATEMENT_RULE_NAME } from "../ruleNames";
8
+
9
+ class ConclusionMatcher extends Matcher {
10
+ matchNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions) {
11
+ let nonTerminalNodeMatches = false;
12
+
13
+ const ruleName = nonTerminalNode.getRuleName(),
14
+ conclusionNonTerminalNodeRuleName = conclusionNonTerminalNode.getRuleName(),
15
+ ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME),
16
+ conclusionNonTerminalNodeRuleNameMetastatementRuleName = (conclusionNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
17
+
18
+ if (ruleNameStatementRuleName && conclusionNonTerminalNodeRuleNameMetastatementRuleName) {
19
+ const statementNode = nonTerminalNode, ///
20
+ conclusionMetastatementNode = conclusionNonTerminalNode, ///
21
+ metastatementNodeMatches = this.matchMetastatementNode(conclusionMetastatementNode, statementNode, substitutions);
22
+
23
+ if (metastatementNodeMatches) {
24
+ nonTerminalNodeMatches = true; ///
25
+ } else {
26
+ nonTerminalNodeMatches = super.matchNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions);
27
+ }
28
+ } else if (ruleName === conclusionNonTerminalNodeRuleName) {
29
+ nonTerminalNodeMatches = super.matchNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions);
30
+ }
31
+
32
+ return nonTerminalNodeMatches;
33
+ }
34
+
35
+ matchMetavariableNode(conclusionMetavariableNode, statementNode, substitutions) {
36
+ let metavariableNodeMatches = true;
37
+
38
+ const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
39
+ substitution = substitutions.find((substitution) => {
40
+ const metavariableName = substitution.getMetavariableName();
41
+
42
+ if (metavariableName === conclusionMetavariableName) {
43
+ return true;
44
+ }
45
+ }) || null;
46
+
47
+ if (substitution !== null) {
48
+ const substitutionNodesMatch = substitution.matchStatementNode(statementNode);
49
+
50
+ metavariableNodeMatches = substitutionNodesMatch; ///
51
+ }
52
+
53
+ return metavariableNodeMatches;
54
+ }
55
+
56
+ matchMetastatementNode(conclusionMetastatementNode, statementNode, substitutions) {
57
+ let metastatementNodeMatches = false;
58
+
59
+ const conclusionNonTerminalNode = conclusionMetastatementNode, ///
60
+ conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
61
+ conclusionNonTerminalNodeChildNodesLength = conclusionNonTerminalNodeChildNodes.length;
62
+
63
+ if (conclusionNonTerminalNodeChildNodesLength === 1) {
64
+ const firstConclusionChildNode = first(conclusionNonTerminalNodeChildNodes),
65
+ conclusionChildNode = firstConclusionChildNode, ///
66
+ conclusionChildNodeNonTerminalNode = conclusionChildNode.isNonTerminalNode();
67
+
68
+ if (conclusionChildNodeNonTerminalNode) {
69
+ const conclusionNonTerminalChildNode = conclusionChildNode, ///
70
+ conclusionNonTerminalChildNodeRuleName = conclusionNonTerminalChildNode.getRuleName(),
71
+ conclusionNonTerminalChildNodeRuleNameMetavariableRuleName = (conclusionNonTerminalChildNodeRuleName === METAVARIABLE_RULE_NAME);
72
+
73
+ if (conclusionNonTerminalChildNodeRuleNameMetavariableRuleName) {
74
+ const conclusionMetavariableNode = conclusionNonTerminalChildNode, ///
75
+ metavariableNodeMatches = this.matchMetavariableNode(conclusionMetavariableNode, statementNode, substitutions);
76
+
77
+ metastatementNodeMatches = metavariableNodeMatches; ///
78
+ }
79
+ }
80
+ }
81
+
82
+ return metastatementNodeMatches;
83
+ }
84
+ }
85
+
86
+ export const conclusionMatcher = new ConclusionMatcher();
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ import Matcher from "../matcher";
4
+
5
+ import { first } from "../utilities/array";
6
+ import { variableNameFromVariableNode } from "../utilities/query";
7
+ import { VARIABLE_RULE_NAME, STATEMENT_RULE_NAME } from "../ruleNames";
8
+
9
+ class ConsequenceMatcher extends Matcher {
10
+ matchNonTerminalNode(consequenceNonTerminalNode, nonTerminalNode, metaSubstitutions) {
11
+ let nonTerminalNodeMatches = false;
12
+
13
+ const ruleName = nonTerminalNode.getRuleName(),
14
+ consequenceRuleName = consequenceNonTerminalNode.getRuleName(); ///
15
+
16
+ if (ruleName === consequenceRuleName) {
17
+ nonTerminalNodeMatches = super.matchNonTerminalNode(consequenceNonTerminalNode, nonTerminalNode, metaSubstitutions);
18
+
19
+ if (!nonTerminalNodeMatches) {
20
+ const ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME);
21
+
22
+ if (ruleNameStatementRuleName) {
23
+ const statementNode = nonTerminalNode, ///
24
+ consequenceStatementNode = consequenceNonTerminalNode, ///
25
+ statementNodeMatches = this.matchStatementNode(consequenceStatementNode, statementNode, metaSubstitutions);
26
+
27
+ nonTerminalNodeMatches = statementNodeMatches; ///
28
+ }
29
+ }
30
+ }
31
+
32
+ return nonTerminalNodeMatches;
33
+ }
34
+
35
+ matchStatementNode(consequenceStatementNode, statementNode, metaSubstitutions) {
36
+ let statementNodeMatches = false;
37
+
38
+ const consequenceNonTerminalNode = consequenceStatementNode, ///
39
+ consequenceChildNodes = consequenceNonTerminalNode.getChildNodes(),
40
+ consequenceChildNodesLength = consequenceChildNodes.length;
41
+
42
+ if (consequenceChildNodesLength === 1) {
43
+ const firstConsequenceChildNode = first(consequenceChildNodes),
44
+ consequenceChildNode = firstConsequenceChildNode, ///
45
+ consequenceChildNodeNonTerminalNode = consequenceChildNode.isNonTerminalNode();
46
+
47
+ if (consequenceChildNodeNonTerminalNode) {
48
+ const consequenceNonTerminalChildNode = consequenceChildNode, ///
49
+ consequenceNonTerminalChildNodeRuleName = consequenceNonTerminalChildNode.getRuleName(),
50
+ consequenceNonTerminalChildNodeRuleNameVariableRuleName = (consequenceNonTerminalChildNodeRuleName === VARIABLE_RULE_NAME);
51
+
52
+ if (consequenceNonTerminalChildNodeRuleNameVariableRuleName) {
53
+ const consequenceVariableNode = consequenceNonTerminalChildNode, ///
54
+ nonTerminalNode = statementNode, ///
55
+ childNodes = nonTerminalNode.getChildNodes(),
56
+ nodes = childNodes, ///
57
+ variableMatches = this.matchVariable(consequenceVariableNode, nodes, metaSubstitutions);
58
+
59
+ statementNodeMatches = variableMatches; ///
60
+ }
61
+ }
62
+ }
63
+
64
+ return statementNodeMatches;
65
+ }
66
+
67
+ matchVariable(consequenceVariableNode, nodes, metaSubstitutions) {
68
+ let variableMatches = true;
69
+
70
+ const consequenceVariableName = variableNameFromVariableNode(consequenceVariableNode),
71
+ metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
72
+ const variableName = metaSubstitution.getVariableName();
73
+
74
+ if (variableName === consequenceVariableName) {
75
+ return true;
76
+ }
77
+ }) || null;
78
+
79
+ if (metaSubstitution !== null) {
80
+ const metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
81
+
82
+ variableMatches = metaSubstitutionNodesMatch; ///
83
+ }
84
+
85
+ return variableMatches;
86
+ }
87
+ }
88
+
89
+ export const consequenceMatcher = new ConsequenceMatcher();