occam-verify-cli 0.0.869 → 0.0.871

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 (129) hide show
  1. package/lib/axiomLemmaTheoremConjecture.js +13 -13
  2. package/lib/conclusion.js +3 -3
  3. package/lib/context/file.js +77 -73
  4. package/lib/equality.js +2 -4
  5. package/lib/equivalence.js +1 -1
  6. package/lib/label.js +5 -6
  7. package/lib/metaLemmaMetatheorem.js +13 -13
  8. package/lib/mixins/context.js +28 -28
  9. package/lib/premise.js +4 -4
  10. package/lib/rule.js +13 -13
  11. package/lib/ruleNames.js +1 -29
  12. package/lib/substitution/metastatementForMetavariable.js +3 -2
  13. package/lib/substitution/statementForMetavariable.js +27 -64
  14. package/lib/substitution/termForVariable.js +5 -5
  15. package/lib/utilities/name.js +8 -8
  16. package/lib/utilities/node.js +14 -14
  17. package/lib/utilities/query.js +4 -9
  18. package/lib/utilities/tokens.js +6 -6
  19. package/lib/utilities/verifier.js +86 -0
  20. package/lib/verifier/node/metastatement.js +41 -28
  21. package/lib/verifier/node/statementAsCombinator.js +41 -28
  22. package/lib/verifier/node/termAsConstructor.js +30 -22
  23. package/lib/verifier/nodes/equality.js +27 -32
  24. package/lib/verifier/nodes/intrinsicLevel.js +25 -34
  25. package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +270 -0
  26. package/lib/verifier/nodes/metaLevel.js +25 -34
  27. package/lib/verifier/nodes/statementAgainstCombinator.js +45 -49
  28. package/lib/verifier/nodes/termAgainstConstructor.js +24 -51
  29. package/lib/verify/argumentAgainstArgument.js +24 -0
  30. package/lib/verify/axiom.js +4 -4
  31. package/lib/verify/conjecture.js +4 -4
  32. package/lib/verify/containment.js +5 -5
  33. package/lib/verify/equality.js +9 -9
  34. package/lib/verify/label.js +8 -9
  35. package/lib/verify/labels.js +15 -8
  36. package/lib/verify/lemma.js +4 -4
  37. package/lib/verify/metaDerivation.js +19 -19
  38. package/lib/verify/metaLemma.js +4 -4
  39. package/lib/verify/metaproof.js +4 -6
  40. package/lib/verify/metastatement/qualified.js +3 -3
  41. package/lib/verify/metatheorem.js +4 -4
  42. package/lib/verify/metavariable.js +7 -5
  43. package/lib/verify/metavariableAgainstMetastatement.js +44 -0
  44. package/lib/verify/metavariableAgainstStatement.js +65 -0
  45. package/lib/verify/rule.js +4 -4
  46. package/lib/verify/statement/qualified.js +29 -29
  47. package/lib/verify/statement.js +4 -4
  48. package/lib/verify/statementAgainstMetaType.js +24 -0
  49. package/lib/verify/statementAtainstStatement.js +52 -0
  50. package/lib/verify/term.js +7 -8
  51. package/lib/verify/termAgainstTerm.js +22 -0
  52. package/lib/verify/termAgainstType.js +26 -0
  53. package/lib/verify/terms.js +2 -3
  54. package/lib/verify/theorem.js +4 -4
  55. package/lib/verify/type.js +7 -5
  56. package/lib/verify/typeAssertion.js +45 -40
  57. package/lib/verify/variable.js +7 -5
  58. package/lib/verify/variableAgainstTerm.js +70 -0
  59. package/package.json +4 -4
  60. package/src/axiomLemmaTheoremConjecture.js +13 -13
  61. package/src/conclusion.js +2 -2
  62. package/src/context/file.js +79 -73
  63. package/src/equality.js +3 -9
  64. package/src/equivalence.js +1 -1
  65. package/src/label.js +6 -7
  66. package/src/metaLemmaMetatheorem.js +13 -13
  67. package/src/mixins/context.js +17 -17
  68. package/src/premise.js +3 -3
  69. package/src/rule.js +13 -13
  70. package/src/ruleNames.js +0 -7
  71. package/src/substitution/metastatementForMetavariable.js +3 -1
  72. package/src/substitution/statementForMetavariable.js +32 -74
  73. package/src/substitution/termForVariable.js +3 -3
  74. package/src/utilities/name.js +7 -7
  75. package/src/utilities/node.js +13 -13
  76. package/src/utilities/query.js +3 -9
  77. package/src/utilities/tokens.js +4 -4
  78. package/src/utilities/verifier.js +46 -0
  79. package/src/verifier/node/metastatement.js +41 -34
  80. package/src/verifier/node/statementAsCombinator.js +39 -32
  81. package/src/verifier/node/termAsConstructor.js +30 -25
  82. package/src/verifier/nodes/equality.js +31 -36
  83. package/src/verifier/nodes/intrinsicLevel.js +30 -38
  84. package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +222 -0
  85. package/src/verifier/nodes/metaLevel.js +30 -38
  86. package/src/verifier/nodes/statementAgainstCombinator.js +52 -55
  87. package/src/verifier/nodes/termAgainstConstructor.js +30 -71
  88. package/src/verify/argumentAgainstArgument.js +15 -0
  89. package/src/verify/axiom.js +4 -4
  90. package/src/verify/conjecture.js +4 -4
  91. package/src/verify/containment.js +4 -4
  92. package/src/verify/equality.js +8 -8
  93. package/src/verify/label.js +8 -9
  94. package/src/verify/labels.js +17 -7
  95. package/src/verify/lemma.js +4 -4
  96. package/src/verify/metaDerivation.js +18 -18
  97. package/src/verify/metaLemma.js +6 -6
  98. package/src/verify/metaproof.js +3 -6
  99. package/src/verify/metastatement/qualified.js +5 -4
  100. package/src/verify/metatheorem.js +4 -4
  101. package/src/verify/metavariable.js +7 -5
  102. package/src/verify/metavariableAgainstMetastatement.js +42 -0
  103. package/src/verify/metavariableAgainstStatement.js +77 -0
  104. package/src/verify/rule.js +4 -4
  105. package/src/verify/statement/qualified.js +35 -30
  106. package/src/verify/statement.js +5 -5
  107. package/src/verify/statementAgainstMetaType.js +21 -0
  108. package/src/verify/statementAtainstStatement.js +60 -0
  109. package/src/verify/term.js +13 -17
  110. package/src/verify/termAgainstTerm.js +20 -0
  111. package/src/verify/termAgainstType.js +28 -0
  112. package/src/verify/terms.js +1 -3
  113. package/src/verify/theorem.js +4 -4
  114. package/src/verify/type.js +7 -5
  115. package/src/verify/typeAssertion.js +56 -55
  116. package/src/verify/variable.js +7 -5
  117. package/src/verify/variableAgainstTerm.js +86 -0
  118. package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -327
  119. package/lib/verifier/nodes/substitution.js +0 -223
  120. package/lib/verify/givenMetavariable.js +0 -31
  121. package/lib/verify/givenType.js +0 -31
  122. package/lib/verify/givenVariable.js +0 -31
  123. package/lib/verify/termAndGivenType.js +0 -39
  124. package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -219
  125. package/src/verifier/nodes/substitution.js +0 -125
  126. package/src/verify/givenMetavariable.js +0 -31
  127. package/src/verify/givenType.js +0 -31
  128. package/src/verify/givenVariable.js +0 -31
  129. package/src/verify/termAndGivenType.js +0 -37
