occam-verify-cli 0.0.262 → 0.0.263

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/bin/conclusion.js CHANGED
@@ -1,5 +1,8 @@
1
1
  "use strict";
2
2
 
3
+ const { METAVARIABLE_RULE_NAME } = require("./ruleNames"),
4
+ { metavariableNameFromMetavariableNode } = require("./utilities/query");
5
+
3
6
  class Conclusion {
4
7
  constructor(metastatementNode) {
5
8
  this.metastatementNode = metastatementNode;
@@ -9,6 +12,15 @@ class Conclusion {
9
12
  return this.metastatementNode;
10
13
  }
11
14
 
15
+ matchNonTerminalNode(metastatementNode, metaSubstitutions) {
16
+ const nonTerminalNode = metastatementNode, ///
17
+ conclusionNonTerminalNode = this.metastatementNode, ///
18
+ conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions),
19
+ nonTerminalNodeMatches = conclusionNonTerminalNodeMatches; ///
20
+
21
+ return nonTerminalNodeMatches;
22
+ }
23
+
12
24
  static fromMetastatementNode(metastatementNode) {
13
25
  const conclusion = new Conclusion(metastatementNode);
14
26
 
@@ -17,3 +29,114 @@ class Conclusion {
17
29
  }
18
30
 
19
31
  module.exports = Conclusion;
32
+
33
+ function matchConclusionNode(conclusionNode, node, metaSubstitutions) {
34
+ let conclusionNodeMatches = false;
35
+
36
+ const nodeTerminalNode = node.isTerminalNode(),
37
+ ruleNodeTerminalNode = conclusionNode.isTerminalNode();
38
+
39
+ if (nodeTerminalNode === ruleNodeTerminalNode) {
40
+ if (nodeTerminalNode) {
41
+ const terminalNode = node, ///
42
+ conclusionTerminalNode = conclusionNode, ///
43
+ conclusionTerminalNodeMatches = matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions);
44
+
45
+ conclusionNodeMatches = conclusionTerminalNodeMatches; ///
46
+ } else {
47
+ const nonTerminalNode = node, ///
48
+ conclusionNonTerminalNode = conclusionNode, ///
49
+ conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions);
50
+
51
+ conclusionNodeMatches = conclusionNonTerminalNodeMatches; ///
52
+ }
53
+ }
54
+
55
+ return conclusionNodeMatches;
56
+ }
57
+
58
+ function matchConclusionChildNodes(conclusionChildNodes, childNodes, metaSubstitutions) {
59
+ let conclusionChildNodesMatches = false;
60
+
61
+ const childNodesLength = childNodes.length,
62
+ conclusionChildNodesLength = conclusionChildNodes.length;
63
+
64
+ if (childNodesLength === conclusionChildNodesLength) {
65
+ conclusionChildNodesMatches = childNodes.every((childNode, index) => {
66
+ const conclusionChildNode = conclusionChildNodes[index],
67
+ conclusionNode = conclusionChildNode, ///
68
+ node = childNode, ///
69
+ conclusionNodeMatches = matchConclusionNode(conclusionNode, node, metaSubstitutions);
70
+
71
+ if (conclusionNodeMatches) {
72
+ return true;
73
+ }
74
+ })
75
+ }
76
+
77
+ return conclusionChildNodesMatches;
78
+ }
79
+
80
+ function matchConclusionMetavariable(conclusionMetavariableNode, nonTerminalNode, metaSubstitutions) {
81
+ let conclusionMetavariableMatches = true;
82
+
83
+ const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
84
+ metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
85
+ const metavariableName = metaSubstitution.getMetavariableName();
86
+
87
+ if (metavariableName === conclusionMetavariableName) {
88
+ return true;
89
+ }
90
+ }) || null;
91
+
92
+ if (metaSubstitution !== null) {
93
+ const metaSubstitutionNonTerminalNodeMatches = metaSubstitution.matchNonTerminalNode(nonTerminalNode);
94
+
95
+ conclusionMetavariableMatches = metaSubstitutionNonTerminalNodeMatches; ///
96
+ }
97
+
98
+ return conclusionMetavariableMatches;
99
+ }
100
+
101
+ function matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions) {
102
+ let conclusionTerminalNodeMatches = false;
103
+
104
+ const matches = conclusionTerminalNode.match(terminalNode);
105
+
106
+ if (matches) {
107
+ conclusionTerminalNodeMatches = true;
108
+ }
109
+
110
+ return conclusionTerminalNodeMatches;
111
+ }
112
+
113
+ function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions) {
114
+ let conclusionNonTerminalNodeMatches = false;
115
+
116
+ const conclusionRuleName = conclusionNonTerminalNode.getRuleName(); ///
117
+
118
+ switch (conclusionRuleName) {
119
+ case METAVARIABLE_RULE_NAME: {
120
+ const conclusionMetavariableNode = conclusionNonTerminalNode, ///
121
+ conclusionMetavariableMatches = matchConclusionMetavariable(conclusionMetavariableNode, nonTerminalNode, metaSubstitutions);
122
+
123
+ conclusionNonTerminalNodeMatches = conclusionMetavariableMatches;
124
+
125
+ break;
126
+ }
127
+
128
+ default: {
129
+ const ruleName = nonTerminalNode.getRuleName();
130
+
131
+ if (ruleName === conclusionRuleName) {
132
+ const childNodes = nonTerminalNode.getChildNodes(),
133
+ conclusionChildNodes = conclusionNonTerminalNode.getChildNodes(),
134
+ conclusionChildNodesMatches = matchConclusionChildNodes(conclusionChildNodes, childNodes, metaSubstitutions);
135
+
136
+ conclusionNonTerminalNodeMatches = conclusionChildNodesMatches; ///
137
+ }
138
+ }
139
+ }
140
+
141
+ return conclusionNonTerminalNodeMatches;
142
+ }
@@ -14,6 +14,14 @@ class MetaSubstitution {
14
14
  return this.nonTerminalNode;
15
15
  }
16
16
 
