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.
Files changed (66) hide show
  1. package/lib/assertion/contained.js +18 -16
  2. package/lib/combinator/bracketed.js +12 -5
  3. package/lib/constructor/bracketed.js +12 -5
  4. package/lib/index.js +2 -2
  5. package/lib/metavariable.js +9 -9
  6. package/lib/mixins/statement/qualified/unify.js +4 -4
  7. package/lib/mixins/statement/resolve.js +3 -3
  8. package/lib/nodeAndTokens/metavariable.js +193 -0
  9. package/lib/nodeAndTokens/statement.js +193 -0
  10. package/lib/nodeAndTokens/substitution/frame.js +159 -0
  11. package/lib/nodeAndTokens/substitution/statement.js +159 -0
  12. package/lib/nodeAndTokens/substitution/term.js +159 -0
  13. package/lib/nodeAndTokens/term.js +193 -0
  14. package/lib/nodeAndTokens/variable.js +193 -0
  15. package/lib/nodeAndTokens.js +93 -0
  16. package/lib/statement/unqualified.js +4 -4
  17. package/lib/statement.js +3 -4
  18. package/lib/substitution/frame.js +208 -0
  19. package/lib/substitution/statement.js +318 -0
  20. package/lib/substitution/term.js +202 -0
  21. package/lib/substitution.js +1 -8
  22. package/lib/substitutions.js +1 -13
  23. package/lib/term.js +3 -3
  24. package/lib/unifier/metaLevel.js +4 -4
  25. package/lib/unifier/termWithConstructor.js +6 -6
  26. package/lib/utilities/json.js +2 -2
  27. package/lib/utilities/substitutions.js +6 -21
  28. package/lib/variable.js +5 -5
  29. package/package.json +3 -1
  30. package/src/assertion/contained.js +17 -15
  31. package/src/combinator/bracketed.js +18 -13
  32. package/src/constructor/bracketed.js +19 -14
  33. package/src/index.js +1 -1
  34. package/src/metavariable.js +10 -11
  35. package/src/mixins/statement/qualified/unify.js +5 -5
  36. package/src/mixins/statement/resolve.js +4 -4
  37. package/src/nodeAndTokens/metavariable.js +49 -0
  38. package/src/nodeAndTokens/statement.js +49 -0
  39. package/src/nodeAndTokens/substitution/frame.js +23 -0
  40. package/src/nodeAndTokens/substitution/statement.js +23 -0
  41. package/src/nodeAndTokens/substitution/term.js +23 -0
  42. package/src/nodeAndTokens/term.js +49 -0
  43. package/src/nodeAndTokens/variable.js +49 -0
  44. package/src/nodeAndTokens.js +78 -0
  45. package/src/statement/unqualified.js +6 -3
  46. package/src/statement.js +5 -13
  47. package/src/substitution/{frameForMetavariable.js → frame.js} +21 -31
  48. package/src/substitution/{statementForMetavariable.js → statement.js} +59 -65
  49. package/src/substitution/{termForVariable.js → term.js} +21 -31
  50. package/src/substitution.js +0 -6
  51. package/src/substitutions.js +0 -12
  52. package/src/term.js +3 -4
  53. package/src/unifier/metaLevel.js +5 -5
  54. package/src/unifier/termWithConstructor.js +5 -5
  55. package/src/utilities/json.js +3 -2
  56. package/src/utilities/substitutions.js +7 -23
  57. package/src/variable.js +7 -8
  58. package/lib/ruleNames.js +0 -30
  59. package/lib/substitution/frameForMetavariable.js +0 -209
  60. package/lib/substitution/statementForMetavariable.js +0 -314
  61. package/lib/substitution/termForVariable.js +0 -203
  62. package/lib/utilities/node.js +0 -113
  63. package/lib/utilities/tokens.js +0 -69
  64. package/src/ruleNames.js +0 -6
  65. package/src/utilities/node.js +0 -114
  66. package/src/utilities/tokens.js +0 -63
@@ -2,12 +2,12 @@
2
2
 
3
3
  import shim from "./shim";
4
4
  import LocalContext from "./context/local";
5
- import FrameForMetavariableSubstitution from "./substitution/frameForMetavariable";
6
- import StatementForMetavariableSubstitution from "./substitution/statementForMetavariable";
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 "./utilities/node";
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
- frameForMetavariableSubstitution = FrameForMetavariableSubstitution.fromFrameAndMetavariable(frame, metavariable, context),
105
- substitution = frameForMetavariableSubstitution; ///
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.getSubstitutionNode() :
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
- statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, context);
155
+ statementSubstitution = StatementSubstitution.fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, context);
156
156
 
157
- substitution = statementForMetavariableSubstitution; ///
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
- lexer = fileContext.getLexer(),
299
- parser = fileContext.getParser(),
298
+ context = fileContext, ///
300
299
  metavariableString = string, ///
301
- metavariableNode = metavariableNodeFromMetavariableString(metavariableString, lexer, parser),
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 StatementForMetavariableSubstitution from "../../../substitution/statementForMetavariable";
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
- statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromStatementAndMetavariable(statement, metavariable, context),
48
- substitution = statementForMetavariableSubstitution; ///
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
- statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromStatementAndMetavariable(statement, metavariable, context),
84
- substitution = statementForMetavariableSubstitution; ///
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 localContext = specificContext, ///
25
- definedAssertionVerified = definedAssertion.resolve(substitutions, localContext);
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 localContext = specificContext, ///
51
- containedAssertionVerified = containedAssertion.resolve(substitutions, localContext);
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 unqualifiedStatementString = this.getString(); ///
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
- unqualifiedStatementString = this.getString(); ///
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 unqualifiedStatementString = this.getString(); ///
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
- lexer = fileContext.getLexer(),
258
- parser = fileContext.getParser(),
254
+ context = fileContext, ///
259
255
  statementString = string, ///
260
- unqualifiedStatementString = unqualifiedStatementStringFromStatementString(statementString),
261
- unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
262
- unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
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("/substitution/frame[0]"),
14
- metavariableNodeQuery = nodeQuery("/substitution/frame[1]/metavariable!"),
15
- substitutionNodeQuery = nodeQuery("/statement/substitution");
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 FrameForMetavariableSubstitution extends Substitution {
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 frameForMetavariableSubstitution = null;
86
+ let frameSubstitution = null;
91
87
 
92
- const substitutionNode = substitutionNodeQuery(statementNode);
88
+ const frameSubstitutionNode = frameSubstitutionNodeQuery(statementNode);
93
89
 
94
- if (substitutionNode !== null) {
95
- const frameNode = frameNodeQuery(substitutionNode),
96
- metavariableNode = metavariableNodeQuery(substitutionNode);
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 = substitutionNode, ///
98
+ node = frameSubstitutionNode, ///
103
99
  tokens = context.nodeAsTokens(node),
104
100
  string = stringFromFrameAndMetavariable(frame, metavariable);
105
101
 
106
- frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, node, tokens, frame, metavariable);
102
+ frameSubstitution = new FrameSubstitution(string, node, tokens, frame, metavariable);
107
103
  }
108
104
  }
109
105
 
110
- return frameForMetavariableSubstitution;
106
+ return frameSubstitution;
111
107
  }
112
108
 
113
109
  static fromFrameAndMetavariable(frame, metavariable, context) {
114
- const lexer = context.getLexer(),
115
- parser = context.getParser(),
116
- string = stringFromFrameAndMetavariable(frame, metavariable),
117
- substitutionString = string, ///
118
- unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
119
- unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
120
- unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
121
- substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode),
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