occam-verify-cli 0.0.1065 → 0.0.1067
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/assertion/contained.js +2 -1
- package/lib/assertion/defined.js +2 -1
- package/lib/combinator/bracketed.js +135 -0
- package/lib/conclusion.js +6 -2
- package/lib/consequent.js +6 -2
- package/lib/constants.js +3 -3
- package/lib/constructor/bracketed.js +30 -11
- package/lib/context/file.js +45 -9
- package/lib/context/local.js +67 -28
- package/lib/metavariable.js +15 -54
- package/lib/mixins/statement/unify.js +18 -3
- package/lib/mixins/statement/verify.js +2 -11
- package/lib/premise.js +6 -2
- package/lib/proofStep.js +22 -13
- package/lib/rule.js +6 -2
- package/lib/ruleNames.js +1 -5
- package/lib/statement/qualified.js +30 -17
- package/lib/statement/unqualified.js +5 -5
- package/lib/statement.js +41 -24
- package/lib/subproof.js +1 -1
- package/lib/substitution/frameForMetavariable.js +44 -21
- package/lib/substitution/statementForMetavariable.js +93 -54
- package/lib/substitution/termForVariable.js +38 -21
- package/lib/substitution.js +48 -13
- package/lib/substitutions.js +22 -19
- package/lib/supposition.js +6 -2
- package/lib/unifier/metaLevel.js +14 -12
- package/lib/unify/metavariableWithFrame.js +2 -2
- package/lib/utilities/brackets.js +5 -10
- package/lib/utilities/node.js +29 -15
- package/lib/utilities/string.js +34 -16
- package/lib/utilities/tokens.js +16 -8
- package/lib/variable.js +10 -10
- package/package.json +2 -2
- package/src/assertion/contained.js +2 -0
- package/src/assertion/defined.js +2 -0
- package/src/combinator/bracketed.js +49 -0
- package/src/conclusion.js +8 -1
- package/src/consequent.js +8 -1
- package/src/constants.js +2 -2
- package/src/constructor/bracketed.js +32 -9
- package/src/context/file.js +41 -13
- package/src/context/local.js +71 -35
- package/src/metavariable.js +24 -74
- package/src/mixins/statement/unify.js +25 -2
- package/src/mixins/statement/verify.js +1 -14
- package/src/premise.js +8 -1
- package/src/proofStep.js +28 -12
- package/src/rule.js +7 -1
- package/src/ruleNames.js +0 -1
- package/src/statement/qualified.js +38 -21
- package/src/statement/unqualified.js +4 -4
- package/src/statement.js +62 -41
- package/src/subproof.js +0 -1
- package/src/substitution/frameForMetavariable.js +62 -32
- package/src/substitution/statementForMetavariable.js +102 -61
- package/src/substitution/termForVariable.js +52 -32
- package/src/substitution.js +40 -11
- package/src/substitutions.js +32 -25
- package/src/supposition.js +8 -1
- package/src/unifier/metaLevel.js +23 -18
- package/src/unify/metavariableWithFrame.js +2 -2
- package/src/utilities/brackets.js +2 -3
- package/src/utilities/node.js +30 -22
- package/src/utilities/string.js +39 -23
- package/src/utilities/tokens.js +17 -8
- package/src/variable.js +7 -7
- package/lib/node/statement/bracketed.js +0 -16
- package/lib/node/statement/combinator/bracketed.js +0 -25
- package/lib/node/term/bracketed.js +0 -16
- package/lib/node/term/constructor/bracketed.js +0 -25
- package/lib/ocmbinator/bracketed.js +0 -157
- package/lib/resolve/complexSubstitutionAgainstSimpleSubstitution.js +0 -62
- package/lib/resolve/substitution.js +0 -27
- package/lib/resolve/substitutions.js +0 -37
- package/lib/substitution/statement.js +0 -163
- package/lib/verifier/substitution.js +0 -161
- package/src/node/statement/bracketed.js +0 -9
- package/src/node/statement/combinator/bracketed.js +0 -10
- package/src/node/term/bracketed.js +0 -9
- package/src/node/term/constructor/bracketed.js +0 -10
- package/src/ocmbinator/bracketed.js +0 -26
- package/src/resolve/complexSubstitutionAgainstSimpleSubstitution.js +0 -79
- package/src/resolve/substitution.js +0 -19
- package/src/resolve/substitutions.js +0 -31
- package/src/substitution/statement.js +0 -81
- package/src/verifier/substitution.js +0 -75
|
@@ -6,16 +6,18 @@ import Substitution from "../substitution";
|
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
7
|
import { stripBracketsFromTerm } from "../utilities/brackets";
|
|
8
8
|
|
|
9
|
-
const
|
|
9
|
+
const substitutionNodeQuery = nodeQuery("/statement/substitution"),
|
|
10
|
+
termVariableNodeQuery = nodeQuery("/term/variable!"),
|
|
10
11
|
substitutionTermNodeQuery = nodeQuery("/substitution/term!"),
|
|
11
12
|
substitutionsVariableNodeQuery = nodeQuery("/substitution/variable!");
|
|
12
13
|
|
|
13
14
|
export default class TermForVariableSubstitution extends Substitution {
|
|
14
|
-
constructor(string, termNode, variableNode) {
|
|
15
|
+
constructor(string, termNode, variableNode, substitutionNode) {
|
|
15
16
|
super(string);
|
|
16
17
|
|
|
17
18
|
this.termNode = termNode;
|
|
18
19
|
this.variableNode = variableNode;
|
|
20
|
+
this.substitutionNode = substitutionNode;
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
getTermNode() {
|
|
@@ -26,7 +28,11 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
26
28
|
return this.variableNode;
|
|
27
29
|
}
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
getSubstitutionNode() {
|
|
32
|
+
return this.substitutionNode;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
transformed(substitutions, localContext) {
|
|
30
36
|
let transformedSubstitution = null;
|
|
31
37
|
|
|
32
38
|
const transformedTermNode = transformTermNode(this.termNode, substitutions),
|
|
@@ -35,7 +41,11 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
35
41
|
if ((transformedTermNode !== null) && (transformedVariableNode !== null)) {
|
|
36
42
|
const termNode = transformedTermNode, ///
|
|
37
43
|
variableNode = transformedVariableNode, ///
|
|
38
|
-
|
|
44
|
+
termString = localContext.nodeAsString(termNode),
|
|
45
|
+
variableString = localContext.nodeAsString(variableNode),
|
|
46
|
+
string = `[${termString} for ${variableString}]`,
|
|
47
|
+
substitutionNode = null,
|
|
48
|
+
termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode, substitutionNode);
|
|
39
49
|
|
|
40
50
|
transformedSubstitution = termForVariableSubstitution; ///
|
|
41
51
|
}
|
|
@@ -44,11 +54,17 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
44
54
|
}
|
|
45
55
|
|
|
46
56
|
isEqualTo(substitution) {
|
|
57
|
+
let equalTo = false;
|
|
58
|
+
|
|
47
59
|
const termNode = substitution.getTermNode(),
|
|
48
|
-
variableNode = substitution.getVariableNode()
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
60
|
+
variableNode = substitution.getVariableNode();
|
|
61
|
+
|
|
62
|
+
if ((termNode !== null) && (variableNode !== null)) {
|
|
63
|
+
const termNodeMatches = this.matchTermNode(termNode),
|
|
64
|
+
variableNodeMatches = this.matchVariableNode(variableNode);
|
|
65
|
+
|
|
66
|
+
equalTo = (termNodeMatches && variableNodeMatches);
|
|
67
|
+
}
|
|
52
68
|
|
|
53
69
|
return equalTo;
|
|
54
70
|
}
|
|
@@ -67,6 +83,12 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
67
83
|
return variableNodeMatches;
|
|
68
84
|
}
|
|
69
85
|
|
|
86
|
+
matchSubstitutionNode(substitutionNode) {
|
|
87
|
+
const substitutionNodeMatches = this.substitutionNode.match(substitutionNode);
|
|
88
|
+
|
|
89
|
+
return substitutionNodeMatches;
|
|
90
|
+
}
|
|
91
|
+
|
|
70
92
|
unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB) {
|
|
71
93
|
let unifiedWithEquivalence;
|
|
72
94
|
|
|
@@ -83,42 +105,39 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
83
105
|
return unifiedWithEquivalence;
|
|
84
106
|
}
|
|
85
107
|
|
|
86
|
-
static
|
|
108
|
+
static fromStatementNode(statementNode, localContext) {
|
|
87
109
|
let termForVariableSubstitution = null;
|
|
88
110
|
|
|
89
|
-
const substitutionNode =
|
|
90
|
-
|
|
91
|
-
let substitutionTermNode = substitutionTermNodeQuery(substitutionNode);
|
|
92
|
-
|
|
93
|
-
if (substitutionTermNode !== null) {
|
|
94
|
-
let termNode;
|
|
111
|
+
const substitutionNode = substitutionNodeQuery(statementNode);
|
|
95
112
|
|
|
96
|
-
|
|
97
|
-
|
|
113
|
+
if (substitutionNode !== null) {
|
|
114
|
+
let substitutionTermNode = substitutionTermNodeQuery(substitutionNode);
|
|
98
115
|
|
|
99
|
-
|
|
116
|
+
if (substitutionTermNode !== null) {
|
|
117
|
+
const { Term, Variable } = shim,
|
|
118
|
+
substitutionVariableNode = substitutionsVariableNodeQuery(substitutionNode),
|
|
119
|
+
variableNode = substitutionVariableNode, ///
|
|
120
|
+
termNode = substitutionTermNode, ///
|
|
121
|
+
term = Term.fromTermNode(termNode, localContext),
|
|
122
|
+
variable = Variable.fromVariableNode(variableNode, localContext),
|
|
123
|
+
string = stringFromTermAndVariable(term, variable, localContext);
|
|
100
124
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const { Term, Variable } = shim,
|
|
104
|
-
term = Term.fromTermNode(termNode, localContext),
|
|
105
|
-
variable = Variable.fromVariableNode(variableNode, localContext),
|
|
106
|
-
string = stringFromTermAndVariable(term, variable);
|
|
107
|
-
|
|
108
|
-
termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode);
|
|
125
|
+
termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode, substitutionNode);
|
|
126
|
+
}
|
|
109
127
|
}
|
|
110
128
|
|
|
111
129
|
return termForVariableSubstitution;
|
|
112
130
|
}
|
|
113
131
|
|
|
114
|
-
static fromTernAndVariable(term, variable) {
|
|
132
|
+
static fromTernAndVariable(term, variable, localContext) {
|
|
115
133
|
let termNode = term.getNode();
|
|
116
134
|
|
|
117
135
|
termNode = stripBracketsFromTerm(termNode); ///
|
|
118
136
|
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
137
|
+
const string = stringFromTermAndVariable(term, variable, localContext),
|
|
138
|
+
variableNode = variable.getNode(),
|
|
139
|
+
substitutionNode = null,
|
|
140
|
+
termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode, substitutionNode);
|
|
122
141
|
|
|
123
142
|
return termForVariableSubstitution;
|
|
124
143
|
}
|
|
@@ -169,8 +188,9 @@ function transformVariableNode(variableNode, substitutions) {
|
|
|
169
188
|
return transformedVariableNode;
|
|
170
189
|
}
|
|
171
190
|
|
|
172
|
-
function stringFromTermAndVariable(term, variable) {
|
|
173
|
-
const
|
|
191
|
+
function stringFromTermAndVariable(term, variable, localContext) {
|
|
192
|
+
const termNode = term.getNode(),
|
|
193
|
+
termString = localContext.nodeAsString(termNode),
|
|
174
194
|
variableString = variable.getString(),
|
|
175
195
|
string = `[${termString} for ${variableString}]`;
|
|
176
196
|
|
package/src/substitution.js
CHANGED
|
@@ -9,24 +9,22 @@ export default class Substitution {
|
|
|
9
9
|
return this.string;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
const
|
|
12
|
+
getTermNode() {
|
|
13
|
+
const termNode = null;
|
|
14
14
|
|
|
15
|
-
return
|
|
15
|
+
return termNode;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
complex = !simple;
|
|
18
|
+
getFrameNode() {
|
|
19
|
+
const frameNode = null;
|
|
21
20
|
|
|
22
|
-
return
|
|
21
|
+
return frameNode;
|
|
23
22
|
}
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
resolved = simple; ///
|
|
24
|
+
getStatementNode() {
|
|
25
|
+
const statementNode = null;
|
|
28
26
|
|
|
29
|
-
return
|
|
27
|
+
return statementNode;
|
|
30
28
|
}
|
|
31
29
|
|
|
32
30
|
getVariableNode() {
|
|
@@ -41,18 +39,49 @@ export default class Substitution {
|
|
|
41
39
|
return metavariableNode;
|
|
42
40
|
}
|
|
43
41
|
|
|
42
|
+
getSubstitutionNode() {
|
|
43
|
+
const substitutionNode = null;
|
|
44
|
+
|
|
45
|
+
return substitutionNode;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
isSimple() {
|
|
49
|
+
const simple = true;
|
|
50
|
+
|
|
51
|
+
return simple;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
isComplex() {
|
|
55
|
+
const simple = this.isSimple(),
|
|
56
|
+
complex = !simple;
|
|
57
|
+
|
|
58
|
+
return complex;
|
|
59
|
+
}
|
|
60
|
+
|
|
44
61
|
isEqualTo(substitution) {
|
|
45
62
|
const equalTo = false;
|
|
46
63
|
|
|
47
64
|
return equalTo;
|
|
48
65
|
}
|
|
49
66
|
|
|
67
|
+
resolve(substitutions, localContext) {
|
|
68
|
+
const resolved = true;
|
|
69
|
+
|
|
70
|
+
return resolved;
|
|
71
|
+
}
|
|
72
|
+
|
|
50
73
|
matchTermNode(termNode) {
|
|
51
74
|
const termNodeMatches = false;
|
|
52
75
|
|
|
53
76
|
return termNodeMatches;
|
|
54
77
|
}
|
|
55
78
|
|
|
79
|
+
matchFrameNode(frameNode) {
|
|
80
|
+
const frameNodeMatches = false;
|
|
81
|
+
|
|
82
|
+
return frameNodeMatches;
|
|
83
|
+
}
|
|
84
|
+
|
|
56
85
|
matchVariableNode(variableNode) {
|
|
57
86
|
const variableNodeMatches = false;
|
|
58
87
|
|
package/src/substitutions.js
CHANGED
|
@@ -113,6 +113,7 @@ export default class Substitutions {
|
|
|
113
113
|
|
|
114
114
|
return substitution;
|
|
115
115
|
}
|
|
116
|
+
|
|
116
117
|
findSubstitutionsByMetavariableNode(metavariableNode) {
|
|
117
118
|
const substitutions = this.findSubstitutions((substitution) => {
|
|
118
119
|
const metavariableNodeMatches = substitution.matchMetavariableNode(metavariableNode);
|
|
@@ -153,31 +154,25 @@ export default class Substitutions {
|
|
|
153
154
|
return complexSubstitutions;
|
|
154
155
|
}
|
|
155
156
|
|
|
156
|
-
|
|
157
|
+
findSubstitutionByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
|
|
157
158
|
const substitutions = this.findSubstitutions((substitution) => {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
if (metavariableNodeAndSubstitutionNodeMatch) {
|
|
161
|
-
return true;
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
return substitutions;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
findComplexSubstitutionByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
|
|
169
|
-
const substitutions = this.findSubstitutionsByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode),
|
|
170
|
-
complexSubstitutions = substitutions.filterSubstitution((substitution) => {
|
|
171
|
-
const substitutionComplex = substitution.isComplex();
|
|
159
|
+
const metavariableNodeAndSubstitutionNodeMatch = substitution.matchMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode);
|
|
172
160
|
|
|
173
|
-
if (
|
|
161
|
+
if (metavariableNodeAndSubstitutionNodeMatch) {
|
|
174
162
|
return true;
|
|
175
163
|
}
|
|
176
164
|
}),
|
|
177
|
-
|
|
178
|
-
|
|
165
|
+
firstSubstitution = substitutions.getFirstSubstitution(),
|
|
166
|
+
substitution = firstSubstitution; ///
|
|
167
|
+
|
|
168
|
+
return substitution;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
isSubstitutionPresentByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
|
|
172
|
+
const substitution = this.findSubstitutionByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode),
|
|
173
|
+
substitutionPresent = (substitution !== null);
|
|
179
174
|
|
|
180
|
-
return
|
|
175
|
+
return substitutionPresent;
|
|
181
176
|
}
|
|
182
177
|
|
|
183
178
|
addSubstitution(substitution, localContext) {
|
|
@@ -218,12 +213,24 @@ export default class Substitutions {
|
|
|
218
213
|
return unifiedWithEquivalences;
|
|
219
214
|
}
|
|
220
215
|
|
|
221
|
-
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
216
|
+
resolve(localContext) {
|
|
217
|
+
const metavariableNodes = this.getMetavariableNodes(),
|
|
218
|
+
resolved = metavariableNodes.every((metavariableNode) => {
|
|
219
|
+
const complexSubstitutions = this.findComplexSubstitutionsByMetavariableNode(metavariableNode),
|
|
220
|
+
complexSubstitutionsResolved = complexSubstitutions.everySubstitution((complexSubstitution) => {
|
|
221
|
+
const substitution = complexSubstitution, ///
|
|
222
|
+
substitutions = this, ///
|
|
223
|
+
substitutionResolved = substitution.resolve(substitutions, localContext);
|
|
224
|
+
|
|
225
|
+
if (substitutionResolved) {
|
|
226
|
+
return true;
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
if (complexSubstitutionsResolved) {
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
});
|
|
227
234
|
|
|
228
235
|
return resolved;
|
|
229
236
|
}
|
package/src/supposition.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import shim from "./shim";
|
|
4
|
+
import LocalContext from "./context/local";
|
|
4
5
|
import SubproofAssertion from "./assertion/subproof";
|
|
5
6
|
import UnqualifiedStatement from "./statement/unqualified";
|
|
6
7
|
|
|
@@ -114,7 +115,13 @@ export default class Supposition {
|
|
|
114
115
|
|
|
115
116
|
localContext.trace(`Unifying the '${statementString}' statement with the '${suppositionString}' supposition...`);
|
|
116
117
|
|
|
117
|
-
|
|
118
|
+
const localContextB = localContext;
|
|
119
|
+
|
|
120
|
+
localContext = LocalContext.fromFileContext(this.fileContext);
|
|
121
|
+
|
|
122
|
+
const localContextA = localContext; ///
|
|
123
|
+
|
|
124
|
+
statementUnified = this.unqualifiedStatement.unifyStatement(statement, substitutions, localContextA, localContextB);
|
|
118
125
|
|
|
119
126
|
if (statementUnified) {
|
|
120
127
|
localContext.debug(`...unified the '${statementString}' statement with the '${suppositionString}' supposition.`);
|
package/src/unifier/metaLevel.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import shim from "../shim";
|
|
4
4
|
import Unifier from "../unifier";
|
|
5
|
-
import
|
|
5
|
+
import TermForVariableSubstitution from "../substitution/termForVariable";
|
|
6
|
+
import FrameForMetavariableSubstitution from "../substitution/frameForMetavariable";
|
|
6
7
|
|
|
7
8
|
import { nodeQuery } from "../utilities/query";
|
|
8
9
|
import { variableNameFromVariableNode, metavariableNameFromMetavariableNode } from "../utilities/name";
|
|
@@ -39,26 +40,32 @@ class MetaLevelUnifier extends Unifier {
|
|
|
39
40
|
if (matches) {
|
|
40
41
|
statementUnified = true;
|
|
41
42
|
} else {
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
let localContext,
|
|
44
|
+
statementNode;
|
|
45
|
+
|
|
46
|
+
localContext = localContextA; ///
|
|
47
|
+
|
|
48
|
+
statementNode = statementNodeA; ///
|
|
49
|
+
|
|
50
|
+
const statementMetavariableNode = statementMetavariableNodeQuery(statementNode);
|
|
44
51
|
|
|
45
52
|
if (statementMetavariableNode !== null) {
|
|
53
|
+
const substitution = FrameForMetavariableSubstitution.fromStatementNode(statementNode, localContext) ||
|
|
54
|
+
TermForVariableSubstitution.fromStatementNode(statementNode, localContext) ||
|
|
55
|
+
null;
|
|
56
|
+
|
|
46
57
|
const { Statement } = shim,
|
|
47
58
|
metavariableNode = statementMetavariableNode, ///
|
|
48
59
|
metavariableName = metavariableNameFromMetavariableNode(metavariableNode),
|
|
49
|
-
metavariable = localContextA.findMetavariableByMetavariableName(metavariableName)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const statementUnifiedGivenSubstitution = metavariable.unifyStatementGivenSubstitution(statement, substitution, substitutions, localContext);
|
|
59
|
-
|
|
60
|
-
statementUnified = statementUnifiedGivenSubstitution; ///
|
|
61
|
-
}
|
|
60
|
+
metavariable = localContextA.findMetavariableByMetavariableName(metavariableName);
|
|
61
|
+
|
|
62
|
+
localContext = localContextB; ///
|
|
63
|
+
|
|
64
|
+
statementNode = statementNodeB; ///
|
|
65
|
+
|
|
66
|
+
const statement = Statement.fromStatementNode(statementNode, localContext);
|
|
67
|
+
|
|
68
|
+
statementUnified = metavariable.unifyStatement(statement, substitution, substitutions, localContext);
|
|
62
69
|
} else {
|
|
63
70
|
statementUnified = unifyStatementWithStatement(statementNodeA, statementNodeB, substitutions, localContextA, localContextB);
|
|
64
71
|
}
|
|
@@ -109,8 +116,6 @@ const metaLevelUnifier = new MetaLevelUnifier();
|
|
|
109
116
|
export default metaLevelUnifier;
|
|
110
117
|
|
|
111
118
|
function unifyStatementWithStatement(statementNodeA, statementNodeB, substitutions, localContextA, localContextB) {
|
|
112
|
-
substitutionA = null;
|
|
113
|
-
|
|
114
119
|
const nonTerminalNodeA = statementNodeA, ///
|
|
115
120
|
nonTerminalNodeB = statementNodeB, ///
|
|
116
121
|
nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
@@ -26,8 +26,8 @@ export default function unifyMetavariableWithFrame(metavariableNodeA, frameNodeB
|
|
|
26
26
|
metavariableUnifiedWithFrame = true;
|
|
27
27
|
} else {
|
|
28
28
|
const frameNode = frameNodeB, ///
|
|
29
|
-
|
|
30
|
-
frameForMetavariableSubstitution = FrameForMetavariableSubstitution.
|
|
29
|
+
metavariable = metavariableA, ///
|
|
30
|
+
frameForMetavariableSubstitution = FrameForMetavariableSubstitution.fromFrameAndMetavariable(frame, metavariable, localContextA, localContextB),
|
|
31
31
|
substitution = frameForMetavariableSubstitution; ///
|
|
32
32
|
|
|
33
33
|
substitutions.addSubstitution(substitution, localContextA, localContextB);
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import bracketedTermNode from "../node/term/bracketed";
|
|
4
|
-
import bracketedStatementNode from "../node/statement/bracketed";
|
|
5
|
-
|
|
6
3
|
import { nodeQuery } from "../utilities/query";
|
|
4
|
+
import { bracketedTermNode } from "../constructor/bracketed";
|
|
5
|
+
import { bracketedStatementNode } from "../combinator/bracketed";
|
|
7
6
|
import { BRACKETED_TERM_DEPTH, BRACKETED_STATEMENT_DEPTH } from "../constants";
|
|
8
7
|
|
|
9
8
|
const bracketedTermChildNodeQuery = nodeQuery("/term/argument/term!"),
|
package/src/utilities/node.js
CHANGED
|
@@ -6,12 +6,10 @@ import { nodeQuery } from "../utilities/query";
|
|
|
6
6
|
import { combinedCustomGrammarFromNothing } from "./customGrammar";
|
|
7
7
|
import { VARIABLE_RULE_NAME,
|
|
8
8
|
METAVARIABLE_RULE_NAME,
|
|
9
|
-
SUBSTITUTION_RULE_NAME,
|
|
10
9
|
UNQUALIFIED_STATEMENT_RULE_NAME,
|
|
11
10
|
CONSTRUCTOR_DECLARATION_RULE_NAME } from "../ruleNames";
|
|
12
11
|
import { variableTokensFromVariableString,
|
|
13
12
|
metavariableTokensFromMetavariableString,
|
|
14
|
-
substitutionTokensFromSubstitutionString,
|
|
15
13
|
unqualifiedStatementTokensFromUnqualifiedStatementString,
|
|
16
14
|
constructorDeclarationTokensFromConstructorDeclarationString } from "../utilities/tokens";
|
|
17
15
|
|
|
@@ -24,11 +22,10 @@ const termNodeQuery = nodeQuery("/constructorDeclaration/term"),
|
|
|
24
22
|
statementNodeQuery = nodeQuery("/unqualifiedStatement/statement");
|
|
25
23
|
|
|
26
24
|
export function termNodeFromTermString(termString, lexer, parser) {
|
|
27
|
-
const constructorDeclarationString =
|
|
28
|
-
`,
|
|
25
|
+
const constructorDeclarationString = constructorDeclarationStringFromTermString(termString),
|
|
29
26
|
constructorDeclarationTokens = constructorDeclarationTokensFromConstructorDeclarationString(constructorDeclarationString, lexer),
|
|
30
27
|
constructorDeclarationNode = constructorDeclarationNodeFromConstructorDeclarationTokens(constructorDeclarationTokens, parser),
|
|
31
|
-
termNode =
|
|
28
|
+
termNode = termNodeFromConstructorDeclarationNode(constructorDeclarationNode);
|
|
32
29
|
|
|
33
30
|
return termNode;
|
|
34
31
|
}
|
|
@@ -41,15 +38,40 @@ export function variableNodeFromVariableString(variableString, lexer, parser) {
|
|
|
41
38
|
}
|
|
42
39
|
|
|
43
40
|
export function statementNodeFromStatementString(statementString, lexer, parser) {
|
|
44
|
-
const unqualifiedStatementString =
|
|
45
|
-
`,
|
|
41
|
+
const unqualifiedStatementString =unqualifiedStatementStringFromStatementString(statementString),
|
|
46
42
|
unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
|
|
47
43
|
unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
|
|
48
|
-
statementNode =
|
|
44
|
+
statementNode = statementNodeFromUnqualifiedStatementNode(unqualifiedStatementNode);
|
|
45
|
+
|
|
46
|
+
return statementNode;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function termNodeFromConstructorDeclarationNode(constructorDeclarationNode) {
|
|
50
|
+
const termNode = termNodeQuery(constructorDeclarationNode, constructorDeclarationNode);
|
|
51
|
+
|
|
52
|
+
return termNode;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function statementNodeFromUnqualifiedStatementNode(unqualifiedStatementNode) {
|
|
56
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode);
|
|
49
57
|
|
|
50
58
|
return statementNode;
|
|
51
59
|
}
|
|
52
60
|
|
|
61
|
+
export function constructorDeclarationStringFromTermString(termString) {
|
|
62
|
+
const constructorDeclarationString = `Constructor ${termString}
|
|
63
|
+
`;
|
|
64
|
+
|
|
65
|
+
return constructorDeclarationString;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function unqualifiedStatementStringFromStatementString(statementString) {
|
|
69
|
+
const unqualifiedStatementString = `${statementString}
|
|
70
|
+
`;
|
|
71
|
+
|
|
72
|
+
return unqualifiedStatementString;
|
|
73
|
+
}
|
|
74
|
+
|
|
53
75
|
export function metavariableNodeFromMetavariableString(metavariableString, lexer, parser) {
|
|
54
76
|
const metavariableTokens = metavariableTokensFromMetavariableString(metavariableString, lexer),
|
|
55
77
|
metavariableNode = metavariableNodeFromMetavariableTokens(metavariableTokens, parser);
|
|
@@ -57,13 +79,6 @@ export function metavariableNodeFromMetavariableString(metavariableString, lexer
|
|
|
57
79
|
return metavariableNode;
|
|
58
80
|
}
|
|
59
81
|
|
|
60
|
-
export function substitutionNodeFromSubstitutionString(substitutionString, lexer, parser) {
|
|
61
|
-
const substitutionTokens = substitutionTokensFromSubstitutionString(substitutionString, lexer),
|
|
62
|
-
substitutionNode = substitutionNodeFromSubstitutionTokens(substitutionTokens, parser);
|
|
63
|
-
|
|
64
|
-
return substitutionNode;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
82
|
export function variableNodeFromVariableTokens(variableTokens, parser) {
|
|
68
83
|
const ruleName = VARIABLE_RULE_NAME,
|
|
69
84
|
variableNode = nodeFromTokensRuleNameAndParser(variableTokens, ruleName, parser);
|
|
@@ -78,13 +93,6 @@ export function metavariableNodeFromMetavariableTokens(metavariableTokens, parse
|
|
|
78
93
|
return metavariableNode;
|
|
79
94
|
}
|
|
80
95
|
|
|
81
|
-
export function substitutionNodeFromSubstitutionTokens(substitutionTokens, parser) {
|
|
82
|
-
const ruleName = SUBSTITUTION_RULE_NAME,
|
|
83
|
-
substitutionNode = nodeFromTokensRuleNameAndParser(substitutionTokens, ruleName, parser);
|
|
84
|
-
|
|
85
|
-
return substitutionNode;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
96
|
export function unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser) {
|
|
89
97
|
const tokens = unqualifiedStatementTokens, ///
|
|
90
98
|
ruleName = UNQUALIFIED_STATEMENT_RULE_NAME,
|
package/src/utilities/string.js
CHANGED
|
@@ -11,17 +11,9 @@ export function trim(string) {
|
|
|
11
11
|
export function nodeAsString(node, tokens) {
|
|
12
12
|
let string;
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
if (nodeTerminalNode) {
|
|
17
|
-
const terminalNode = node; ///
|
|
18
|
-
|
|
19
|
-
string = terminalNodeAsString(terminalNode);
|
|
20
|
-
} else {
|
|
21
|
-
const nonTerminalNode = node; ///
|
|
14
|
+
tokens = nodeAsTokens(node, tokens); ///
|
|
22
15
|
|
|
23
|
-
|
|
24
|
-
}
|
|
16
|
+
string = tokensAsString(tokens);
|
|
25
17
|
|
|
26
18
|
return string;
|
|
27
19
|
}
|
|
@@ -40,14 +32,46 @@ export function nodesAsString(nodes, tokens) {
|
|
|
40
32
|
return string;
|
|
41
33
|
}
|
|
42
34
|
|
|
43
|
-
function
|
|
44
|
-
const
|
|
45
|
-
|
|
35
|
+
export function tokensAsString(tokens) {
|
|
36
|
+
const string = tokens.reduce((string, token) => {
|
|
37
|
+
const content = token.getContent();
|
|
38
|
+
|
|
39
|
+
string = `${string}${content}`;
|
|
40
|
+
|
|
41
|
+
return string;
|
|
42
|
+
}, EMPTY_STRING);
|
|
46
43
|
|
|
47
44
|
return string;
|
|
48
45
|
}
|
|
49
46
|
|
|
50
|
-
function
|
|
47
|
+
export function nodeAsTokens(node, tokens) {
|
|
48
|
+
const nodeTerminalNode = node.isTerminalNode();
|
|
49
|
+
|
|
50
|
+
if (nodeTerminalNode) {z
|
|
51
|
+
const terminalNode = node; ///
|
|
52
|
+
|
|
53
|
+
tokens = terminalNodeAsTokens(terminalNode, tokens);
|
|
54
|
+
} else {
|
|
55
|
+
const nonTerminalNode = node; ///
|
|
56
|
+
|
|
57
|
+
tokens = nonTerminalNodeAsTokens(nonTerminalNode, tokens);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return tokens;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function terminalNodeAsTokens(terminalNode, tokens) {
|
|
64
|
+
const significantToken = terminalNode.getSignificantToken(),
|
|
65
|
+
token = significantToken; ///
|
|
66
|
+
|
|
67
|
+
tokens = [ ///
|
|
68
|
+
token
|
|
69
|
+
];
|
|
70
|
+
|
|
71
|
+
return tokens;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function nonTerminalNodeAsTokens(nonTerminalNode, tokens) {
|
|
51
75
|
const lastSignificantTokenIndex = nonTerminalNode.getLastSignificantTokenIndex(tokens),
|
|
52
76
|
firstSignificantTokenIndex = nonTerminalNode.getFirstSignificantTokenIndex(tokens),
|
|
53
77
|
start = firstSignificantTokenIndex, ///
|
|
@@ -55,13 +79,5 @@ function nonTerminalNodeAsString(nonTerminalNode, tokens) {
|
|
|
55
79
|
|
|
56
80
|
tokens = tokens.slice(start, end); ///
|
|
57
81
|
|
|
58
|
-
|
|
59
|
-
const content = token.getContent();
|
|
60
|
-
|
|
61
|
-
string = `${string}${content}`;
|
|
62
|
-
|
|
63
|
-
return string;
|
|
64
|
-
}, EMPTY_STRING);
|
|
65
|
-
|
|
66
|
-
return string;
|
|
82
|
+
return tokens;
|
|
67
83
|
}
|
package/src/utilities/tokens.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { arrayUtilities } from "necessary";
|
|
3
4
|
import { lexersUtilities } from "occam-custom-grammars";
|
|
4
5
|
|
|
5
6
|
import { combinedCustomGrammarFromNothing } from "./customGrammar";
|
|
6
7
|
|
|
7
|
-
const {
|
|
8
|
+
const { front } = arrayUtilities,
|
|
9
|
+
{ nominalLexerFromCombinedCustomGrammar } = lexersUtilities;
|
|
8
10
|
|
|
9
11
|
const combinedCustomGrammar = combinedCustomGrammarFromNothing(),
|
|
10
12
|
nominalLexer = nominalLexerFromCombinedCustomGrammar(combinedCustomGrammar);
|
|
@@ -23,13 +25,6 @@ export function metavariableTokensFromMetavariableString(metavariableString, lex
|
|
|
23
25
|
return metavariableTokens;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
|
-
export function substitutionTokensFromSubstitutionString(substitutionString, lexer) {
|
|
27
|
-
const substitutionContent = `${substitutionString}`,
|
|
28
|
-
substitutionTokens = tokensFromContentAndLexer(substitutionContent, lexer);
|
|
29
|
-
|
|
30
|
-
return substitutionTokens;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
28
|
export function unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer) {
|
|
34
29
|
const content = unqualifiedStatementString, ///
|
|
35
30
|
unqualifiedStatementTokens = tokensFromContentAndLexer(content, lexer);
|
|
@@ -44,6 +39,20 @@ export function constructorDeclarationTokensFromConstructorDeclarationString(con
|
|
|
44
39
|
return constructorDeclarationTokens;
|
|
45
40
|
}
|
|
46
41
|
|
|
42
|
+
export function termTokensFromConstructorDeclarationTokens(constructorDeclarationTokens) {
|
|
43
|
+
const frontConstructorDeclarationTokens = front(constructorDeclarationTokens),
|
|
44
|
+
termTokens = frontConstructorDeclarationTokens; ///
|
|
45
|
+
|
|
46
|
+
return termTokens;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function statementTokensFromUnqualifiedStatementTokens(unqualifiedStatementTokens) {
|
|
50
|
+
const frontUnqualifiedStatementTokens = front(unqualifiedStatementTokens),
|
|
51
|
+
statementTokens = frontUnqualifiedStatementTokens; ///
|
|
52
|
+
|
|
53
|
+
return statementTokens;
|
|
54
|
+
}
|
|
55
|
+
|
|
47
56
|
function tokensFromContentAndLexer(content, lexer = nominalLexer) {
|
|
48
57
|
const tokens = lexer.tokenise(content);
|
|
49
58
|
|