17
+ matchNonTerminalNode(nonTerminalNode) {
18
+ const metaSubstitutionNonTerminalNode = this.nonTerminalNode,
19
+ metaSubstitutionNonTerminalNodeMatches = matchMetaSubstitutionNonTerminalNode(metaSubstitutionNonTerminalNode, nonTerminalNode),
20
+ nonTerminalNodeMatches = metaSubstitutionNonTerminalNodeMatches; ///
21
+
22
+ return nonTerminalNodeMatches;
23
+ }
24
+
17
25
  static fromMetavariableNameAndNonTerminalNode(metavariableName, nonTerminalNode) {
18
26
  const metaSubstitution = new MetaSubstitution(metavariableName, nonTerminalNode);
19
27
 
@@ -22,3 +30,79 @@ class MetaSubstitution {
22
30
  }
23
31
 
24
32
  module.exports = MetaSubstitution;
33
+
34
+ function matchMetaSubstitutionNode(metaSubstitutionNode, node) {
35
+ let metaSubstitutionNodeMatches = false;
36
+
37
+ const nodeTerminalNode = node.isTerminalNode(),
38
+ ruleNodeTerminalNode = metaSubstitutionNode.isTerminalNode();
39
+
40
+ if (nodeTerminalNode === ruleNodeTerminalNode) {
41
+ if (nodeTerminalNode) {
42
+ const terminalNode = node, ///
43
+ metaSubstitutionTerminalNode = metaSubstitutionNode, ///
44
+ metaSubstitutionTerminalNodeMatches = matchMetaSubstitutionTerminalNode(metaSubstitutionTerminalNode, terminalNode);
45
+
46
+ metaSubstitutionNodeMatches = metaSubstitutionTerminalNodeMatches; ///
47
+ } else {
48
+ const nonTerminalNode = node, ///
49
+ metaSubstitutionNonTerminalNode = metaSubstitutionNode, ///
50
+ metaSubstitutionNonTerminalNodeMatches = matchMetaSubstitutionNonTerminalNode(metaSubstitutionNonTerminalNode, nonTerminalNode);
51
+
52
+ metaSubstitutionNodeMatches = metaSubstitutionNonTerminalNodeMatches; ///
53
+ }
54
+ }
55
+
56
+ return metaSubstitutionNodeMatches;
57
+ }
58
+
59
+ function matchMetaSubstitutionChildNodes(metaSubstitutionChildNodes, childNodes) {
60
+ let metaSubstitutionChildNodesMatches = false;
61
+
62
+ const childNodesLength = childNodes.length,
63
+ metaSubstitutionChildNodesLength = metaSubstitutionChildNodes.length;
64
+
65
+ if (childNodesLength === metaSubstitutionChildNodesLength) {
66
+ metaSubstitutionChildNodesMatches = childNodes.every((childNode, index) => {
67
+ const metaSubstitutionChildNode = metaSubstitutionChildNodes[index],
68
+ metaSubstitutionNode = metaSubstitutionChildNode, ///
69
+ node = childNode, ///
70
+ metaSubstitutionNodeMatches = matchMetaSubstitutionNode(metaSubstitutionNode, node);
71
+
72
+ if (metaSubstitutionNodeMatches) {
73
+ return true;
74
+ }
75
+ })
76
+ }
77
+
78
+ return metaSubstitutionChildNodesMatches;
79
+ }
80
+
81
+ function matchMetaSubstitutionTerminalNode(metaSubstitutionTerminalNode, terminalNode) {
82
+ let metaSubstitutionTerminalNodeMatches = false;
83
+
84
+ const matches = metaSubstitutionTerminalNode.match(terminalNode);
85
+
86
+ if (matches) {
87
+ metaSubstitutionTerminalNodeMatches = true;
88
+ }
89
+
90
+ return metaSubstitutionTerminalNodeMatches;
91
+ }
92
+
93
+ function matchMetaSubstitutionNonTerminalNode(metaSubstitutionNonTerminalNode, nonTerminalNode) {
94
+ let metaSubstitutionNonTerminalNodeMatches = false;
95
+
96
+ const ruleName = nonTerminalNode.getRuleName(),
97
+ metaSubstitutionRuleName = metaSubstitutionNonTerminalNode.getRuleName(); ///
98
+
99
+ if (ruleName === metaSubstitutionRuleName) {
100
+ const childNodes = nonTerminalNode.getChildNodes(),
101
+ metaSubstitutionChildNodes = metaSubstitutionNonTerminalNode.getChildNodes(),
102
+ metaSubstitutionChildNodesMatches = matchMetaSubstitutionChildNodes(metaSubstitutionChildNodes, childNodes);
103
+
104
+ metaSubstitutionNonTerminalNodeMatches = metaSubstitutionChildNodesMatches; ///
105
+ }
106
+
107
+ return metaSubstitutionNonTerminalNodeMatches;
108
+ }
package/bin/premise.js CHANGED
@@ -1,19 +1,150 @@
1
1
  "use strict";
2
2
 
3
+ const MetaSubstitution = require("./metaSubstitution");
4
+
5
+ const { METAVARIABLE_RULE_NAME } = require("./ruleNames"),
6
+ { metavariableNameFromMetavariableNode } = require("./utilities/query");
7
+
3
8
  class Premise {
4
- constructor(metastatementNodes) {
5
- this.metastatementNodes = metastatementNodes;
9
+ constructor(metastatementNode) {
10
+ this.metastatementNode = metastatementNode;
11
+ }
12
+
13
+ getMetastatementNode() {
14
+ return this.metastatementNode;
6
15
  }
7
16
 
8
- getMetastatementNodes() {
9
- return this.metastatementNodes;
17
+ matchNonTerminalNode(nonTerminalNode, metaSubstitutions) {
18
+ const premiseNonTerminalNode = this.metastatementNode, ///
19
+ premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions),
20
+ nonTerminalNodeMatches = premiseNonTerminalNodeMatches; ///
21
+
22
+ return nonTerminalNodeMatches;
10
23
  }
11
24
 
12
- static fromMetastatementNodes(metastatementNodes) {
13
- const premise = new Premise(metastatementNodes);
25
+ static fromMetastatementNode(metastatementNode) {
26
+ const premise = new Premise(metastatementNode);
14
27
 
15
28
  return premise;
16
29
  }
17
30
  }
18
31
 
19
32
  module.exports = Premise;
33
+
34
+ function matchPremiseNode(premiseNode, node, metaSubstitutions) {
35
+ let premiseNodeMatches = false;
36
+
37
+ const nodeTerminalNode = node.isTerminalNode(),
38
+ ruleNodeTerminalNode = premiseNode.isTerminalNode();
39
+
40
+ if (nodeTerminalNode === ruleNodeTerminalNode) {
41
+ if (nodeTerminalNode) {
42
+ const terminalNode = node, ///
43
+ premiseTerminalNode = premiseNode, ///
44
+ premiseTerminalNodeMatches = matchPremiseTerminalNode(premiseTerminalNode, terminalNode, metaSubstitutions);
45
+
46
+ premiseNodeMatches = premiseTerminalNodeMatches; ///
47
+ } else {
48
+ const nonTerminalNode = node, ///
49
+ premiseNonTerminalNode = premiseNode, ///
50
+ premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions);
51
+
52
+ premiseNodeMatches = premiseNonTerminalNodeMatches; ///
53
+ }
54
+ }
55
+
56
+ return premiseNodeMatches;
57
+ }
58
+
59
+ function matchPremiseChildNodes(premiseChildNodes, childNodes, metaSubstitutions) {
60
+ let premiseChildNodesMatches = false;
61
+
62
+ const childNodesLength = childNodes.length,
63
+ premiseChildNodesLength = premiseChildNodes.length;
64
+
65
+ if (childNodesLength === premiseChildNodesLength) {
66
+ premiseChildNodesMatches = childNodes.every((childNode, index) => {
67
+ const premiseChildNode = premiseChildNodes[index],
68
+ premiseNode = premiseChildNode, ///
69
+ node = childNode, ///
70
+ premiseNodeMatches = matchPremiseNode(premiseNode, node, metaSubstitutions);
71
+
72
+ if (premiseNodeMatches) {
73
+ return true;
74
+ }
75
+ })
76
+ }
77
+
78
+ return premiseChildNodesMatches;
79
+ }
80
+
81
+ function matchPremiseMetavariable(premiseMetavariableNode, nonTerminalNode, metaSubstitutions) {
82
+ let premiseMetavariableMatches;
83
+
84
+ const premiseMetavariableName = metavariableNameFromMetavariableNode(premiseMetavariableNode),
85
+ metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
86
+ const metavariableName = metaSubstitution.getMetavariableName();
87
+
88
+ if (metavariableName === premiseMetavariableName) {
89
+ return true;
90
+ }
91
+ }) || null;
92
+
93
+ if (metaSubstitution !== null) {
94
+ const nonTerminalNodeMatches = metaSubstitution.matchNonTerminalNode(nonTerminalNode);
95
+
96
+ premiseMetavariableMatches = nonTerminalNodeMatches; ///
97
+ } else {
98
+ const metavariableName = premiseMetavariableName, ///
99
+ metaSubstitution = MetaSubstitution.fromMetavariableNameAndNonTerminalNode(metavariableName, nonTerminalNode);
100
+
101
+ metaSubstitutions.push(metaSubstitution);
102
+
103
+ premiseMetavariableMatches = true;
104
+ }
105
+
106
+ return premiseMetavariableMatches;
107
+ }
108
+
109
+ function matchPremiseTerminalNode(premiseTerminalNode, terminalNode, metaSubstitutions) {
110
+ let premiseTerminalNodeMatches = false;
111
+
112
+ const matches = premiseTerminalNode.match(terminalNode);
113
+
114
+ if (matches) {
115
+ premiseTerminalNodeMatches = true;
116
+ }
117
+
118
+ return premiseTerminalNodeMatches;
119
+ }
120
+
121
+ function matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions) {
122
+ let premiseNonTerminalNodeMatches = false;
123
+
124
+ const premiseRuleName = premiseNonTerminalNode.getRuleName(); ///
125
+
126
+ switch (premiseRuleName) {
127
+ case METAVARIABLE_RULE_NAME: {
128
+ const premiseMetavariableNode = premiseNonTerminalNode, ///
129
+ premiseMetavariableMatches = matchPremiseMetavariable(premiseMetavariableNode, nonTerminalNode, metaSubstitutions);
130
+
131
+ premiseNonTerminalNodeMatches = premiseMetavariableMatches;
132
+
133
+ break;
134
+ }
135
+
136
+ default: {
137
+ const ruleName = nonTerminalNode.getRuleName();
138
+
139
+ if (ruleName === premiseRuleName) {
140
+ const childNodes = nonTerminalNode.getChildNodes(),
141
+ premiseChildNodes = premiseNonTerminalNode.getChildNodes(),
142
+ premiseChildNodesMatches = matchPremiseChildNodes(premiseChildNodes, childNodes, metaSubstitutions);
143
+
144
+ premiseNonTerminalNodeMatches = premiseChildNodesMatches; ///
145
+ }
146
+ }
147
+ }
148
+
149
+ return premiseNonTerminalNodeMatches;
150
+ }
package/bin/rule.js CHANGED
@@ -1,41 +1,44 @@
1
1
  "use strict";
