occam-verify-cli 0.0.1092 → 0.0.1094
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 +18 -16
- package/lib/combinator/bracketed.js +12 -5
- package/lib/constructor/bracketed.js +12 -5
- package/lib/index.js +2 -2
- package/lib/metavariable.js +9 -9
- package/lib/mixins/statement/qualified/unify.js +4 -4
- package/lib/mixins/statement/resolve.js +3 -3
- package/lib/nodeAndTokens/metavariable.js +193 -0
- package/lib/nodeAndTokens/statement.js +193 -0
- package/lib/nodeAndTokens/substitution/frame.js +159 -0
- package/lib/nodeAndTokens/substitution/statement.js +159 -0
- package/lib/nodeAndTokens/substitution/term.js +159 -0
- package/lib/nodeAndTokens/term.js +193 -0
- package/lib/nodeAndTokens/variable.js +193 -0
- package/lib/nodeAndTokens.js +93 -0
- package/lib/statement/unqualified.js +4 -4
- package/lib/statement.js +3 -4
- package/lib/substitution/frame.js +208 -0
- package/lib/substitution/statement.js +318 -0
- package/lib/substitution/term.js +202 -0
- package/lib/substitution.js +1 -8
- package/lib/substitutions.js +1 -13
- package/lib/term.js +3 -3
- package/lib/unifier/metaLevel.js +4 -4
- package/lib/unifier/termWithConstructor.js +6 -6
- package/lib/utilities/json.js +2 -2
- package/lib/utilities/substitutions.js +6 -21
- package/lib/variable.js +5 -5
- package/package.json +3 -1
- package/src/assertion/contained.js +17 -15
- package/src/combinator/bracketed.js +18 -13
- package/src/constructor/bracketed.js +19 -14
- package/src/index.js +1 -1
- package/src/metavariable.js +10 -11
- package/src/mixins/statement/qualified/unify.js +5 -5
- package/src/mixins/statement/resolve.js +4 -4
- package/src/nodeAndTokens/metavariable.js +49 -0
- package/src/nodeAndTokens/statement.js +49 -0
- package/src/nodeAndTokens/substitution/frame.js +23 -0
- package/src/nodeAndTokens/substitution/statement.js +23 -0
- package/src/nodeAndTokens/substitution/term.js +23 -0
- package/src/nodeAndTokens/term.js +49 -0
- package/src/nodeAndTokens/variable.js +49 -0
- package/src/nodeAndTokens.js +78 -0
- package/src/statement/unqualified.js +6 -3
- package/src/statement.js +5 -13
- package/src/substitution/{frameForMetavariable.js → frame.js} +21 -31
- package/src/substitution/{statementForMetavariable.js → statement.js} +59 -65
- package/src/substitution/{termForVariable.js → term.js} +21 -31
- package/src/substitution.js +0 -6
- package/src/substitutions.js +0 -12
- package/src/term.js +3 -4
- package/src/unifier/metaLevel.js +5 -5
- package/src/unifier/termWithConstructor.js +5 -5
- package/src/utilities/json.js +3 -2
- package/src/utilities/substitutions.js +7 -23
- package/src/variable.js +7 -8
- package/lib/ruleNames.js +0 -30
- package/lib/substitution/frameForMetavariable.js +0 -209
- package/lib/substitution/statementForMetavariable.js +0 -314
- package/lib/substitution/termForVariable.js +0 -203
- package/lib/utilities/node.js +0 -113
- package/lib/utilities/tokens.js +0 -69
- package/src/ruleNames.js +0 -6
- package/src/utilities/node.js +0 -114
- package/src/utilities/tokens.js +0 -63
package/src/metavariable.js
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import shim from "./shim";
|
|
4
4
|
import LocalContext from "./context/local";
|
|
5
|
-
import
|
|
6
|
-
import
|
|
5
|
+
import FrameSubstitution from "./substitution/frame";
|
|
6
|
+
import StatementSubstitution from "./substitution/statement";
|
|
7
7
|
|
|
8
8
|
import { nodeQuery } from "./utilities/query";
|
|
9
9
|
import { EMPTY_STRING } from "./constants";
|
|
10
|
-
import { metavariableNodeFromMetavariableString } from "./
|
|
10
|
+
import { metavariableNodeFromMetavariableString } from "./nodeAndTokens/metavariable";
|
|
11
11
|
import { metaTypeFromJSON, metaTypeToMetaTypeJSON } from "./utilities/json";
|
|
12
12
|
import { typeNameFromTypeNode, metavariableNameFromMetavariableNode } from "./utilities/name";
|
|
13
13
|
|
|
@@ -101,8 +101,8 @@ class Metavariable {
|
|
|
101
101
|
} else {
|
|
102
102
|
const metavariable = this, ///
|
|
103
103
|
context = specificContext, ///
|
|
104
|
-
|
|
105
|
-
substitution =
|
|
104
|
+
frameSubstitution = FrameSubstitution.fromFrameAndMetavariable(frame, metavariable, context),
|
|
105
|
+
substitution = frameSubstitution; ///
|
|
106
106
|
|
|
107
107
|
substitutions.addSubstitution(substitution, context);
|
|
108
108
|
|
|
@@ -131,7 +131,7 @@ class Metavariable {
|
|
|
131
131
|
const statementNode = statement.getNode(),
|
|
132
132
|
metavariableNode = this.node, ///
|
|
133
133
|
substitutionNode = (substitution !== null) ?
|
|
134
|
-
substitution.
|
|
134
|
+
substitution.getNode() :
|
|
135
135
|
null,
|
|
136
136
|
substitutionPresent = substitutions.isSubstitutionPresentByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode);
|
|
137
137
|
|
|
@@ -152,9 +152,9 @@ class Metavariable {
|
|
|
152
152
|
} else {
|
|
153
153
|
const context = specificContext, ///
|
|
154
154
|
metavariable = this, ///
|
|
155
|
-
|
|
155
|
+
statementSubstitution = StatementSubstitution.fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, context);
|
|
156
156
|
|
|
157
|
-
substitution =
|
|
157
|
+
substitution = statementSubstitution; ///
|
|
158
158
|
|
|
159
159
|
substitutions.addSubstitution(substitution, context);
|
|
160
160
|
|
|
@@ -295,10 +295,9 @@ class Metavariable {
|
|
|
295
295
|
|
|
296
296
|
static fromJSON(json, fileContext) {
|
|
297
297
|
const { string } = json,
|
|
298
|
-
|
|
299
|
-
parser = fileContext.getParser(),
|
|
298
|
+
context = fileContext, ///
|
|
300
299
|
metavariableString = string, ///
|
|
301
|
-
metavariableNode = metavariableNodeFromMetavariableString(metavariableString,
|
|
300
|
+
metavariableNode = metavariableNodeFromMetavariableString(metavariableString, context),
|
|
302
301
|
metavariableName = metavariableNameFromMetavariableNode(metavariableNode),
|
|
303
302
|
node = metavariableNode, ///
|
|
304
303
|
name = metavariableName, ///
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import StatementSubstitution from "../../../substitution/statement";
|
|
4
4
|
|
|
5
5
|
import { trim } from "../../../utilities/string";
|
|
6
6
|
|
|
@@ -44,8 +44,8 @@ function unifyAWithReference(qualifiedStatement, substitutions, context) {
|
|
|
44
44
|
context.trace(`Unifying the '${statementString}' qualified statement with the '${referenceString}' reference...`);
|
|
45
45
|
|
|
46
46
|
const metavariable = reference.getMetavariable(),
|
|
47
|
-
|
|
48
|
-
substitution =
|
|
47
|
+
statementSubstitution = StatementSubstitution.fromStatementAndMetavariable(statement, metavariable, context),
|
|
48
|
+
substitution = statementSubstitution; ///
|
|
49
49
|
|
|
50
50
|
substitutions.addSubstitution(substitution, context);
|
|
51
51
|
|
|
@@ -80,8 +80,8 @@ function unifyAWithAxiomLemmaTheoremOrConjecture(qualifiedStatement, substitutio
|
|
|
80
80
|
|
|
81
81
|
if (statementUnified) {
|
|
82
82
|
const metavariable = reference.getMetavariable(),
|
|
83
|
-
|
|
84
|
-
substitution =
|
|
83
|
+
statementSubstitution = StatementSubstitution.fromStatementAndMetavariable(statement, metavariable, context),
|
|
84
|
+
substitution = statementSubstitution; ///
|
|
85
85
|
|
|
86
86
|
substitutions.addSubstitution(substitution, context);
|
|
87
87
|
|
|
@@ -21,8 +21,8 @@ function resolveAsDefinedAssertion(statement, substitutions, generalContext, spe
|
|
|
21
21
|
|
|
22
22
|
specificContext.trace(`Resolving the '${statementString}' statement as a defined assertion...`);
|
|
23
23
|
|
|
24
|
-
const
|
|
25
|
-
definedAssertionVerified = definedAssertion.resolve(substitutions,
|
|
24
|
+
const context = specificContext, ///
|
|
25
|
+
definedAssertionVerified = definedAssertion.resolve(substitutions, context);
|
|
26
26
|
|
|
27
27
|
resolvedAsDefinedAssertion = definedAssertionVerified; ///
|
|
28
28
|
|
|
@@ -47,8 +47,8 @@ function resolveAsContainedAssertion(statement, substitutions, generalContext, s
|
|
|
47
47
|
|
|
48
48
|
specificContext.trace(`Resolving the '${statementString}' statement as a contained assertion...`);
|
|
49
49
|
|
|
50
|
-
const
|
|
51
|
-
containedAssertionVerified = containedAssertion.resolve(substitutions,
|
|
50
|
+
const context = specificContext, ///
|
|
51
|
+
containedAssertionVerified = containedAssertion.resolve(substitutions, context);
|
|
52
52
|
|
|
53
53
|
resolvedAsContainedAssertion = containedAssertionVerified; ///
|
|
54
54
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NodeAndTokens from "../nodeAndTokens";
|
|
4
|
+
|
|
5
|
+
import { ruleFromBNF } from "../nodeAndTokens";
|
|
6
|
+
|
|
7
|
+
const bnf = `
|
|
8
|
+
|
|
9
|
+
_ ::= metavariable... <END_OF_LINE> ;
|
|
10
|
+
|
|
11
|
+
`,
|
|
12
|
+
rule = ruleFromBNF(bnf);
|
|
13
|
+
|
|
14
|
+
export default class MetavariableNodeAndTokens extends NodeAndTokens {
|
|
15
|
+
getMetavariableNode() {
|
|
16
|
+
const metavariableNode = this.node; ///
|
|
17
|
+
|
|
18
|
+
return metavariableNode;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getMetavariableTokens() {
|
|
22
|
+
const metavariableTokens = this.tokens; ///
|
|
23
|
+
|
|
24
|
+
return metavariableTokens;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static rule = rule;
|
|
28
|
+
|
|
29
|
+
static fromMetavariable(metavariable, context) {
|
|
30
|
+
const string = metavariable.getString(),
|
|
31
|
+
metavariableNodeAndTokens = NodeAndTokens.fromString(MetavariableNodeAndTokens, string, context);
|
|
32
|
+
|
|
33
|
+
return metavariableNodeAndTokens;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
static fromMetavariableString(metavariableString, context) {
|
|
37
|
+
const string = metavariableString, ///
|
|
38
|
+
metavariableNodeAndTokens = NodeAndTokens.fromString(MetavariableNodeAndTokens, string, context);
|
|
39
|
+
|
|
40
|
+
return metavariableNodeAndTokens;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function metavariableNodeFromMetavariableString(metavariableString, context) {
|
|
45
|
+
const metavariableNodeAndTokens = MetavariableNodeAndTokens.fromMetavariableString(metavariableString, context),
|
|
46
|
+
metavariableNode = metavariableNodeAndTokens.getMetavariableNode();
|
|
47
|
+
|
|
48
|
+
return metavariableNode;
|
|
49
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NodeAndTokens from "../nodeAndTokens";
|
|
4
|
+
|
|
5
|
+
import { ruleFromBNF } from "../nodeAndTokens";
|
|
6
|
+
|
|
7
|
+
const bnf = `
|
|
8
|
+
|
|
9
|
+
_ ::= statement... <END_OF_LINE> ;
|
|
10
|
+
|
|
11
|
+
`,
|
|
12
|
+
rule = ruleFromBNF(bnf);
|
|
13
|
+
|
|
14
|
+
export default class StatementNodeAndTokens extends NodeAndTokens {
|
|
15
|
+
getStatementNode() {
|
|
16
|
+
const statementNode = this.node; ///
|
|
17
|
+
|
|
18
|
+
return statementNode;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getStatementTokens() {
|
|
22
|
+
const statementTokens = this.tokens; ///
|
|
23
|
+
|
|
24
|
+
return statementTokens;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static rule = rule;
|
|
28
|
+
|
|
29
|
+
static fromStatement(statement, context) {
|
|
30
|
+
const string = statement.getString(),
|
|
31
|
+
statementNodeAndTokens = NodeAndTokens.fromString(StatementNodeAndTokens, string, context);
|
|
32
|
+
|
|
33
|
+
return statementNodeAndTokens;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
static fromStatementString(statementString, context) {
|
|
37
|
+
const string = statementString, ///
|
|
38
|
+
statementNodeAndTokens = NodeAndTokens.fromString(StatementNodeAndTokens, string, context);
|
|
39
|
+
|
|
40
|
+
return statementNodeAndTokens;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function statementNodeFromStatementString(statementString, context) {
|
|
45
|
+
const statementNodeAndTokens = StatementNodeAndTokens.fromStatementString(statementString, context),
|
|
46
|
+
statementNode = statementNodeAndTokens.getStatementNode();
|
|
47
|
+
|
|
48
|
+
return statementNode;
|
|
49
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NodeAndTokens from "../../nodeAndTokens";
|
|
4
|
+
|
|
5
|
+
import { ruleFromBNF } from "../../nodeAndTokens";
|
|
6
|
+
|
|
7
|
+
const bnf = `
|
|
8
|
+
|
|
9
|
+
_ ::= frameSubstitution... <END_OF_LINE> ;
|
|
10
|
+
|
|
11
|
+
`,
|
|
12
|
+
rule = ruleFromBNF(bnf);
|
|
13
|
+
|
|
14
|
+
export default class FrameSubstitutionNodeAndTokens extends NodeAndTokens {
|
|
15
|
+
static rule = rule;
|
|
16
|
+
|
|
17
|
+
static fromFrameSubstitutionString(frameSubstitutionString, context) {
|
|
18
|
+
const string = frameSubstitutionString, ///
|
|
19
|
+
frameSubstitutionNodeAndTokens = NodeAndTokens.fromString(FrameSubstitutionNodeAndTokens, string, context);
|
|
20
|
+
|
|
21
|
+
return frameSubstitutionNodeAndTokens;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NodeAndTokens from "../../nodeAndTokens";
|
|
4
|
+
|
|
5
|
+
import { ruleFromBNF } from "../../nodeAndTokens";
|
|
6
|
+
|
|
7
|
+
const bnf = `
|
|
8
|
+
|
|
9
|
+
_ ::= statementSubstitution... <END_OF_LINE> ;
|
|
10
|
+
|
|
11
|
+
`,
|
|
12
|
+
rule = ruleFromBNF(bnf);
|
|
13
|
+
|
|
14
|
+
export default class StatementSubstitutionNodeAndTokens extends NodeAndTokens {
|
|
15
|
+
static rule = rule;
|
|
16
|
+
|
|
17
|
+
static fromStatementSubstitutionString(statementSubstitutionString, context) {
|
|
18
|
+
const string = statementSubstitutionString, ///
|
|
19
|
+
statementSubstitutionNodeAndTokens = NodeAndTokens.fromString(StatementSubstitutionNodeAndTokens, string, context);
|
|
20
|
+
|
|
21
|
+
return statementSubstitutionNodeAndTokens;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NodeAndTokens from "../../nodeAndTokens";
|
|
4
|
+
|
|
5
|
+
import { ruleFromBNF } from "../../nodeAndTokens";
|
|
6
|
+
|
|
7
|
+
const bnf = `
|
|
8
|
+
|
|
9
|
+
_ ::= termSubstitution... <END_OF_LINE> ;
|
|
10
|
+
|
|
11
|
+
`,
|
|
12
|
+
rule = ruleFromBNF(bnf);
|
|
13
|
+
|
|
14
|
+
export default class TermSubstitutionNodeAndTokens extends NodeAndTokens {
|
|
15
|
+
static rule = rule;
|
|
16
|
+
|
|
17
|
+
static fromTermSubstitutionString(termSubstitutionString, context) {
|
|
18
|
+
const string = termSubstitutionString, ///
|
|
19
|
+
termSubstitutionNodeAndTokens = NodeAndTokens.fromString(TermSubstitutionNodeAndTokens, string, context);
|
|
20
|
+
|
|
21
|
+
return termSubstitutionNodeAndTokens;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NodeAndTokens from "../nodeAndTokens";
|
|
4
|
+
|
|
5
|
+
import { ruleFromBNF } from "../nodeAndTokens";
|
|
6
|
+
|
|
7
|
+
const bnf = `
|
|
8
|
+
|
|
9
|
+
_ ::= term... <END_OF_LINE> ;
|
|
10
|
+
|
|
11
|
+
`,
|
|
12
|
+
rule = ruleFromBNF(bnf);
|
|
13
|
+
|
|
14
|
+
export default class TermNodeAndTokens extends NodeAndTokens {
|
|
15
|
+
getTermNode() {
|
|
16
|
+
const termNode = this.node; ///
|
|
17
|
+
|
|
18
|
+
return termNode;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getTermTokens() {
|
|
22
|
+
const termTokens = this.tokens; ///
|
|
23
|
+
|
|
24
|
+
return termTokens;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static rule = rule;
|
|
28
|
+
|
|
29
|
+
static fromTerm(term, context) {
|
|
30
|
+
const string = term.getString(),
|
|
31
|
+
termNodeAndTokens = NodeAndTokens.fromString(TermNodeAndTokens, string, context);
|
|
32
|
+
|
|
33
|
+
return termNodeAndTokens;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
static fromTermString(termString, context) {
|
|
37
|
+
const string = termString, ///
|
|
38
|
+
termNodeAndTokens = NodeAndTokens.fromString(TermNodeAndTokens, string, context);
|
|
39
|
+
|
|
40
|
+
return termNodeAndTokens;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function termNodeFromTermString(termString, context) {
|
|
45
|
+
const termNodeAndTokens = TermNodeAndTokens.fromTermString(termString, context),
|
|
46
|
+
termNode = termNodeAndTokens.getTermNode();
|
|
47
|
+
|
|
48
|
+
return termNode;
|
|
49
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NodeAndTokens from "../nodeAndTokens";
|
|
4
|
+
|
|
5
|
+
import { ruleFromBNF } from "../nodeAndTokens";
|
|
6
|
+
|
|
7
|
+
const bnf = `
|
|
8
|
+
|
|
9
|
+
_ ::= variable... <END_OF_LINE> ;
|
|
10
|
+
|
|
11
|
+
`,
|
|
12
|
+
rule = ruleFromBNF(bnf);
|
|
13
|
+
|
|
14
|
+
export default class VariableNodeAndTokens extends NodeAndTokens {
|
|
15
|
+
getVariableNode() {
|
|
16
|
+
const variableNode = this.node; ///
|
|
17
|
+
|
|
18
|
+
return variableNode;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getVariableTokens() {
|
|
22
|
+
const variableTokens = this.tokens; ///
|
|
23
|
+
|
|
24
|
+
return variableTokens;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static rule = rule;
|
|
28
|
+
|
|
29
|
+
static fromVariable(variable, context) {
|
|
30
|
+
const string = variable.getString(),
|
|
31
|
+
variableNodeAndTokens = NodeAndTokens.fromString(VariableNodeAndTokens, string, context);
|
|
32
|
+
|
|
33
|
+
return variableNodeAndTokens;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
static fromVariableString(variableString, context) {
|
|
37
|
+
const string = variableString, ///
|
|
38
|
+
variableNodeAndTokens = NodeAndTokens.fromString(VariableNodeAndTokens, string, context);
|
|
39
|
+
|
|
40
|
+
return variableNodeAndTokens;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function variableNodeFromVariableString(variableString, context) {
|
|
45
|
+
const variableNodeAndTokens = VariableNodeAndTokens.fromVariableString(variableString, context),
|
|
46
|
+
variableNode = variableNodeAndTokens.getVariableNode();
|
|
47
|
+
|
|
48
|
+
return variableNode;
|
|
49
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { BNFLexer } from "occam-lexers";
|
|
4
|
+
import { BNFParser } from "occam-parsers";
|
|
5
|
+
import { arrayUtilities } from "necessary";
|
|
6
|
+
|
|
7
|
+
import { nodeQuery } from "./utilities/query";
|
|
8
|
+
|
|
9
|
+
const { first } = arrayUtilities;
|
|
10
|
+
|
|
11
|
+
const bnfLexer = BNFLexer.fromNothing(),
|
|
12
|
+
bnfParser = BNFParser.fromNothing();
|
|
13
|
+
|
|
14
|
+
const childNodeQuery = nodeQuery("/*/*!");
|
|
15
|
+
|
|
16
|
+
export default class NodeAndTokens {
|
|
17
|
+
constructor(node, tokens) {
|
|
18
|
+
this.node = node;
|
|
19
|
+
this.tokens = tokens;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
getNode() {
|
|
23
|
+
return this.node;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
getTokens() {
|
|
27
|
+
return this.tokens;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static fromString(Class, string, context) {
|
|
31
|
+
const { rule } = Class,
|
|
32
|
+
lexer = context.getLexer(),
|
|
33
|
+
parser = context.getParser(),
|
|
34
|
+
ruleMap = parser.getRuleMap(),
|
|
35
|
+
ruleName = rule.getName();
|
|
36
|
+
|
|
37
|
+
ruleMap[ruleName] = rule;
|
|
38
|
+
|
|
39
|
+
const startRule = rule, ///
|
|
40
|
+
content = `${string}
|
|
41
|
+
`;
|
|
42
|
+
|
|
43
|
+
let tokens = lexer.tokenise(content),
|
|
44
|
+
node = parser.parse(tokens, startRule);
|
|
45
|
+
|
|
46
|
+
delete ruleMap[ruleName];
|
|
47
|
+
|
|
48
|
+
const childNode = childNodeQuery(node);
|
|
49
|
+
|
|
50
|
+
node = childNode; ///
|
|
51
|
+
|
|
52
|
+
tokens = tokensFromTokensAndNode(tokens, node); ///
|
|
53
|
+
|
|
54
|
+
const nodeAndTokens = new Class(node, tokens);
|
|
55
|
+
|
|
56
|
+
return nodeAndTokens;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function ruleFromBNF(bnf) {
|
|
61
|
+
const tokens = bnfLexer.tokensFromBNF(bnf),
|
|
62
|
+
rules = bnfParser.rulesFromTokens(tokens),
|
|
63
|
+
firstRule = first(rules),
|
|
64
|
+
rule = firstRule; ///
|
|
65
|
+
|
|
66
|
+
return rule;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function tokensFromTokensAndNode(tokens, node) {
|
|
70
|
+
const lastSignificantTokenIndex = node.getLastSignificantTokenIndex(tokens),
|
|
71
|
+
firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens),
|
|
72
|
+
start = firstSignificantTokenIndex, ///
|
|
73
|
+
end = lastSignificantTokenIndex + 1;
|
|
74
|
+
|
|
75
|
+
tokens = tokens.slice(start, end); ///
|
|
76
|
+
|
|
77
|
+
return tokens;
|
|
78
|
+
}
|
|
@@ -30,7 +30,8 @@ class UnqualifiedStatement {
|
|
|
30
30
|
verify(assignments, stated, context) {
|
|
31
31
|
let verified;
|
|
32
32
|
|
|
33
|
-
const
|
|
33
|
+
const unqualifiedStatement = this, ///
|
|
34
|
+
unqualifiedStatementString = unqualifiedStatement.getString(); ///
|
|
34
35
|
|
|
35
36
|
if (this.statement !== null) {
|
|
36
37
|
context.trace(`Verifying the '${unqualifiedStatementString}' unqualified statement...`);
|
|
@@ -61,7 +62,8 @@ class UnqualifiedStatement {
|
|
|
61
62
|
let statementUnified;
|
|
62
63
|
|
|
63
64
|
const statementString = statement.getString(),
|
|
64
|
-
|
|
65
|
+
unqualifiedStatement = this, ///
|
|
66
|
+
unqualifiedStatementString = unqualifiedStatement.getString(); ///
|
|
65
67
|
|
|
66
68
|
specificContext.trace(`Unifying the '${statementString}' statement with the '${unqualifiedStatementString}' unqualified statement...`);
|
|
67
69
|
|
|
@@ -77,7 +79,8 @@ class UnqualifiedStatement {
|
|
|
77
79
|
resolveIndependently(substitutions, generalContext, specificContext) {
|
|
78
80
|
let resolveIndependently;
|
|
79
81
|
|
|
80
|
-
const
|
|
82
|
+
const unqualifiedStatement = this, ///
|
|
83
|
+
unqualifiedStatementString = unqualifiedStatement.getString(); ///
|
|
81
84
|
|
|
82
85
|
specificContext.trace(`Resolving the '${unqualifiedStatementString}' unqualified statement independently...`);
|
|
83
86
|
|
package/src/statement.js
CHANGED
|
@@ -6,14 +6,11 @@ import verifyMixins from "./mixins/statement/verify";
|
|
|
6
6
|
import LocalContext from "./context/local";
|
|
7
7
|
import resolveMixins from "./mixins/statement/resolve";
|
|
8
8
|
import metaLevelUnifier from "./unifier/metaLevel";
|
|
9
|
+
import StatementNodeAndTokens from "./nodeAndTokens/statement";
|
|
9
10
|
import statementAsCombinatorVerifier from "./verifier/statementAsCombinator";
|
|
10
11
|
|
|
11
12
|
import { nodeQuery, nodesQuery } from "./utilities/query";
|
|
12
13
|
import { STATEMENT_META_TYPE_NAME } from "./metaTypeNames";
|
|
13
|
-
import { statementTokensFromUnqualifiedStatementTokens, unqualifiedStatementTokensFromUnqualifiedStatementString } from "./utilities/tokens";
|
|
14
|
-
import { statementNodeFromUnqualifiedStatementNode,
|
|
15
|
-
unqualifiedStatementStringFromStatementString,
|
|
16
|
-
unqualifiedStatementNodeFromUnqualifiedStatementTokens } from "./utilities/node";
|
|
17
14
|
|
|
18
15
|
const statementNodeQuery = nodeQuery("/*//statement"),
|
|
19
16
|
statementTermNodesQuery = nodesQuery("/statement//term"),
|
|
@@ -254,16 +251,11 @@ class Statement {
|
|
|
254
251
|
|
|
255
252
|
static fromJSON(json, fileContext) {
|
|
256
253
|
const { string } = json,
|
|
257
|
-
|
|
258
|
-
parser = fileContext.getParser(),
|
|
254
|
+
context = fileContext, ///
|
|
259
255
|
statementString = string, ///
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
statementTokens = statementTokensFromUnqualifiedStatementTokens(unqualifiedStatementTokens),
|
|
264
|
-
statementNode = statementNodeFromUnqualifiedStatementNode(unqualifiedStatementNode),
|
|
265
|
-
node = statementNode, ///
|
|
266
|
-
tokens = statementTokens, ///
|
|
256
|
+
statementNodeAndTokens = StatementNodeAndTokens.fromStatementString(statementString, context),
|
|
257
|
+
node = statementNodeAndTokens.getNode(),
|
|
258
|
+
tokens = statementNodeAndTokens.getTokens(),
|
|
267
259
|
statement = new Statement(string, node, tokens);
|
|
268
260
|
|
|
269
261
|
return statement;
|
|
@@ -2,19 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
import shim from "../shim";
|
|
4
4
|
import Substitution from "../substitution";
|
|
5
|
+
import FrameSubstitutionNodeAndTokens from "../nodeAndTokens/substitution/frame";
|
|
5
6
|
|
|
6
7
|
import { nodeQuery } from "../utilities/query";
|
|
7
|
-
import { substitutionNodeFromUnqualifiedStatementNode,
|
|
8
|
-
unqualifiedStatementStringFromSubstitutionString,
|
|
9
|
-
unqualifiedStatementNodeFromUnqualifiedStatementTokens } from "../utilities/node";
|
|
10
|
-
import { unqualifiedStatementTokensFromUnqualifiedStatementString,
|
|
11
|
-
substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode } from "../utilities/tokens";
|
|
12
8
|
|
|
13
|
-
const frameNodeQuery = nodeQuery("/
|
|
14
|
-
metavariableNodeQuery = nodeQuery("/
|
|
15
|
-
|
|
9
|
+
const frameNodeQuery = nodeQuery("/frameSubstitution/frame[0]"),
|
|
10
|
+
metavariableNodeQuery = nodeQuery("/frameSubstitution/frame[1]/metavariable!"),
|
|
11
|
+
frameSubstitutionNodeQuery = nodeQuery("/statement/frameSubstitution");
|
|
16
12
|
|
|
17
|
-
export default class
|
|
13
|
+
export default class FrameSubstitution extends Substitution {
|
|
18
14
|
constructor(string, node, tokens, frame, metavariable) {
|
|
19
15
|
super(string, node, tokens);
|
|
20
16
|
|
|
@@ -87,44 +83,38 @@ export default class FrameForMetavariableSubstitution extends Substitution {
|
|
|
87
83
|
}
|
|
88
84
|
|
|
89
85
|
static fromStatementNode(statementNode, context) {
|
|
90
|
-
let
|
|
86
|
+
let frameSubstitution = null;
|
|
91
87
|
|
|
92
|
-
const
|
|
88
|
+
const frameSubstitutionNode = frameSubstitutionNodeQuery(statementNode);
|
|
93
89
|
|
|
94
|
-
if (
|
|
95
|
-
const frameNode = frameNodeQuery(
|
|
96
|
-
metavariableNode = metavariableNodeQuery(
|
|
90
|
+
if (frameSubstitutionNode !== null) {
|
|
91
|
+
const frameNode = frameNodeQuery(frameSubstitutionNode),
|
|
92
|
+
metavariableNode = metavariableNodeQuery(frameSubstitutionNode);
|
|
97
93
|
|
|
98
94
|
if ((frameNode !== null) && (metavariableNode !== null)) {
|
|
99
95
|
const { Frame, Metavariable } = shim,
|
|
100
96
|
frame = Frame.fromFrameNode(frameNode, context),
|
|
101
97
|
metavariable = Metavariable.fromMetavariableNode(metavariableNode, context),
|
|
102
|
-
node =
|
|
98
|
+
node = frameSubstitutionNode, ///
|
|
103
99
|
tokens = context.nodeAsTokens(node),
|
|
104
100
|
string = stringFromFrameAndMetavariable(frame, metavariable);
|
|
105
101
|
|
|
106
|
-
|
|
102
|
+
frameSubstitution = new FrameSubstitution(string, node, tokens, frame, metavariable);
|
|
107
103
|
}
|
|
108
104
|
}
|
|
109
105
|
|
|
110
|
-
return
|
|
106
|
+
return frameSubstitution;
|
|
111
107
|
}
|
|
112
108
|
|
|
113
109
|
static fromFrameAndMetavariable(frame, metavariable, context) {
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, substitutionNode),
|
|
123
|
-
node = substitutionNode, //
|
|
124
|
-
tokens = substitutionTokens, ///
|
|
125
|
-
statementForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, node, tokens, frame, metavariable);
|
|
126
|
-
|
|
127
|
-
return statementForMetavariableSubstitution;
|
|
110
|
+
const string = stringFromFrameAndMetavariable(frame, metavariable),
|
|
111
|
+
frameSubstitutionString = string, ///
|
|
112
|
+
frameSubstitutionNodeAndTokens = FrameSubstitutionNodeAndTokens.fromFrameSubstitutionString(frameSubstitutionString, context),
|
|
113
|
+
node = frameSubstitutionNodeAndTokens.getNode(),
|
|
114
|
+
tokens = frameSubstitutionNodeAndTokens.getTokens(),
|
|
115
|
+
frameSubstitution = new FrameSubstitution(string, node, tokens, frame, metavariable);
|
|
116
|
+
|
|
117
|
+
return frameSubstitution;
|
|
128
118
|
}
|
|
129
119
|
}
|
|
130
120
|
|