@@ -45,7 +45,9 @@ export default class MetastatementForMetavariableSubstitution extends Substituti
45
45
  }
46
46
 
47
47
  static fromMetavariableNodeAndMetastatementNode(metavariableNode, metastatementNode) {
48
- let metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(metavariableNode, metastatementNode);
48
+ let metastatementForMetavariableSubstitution;
49
+
50
+ metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(metavariableNode, metastatementNode);
49
51
 
50
52
  const bracketedMetastatementChildNode = bracketedMetastatementChildNodeFromMetastatementNode(metastatementNode);
51
53
 
@@ -1,12 +1,9 @@
1
1
  "use strict";
2
2
 
3
3
  import Substitution from "../substitution";
4
-
5
- import substitutionNodesVerifier from "../verifier/nodes/substitution";
6
4
  import TermForVariableSubstitution from "./termForVariable";
7
- import intrinsicLevelNodesVerifier from "../verifier/nodes/intrinsicLevel";
5
+ import verifyStatementAgainstStatement from "../verify/statementAtainstStatement";
8
6
 
9
- import { push } from "../utilities/array";
10
7
  import { bracketedStatementChildNodeFromStatementNode } from "../utilities/proof";
11
8
 
12
9
  export default class StatementForMetavariableSubstitution extends Substitution {
@@ -33,37 +30,25 @@ export default class StatementForMetavariableSubstitution extends Substitution {
33
30
  matchStatementNode(statementNode, substitutions, localContextA, localContextB) {
34
31
  let statementNodeMatches;
35
32
 
36
- statementNodeMatches = this.matchStatementNodeEx(statementNode, substitutions, localContextA, localContextB);
33
+ const substitution = this.substitution, ///
34
+ statementNodeA = statementNode, ///
35
+ statementNodeB = this.statementNode; ///
36
+
37
+ statementNodeMatches = matchStatementNode(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB);
37
38
 
38
39
  if (!statementNodeMatches) {
39
40
  const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
40
41
 
41
42
  if (bracketedStatementChildNode !== null) {
42
- const statementNode = bracketedStatementChildNode; ///
43
+ const statementNodeA = bracketedStatementChildNode; ///
43
44
 
44
- statementNodeMatches = this.matchStatementNodeEx(statementNode, substitutions, localContextA, localContextB);
45
+ statementNodeMatches = matchStatementNode(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB);
45
46
  }
46
47
  }
47
48
 
48
49
  return statementNodeMatches;
49
50
  }
50
51
 
51
- matchStatementNodeEx(statementNode, substitutions, localContextA, localContextB) {
52
- let statementNodeMatches;
53
-
54
- if (this.substitution === null) {
55
- statementNodeMatches = this.statementNode.match(statementNode);
56
- } else {
57
- const substitution = this.substitution, ///
58
- statementNodeA = statementNode, ///
59
- statementNodeB = this.statementNode; ///
60
-
61
- statementNodeMatches = matchStatementNode(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB);
62
- }
63
-
64
- return statementNodeMatches;
65
- }
66
-
67
52
  matchMetavariableNode(metavariableNode) {
68
53
  const metavariableNodeMatches = this.metavariableNode.match(metavariableNode);
69
54
 
@@ -71,9 +56,11 @@ export default class StatementForMetavariableSubstitution extends Substitution {
71
56
  }
72
57
 
73
58
  static fromMetavariableNodeAndStatementNode(metavariableNode, statementNode) {
59
+ let statementForMetavariableSubstitution;
60
+
74
61
  const substitution = null;
75
62
 
76
- let statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableNode, statementNode, substitution);
63
+ statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableNode, statementNode, substitution);
77
64
 
78
65
  const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
79
66
 
@@ -86,8 +73,18 @@ export default class StatementForMetavariableSubstitution extends Substitution {
86
73
  return statementForMetavariableSubstitution;
87
74
  }
88
75
 
89
- static fromMetavariableNodeStatementNodeAndSubstitution(metavariableNode, statementNode, substitution) {
90
- let statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableNode, statementNode, substitution);
76
+ static fromMetavariableNodeStatementNodeAndSubstitutionNode(metavariableNode, statementNode, substitutionNode) {
77
+ let statementForMetavariableSubstitution;
78
+
79
+ let substitution = null;
80
+
81
+ if (substitutionNode !== null) {
82
+ const termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionNode(substitutionNode);
83
+
84
+ substitution = termForVariableSubstitution; ///
85
+ }
86
+
87
+ statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableNode, statementNode, substitution);
91
88
 
92
89
  const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
93
90
 
@@ -101,56 +98,17 @@ export default class StatementForMetavariableSubstitution extends Substitution {
101
98
  }
102
99
  }
103
100
 
104
- function transformSubstitutions(substitutionsA, substitutionsB) {
105
- substitutionsA = substitutionsA.map((substitutionA) => {
106
- const substitution = substitutionA, ///
107
- substitutions = substitutionsB,
108
- termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionAndSubstitutions(substitution, substitutions);
109
-
110
- substitutionA = termForVariableSubstitution; ///
101
+ function matchStatementNode(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB) {
102
+ let statementNodeMatches;
111
103
 
112
- return substitutionA;
113
- });
104
+ if (substitution === null) {
105
+ statementNodeMatches = statementNodeB.match(statementNodeA);
106
+ } else {
107
+ const statementVerifiedAgainstStatement = verifyStatementAgainstStatement(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB);
114
108
 
115
- return substitutionsA;
116
- }
117
-
118
- export function matchStatementNode(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB) {
119
- let statementNodeMatches = false;
120
-
121
- const termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionAndSubstitutions(substitution, substitutions),
122
- intrinsic = termForVariableSubstitution.isIntrinsic(substitution);
123
-
124
- let substitutionsA = []; ///
125
-
126
- if (intrinsic) {
127
- const substitutionA = termForVariableSubstitution; ///
128
-
129
- substitutionsA.push(substitutionA);
130
- }
131
-
132
- const nonTerminalNodeA = statementNodeA, ///
133
- nonTerminalNodeB = statementNodeB, ///
134
- nonTerminalNodeVerified = substitutionNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutionsA, localContextA, localContextB, () => {
135
- const verifiedAhead = true;
136
-
137
- return verifiedAhead;
138
- });
139
-
140
- if (nonTerminalNodeVerified) {
141
- if (!intrinsic) {
142
- const substitutionB = termForVariableSubstitution, ///
143
- substitutionsB = [
144
- substitutionB
145
- ];
146
-
147
- substitutionsA = transformSubstitutions(substitutionsA, substitutionsB);
148
-
149
- push(substitutions, substitutionsA);
150
- }
151
-
152
- statementNodeMatches = true;
109
+ statementNodeMatches = statementVerifiedAgainstStatement; ///
153
110
  }
154
111
 
155
112
  return statementNodeMatches;
156
- }
113
+
114
+ }
@@ -23,14 +23,14 @@ export default class TermForVariableSubstitution extends Substitution {
23
23
  return this.termNode;
24
24
  }
25
25
 
26
- isIntrinsic(substitution) {
26
+ isTransformed(substitution) {
27
27
  const termNod = substitution.getTermNode(),
28
28
  variableNode = substitution.getVariableNode(),
29
29
  termNodeMatches = this.termNode.match(termNod),
30
30
  variableNodeMatches = this.variableNode.match(variableNode),
31
- intrinsic = ((!termNodeMatches) && (!variableNodeMatches));
31
+ transformed = ((!termNodeMatches) && (!variableNodeMatches));
32
32
 
33
- return intrinsic;
33
+ return transformed;
34
34
  }
35
35
 
36
36
  matchTermNode(termNode) {
@@ -3,8 +3,8 @@
3
3
  import { nodeQuery } from "../utilities/query";
4
4
 
5
5
  const typeTerminalNodeQuery = nodeQuery("/type/@type"),
6
- metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type"),
7
- labelNameTerminalNodeQuery = nodeQuery("/label/@name");
6
+ nameTerminalNodeQuery = nodeQuery("/metavariable/@name"),
7
+ metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type");
8
8
 
9
9
  export function typeNameFromTypeNode(typeNode) {
10
10
  let typeName = null;
@@ -19,12 +19,12 @@ export function typeNameFromTypeNode(typeNode) {
19
19
  return typeName;
20
20
  }
21
21
 
22
- export function labelNameFromLabelNode(labelNode) {
23
- const labelNameTerminalNode = labelNameTerminalNodeQuery(labelNode),
24
- labelNameTerminalNodeContent = labelNameTerminalNode.getContent(),
25
- labelName = labelNameTerminalNodeContent; ///
22
+ export function nameFromMetavariableNode(metavariableNode) {
23
+ const nameTerminalNode = nameTerminalNodeQuery(metavariableNode),
24
+ nameTerminalNodeContent = nameTerminalNode.getContent(),
25
+ name = nameTerminalNodeContent; ///
26
26
 
27
- return labelName;
27
+ return name;
28
28
  }
29
29
 
30
30
  export function metaTypeNameFromMetaTypeNode(metaTypeNode) {
@@ -4,12 +4,12 @@ import { parsersUtilities } from "occam-custom-grammars";
4
4
 
5
5
  import { nodeQuery } from "../utilities/query";
6
6
  import { combinedCustomGrammarFromNothing } from "./customGrammar";
7
- import { LABEL_RULE_NAME,
7
+ import { METAVARIABLE_RULE_NAME,
8
8
  VARIABLE_DECLARATION_RULE_NAME,
9
9
  UNQUALIFIED_STATEMENT_RULE_NAME,
10
10
  CONSTRUCTOR_DECLARATION_RULE_NAME,
11
11
  UNQUALIFIED_METASTATEMENT_RULE_NAME } from "../ruleNames";
12
- import { labelTokensFromLabelString,
12
+ import { metavariableTokensFromMetavariableString,
13
13
  variableDeclarationTokensFromVariableString,
14
14
  unqualifiedStatementTokensFromStatementString,
15
15
  unqualifiedMetastatementTokensFromMetastatementString } from "../utilities/tokens";
@@ -24,13 +24,6 @@ const termNodeQuery = nodeQuery("/constructorDeclaration/term!"),
24
24
  statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
25
25
  metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!");
26
26
 
27
- export function labelNodeFromLabelString(labelString, lexer, parser) {
28
- const labelTokens = labelTokensFromLabelString(labelString, lexer),
29
- labelNode = labelNodeFromLabelTokens(labelTokens, parser);
30
-
31
- return labelNode;
32
- }
33
-
34
27
  export function variableNodeFromVariableString(variableString, lexer, parser) {
35
28
  const variableTDeclarationTokens = variableDeclarationTokensFromVariableString(variableString, lexer),
36
29
  variableNode = variableNodeFromVariableVariableTDeclarationTokens(variableTDeclarationTokens, parser);
@@ -45,6 +38,13 @@ export function statementNodeFromStatementString(statementString, lexer, parser)
45
38
  return statementNode;
46
39
  }
47
40
 
41
+ export function metavariableNodeFromMetavariableString(metavariableString, lexer, parser) {
42
+ const metavariableTokens = metavariableTokensFromMetavariableString(metavariableString, lexer),
43
+ metavariableNode = metavariableNodeFromMetavariableTokens(metavariableTokens, parser);
44
+
45
+ return metavariableNode;
46
+ }
47
+
48
48
  export function metastatementNodeFromMetastatementString(metastatementString, lexer, parser) {
49
49
  const unqualifiedMetastatementTokens = unqualifiedMetastatementTokensFromMetastatementString(metastatementString, lexer),
50
50
  metastatementNode = metastatementNodeFromUnqualifiedMetastatementTokens(unqualifiedMetastatementTokens, parser);
@@ -80,11 +80,11 @@ export function metastatementNodeFromUnqualifiedMetastatementTokens(unqualifiedM
80
80
  return metastatementNode;
81
81
  }
82
82
 
83
- export function labelNodeFromLabelTokens(labelTokens, parser) {
84
- const ruleName = LABEL_RULE_NAME,
85
- labelNode = nodeFromTokensRuleNameAndParser(labelTokens, ruleName, parser);
83
+ export function metavariableNodeFromMetavariableTokens(metavariableTokens, parser) {
84
+ const ruleName = METAVARIABLE_RULE_NAME,
85
+ metavariableNode = nodeFromTokensRuleNameAndParser(metavariableTokens, ruleName, parser);
86
86
 
87
- return labelNode;
87
+ return metavariableNode;
88
88
  }
89
89
 
90
90
  export function variableDeclarationNodeFromVariableTDeclarationTokens(variableTDeclarationTokens, parser) {
@@ -6,11 +6,9 @@ export function nodeQuery(expression) {
6
6
  const query = Query.fromExpression(expression);
7
7
 
8
8
  return function(node) {
9
- if (node !== null) {
10
- const nodes = query.execute(node);
9
+ const nodes = query.execute(node);
11
10
 
12
- node = nodes.shift() || null; ///
13
- }
11
+ node = nodes.shift() || null; ///
14
12
 
15
13
  return node;
16
14
  };
@@ -20,11 +18,7 @@ export function nodesQuery(expression) {
20
18
  const query = Query.fromExpression(expression);
21
19
 
22
20
  return function(node) {
23
- let nodes = null;
24
-
25
- if (node !== null) {
26
- nodes = query.execute(node);
27
- }
21
+ const nodes = query.execute(node);
28
22
 
29
23
  return nodes;
30
24
  };
@@ -9,11 +9,11 @@ const { florenceLexerFromCombinedCustomGrammar } = lexersUtilities;
9
9
  const combinedCustomGrammar = combinedCustomGrammarFromNothing(),
10
10
  florenceLexer = florenceLexerFromCombinedCustomGrammar(combinedCustomGrammar);
11
11
 
12
- export function labelTokensFromLabelString(labelString, lexer) {
13
- const labelContent = `${labelString}`,
14
- labelTokens = tokensFromContentAndLexer(labelContent, lexer);
12
+ export function metavariableTokensFromMetavariableString(metavariableString, lexer) {
13
+ const metavariableContent = `${metavariableString}`,
14
+ metavariableTokens = tokensFromContentAndLexer(metavariableContent, lexer);
15
15
 
16
- return labelTokens;
16
+ return metavariableTokens;
17
17
  }
18
18
 
19
19
  export function constructorDeclarationTokensFromTermString(termString, lexer) {
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ export function verifyNode(nodeQueryMaps, nonTerminalNode, ...remainingArguments) {
4
+ let nodeVerified;
5
+
6
+ nodeVerified = nodeQueryMaps.some((nodeQueryMap) => {
7
+ let nodeVerified = false;
8
+
9
+ const { nodeQuery, verifyNode } = nodeQueryMap;
10
+
11
+ const node = nodeQuery(nonTerminalNode);
12
+
13
+ if (node !== null) {
14
+ nodeVerified = verifyNode(node, ...remainingArguments);
15
+ }
16
+
17
+ if (nodeVerified) {
18
+ return true;
19
+ }
20
+ });
21
+
22
+ return nodeVerified;
23
+ }
24
+
25
+ export function verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, ...remainingArguments) {
26
+ let nodesVerified;
27
+
28
+ nodesVerified = nodeQueryMaps.some((nodeQueryMap) => {
29
+ let nodesVerified = false;
30
+
31
+ const { nodeQueryA, nodeQueryB, verifyNodes } = nodeQueryMap;
32
+
33
+ const nodeA = nodeQueryA(nonTerminalNodeA), ///
34
+ nodeB = nodeQueryB(nonTerminalNodeB); ///
35
+
36
+ if ((nodeA !== null) && (nodeB !== null)) {
37
+ nodesVerified = verifyNodes(nodeA, nodeB, ...remainingArguments);
38
+ }
39
+
40
+ if (nodesVerified) {
41
+ return true;
42
+ }
43
+ });
44
+
45
+ return nodesVerified;
46
+ }
@@ -3,58 +3,65 @@
3
3
  import LocalContext from "../../context/local";
4
4
  import NodeVerifier from "../../verifier/node";
5
5
 
6
+ import { nodeQuery } from "../../utilities/query";
7
+ import { verifyNode } from "../../utilities/verifier";
6
8
  import { verifyStandaloneTerm } from "../../verify/term";
7
9
  import { verifyStandaloneVariable } from "../../verify/variable";
8
10
  import { verifyStandaloneMetavariable } from "../../verify/metavariable";
9
- import { TERM_RULE_NAME, VARIABLE_RULE_NAME, METAVARIABLE_RULE_NAME } from "../../ruleNames";
11
+
12
+ const termNodeQuery = nodeQuery("/term!"),
13
+ variableNodeQuery = nodeQuery("/variable!"),
14
+ metavariableNodeQuery = nodeQuery("/metavariable!");
10
15
 
11
16
  class MetastatementNodeVerifier extends NodeVerifier {
12
17
  verifyNonTerminalNode(nonTerminalNode, localMetaContext, verifyAhead) {
13
18
  let nonTerminalNodeVerified;
14
19
 
15
- const ruleName = nonTerminalNode.getRuleName(); ///
16
-
17
- switch (ruleName) {
18
- case METAVARIABLE_RULE_NAME: {
19
- const metavariableNode = nonTerminalNode, ///
20
- standaloneMetavariableVerified = verifyStandaloneMetavariable(metavariableNode, localMetaContext, verifyAhead),
21
- metavariableNodeVerified = standaloneMetavariableVerified; ///
22
-
23
- nonTerminalNodeVerified = metavariableNodeVerified; ///
24
-
25
- break;
20
+ const nodeQueryMaps = [
21
+ {
22
+ nodeQuery: termNodeQuery,
23
+ verifyNode: this.verifyTermNode
24
+ },
25
+ {
26
+ nodeQuery: variableNodeQuery,
27
+ verifyNode: this.verifyVariableNode
28
+ },
29
+ {
30
+ nodeQuery: metavariableNodeQuery,
31
+ verifyNode: this.verifyMetavariableNode
26
32
  }
33
+ ];
27
34
 
28
- case VARIABLE_RULE_NAME: {
29
- const variableNode = nonTerminalNode, ///
30
- localContext = LocalContext.fromLocalMetaContext(localMetaContext),
31
- standaloneVariableVerified = verifyStandaloneVariable(variableNode, localContext, verifyAhead),
32
- variableNodeVerified = standaloneVariableVerified; ///
35
+ const nodeVerified = verifyNode(nodeQueryMaps, nonTerminalNode, localMetaContext, verifyAhead);
33
36
 
34
- nonTerminalNodeVerified = variableNodeVerified; ///
37
+ nonTerminalNodeVerified = nodeVerified ?
38
+ true :
39
+ super.verifyNonTerminalNode(nonTerminalNode, localMetaContext, verifyAhead);
35
40
 
36
- break;
37
- }
41
+ return nonTerminalNodeVerified;
42
+ }
38
43
 
39
- case TERM_RULE_NAME: {
40
- const termNode = nonTerminalNode, ///
41
- localContext = LocalContext.fromLocalMetaContext(localMetaContext),
42
- standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
43
- termNodeVerified = standaloneTermVerified; ///
44
+ verifyMetavariableNode(metavariableNode, localMetaContext, verifyAhead) {
45
+ const standaloneMetavariableVerified = verifyStandaloneMetavariable(metavariableNode, localMetaContext, verifyAhead),
46
+ metavariableNodeVerified = standaloneMetavariableVerified; ///
44
47
 
45
- nonTerminalNodeVerified = termNodeVerified; ///
48
+ return metavariableNodeVerified;
49
+ }
46
50
 
47
- break;
48
- }
51
+ verifyVariableNode(variableNode, localMetaContext, verifyAhead) {
52
+ const localContext = LocalContext.fromLocalMetaContext(localMetaContext),
53
+ standaloneVariableVerified = verifyStandaloneVariable(variableNode, localContext, verifyAhead),
54
+ variableNodeVerified = standaloneVariableVerified; ///
49
55
 
50
- default: {
51
- nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, localMetaContext, verifyAhead);
56
+ return variableNodeVerified;
57
+ }
52
58
 
53
- break;
54
- }
55
- }
59
+ verifyTermNode(termNode, localMetaContext, verifyAhead) {
60
+ const localContext = LocalContext.fromLocalMetaContext(localMetaContext),
61
+ standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
62
+ termNodeVerified = standaloneTermVerified; ///
56
63
 
57
- return nonTerminalNodeVerified;
64
+ return termNodeVerified;
58
65
  }
59
66
  }
60
67
 
@@ -2,56 +2,63 @@
2
2
 
3
3
  import NodeVerifier from "../../verifier/node";
4
4
 
5
+ import { nodeQuery } from "../../utilities/query";
6
+ import { verifyNode } from "../../utilities/verifier";
5
7
  import { verifyStandaloneType } from "./../../verify/type";
6
8
  import { verifyStandaloneTerm } from "./../../verify/term";
7
9
  import { verifyStandaloneStatement } from "../../verify/statement";
8
- import { TYPE_RULE_NAME, TERM_RULE_NAME, STATEMENT_RULE_NAME } from "../../ruleNames";
10
+
11
+ const termNodeQuery = nodeQuery("/term!"),
12
+ typeNodeQuery = nodeQuery("/type!"),
13
+ statementNodeQuery = nodeQuery("/statement!");
9
14
 
10
15
  class StatementAsCombinatorNodeVerifier extends NodeVerifier {
11
16
  verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
12
17
  let nonTerminalNodeVerified;
13
18
 
14
- const ruleName = nonTerminalNode.getRuleName();
15
-
16
- switch (ruleName) {
17
- case STATEMENT_RULE_NAME: {
18
- const statementNode = nonTerminalNode, ///
19
- standaloneStatementVerified = verifyStandaloneStatement(statementNode, localContext, verifyAhead),
20
- statementNodeVerified = standaloneStatementVerified; ///
21
-
22
- nonTerminalNodeVerified = statementNodeVerified; ///
23
-
24
- break;
19
+ const nodeQueryMaps = [
20
+ {
21
+ nodeQuery: termNodeQuery,
22
+ verifyNode: this.verifyTermNode
23
+ },
24
+ {
25
+ nodeQuery: typeNodeQuery,
26
+ verifyNode: this.verifyTypeNode
27
+ },
28
+ {
29
+ nodeQuery: statementNodeQuery,
30
+ verifyNode: this.verifyStatementNode
25
31
  }
32
+ ];
26
33
 
27
- case TERM_RULE_NAME: {
28
- const termNode = nonTerminalNode, ///
29
- standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
30
- termNodeVerified = standaloneTermVerified; ///
34
+ const nodeVerified = verifyNode(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
31
35
 
32
- nonTerminalNodeVerified = termNodeVerified; ///
36
+ nonTerminalNodeVerified = nodeVerified ?
37
+ true :
38
+ super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
33
39
 
34
- break;
35
- }
40
+ return nonTerminalNodeVerified;
41
+ }
36
42
 
37
- case TYPE_RULE_NAME: {
38
- const typeNode = nonTerminalNode, ///
39
- standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
40
- typeNodeVerified = standaloneTypeVerified; ///
43
+ verifyStatementNode(statementNode, localContext, verifyAhead) {
44
+ const standaloneStatementVerified = verifyStandaloneStatement(statementNode, localContext, verifyAhead),
45
+ statementNodeVerified = standaloneStatementVerified; ///
41
46
 
42
- nonTerminalNodeVerified = typeNodeVerified; ///
47
+ return statementNodeVerified;
48
+ }
43
49
 
44
- break;
45
- }
50
+ verifyTermNode(termNode, localContext, verifyAhead) {
51
+ const standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
52
+ termNodeVerified = standaloneTermVerified; ///
46
53
 
47
- default: {
48
- nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead); ///
54
+ return termNodeVerified;
55
+ }
49
56
 
50
- break;
51
- }
52
- }
57
+ verifyTypeNode(typeNode, localContext, verifyAhead) {
58
+ const standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
59
+ typeNodeVerified = standaloneTypeVerified; ///
53
60
 
54
- return nonTerminalNodeVerified;
61
+ return typeNodeVerified;
55
62
  }
56
63
  }
57
64
 
@@ -2,45 +2,50 @@
2
2
 
3
3
  import NodeVerifier from "../../verifier/node";
4
4
 
5
+ import { nodeQuery } from "../../utilities/query";
6
+ import { verifyNode } from "../../utilities/verifier";
5
7
  import { verifyStandaloneType } from "../../verify/type";
6
8
  import { verifyStandaloneTerm } from "../../verify/term";
7
- import { TERM_RULE_NAME, TYPE_RULE_NAME } from "../../ruleNames";
9
+
10
+ const termNodeQuery = nodeQuery("/term!"),
11
+ typeNodeQuery = nodeQuery("/type!");
8
12
 
9
13
  class TermAsConstructorNodeVerifier extends NodeVerifier {
10
14
  verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
11
15
  let nonTerminalNodeVerified;
12
16
 
13
- const ruleName = nonTerminalNode.getRuleName();
14
-
15
- switch (ruleName) {
16
- case TERM_RULE_NAME: {
17
- const termNode = nonTerminalNode, ///
18
- standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
19
- termNodeVerified = standaloneTermVerified; ///
20
-
21
- nonTerminalNodeVerified = termNodeVerified; ///
22
-
23
- break;
17
+ const nodeQueryMaps = [
18
+ {
19
+ nodeQuery: termNodeQuery,
20
+ verifyNode: this.verifyTermNode
21
+ },
22
+ {
23
+ nodeQuery: typeNodeQuery,
24
+ verifyNode: this.verifyTypeNode
24
25
  }
26
+ ];
25
27
 
26
- case TYPE_RULE_NAME: {
27
- const typeNode = nonTerminalNode, ///
28
- standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
29
- typeNodeVerified = standaloneTypeVerified; ///
28
+ const nodeVerified = verifyNode(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
30
29
 
31
- nonTerminalNodeVerified = typeNodeVerified; ///
30
+ nonTerminalNodeVerified = nodeVerified ?
31
+ true :
32
+ super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
32
33
 
33
- break;
34
- }
34
+ return nonTerminalNodeVerified;
35
+ }
35
36
 
36
- default: {
37
- nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
37
+ verifyTermNode(termNode, localContext, verifyAhead) {
38
+ const standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
39
+ termNodeVerified = standaloneTermVerified; ///
38
40
 
39
- break;
40
- }
41
- }
41
+ return termNodeVerified;
42
+ }
42
43
 
43
- return nonTerminalNodeVerified;
44
+ verifyTypeNode(typeNode, localContext, verifyAhead) {
45
+ const standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
46
+ typeNodeVerified = standaloneTypeVerified; ///
47
+
48
+ return typeNodeVerified;
44
49
  }
45
50
  }
46
51