2
2
 
3
- const { labelsAsString } = require("./utilities/string");
3
+ const { labelsAsString } = require("./utilities/string"),
4
+ { prune, someCombination } = require("./utilities/array");
4
5
 
5
6
  class Rule {
6
- constructor(labels, premise, conclusion, metastatementNode) {
7
+ constructor(labels, premises, conclusion) {
7
8
  this.labels = labels;
8
- this.premise = premise;
9
+ this.premises = premises;
9
10
  this.conclusion = conclusion;
10
- this.metastatementNode = metastatementNode;
11
11
  }
12
12
 
13
13
  getLabels() {
14
14
  return this.labels;
15
15
  }
16
16
 
17
- getPremise() {
18
- return this.premise;
17
+ getPremises() {
18
+ return this.premises;
19
19
  }
20
20
 
21
21
  getConclusion() {
22
22
  return this.conclusion;
23
23
  }
24
24
 
25
- getPremiseMetastatementNodes() {
26
- const metastatementNodes = (this.premise !== null) ?
27
- this.premise.getMetastatementNodes() :
28
- [];
25
+ matchMetastatement(metastatementNode, context) {
26
+ let metastatementNodes = context.getMetastatementNodes();
29
27
 
30
- return metastatementNodes;
31
- }
28
+ const premisesLength = this.premises.length,
29
+ start = -premisesLength;
30
+
31
+ metastatementNodes = metastatementNodes.slice(start); ///
32
+
33
+ const matchesMetastatement = someCombination(metastatementNodes, (metastatementNodes) => {
34
+ const premisesMatchConclusion = matchPremisesAndConclusion(this.premises, this.conclusion, metastatementNodes, metastatementNode);
32
35
 
33
- getConclusionMetastatementNode() {
34
- const metastatementNode = (this.conclusion !== null) ?
35
- this.conclusion.getMetastatementNode() :
36
- this.metastatementNode;
36
+ if (premisesMatchConclusion) {
37
+ return true;
38
+ }
39
+ });
37
40
 
38
- return metastatementNode;
41
+ return matchesMetastatement;
39
42
  }
40
43
 
41
44
  asString() {
@@ -44,21 +47,61 @@ class Rule {
44
47
  return string;
45
48
  }
46
49
 
47
- static fromMetastatementNodeAndLabels(metastatementNode, labels) {
48
- const premise = null,
49
- conclusion = null,
50
- rule = new Rule(labels, premise, conclusion, metastatementNode);
50
+ static fromPremisesConclusionAndLabels(premises, conclusion, labels) {
51
+ const rule = new Rule(labels, premises, conclusion);
51
52
 
52
53
  return rule;
53
54
  }
55
+ }
54
56
 
55
- static fromPremiseConclusionAndLabels(premise, conclusion, labels) {
56
- const metastatementNode = null,
57
- rule = new Rule(labels, premise, conclusion, metastatementNode);
57
+ module.exports = Rule;
58
58
 
59
- return rule;
60
- }
59
+ function matchPremise(premise, metastatementNodes, metaSubstitutions) {
60
+ const metastatementNode = prune(metastatementNodes, (metastatementNode) => {
61
+ const nonTerminalNode = metastatementNode, ///
62
+ nonTerminalNodeMatches = premise.matchNonTerminalNode(nonTerminalNode, metaSubstitutions);
63
+
64
+ if (!nonTerminalNodeMatches) { ///
65
+ return true;
66
+ }
67
+ }) || null;
68
+
69
+ const premiseMatches = (metastatementNode !== null);
70
+
71
+ return premiseMatches;
61
72
  }
62
73
 
63
- module.exports = Rule;
74
+ function matchPremises(premise, metastatementNodes, metaSubstitutions) {
75
+ const premisesMatches = premise.every((premise) => {
76
+ const premiseMatches = matchPremise(premise, metastatementNodes, metaSubstitutions);
77
+
78
+ if (premiseMatches) {
79
+ return true;
80
+ }
81
+ });
64
82
 
83
+ return premisesMatches;
84
+ }
85
+
86
+ function matchConclusion(conclusion, metastatementNode, metaSubstitutions) {
87
+ const nonTerminalNode = metastatementNode, ///
88
+ nonTerminalNodeMatches = conclusion.matchNonTerminalNode(nonTerminalNode, metaSubstitutions),
89
+ conclusionMatches = nonTerminalNodeMatches; ///
90
+
91
+ return conclusionMatches;
92
+ }
93
+
94
+ function matchPremisesAndConclusion(premises, conclusion, metastatementNodes, metastatementNode) {
95
+ let premisesMatchConclusion = false;
96
+
97
+ const metaSubstitutions = [],
98
+ premisesMatches = matchPremises(premises, metastatementNodes, metaSubstitutions);
99
+
100
+ if (premisesMatches) {
101
+ const conclusionMatches = matchConclusion(conclusion, metastatementNode, metaSubstitutions);
102
+
103
+ premisesMatchConclusion = conclusionMatches; ///
104
+ }
105
+
106
+ return premisesMatchConclusion;
107
+ }
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
 
3
- const MetaAntecedent = require("../metaAntecedent"),
4
- verifyUnqualifiedMetastatement = require("../verify/metastatement/unqualified");
3
+ const verifyUnqualifiedMetastatement = require("../verify/metastatement/unqualified");
5
4
 
6
- const { nodeQuery, nodesQuery } = require("../utilities/query");
5
+ const { nodesQuery } = require("../utilities/query");
7
6
 
8
- const metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement"),
9
- unqualifiedMetastatementNodesQuery = nodesQuery("/metaAntecedent/unqualifiedMetastatement");
7
+ const unqualifiedMetastatementNodesQuery = nodesQuery("/metaAntecedent/unqualifiedMetastatement");
10
8
 
11
- function verifyMetaAntecedent(metaAntecedentNode, metaAntecedents, context) {
9
+ function verifyMetaAntecedent(metaAntecedentNode, context) {
12
10
  const unqualifiedMetastatementNodes = unqualifiedMetastatementNodesQuery(metaAntecedentNode),
13
11
  metaAntecedentVerified = unqualifiedMetastatementNodes.every((unqualifiedMetastatementNode) => {
14
12
  const unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, context);
@@ -18,17 +16,6 @@ function verifyMetaAntecedent(metaAntecedentNode, metaAntecedents, context) {
18
16
  }
19
17
  });
20
18
 
21
- if (metaAntecedentVerified) {
22
- const metastatementNodes = unqualifiedMetastatementNodes.map((unqualifiedMetastatementNode) => {
23
- const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode);
24
-
25
- return metastatementNode;
26
- }),
27
- metaAntecedent = MetaAntecedent.fromMetastatementNodes(metastatementNodes);
28
-
29
- metaAntecedents.push(metaAntecedent);
30
- }
31
-
32
19
  return metaAntecedentVerified;
33
20
  }
34
21
 
@@ -1,12 +1,10 @@
1
1
  "use strict";
2
2
 
3
- const MetaConsequent = require("../metaConsequent"),
4
- verifyUnqualifiedMetaStatement = require("../verify/metastatement/unqualified");
3
+ const verifyUnqualifiedMetaStatement = require("../verify/metastatement/unqualified");
5
4
 
6
5
  const { nodeQuery } = require("../utilities/query");
7
6
 
8
- const metastatementNodeQuery = nodeQuery("/unqualifiedMetaStatement/metastatement!"),
9
- unqualifiedMetaStatementNodeQuery = nodeQuery("/metaConsequent/unqualifiedMetaStatement!");
7
+ const unqualifiedMetaStatementNodeQuery = nodeQuery("/metaConsequent/unqualifiedMetaStatement!");
10
8
 
11
9
  function verifyMetaConsequent(metaConsequentNode, metaConsequents, context) {
12
10
  let metaConsequentVerified = false;
@@ -16,14 +14,7 @@ function verifyMetaConsequent(metaConsequentNode, metaConsequents, context) {
16
14
  if (unqualifiedMetaStatementNode !== null) {
17
15
  const unqualifiedMetaStatementVerified = verifyUnqualifiedMetaStatement(unqualifiedMetaStatementNode, context);
18
16
 
19
- if (unqualifiedMetaStatementVerified) {
20
- const metastatementNode = metastatementNodeQuery(unqualifiedMetaStatementNode),
21
- metaConsequent = MetaConsequent.fromMetaStatementNode(metastatementNode);
22
-
23
- metaConsequents.push(metaConsequent);
24
-
25
- metaConsequentVerified = true;
26
- }
17
+ metaConsequentVerified = unqualifiedMetaStatementVerified;
27
18
  }
28
19
 
29
20
  return metaConsequentVerified;
@@ -10,16 +10,16 @@ const { nodeQuery, nodesQuery } = require("../utilities/query"),
10
10
 
11
11
  const metaAntecedentNodeQuery = nodeQuery("/metaSublemma/metaAntecedent!"),
12
12
  metaDerivationNodeQuery = nodeQuery("/metaSublemma/metaDerivation!"),
13
- metaSublemmaChildNodesQuery = nodesQuery("/metaDerivation/*"),
13
+ metaDerivationChildNodesQuery = nodesQuery("/metaDerivation/*"),
14
14
  qualifiedMetastatementNodeQuery = nodeQuery("/metaSublemma/qualifiedMetastatement!"),
15
15
  unqualifiedMetastatementNodeQuery = nodeQuery("/metaSublemma/unqualifiedMetastatement!");
16
16
 
17
- function verifyMetaDerivation(metaNode, context) {
17
+ function verifyMetaDerivation(metaDerivationNode, context) {
18
18
  const derived = true;
19
19
 
20
20
  context.setDerived(derived);
21
21
 
22
- const metaSublemmaChildNodes = metaSublemmaChildNodesQuery(metaNode),
22
+ const metaSublemmaChildNodes = metaDerivationChildNodesQuery(metaDerivationNode),
23
23
  metaSublemmaChildNodesVerified = metaSublemmaChildNodes.every((metaSublemmaChildNode) => {
24
24
  let metaSublemmaChildNodeVerified;
25
25
 
@@ -70,9 +70,8 @@ function verifyMetaSublemma(metaSublemmaNode, context) {
70
70
 
71
71
  context = metaproofContext; ///
72
72
 
73
- const metaAntecedents = [],
74
- metaAntecedentNode = metaAntecedentNodeQuery(metaSublemmaNode),
75
- metaAntecedentVerified = verifyMetaAntecedent(metaAntecedentNode, metaAntecedents, context);
73
+ const metaAntecedentNode = metaAntecedentNodeQuery(metaSublemmaNode),
74
+ metaAntecedentVerified = verifyMetaAntecedent(metaAntecedentNode, context);
76
75
 
77
76
  if (metaAntecedentVerified) {
78
77
  let metaDerivationVerified = true;
@@ -27,16 +27,18 @@ function verifyMetaproof(metaproofNode, rules, context) {
27
27
  qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, context);
28
28
 
29
29
  if (qualifiedMetastatementVerified) {
30
- const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
31
- firstRule = first(rules),
32
- rule = firstRule, ///
33
- metastatementString = nodeAsString(metastatementNode),
34
- conclusionMetastatementNode = rule.getConclusionMetastatementNode(),
35
- conclusionMetastatementString = nodeAsString(conclusionMetastatementNode);
36
-
37
- if (metastatementString === conclusionMetastatementString) {
38
- metaproofVerified = true;
39
- }
30
+ debugger
31
+
32
+ // const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
33
+ // firstRule = first(rules),
34
+ // rule = firstRule, ///
35
+ // metastatementString = nodeAsString(metastatementNode),
36
+ // conclusionMetastatementNode = rule.getConclusionMetastatementNode(),
37
+ // conclusionMetastatementString = nodeAsString(conclusionMetastatementNode);
38
+ //
39
+ // if (metastatementString === conclusionMetastatementString) {
40
+ // metaproofVerified = true;
41
+ // }
40
42
  }
41
43
  }
42
44
 
@@ -2,8 +2,7 @@
2
2
 
3
3
  const { loggingUtilities } = require("necessary");
4
4
 
5
- const { matchRule } = require("../../utilities/rule"),
6
- { nodeAsString } = require("../../utilities/string"),
5
+ const { nodeAsString } = require("../../utilities/string"),
7
6
  { nodeQuery, referenceNameFromReferenceNode } = require("../../utilities/query");
8
7
 
9
8
  const { log } = loggingUtilities;
@@ -22,9 +21,9 @@ function verifyQualifiedMetastatement(qualifiedMetastatementNode, context) {
22
21
  rule = context.findRuleByReferenceName(referenceName);
23
22
 
24
23
  if (rule !== null) {
25
- const ruleMatches = matchRule(rule, metastatementNode, context);
24
+ const ruleMatchesMetastatement = rule.matchMetastatement(metastatementNode, context);
26
25
 
27
- if (ruleMatches) {
26
+ if (ruleMatchesMetastatement) {
28
27
  context.addMetastatementNode(metastatementNode);
29
28
 
30
29
  const metastatementString = nodeAsString(metastatementNode);
@@ -40,4 +39,3 @@ function verifyQualifiedMetastatement(qualifiedMetastatementNode, context) {
40
39
  }
41
40
 
42
41
  module.exports = verifyQualifiedMetastatement;
43
-
@@ -8,9 +8,9 @@ const { nodeQuery, nodesQuery } = require("../utilities/query");
8
8
  const metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement"),
9
9
  unqualifiedMetastatementNodesQuery = nodesQuery("/premise|premises/unqualifiedMetastatement");
10
10
 
11
- function verifyPremise(premiseNode, premises, context) {
12
- const unqualifiedMetastatementNodes = unqualifiedMetastatementNodesQuery(premiseNode),
13
- premiseVerified = unqualifiedMetastatementNodes.every((unqualifiedMetastatementNode) => {
11
+ function verifyPremiseOrPremises(premiseOrPremisesNode, premises, context) {
12
+ const unqualifiedMetastatementNodes = unqualifiedMetastatementNodesQuery(premiseOrPremisesNode),
13
+ premiseOrPremisesVerified = unqualifiedMetastatementNodes.every((unqualifiedMetastatementNode) => {
14
14
  const unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, context);
15
15
 
16
16
  if (unqualifiedMetastatementVerified) {
@@ -18,18 +18,16 @@ function verifyPremise(premiseNode, premises, context) {
18
18
  }
19
19
  });
20
20
 
21
- if (premiseVerified) {
22
- const metastatementNodes = unqualifiedMetastatementNodes.map((unqualifiedMetastatementNode) => {
23
- const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode);
21
+ if (premiseOrPremisesVerified) {
22
+ unqualifiedMetastatementNodes.forEach((unqualifiedMetastatementNode) => {
23
+ const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
24
+ premise = Premise.fromMetastatementNode(metastatementNode);
24
25
 
25
- return metastatementNode;
26
- }),
27
- premise = Premise.fromMetastatementNodes(metastatementNodes);
28
-
29
- premises.push(premise);
26
+ premises.push(premise);
27
+ });
30
28
  }
31
29
 
32
- return premiseVerified;
30
+ return premiseOrPremisesVerified;
33
31
  }
34
32
 
35
- module.exports = verifyPremise;
33
+ module.exports = verifyPremiseOrPremises;
@@ -2,15 +2,15 @@
2
2
 
3
3
  const Rule = require("../../rule"),
4
4
  verifyLabels = require("../../verify/labels"),
5
- verifyPremise = require("../../verify/premise"),
6
- verifyConclusion = require("../../verify/conclusion");
5
+ verifyConclusion = require("../../verify/conclusion"),
6
+ verifyPremiseOrPremises = require("../../verify/premiseOrPremises");
7
7
 
8
8
  const { first } = require("../../utilities/array"),
9
9
  { nodeQuery, nodesQuery } = require("../../utilities/query");
10
10
 
11
11
  const labelNodesQuery = nodesQuery("/rule/label"),
12
- premiseNodeQuery = nodeQuery("/inferenceConditional/premise|premises!"),
13
12
  conclusionNodeQuery = nodeQuery("/inferenceConditional/conclusion!"),
13
+ premiseOrPremisesNodeQuery = nodeQuery("/inferenceConditional/premise|premises!"),
14
14
  inferenceConditionalNodeQuery = nodeQuery("/rule/inferenceConditional!");
15
15
 
16
16
  function verifyInferenceConditionalRule(ruleNode, rules, context) {
@@ -25,20 +25,18 @@ function verifyInferenceConditionalRule(ruleNode, rules, context) {
25
25
 
26
26
  if (labelsVerified) {
27
27
  const premises = [],
28
- premiseNode = premiseNodeQuery(inferenceConditionalNode),
29
- premiseVerified = verifyPremise(premiseNode, premises, context);
28
+ premiseOrPremisesNode = premiseOrPremisesNodeQuery(inferenceConditionalNode),
29
+ premiseOrPremisesVerified = verifyPremiseOrPremises(premiseOrPremisesNode, premises, context);
30
30
 
31
- if (premiseVerified) {
31
+ if (premiseOrPremisesVerified) {
32
32
  const conclusions = [],
33
33
  conclusionNode = conclusionNodeQuery(inferenceConditionalNode),
34
34
  conclusionVerified = verifyConclusion(conclusionNode, conclusions, context);
35
35
 
36
36
  if (conclusionVerified) {
37
- const firstPremise = first(premises),
38
- firstConclusion = first(conclusions),
39
- premise = firstPremise, ///
37
+ const firstConclusion = first(conclusions),
40
38
  conclusion = firstConclusion, ///
41
- rule = Rule.fromPremiseConclusionAndLabels(premise, conclusion, labels);
39
+ rule = Rule.fromPremisesConclusionAndLabels(premises, conclusion, labels);
42
40
 
43
41
  rules.push(rule);
44
42
 
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  const Rule = require("../../rule"),
4
+ Conclusion = require("../../conclusion"),
4
5
  verifyLabels = require("../../verify/labels"),
5
6
  verifyUnqualifiedMetastatement = require("../../verify/metastatement/unqualified");
6
7
 
@@ -25,7 +26,9 @@ function verifyUnqualifiedMetastatementRule(ruleNode, rules, context) {
25
26
 
26
27
  if (unqualifiedMetastatementVerified) {
27
28
  const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
28
- rule = Rule.fromMetastatementNodeAndLabels(metastatementNode, labels);
29
+ conclusion = Conclusion.fromMetastatementNode(metastatementNode),
30
+ premises = [],
31
+ rule = Rule.fromPremisesConclusionAndLabels(premises, conclusion, labels);
29
32
 
30
33
  rules.push(rule);
31
34
 
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.262",
4
+ "version": "0.0.263",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -12,10 +12,10 @@
12
12
  "dependencies": {
13
13
  "argumentative": "^2.0.15",
14
14
  "necessary": "^11.0.40",
15
- "occam-custom-grammars": "^5.0.342",
15
+ "occam-custom-grammars": "^5.0.344",
16
16
  "occam-dom": "^3.0.171",
17
17
  "occam-grammar-utilities": "^7.0.66",
18
- "occam-grammars": "^1.0.309",
18
+ "occam-grammars": "^1.0.311",
19
19
  "occam-open-cli": "^5.0.37",
20
20
  "occam-parsers": "^16.0.122"
21
21
  },
@@ -1,19 +0,0 @@
1
- "use strict";
2
-
3
- class MetaAntecedent {
4
- constructor(metastatementNodes) {
5
- this.metastatementNodes = metastatementNodes;
6
- }
7
-
8
- getMetastatementNodes() {
9
- return this.metastatementNodes;
10
- }
11
-
12
- static fromMetastatementNodes(metastatementNodes) {
13
- const metaAntecedent = new MetaAntecedent(metastatementNodes);
14
-
15
- return metaAntecedent;
16
- }
17
- }
18
-
19
- module.exports = MetaAntecedent;
@@ -1,19 +0,0 @@
1
- "use strict";
2
-
3
- class MetaConsequent {
4
- constructor(metastatementNode) {
5
- this.metastatementNode = metastatementNode;
6
- }
7
-
8
- getMetastatementNode() {
9
- return this.metastatementNode;
10
- }
11
-
12
- static fromStatementNode(metastatementNode) {
13
- const metaConsequent = new MetaConsequent(metastatementNode);
14
-
15
- return metaConsequent;
16
- }
17
- }
18
-
19
- module.exports = MetaConsequent;
@@ -1,279 +0,0 @@
1
- "use strict";
2
-
3
- const MetaSubstitution = require("../metaSubstitution");
4
-
5
- const { nodeAsString } = require("../utilities/string"),
6
- { prune, someCombination } = require("../utilities/array"),
7
- { METAVARIABLE_RULE_NAME } = require("../ruleNames"),
8
- { metavariableNameFromMetavariableNode } = require("../utilities/query");
9
-
10
- function matchRule(rule, metastatementNode, context) {
11
- let metastatementNodes = context.getMetastatementNodes();
12
-
13
- const premiseMetastatementNodes = rule.getPremiseMetastatementNodes(),
14
- conclusionMetastatementNode = rule.getConclusionMetastatementNode(),
15
- premiseMetastatementNodesLength = premiseMetastatementNodes.length,
16
- start = -premiseMetastatementNodesLength;
17
-
18
- metastatementNodes = metastatementNodes.slice(start); ///
19
-
20
- const ruleMatches = someCombination(metastatementNodes, (metastatementNodes) => {
21
- const premisesMatchConclusion = matchPremisesAndConclusion(premiseMetastatementNodes, conclusionMetastatementNode, metastatementNodes, metastatementNode, context);
22
-
23
- if (premisesMatchConclusion) {
24
- return true;
25
- }
26
- });
27
-
28
- return ruleMatches;
29
- }
30
-
31
- module.exports = {
32
- matchRule
33
- };
34
-
35
- function matchPremisesAndConclusion(premiseMetastatementNodes, conclusionMetastatementNode, metastatementNodes, metastatementNode, context) {
36
- let premisesMatchConclusion = false;
37
-
38
- const metaSubstitutions = [],
39
- premisesMatch = matchPremises(premiseMetastatementNodes, metastatementNodes, metaSubstitutions, context);
40
-
41
- if (premisesMatch) {
42
- const conclusionNonTerminalNode = matchConclusion(conclusionMetastatementNode, metaSubstitutions), ///
43
- conclusionMetastatementString = nodeAsString(conclusionNonTerminalNode),
44
- metastatementString = nodeAsString(metastatementNode);
45
-
46
- premisesMatchConclusion = (metastatementString === conclusionMetastatementString);
47
- }
48
-
49
- return premisesMatchConclusion;
50
- }
51
-
52
- function matchPremises(premiseMetastatementNodes, metastatementNodes, metaSubstitutions) {
53
- const premisesMatches = premiseMetastatementNodes.every((premiseMetastatementNode) => {
54
- const premiseMatches = matchPremise(premiseMetastatementNode, metastatementNodes, metaSubstitutions);
55
-
56
- if (premiseMatches) {
57
- return true;
58
- }
59
- });
60
-
61
- return premisesMatches;
62
- }
63
-
64
- function matchPremise(premiseMetastatementNode, metastatementNodes, metaSubstitutions) {
65
- const metastatementNode = prune(metastatementNodes, (metastatementNode) => {
66
- const nonTerminalNode = metastatementNode, ///
67
- premiseNonTerminalNode = premiseMetastatementNode, ///
68
- premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions);
69
-
70
- if (!premiseNonTerminalNodeMatches) {
71
- return true;
72
- }
73
- }) || null;
74
-
75
- const premiseMatches = (metastatementNode !== null);
76
-
77
- return premiseMatches;
78
- }
79
-
80
- function matchPremiseNode(premiseNode, node, metaSubstitutions) {
81
- let premiseNodeMatches = false;
82
-
83
- const nodeTerminalNode = node.isTerminalNode(),
84
- ruleNodeTerminalNode = premiseNode.isTerminalNode();
85
-
86
- if (nodeTerminalNode === ruleNodeTerminalNode) {
87
- if (nodeTerminalNode) {
88
- const terminalNode = node, ///
89
- premiseTerminalNode = premiseNode, ///
90
- premiseTerminalNodeMatches = matchPremiseTerminalNode(premiseTerminalNode, terminalNode, metaSubstitutions);
91
-
92
- premiseNodeMatches = premiseTerminalNodeMatches; ///
93
- } else {
94
- const nonTerminalNode = node, ///
95
- premiseNonTerminalNode = premiseNode, ///
96
- premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions);
97
-
98
- premiseNodeMatches = premiseNonTerminalNodeMatches; ///
99
- }
100
- }
101
-
102
- return premiseNodeMatches;
103
- }
104
-
105
- function matchPremiseChildNodes(premiseChildNodes, childNodes, metaSubstitutions) {
106
- let premiseChildNodesMatches = false;
107
-
108
- const childNodesLength = childNodes.length,
109
- premiseChildNodesLength = premiseChildNodes.length;
110
-
111
- if (childNodesLength === premiseChildNodesLength) {
112
- premiseChildNodesMatches = childNodes.every((childNode, index) => {
113
- const premiseChildNode = premiseChildNodes[index],
114
- premiseNode = premiseChildNode, ///
115
- node = childNode, ///
116
- premiseNodeMatches = matchPremiseNode(premiseNode, node, metaSubstitutions);
117
-
118
- if (premiseNodeMatches) {
119
- return true;
120
- }
121
- })
122
- }
123
-
124
- return premiseChildNodesMatches;
125
- }
126
-
127
- function matchPremiseMetavariable(premiseMetavariableNode, nonTerminalNode, metaSubstitutions) {
128
- let premiseMetavariableMatches = false;
129
-
130
- const premiseMetavariableName = metavariableNameFromMetavariableNode(premiseMetavariableNode),
131
- nonTerminalString = nodeAsString(nonTerminalNode),
132
- metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
133
- const metavariableName = metaSubstitution.getMetavariableName();
134
-
135
- if (metavariableName === premiseMetavariableName) {
136
- return true;
137
- }
138
- }) || null;
139
-
140
- if (metaSubstitution !== null) {
141
- const metaSubstitutionNonTerminalNode = metaSubstitution.getNonTerminalNode(),
142
- metaSubstitutionNonTerminalString = nodeAsString(metaSubstitutionNonTerminalNode);
143
-
144
- if (nonTerminalString === metaSubstitutionNonTerminalString) {
145
- premiseMetavariableMatches = true;
146
- }
147
- } else {
148
- const metavariableName = premiseMetavariableName, ///
149
- metaSubstitution = MetaSubstitution.fromMetavariableNameAndNonTerminalNode(metavariableName, nonTerminalNode);
150
-
151
- metaSubstitutions.push(metaSubstitution);
152
-
153
- premiseMetavariableMatches = true;
154
- }
155
-
156
- return premiseMetavariableMatches;
157
- }
158
-
159
- function matchPremiseTerminalNode(premiseTerminalNode, terminalNode, metaSubstitutions) {
160
- let premiseTerminalNodeMatches = false;
161
-
162
- const matches = premiseTerminalNode.match(terminalNode);
163
-
164
- if (matches) {
165
- premiseTerminalNodeMatches = true;
166
- }
167
-
168
- return premiseTerminalNodeMatches;
169
- }
170
-
171
- function matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions) {
172
- let premiseNonTerminalNodeMatches = false;
173
-
174
- const premiseRuleName = premiseNonTerminalNode.getRuleName(); ///
175
-
176
- switch (premiseRuleName) {
177
- case METAVARIABLE_RULE_NAME: {
178
- const premiseMetavariableNode = premiseNonTerminalNode, ///
179
- premiseMetavariableMatches = matchPremiseMetavariable(premiseMetavariableNode, nonTerminalNode, metaSubstitutions);
180
-
181
- premiseNonTerminalNodeMatches = premiseMetavariableMatches;
182
-
183
- break;
184
- }
185
-
186
- default: {
187
- const ruleName = nonTerminalNode.getRuleName();
188
-
189
- if (ruleName === premiseRuleName) {
190
- const childNodes = nonTerminalNode.getChildNodes(),
191
- premiseChildNodes = premiseNonTerminalNode.getChildNodes(),
192
- premiseChildNodesMatches = matchPremiseChildNodes(premiseChildNodes, childNodes, metaSubstitutions);
193
-
194
- premiseNonTerminalNodeMatches = premiseChildNodesMatches; ///
195
- }
196
- }
197
- }
198
-
199
- return premiseNonTerminalNodeMatches;
200
- }
201
-
202
- function matchConclusion(conclusionMetastatementNode, metaSubstitutions) {
203
- let conclusionNonTerminalNode = conclusionMetastatementNode; ///
204
-
205
- conclusionNonTerminalNode = conclusionNonTerminalNode.clone();
206
-
207
- conclusionNonTerminalNode = matchConclusionNonTerminalNode(conclusionNonTerminalNode, metaSubstitutions);
208
-
209
- return conclusionNonTerminalNode;
210
- }
211
-
212
- function matchConclusionNode(conclusionNode, metaSubstitutions) {
213
- const conclusionNodeNonTerminalNode = conclusionNode.isNonTerminalNode();
214
-
215
- if (conclusionNodeNonTerminalNode) {
216
- let conclusionNonTerminalNode = conclusionNode; ///
217
-
218
- conclusionNonTerminalNode = matchConclusionNonTerminalNode(conclusionNonTerminalNode, metaSubstitutions);
219
-
220
- conclusionNode = conclusionNonTerminalNode; ///
221
- }
222
-
223
- return conclusionNode;
224
- }
225
-
226
- function matchConclusionChildNodes(conclusionChildNodes, metaSubstitutions) {
227
- conclusionChildNodes = conclusionChildNodes.map((conclusionChildNode) => {
228
- let conclusionNode = conclusionChildNode; ///
229
-
230
- conclusionNode = matchConclusionNode(conclusionNode, metaSubstitutions);
231
-
232
- conclusionChildNode = conclusionNode; ///
233
-
234
- return conclusionChildNode;
235
- });
236
-
237
- return conclusionChildNodes;
238
- }
239
-
240
- function matchConclusionNonTerminalNode(conclusinNonTerminalNode, metaSubstitutions) {
241
- const ruleName = conclusinNonTerminalNode.getRuleName();
242
-
243
- if (ruleName === METAVARIABLE_RULE_NAME) {
244
- let conclusionMetaVariableNode = conclusinNonTerminalNode; ///
245
-
246
- conclusinNonTerminalNode = matchConclusionMetavariableNode(conclusionMetaVariableNode, metaSubstitutions);
247
- } else {
248
- let childNodes = conclusinNonTerminalNode.getChildNodes();
249
-
250
- let conclusionChildNodes = childNodes; ///
251
-
252
- conclusionChildNodes = matchConclusionChildNodes(conclusionChildNodes, metaSubstitutions);
253
-
254
- childNodes = conclusionChildNodes; ///
255
-
256
- conclusinNonTerminalNode.setChildNodes(childNodes);
257
- }
258
-
259
- return conclusinNonTerminalNode;
260
- }
261
-
262
- function matchConclusionMetavariableNode(conclusionMetavariableNode, metaSubstitutions) {
263
- const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
264
- metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
265
- const metavariableName = metaSubstitution.getMetavariableName();
266
-
267
- if (metavariableName === conclusionMetavariableName) {
268
- return true;
269
- }
270
- });
271
-
272
- let nonTerminalNode = metaSubstitution.getNonTerminalNode(); ///
273
-
274
- nonTerminalNode = nonTerminalNode.clone(); ///
275
-
276
- const conclusionNonTerminalNode = nonTerminalNode; ///
277
-
278
- return conclusionNonTerminalNode;
279
- }