occam-verify-cli 0.0.834 → 0.0.836
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 +5 -5
- package/lib/consequent.js +3 -3
- package/lib/mixins/nodesVerifier/intrinsiclevel.js +59 -0
- package/lib/mixins/nodesVerifier/metaLevel.js +40 -0
- package/lib/premise.js +7 -7
- package/lib/substitution/metastatementForMetavariable.js +82 -5
- package/lib/substitution/statementForMetavariable.js +82 -5
- package/lib/substitution/termForVariable.js +82 -5
- package/lib/substitution.js +74 -0
- package/lib/supposition.js +4 -4
- package/lib/utilities/metaproof.js +2 -2
- package/lib/utilities/proof.js +2 -2
- package/lib/verifier/node/statementAsCombinator.js +7 -7
- package/lib/verifier/node/termAsConstructor.js +10 -18
- package/lib/verifier/nodes/equality.js +18 -8
- package/lib/verifier/nodes/intrinsicLevel.js +183 -0
- package/lib/verifier/nodes/metaLevel.js +183 -0
- package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +257 -0
- package/lib/verifier/nodes/statement.js +8 -9
- package/lib/verifier/nodes/term.js +3 -3
- package/lib/verify/containment.js +5 -14
- package/lib/verify/statement.js +23 -62
- package/package.json +2 -2
- package/src/conclusion.js +4 -4
- package/src/consequent.js +2 -2
- package/src/mixins/nodesVerifier/intrinsiclevel.js +73 -0
- package/src/mixins/nodesVerifier/metaLevel.js +39 -0
- package/src/premise.js +6 -6
- package/src/substitution/metastatementForMetavariable.js +5 -1
- package/src/substitution/statementForMetavariable.js +5 -1
- package/src/substitution/termForVariable.js +5 -1
- package/src/substitution.js +33 -0
- package/src/supposition.js +3 -3
- package/src/utilities/metaproof.js +1 -1
- package/src/utilities/proof.js +1 -1
- package/src/verifier/node/statementAsCombinator.js +10 -11
- package/src/verifier/node/termAsConstructor.js +11 -11
- package/src/verifier/nodes/equality.js +25 -10
- package/src/verifier/nodes/intrinsicLevel.js +68 -0
- package/src/verifier/nodes/metaLevel.js +68 -0
- package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +170 -0
- package/src/verifier/nodes/statement.js +12 -13
- package/src/verifier/nodes/term.js +4 -2
- package/src/verify/containment.js +2 -3
- package/src/verify/statement.js +24 -25
- package/lib/verifier/nodes/metastatementForMetavariable.js +0 -197
- package/lib/verifier/nodes/statementForMetavariable.js +0 -202
- package/lib/verifier/nodes/termForVariable.js +0 -216
- package/src/verifier/nodes/metastatementForMetavariable.js +0 -87
- package/src/verifier/nodes/statementForMetavariable.js +0 -103
- package/src/verifier/nodes/termForVariable.js +0 -120
|
@@ -15,17 +15,11 @@ class EqualityNodesVerifier extends NodesVerifier {
|
|
|
15
15
|
if (ruleNameA === ruleNameB) {
|
|
16
16
|
switch (ruleNameA) {
|
|
17
17
|
case TERM_RULE_NAME: {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
const termNodeA = nonTerminalNodeA, ///
|
|
19
|
+
termNodeB = nonTerminalNodeB, ///
|
|
20
|
+
termNodeVerified = this.verifyTermNode(termNodeA, termNodeB, collections, localContext, verifyAhead);
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
const verifiedAhead = verifyAhead();
|
|
24
|
-
|
|
25
|
-
nonTerminalNodeVerified = verifiedAhead; ///
|
|
26
|
-
} else {
|
|
27
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, collections, localContext, verifyAhead);
|
|
28
|
-
}
|
|
22
|
+
nonTerminalNodeVerified = termNodeVerified; ///
|
|
29
23
|
|
|
30
24
|
break;
|
|
31
25
|
}
|
|
@@ -40,6 +34,27 @@ class EqualityNodesVerifier extends NodesVerifier {
|
|
|
40
34
|
|
|
41
35
|
return nonTerminalNodeVerified;
|
|
42
36
|
}
|
|
37
|
+
|
|
38
|
+
verifyTermNode(termNodeA, termNodeB, collections, localContext, verifyAhead) {
|
|
39
|
+
let termNodeVerified;
|
|
40
|
+
|
|
41
|
+
const leftTermNode = termNodeA, ///
|
|
42
|
+
rightTermNode = termNodeB, ///
|
|
43
|
+
termNodesEqual = areTermNodesEqual(leftTermNode, rightTermNode, collections);
|
|
44
|
+
|
|
45
|
+
if (termNodesEqual) {
|
|
46
|
+
const verifiedAhead = verifyAhead();
|
|
47
|
+
|
|
48
|
+
termNodeVerified = verifiedAhead; ///
|
|
49
|
+
} else {
|
|
50
|
+
const nonTerminalNodeA = termNodeA, ///
|
|
51
|
+
nonTerminalNodeB = termNodeB; ///
|
|
52
|
+
|
|
53
|
+
termNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, collections, localContext, verifyAhead);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return termNodeVerified;
|
|
57
|
+
}
|
|
43
58
|
}
|
|
44
59
|
|
|
45
60
|
const equalityNodesVerifier = new EqualityNodesVerifier();
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
+
import intrinsicLevelNodesVerifierMixins from "../../mixins/nodesVerifier/intrinsiclevel";
|
|
5
|
+
|
|
6
|
+
import { nodeQuery } from "../../utilities/query";
|
|
7
|
+
import { TERM_RULE_NAME } from "../../ruleNames";
|
|
8
|
+
|
|
9
|
+
const variableNodeQuery = nodeQuery("/term/variable!");
|
|
10
|
+
|
|
11
|
+
class IntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
12
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
13
|
+
let nonTerminalNodeVerified = false;
|
|
14
|
+
|
|
15
|
+
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
|
|
16
|
+
nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
|
|
17
|
+
|
|
18
|
+
if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
|
|
19
|
+
const ruleName = nonTerminalNodeARuleName; ///
|
|
20
|
+
|
|
21
|
+
switch (ruleName) {
|
|
22
|
+
case TERM_RULE_NAME: {
|
|
23
|
+
const termNodeA = nonTerminalNodeA, ///
|
|
24
|
+
termNodeB = nonTerminalNodeB, ///
|
|
25
|
+
termNodeVerified = this.verifyTermNode(termNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
26
|
+
|
|
27
|
+
nonTerminalNodeVerified = termNodeVerified; ///
|
|
28
|
+
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
default: {
|
|
33
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
34
|
+
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return nonTerminalNodeVerified;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
verifyTermNode(termNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
44
|
+
let termNodeVerified;
|
|
45
|
+
|
|
46
|
+
const variableNodeA = variableNodeQuery(termNodeA);
|
|
47
|
+
|
|
48
|
+
if (variableNodeA !== null) {
|
|
49
|
+
const variableNodeVerified = this.verifyVariableNode(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
50
|
+
|
|
51
|
+
termNodeVerified = variableNodeVerified; ///
|
|
52
|
+
} else {
|
|
53
|
+
const nonTerminalNodeA = termNodeA, ///
|
|
54
|
+
nonTerminalNodeB = termNodeB, ///
|
|
55
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
56
|
+
|
|
57
|
+
termNodeVerified = nonTerminalNodeVerified; ///
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return termNodeVerified;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
Object.assign(IntrinsicLevelNodesVerifier.prototype, intrinsicLevelNodesVerifierMixins);
|
|
65
|
+
|
|
66
|
+
const intrinsicLevelNodesVerifier = new IntrinsicLevelNodesVerifier();
|
|
67
|
+
|
|
68
|
+
export default intrinsicLevelNodesVerifier;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
+
import metaLevelNodesVerifierMixins from "../../mixins/nodesVerifier/metaLevel";
|
|
5
|
+
|
|
6
|
+
import { nodeQuery } from "../../utilities/query";
|
|
7
|
+
import { METASTATEMENT_RULE_NAME } from "../../ruleNames";
|
|
8
|
+
|
|
9
|
+
const metavariableNodeQuery = nodeQuery("/metastatement/metavariable!");
|
|
10
|
+
|
|
11
|
+
class MetaLevelNodesVerifier extends NodesVerifier {
|
|
12
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead) {
|
|
13
|
+
let nonTerminalNodeVerified = false;
|
|
14
|
+
|
|
15
|
+
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
|
|
16
|
+
nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
|
|
17
|
+
|
|
18
|
+
if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
|
|
19
|
+
const ruleName = nonTerminalNodeARuleName; ///
|
|
20
|
+
|
|
21
|
+
switch (ruleName) {
|
|
22
|
+
case METASTATEMENT_RULE_NAME: {
|
|
23
|
+
const metastatementNodeA = nonTerminalNodeA, ///
|
|
24
|
+
metastatementNodeB = nonTerminalNodeB, ///
|
|
25
|
+
metastatementNodeVerified = this.verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead);
|
|
26
|
+
|
|
27
|
+
nonTerminalNodeVerified = metastatementNodeVerified; ///
|
|
28
|
+
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
default: {
|
|
33
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead);
|
|
34
|
+
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return nonTerminalNodeVerified;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead) {
|
|
44
|
+
let metastatementNodeVerified;
|
|
45
|
+
|
|
46
|
+
const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
|
|
47
|
+
|
|
48
|
+
if (metavariableNodeA !== null) {
|
|
49
|
+
const metaVariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead);
|
|
50
|
+
|
|
51
|
+
metastatementNodeVerified = metaVariableNodeVerified; ///
|
|
52
|
+
} else {
|
|
53
|
+
const nonTerminalNodeA = metastatementNodeA, ///
|
|
54
|
+
nonTerminalNodeB = metastatementNodeB, ///
|
|
55
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead);
|
|
56
|
+
|
|
57
|
+
metastatementNodeVerified = nonTerminalNodeVerified; ///
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return metastatementNodeVerified;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
Object.assign(MetaLevelNodesVerifier.prototype, metaLevelNodesVerifierMixins);
|
|
65
|
+
|
|
66
|
+
const metaLevelNodesVerifier = new MetaLevelNodesVerifier();
|
|
67
|
+
|
|
68
|
+
export default metaLevelNodesVerifier;
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import LocalContext from "../../context/local";
|
|
4
|
+
import NodesVerifier from "../../verifier/nodes";
|
|
5
|
+
import intrinsicLevelNodesVerifierMixins from "../../mixins/nodesVerifier/intrinsiclevel";
|
|
6
|
+
import StatementForMetavariableSubstitution from "../../substitution/statementForMetavariable";
|
|
7
|
+
|
|
8
|
+
import { nodeQuery } from "../../utilities/query";
|
|
9
|
+
import { TERM_RULE_NAME, STATEMENT_RULE_NAME, METASTATEMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../../ruleNames";
|
|
10
|
+
|
|
11
|
+
const variableNodeQuery = nodeQuery("/term/variable!"),
|
|
12
|
+
statementNodeQuery = nodeQuery("/metaArgument/statement"),
|
|
13
|
+
metavariableNodeQuery = nodeQuery("/metastatement/metavariable!");
|
|
14
|
+
|
|
15
|
+
class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
16
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
|
|
17
|
+
let nonTerminalNodeVerified;
|
|
18
|
+
|
|
19
|
+
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName();
|
|
20
|
+
|
|
21
|
+
switch (nonTerminalNodeARuleName) {
|
|
22
|
+
case METASTATEMENT_RULE_NAME: {
|
|
23
|
+
const metastatementNodeA = nonTerminalNodeA, ///
|
|
24
|
+
metaArgumentNodeVerified = this.verifyMetastatementNode(metastatementNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead);
|
|
25
|
+
|
|
26
|
+
nonTerminalNodeVerified = metaArgumentNodeVerified; ///
|
|
27
|
+
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
case TERM_RULE_NAME: {
|
|
32
|
+
const termNodeA = nonTerminalNodeA, ///
|
|
33
|
+
termNodeVerified = this.verifyTermNode(termNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead);
|
|
34
|
+
|
|
35
|
+
nonTerminalNodeVerified = termNodeVerified; ///
|
|
36
|
+
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
default: {
|
|
41
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return nonTerminalNodeVerified;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
verifyMetastatementNode(metastatementNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
|
|
49
|
+
let metastatementNodeVerified;
|
|
50
|
+
|
|
51
|
+
const nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
|
|
52
|
+
|
|
53
|
+
switch (nonTerminalNodeBRuleName) {
|
|
54
|
+
case META_ARGUMENT_RULE_NAME: {
|
|
55
|
+
const metaArgumentNodeB = nonTerminalNodeB, ///
|
|
56
|
+
metaArgumentNodeVerified = this.verifyMetaArgumentNode(metastatementNodeA, metaArgumentNodeB, substitutions, fileContextA, localContextB, verifyAhead);
|
|
57
|
+
|
|
58
|
+
metastatementNodeVerified = metaArgumentNodeVerified; ///
|
|
59
|
+
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
case STATEMENT_RULE_NAME: {
|
|
64
|
+
const statementNodeB = nonTerminalNodeB, ///
|
|
65
|
+
statementNodeVerified = this.verifyStatementNode(metastatementNodeA, statementNodeB, substitutions, fileContextA, localContextB, verifyAhead);
|
|
66
|
+
|
|
67
|
+
metastatementNodeVerified = statementNodeVerified; ///
|
|
68
|
+
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return metastatementNodeVerified;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
verifyMetaArgumentNode(metastatementNodeA, metaArgumentNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
|
|
77
|
+
let metaArgumentNodeVerified = false;
|
|
78
|
+
|
|
79
|
+
const statementNodeB = statementNodeQuery(metaArgumentNodeB),
|
|
80
|
+
metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
|
|
81
|
+
|
|
82
|
+
if ((metavariableNodeA !== null) && (statementNodeB !== null)) {
|
|
83
|
+
const metavariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, statementNodeB, substitutions, fileContextA, localContextB, verifyAhead);
|
|
84
|
+
|
|
85
|
+
metaArgumentNodeVerified = metavariableNodeVerified; ///
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return metaArgumentNodeVerified;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
verifyMetavariableNode(metavariableNodeA, statementNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
|
|
92
|
+
let metavariableNodeVerified;
|
|
93
|
+
|
|
94
|
+
const substitution = substitutions.find((substitution) => {
|
|
95
|
+
const substitutionMatchesMetavariableNodeA = substitution.matchMetavariableNode(metavariableNodeA);
|
|
96
|
+
|
|
97
|
+
if (substitutionMatchesMetavariableNodeA) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
}) || null;
|
|
101
|
+
|
|
102
|
+
if (substitution !== null) {
|
|
103
|
+
const statementNode = statementNodeB, ///
|
|
104
|
+
statementNodeMatches = substitution.matchStatementNode(statementNode);
|
|
105
|
+
|
|
106
|
+
metavariableNodeVerified = statementNodeMatches; ///
|
|
107
|
+
} else {
|
|
108
|
+
const metavariableNode = metavariableNodeA, ///
|
|
109
|
+
statementNode = statementNodeB, ///
|
|
110
|
+
statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromMetavariableNodeAndStatementNode(metavariableNode, statementNode),
|
|
111
|
+
substitution = statementForMetavariableSubstitution; ///
|
|
112
|
+
|
|
113
|
+
substitutions.push(substitution);
|
|
114
|
+
|
|
115
|
+
metavariableNodeVerified = true;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return metavariableNodeVerified;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
verifyStatementNode(metastatementNodeA, statementNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
|
|
122
|
+
let statementNodeVerified;
|
|
123
|
+
|
|
124
|
+
const nonTerminalNodeA = metastatementNodeA, ///
|
|
125
|
+
nonTerminalNodeB = statementNodeB, ///
|
|
126
|
+
nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
127
|
+
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
128
|
+
childNodesA = nonTerminalNodeAChildNodes, ///
|
|
129
|
+
childNodesB = nonTerminalNodeBChildNodes, ///
|
|
130
|
+
childNodesVerified = super.verifyChildNodes(childNodesA, childNodesB, substitutions, fileContextA, localContextB, verifyAhead);
|
|
131
|
+
|
|
132
|
+
statementNodeVerified = childNodesVerified; ///
|
|
133
|
+
|
|
134
|
+
return statementNodeVerified;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
verifyTermNode(termNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
|
|
138
|
+
let termNodeVerified = false;
|
|
139
|
+
|
|
140
|
+
const nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
|
|
141
|
+
|
|
142
|
+
switch (nonTerminalNodeBRuleName) {
|
|
143
|
+
case TERM_RULE_NAME: {
|
|
144
|
+
const variableNodeA = variableNodeQuery(termNodeA);
|
|
145
|
+
|
|
146
|
+
if (variableNodeA !== null) {
|
|
147
|
+
const termNodeB = nonTerminalNodeB, ///
|
|
148
|
+
localContextA = LocalContext.fromFileContext(fileContextA),
|
|
149
|
+
variableNodeVerified = this.verifyVariableNode(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
150
|
+
|
|
151
|
+
termNodeVerified = variableNodeVerified; ///
|
|
152
|
+
} else {
|
|
153
|
+
const nonTerminalNodeA = termNodeA, ///
|
|
154
|
+
nonTerminalNodeB = termNodeB, ///
|
|
155
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead);
|
|
156
|
+
|
|
157
|
+
termNodeVerified = nonTerminalNodeVerified; ///
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return termNodeVerified;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
Object.assign(MetaLevelToIntrinsicLevelNodesVerifier.prototype, intrinsicLevelNodesVerifierMixins);
|
|
167
|
+
|
|
168
|
+
const metaLevelToIntrinsicLevelNodesVerifier = new MetaLevelToIntrinsicLevelNodesVerifier();
|
|
169
|
+
|
|
170
|
+
export default metaLevelToIntrinsicLevelNodesVerifier;
|
|
@@ -16,23 +16,12 @@ class StatementNodesVerifier extends NodesVerifier {
|
|
|
16
16
|
let nonTerminalNodeVerified = false;
|
|
17
17
|
|
|
18
18
|
const nonTerminalNode = nonTerminalNodeA, ///
|
|
19
|
-
combinatorNonTerminalNode = nonTerminalNodeB
|
|
20
|
-
|
|
21
|
-
const ruleName = nonTerminalNode.getRuleName(), ///
|
|
19
|
+
combinatorNonTerminalNode = nonTerminalNodeB, ///
|
|
20
|
+
ruleName = nonTerminalNode.getRuleName(), ///
|
|
22
21
|
combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
|
|
23
22
|
|
|
24
23
|
if (ruleName === combinatorRuleName) {
|
|
25
24
|
switch (ruleName) {
|
|
26
|
-
case ARGUMENT_RULE_NAME: {
|
|
27
|
-
const argumentNode = nonTerminalNode, ///
|
|
28
|
-
constructorArgumentNode = combinatorNonTerminalNode, ///
|
|
29
|
-
argumentNodeVerified = termNodesVerifier.verifyArgumentNode(argumentNode, constructorArgumentNode, context, verifyAhead);
|
|
30
|
-
|
|
31
|
-
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
32
|
-
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
25
|
case META_ARGUMENT_RULE_NAME: {
|
|
37
26
|
const metaArgumentNode = nonTerminalNode, ///
|
|
38
27
|
combinatorMetaargumentNode = combinatorNonTerminalNode, ///
|
|
@@ -43,6 +32,16 @@ class StatementNodesVerifier extends NodesVerifier {
|
|
|
43
32
|
break;
|
|
44
33
|
}
|
|
45
34
|
|
|
35
|
+
case ARGUMENT_RULE_NAME: {
|
|
36
|
+
const argumentNode = nonTerminalNode, ///
|
|
37
|
+
constructorArgumentNode = combinatorNonTerminalNode, ///
|
|
38
|
+
argumentNodeVerified = termNodesVerifier.verifyArgumentNode(argumentNode, constructorArgumentNode, context, verifyAhead);
|
|
39
|
+
|
|
40
|
+
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
41
|
+
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
|
|
46
45
|
default: {
|
|
47
46
|
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context, verifyAhead);
|
|
48
47
|
|
|
@@ -10,10 +10,12 @@ const termNodeQuery = nodeQuery("/argument/term!"),
|
|
|
10
10
|
typeNodeQuery = nodeQuery("/argument/type!");
|
|
11
11
|
|
|
12
12
|
class TermNodesVerifier extends NodesVerifier {
|
|
13
|
-
verifyNonTerminalNode(
|
|
13
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context, verifyAhead) {
|
|
14
14
|
let nonTerminalNodeVerified = false;
|
|
15
15
|
|
|
16
|
-
const
|
|
16
|
+
const nonTerminalNode = nonTerminalNodeA, ///
|
|
17
|
+
constructorNonTerminalNode = nonTerminalNodeB, ///
|
|
18
|
+
ruleName = nonTerminalNode.getRuleName(), ///
|
|
17
19
|
constructorRuleName = constructorNonTerminalNode.getRuleName(); ///
|
|
18
20
|
|
|
19
21
|
if (ruleName === constructorRuleName) {
|
|
@@ -4,9 +4,8 @@ import { third } from "../utilities/array";
|
|
|
4
4
|
import { CONTAINED } from "../constants";
|
|
5
5
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
6
6
|
|
|
7
|
-
const statementVariableNodesQuery = nodesQuery("/statement//variable")
|
|
8
|
-
|
|
9
|
-
export const containmentVariableNodeQuery = nodeQuery("/containment/argument/term/variable!");
|
|
7
|
+
const statementVariableNodesQuery = nodesQuery("/statement//variable"),
|
|
8
|
+
containmentVariableNodeQuery = nodeQuery("/containment/argument/term/variable!");
|
|
10
9
|
|
|
11
10
|
export default function verifyContainment(containmentNode, statementNode) {
|
|
12
11
|
let containmentVerified = false;
|
package/src/verify/statement.js
CHANGED
|
@@ -7,10 +7,9 @@ import verifyTypeAssertion from "../verify/typeAssertion";
|
|
|
7
7
|
import statementNodesVerifier from "../verifier/nodes/statement";
|
|
8
8
|
|
|
9
9
|
import { nodeQuery } from "../utilities/query";
|
|
10
|
-
import { containmentVariableNodeQuery } from "../verify/containment";
|
|
11
10
|
|
|
12
11
|
const equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
13
|
-
statementNodeQuery = nodeQuery("/statement/statement!"),
|
|
12
|
+
statementNodeQuery = nodeQuery("/statement/metaArgument/statement!"),
|
|
14
13
|
containmentNodeQuery = nodeQuery("/statement/containment!"),
|
|
15
14
|
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
|
|
16
15
|
|
|
@@ -120,37 +119,37 @@ function verifyStatementWithContainment(statementNode, assignments, derived, con
|
|
|
120
119
|
const containmentNode = containmentNodeQuery(statementNode);
|
|
121
120
|
|
|
122
121
|
if (containmentNode !== null) {
|
|
123
|
-
|
|
122
|
+
const statementString = context.nodeAsString(statementNode);
|
|
124
123
|
|
|
125
|
-
|
|
126
|
-
containmentVariableNode = containmentVariableNodeQuery(containmentNode),
|
|
127
|
-
containmentVariableString = context.nodeAsString(containmentVariableNode);
|
|
124
|
+
statementNode = statementNodeQuery(statementNode); ///
|
|
128
125
|
|
|
129
|
-
|
|
126
|
+
if (statementNode !== null) {
|
|
127
|
+
context.trace(`Verifying the '${statementString}' statement with containment...`, statementNode);
|
|
130
128
|
|
|
131
|
-
|
|
129
|
+
const containmentVerified = verifyContainment(containmentNode, statementNode);
|
|
132
130
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
131
|
+
if (containmentVerified) {
|
|
132
|
+
const verifyStatementFunctions = [
|
|
133
|
+
verifyStatementAsEquality,
|
|
134
|
+
verifyStatementAgainstCombinators
|
|
135
|
+
];
|
|
138
136
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
137
|
+
const statementVerified = verifyStatementFunctions.some((verifyStatementFunction) => {
|
|
138
|
+
const derived = false,
|
|
139
|
+
assignments = [],
|
|
140
|
+
statementVerified = verifyStatementFunction(statementNode, assignments, derived, context, verifyAhead);
|
|
143
141
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
142
|
+
if (statementVerified) {
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
});
|
|
148
146
|
|
|
149
|
-
|
|
150
|
-
|
|
147
|
+
statementVerifiedWithContainment = statementVerified; ///
|
|
148
|
+
}
|
|
151
149
|
|
|
152
|
-
|
|
153
|
-
|
|
150
|
+
if (statementVerifiedWithContainment) {
|
|
151
|
+
context.debug(`...verified the '${statementString}' statement with containment.`, statementNode);
|
|
152
|
+
}
|
|
154
153
|
}
|
|
155
154
|
}
|
|
156
155
|
|