occam-verify-cli 1.0.438 → 1.0.444

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 (216) hide show
  1. package/lib/context/file.js +38 -35
  2. package/lib/context/local.js +10 -10
  3. package/lib/context/release.js +6 -6
  4. package/lib/context/temporary.js +14 -14
  5. package/lib/element/assertion/contained.js +45 -45
  6. package/lib/element/assertion/defined.js +13 -13
  7. package/lib/element/assertion/property.js +23 -22
  8. package/lib/element/assertion/satisfies.js +7 -6
  9. package/lib/element/assertion/subproof.js +20 -17
  10. package/lib/element/assertion/type.js +3 -2
  11. package/lib/element/assertion.js +1 -23
  12. package/lib/element/assumption.js +24 -22
  13. package/lib/element/axiom.js +9 -12
  14. package/lib/element/axiomLemmaTheoremConjecture.js +32 -32
  15. package/lib/element/{statement/combinator → combinator}/bracketed.js +16 -16
  16. package/lib/element/combinator.js +229 -0
  17. package/lib/element/conclusion.js +11 -9
  18. package/lib/element/{term/constructor → constructor}/bracketed.js +5 -5
  19. package/lib/element/constructor.js +232 -0
  20. package/lib/element/declaration/combinator.js +2 -16
  21. package/lib/element/declaration/complexType.js +12 -12
  22. package/lib/element/declaration/constructor.js +13 -11
  23. package/lib/element/declaration/simpleType.js +4 -4
  24. package/lib/element/declaration/typePrefix.js +2 -2
  25. package/lib/element/declaration/variable.js +3 -3
  26. package/lib/element/deduction.js +11 -9
  27. package/lib/element/derivation.js +7 -10
  28. package/lib/element/equivalence.js +10 -10
  29. package/lib/element/equivalences.js +5 -5
  30. package/lib/element/frame.js +32 -38
  31. package/lib/element/hypothesis.js +3 -3
  32. package/lib/element/judgement.js +6 -4
  33. package/lib/element/label.js +8 -8
  34. package/lib/element/metaLemmaMetatheorem.js +5 -5
  35. package/lib/element/metaType.js +17 -80
  36. package/lib/element/metavariable.js +34 -34
  37. package/lib/element/parameter.js +3 -3
  38. package/lib/element/premise.js +49 -58
  39. package/lib/element/property.js +9 -9
  40. package/lib/element/propertyRelation.js +13 -13
  41. package/lib/element/reference.js +14 -17
  42. package/lib/element/rule.js +21 -21
  43. package/lib/element/signature.js +11 -11
  44. package/lib/element/statement.js +18 -18
  45. package/lib/element/step.js +83 -55
  46. package/lib/element/subDerivation.js +7 -10
  47. package/lib/element/subproof.js +6 -14
  48. package/lib/element/substitution/frame.js +1 -7
  49. package/lib/element/substitution/reference.js +2 -3
  50. package/lib/element/substitution/statement.js +44 -15
  51. package/lib/element/substitution/term.js +10 -57
  52. package/lib/element/substitution.js +5 -11
  53. package/lib/element/substitutions.js +29 -29
  54. package/lib/element/supposition.js +63 -55
  55. package/lib/element/term.js +21 -34
  56. package/lib/element/type.js +47 -60
  57. package/lib/element/typePrefix.js +5 -5
  58. package/lib/element/variable.js +9 -9
  59. package/lib/element.js +9 -3
  60. package/lib/metaTypes.js +52 -0
  61. package/lib/node/axiomLemmaTheoremConjecture.js +9 -9
  62. package/lib/node/body/axiom.js +2 -25
  63. package/lib/node/body/conjecture.js +2 -25
  64. package/lib/node/body/lemma.js +2 -25
  65. package/lib/node/body/metaLemma.js +2 -25
  66. package/lib/node/body/metatheorem.js +2 -25
  67. package/lib/node/body/rule.js +15 -1
  68. package/lib/node/body/theorem.js +2 -25
  69. package/lib/node/body.js +25 -2
  70. package/lib/node/combinator.js +11 -2
  71. package/lib/node/constructor.js +11 -2
  72. package/lib/node/declaration/combinator.js +5 -5
  73. package/lib/node/declaration/constructor.js +8 -8
  74. package/lib/node/declaration/property.js +15 -15
  75. package/lib/node/declaration/simpleType.js +31 -31
  76. package/lib/node/declaration/variable.js +8 -8
  77. package/lib/node/equality.js +8 -8
  78. package/lib/node/frame.js +20 -20
  79. package/lib/node/header.js +22 -22
  80. package/lib/node/metaLemmaMetaTheorem.js +16 -16
  81. package/lib/node/metavariable.js +15 -15
  82. package/lib/node/property.js +8 -8
  83. package/lib/node/propertyRelation.js +8 -8
  84. package/lib/node/rule.js +16 -16
  85. package/lib/node/statement.js +12 -12
  86. package/lib/node/step.js +22 -22
  87. package/lib/node/subproof.js +8 -8
  88. package/lib/node/substitution/frame.js +19 -19
  89. package/lib/node/substitution/statement.js +19 -19
  90. package/lib/node/substitution/term.js +19 -19
  91. package/lib/node/term.js +35 -35
  92. package/lib/preamble.js +5 -5
  93. package/lib/process/instantiate.js +20 -2
  94. package/lib/process/unify.js +39 -42
  95. package/lib/process/validate.js +431 -0
  96. package/lib/process/verify.js +44 -135
  97. package/lib/types.js +27 -0
  98. package/lib/utilities/brackets.js +4 -4
  99. package/lib/utilities/element.js +91 -55
  100. package/lib/utilities/instance.js +18 -18
  101. package/lib/utilities/statement.js +2 -2
  102. package/lib/utilities/string.js +21 -10
  103. package/lib/utilities/unification.js +237 -0
  104. package/lib/utilities/validation.js +251 -0
  105. package/package.json +6 -6
  106. package/src/context/file.js +37 -31
  107. package/src/context/local.js +8 -8
  108. package/src/context/release.js +9 -6
  109. package/src/context/temporary.js +11 -11
  110. package/src/element/assertion/contained.js +19 -20
  111. package/src/element/assertion/defined.js +11 -12
  112. package/src/element/assertion/property.js +20 -20
  113. package/src/element/assertion/satisfies.js +6 -6
  114. package/src/element/assertion/subproof.js +17 -15
  115. package/src/element/assertion/type.js +2 -2
  116. package/src/element/assertion.js +0 -2
  117. package/src/element/assumption.js +22 -19
  118. package/src/element/axiom.js +7 -11
  119. package/src/element/axiomLemmaTheoremConjecture.js +36 -36
  120. package/src/element/{statement/combinator → combinator}/bracketed.js +7 -7
  121. package/src/element/combinator.js +90 -0
  122. package/src/element/conclusion.js +12 -10
  123. package/src/element/{term/constructor → constructor}/bracketed.js +5 -5
  124. package/src/element/{term/constructor.js → constructor.js} +17 -25
  125. package/src/element/declaration/combinator.js +1 -22
  126. package/src/element/declaration/complexType.js +11 -11
  127. package/src/element/declaration/constructor.js +13 -10
  128. package/src/element/declaration/simpleType.js +3 -3
  129. package/src/element/declaration/typePrefix.js +1 -1
  130. package/src/element/declaration/variable.js +2 -2
  131. package/src/element/deduction.js +12 -9
  132. package/src/element/derivation.js +6 -10
  133. package/src/element/equivalence.js +8 -8
  134. package/src/element/equivalences.js +4 -4
  135. package/src/element/frame.js +28 -30
  136. package/src/element/hypothesis.js +2 -2
  137. package/src/element/judgement.js +6 -3
  138. package/src/element/label.js +4 -4
  139. package/src/element/metaLemmaMetatheorem.js +4 -3
  140. package/src/element/metaType.js +9 -45
  141. package/src/element/metavariable.js +29 -31
  142. package/src/element/parameter.js +2 -2
  143. package/src/element/premise.js +55 -62
  144. package/src/element/property.js +6 -6
  145. package/src/element/propertyRelation.js +11 -11
  146. package/src/element/reference.js +12 -21
  147. package/src/element/rule.js +17 -16
  148. package/src/element/signature.js +10 -9
  149. package/src/element/statement.js +16 -18
  150. package/src/element/step.js +93 -55
  151. package/src/element/subDerivation.js +6 -10
  152. package/src/element/subproof.js +4 -12
  153. package/src/element/substitution/frame.js +0 -2
  154. package/src/element/substitution/reference.js +1 -5
  155. package/src/element/substitution/statement.js +44 -14
  156. package/src/element/substitution/term.js +10 -13
  157. package/src/element/substitution.js +3 -5
  158. package/src/element/substitutions.js +48 -30
  159. package/src/element/supposition.js +88 -70
  160. package/src/element/term.js +18 -28
  161. package/src/element/type.js +42 -36
  162. package/src/element/typePrefix.js +3 -3
  163. package/src/element/variable.js +7 -7
  164. package/src/element.js +3 -1
  165. package/src/metaTypes.js +42 -0
  166. package/src/node/axiomLemmaTheoremConjecture.js +6 -6
  167. package/src/node/body/axiom.js +0 -21
  168. package/src/node/body/conjecture.js +0 -23
  169. package/src/node/body/lemma.js +0 -23
  170. package/src/node/body/metaLemma.js +0 -23
  171. package/src/node/body/metatheorem.js +0 -23
  172. package/src/node/body/rule.js +12 -0
  173. package/src/node/body/theorem.js +0 -23
  174. package/src/node/body.js +23 -0
  175. package/src/node/combinator.js +9 -0
  176. package/src/node/constructor.js +9 -0
  177. package/src/node/declaration/combinator.js +5 -5
  178. package/src/node/declaration/constructor.js +8 -8
  179. package/src/node/declaration/property.js +14 -14
  180. package/src/node/declaration/simpleType.js +31 -31
  181. package/src/node/declaration/variable.js +7 -7
  182. package/src/node/equality.js +7 -7
  183. package/src/node/frame.js +21 -21
  184. package/src/node/header.js +22 -22
  185. package/src/node/metaLemmaMetaTheorem.js +14 -14
  186. package/src/node/metavariable.js +14 -14
  187. package/src/node/property.js +7 -7
  188. package/src/node/propertyRelation.js +7 -7
  189. package/src/node/rule.js +15 -15
  190. package/src/node/statement.js +12 -12
  191. package/src/node/step.js +21 -21
  192. package/src/node/subproof.js +7 -7
  193. package/src/node/substitution/frame.js +18 -18
  194. package/src/node/substitution/statement.js +18 -18
  195. package/src/node/substitution/term.js +18 -18
  196. package/src/node/term.js +34 -34
  197. package/src/preamble.js +4 -4
  198. package/src/process/instantiate.js +12 -0
  199. package/src/process/unify.js +53 -57
  200. package/src/process/validate.js +316 -0
  201. package/src/process/verify.js +50 -138
  202. package/src/types.js +18 -0
  203. package/src/utilities/brackets.js +10 -6
  204. package/src/utilities/element.js +125 -82
  205. package/src/utilities/instance.js +18 -18
  206. package/src/utilities/statement.js +2 -2
  207. package/src/utilities/string.js +34 -20
  208. package/src/{mixins/step/unify.js → utilities/unification.js} +82 -68
  209. package/src/{mixins/statement/validate.js → utilities/validation.js} +143 -69
  210. package/lib/element/statement/combinator.js +0 -105
  211. package/lib/element/term/constructor.js +0 -172
  212. package/lib/mixins/statement/validate.js +0 -198
  213. package/lib/mixins/step/unify.js +0 -228
  214. package/lib/mixins/term/verify.js +0 -65
  215. package/src/element/statement/combinator.js +0 -59
  216. package/src/mixins/term/verify.js +0 -81
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import elements from "../elements";
4
-
5
3
  import { nodeQuery } from "../utilities/query";
4
+ import { termFromTermNode, frameFromFrameNode, statementFromStatementNode } from "../utilities/element";
6
5
  import { terminalNodeMapFromNodes, areTerminalNodeMapsEqual, isLastRemainingArgumentFunction } from "../utilities/pass";
7
6
 
8
7
  const nonTerminalNodeQuery = nodeQuery("/*");
@@ -29,7 +28,7 @@ class Pass {
29
28
  }
30
29
 
31
30
  descend(generalChildNodes, specificChildNodes, ...remainingArguments) {
32
- let descendedAhead = false;
31
+ let descended = false;
33
32
 
34
33
  const generalChildNodesLength = generalChildNodes.length,
35
34
  specificChildNodesLength = specificChildNodes.length;
@@ -43,9 +42,12 @@ class Pass {
43
42
  const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
44
43
 
45
44
  if (lastRemainingArgumentFunction) {
46
- const index = 0;
45
+ const index = 0,
46
+ descendedAhead = this.descendAhead(index, generalChildNodes, specificChildNodes,...remainingArguments);
47
47
 
48
- descendedAhead = this.descendAhead(index, generalChildNodes, specificChildNodes,...remainingArguments);
48
+ if (descendedAhead) {
49
+ descended = true;
50
+ }
49
51
  } else {
50
52
  const visited = generalChildNodes.every((generalChildNode, index) => {
51
53
  const specificChildNode = specificChildNodes[index],
@@ -59,13 +61,13 @@ class Pass {
59
61
  });
60
62
 
61
63
  if (visited) {
62
- descendedAhead = true;
64
+ descended = true;
63
65
  }
64
66
  }
65
67
  }
66
68
  }
67
69
 
68
- return descendedAhead;
70
+ return descended;
69
71
  }
70
72
 
71
73
  descendAhead(index, generalChildNodes, specificChildNodes, ...remainingArguments) {
@@ -346,11 +348,10 @@ class CombinatorPass extends Pass {
346
348
 
347
349
  context = specificContext; ///
348
350
 
349
- const { Statement } = elements,
350
- statement = Statement.fromStatementNode(statementNode, context),
351
- statementVerifiesGivenType = statement.verifyGivenMetaType(metaType, assignments, stated, context);
351
+ const statement = statementFromStatementNode(statementNode, context),
352
+ statementValidatesGivenType = statement.validateGivenMetaType(metaType, assignments, stated, context);
352
353
 
353
- if (statementVerifiesGivenType) {
354
+ if (statementValidatesGivenType) {
354
355
  success = true;
355
356
  }
356
357
 
@@ -375,11 +376,10 @@ class CombinatorPass extends Pass {
375
376
 
376
377
  context = specificContext; ///
377
378
 
378
- const { Frame } = elements,
379
- frame = Frame.fromFrameNode(frameNode, context),
380
- frameVerifiesGivenType = frame.verifyGivenMetaType(metaType, assignments, stated, context);
379
+ const frame = frameFromFrameNode(frameNode, context),
380
+ frameValidatesGivenMetaType = frame.validateGivenMetaType(metaType, assignments, stated, context);
381
381
 
382
- if (frameVerifiesGivenType) {
382
+ if (frameValidatesGivenMetaType) {
383
383
  success = true;
384
384
  }
385
385
 
@@ -405,11 +405,10 @@ class CombinatorPass extends Pass {
405
405
  if (type !== null) {
406
406
  context = specificContext; ///
407
407
 
408
- const { Term } = elements,
409
- term = Term.fromTermNode(termNode, context),
410
- termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
408
+ const term = termFromTermNode(termNode, context),
409
+ termValidatesGivenType = term.validateGivenType(type, generalContext, specificContext);
411
410
 
412
- if (termVerifiesGivenType) {
411
+ if (termValidatesGivenType) {
413
412
  success = true;
414
413
  }
415
414
  }
@@ -441,11 +440,10 @@ class ConstructorPass extends Pass {
441
440
  if (type !== null) {
442
441
  context = specificContext; ///
443
442
 
444
- const { Term } = elements,
445
- term = Term.fromTermNode(termNode, context),
446
- termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
443
+ const term = termFromTermNode(termNode, context),
444
+ termValidatesGivenType = term.validateGivenType(type, generalContext, specificContext);
447
445
 
448
- if (termVerifiesGivenType) {
446
+ if (termValidatesGivenType) {
449
447
  success = true;
450
448
  }
451
449
  }
@@ -470,9 +468,9 @@ class MetavariablePass extends Pass {
470
468
  type = generalContext.findTypeByNominalTypeName(nominalTypeName),
471
469
  context = specificContext, ///
472
470
  term = context.findTermByTermNode(termNode),
473
- termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
471
+ termValidatesGivenType = term.validateGivenType(type, generalContext, specificContext);
474
472
 
475
- if (termVerifiesGivenType) {
473
+ if (termValidatesGivenType) {
476
474
  success = true;
477
475
  }
478
476
 
@@ -567,6 +565,21 @@ export function unifyMetavariable(generalMetavariable, specificMetavariable, gen
567
565
  return metavariableUnifies;
568
566
  }
569
567
 
568
+ export function unifyTermWithConstructor(term, constructor, generalContext, specificContext) {
569
+ let termUnifiesWithConstructor = false;
570
+
571
+ const termNode = term.getNode(),
572
+ constructorTerm = constructor.getTerm(),
573
+ constructorTermNode = constructorTerm.getNode(),
574
+ success = constructorPass.run(constructorTermNode, termNode, generalContext, specificContext);
575
+
576
+ if (success) {
577
+ termUnifiesWithConstructor = true;
578
+ }
579
+
580
+ return termUnifiesWithConstructor;
581
+ }
582
+
570
583
  export function unifyStatementIntrinsically(generalStatement, specificStatement, substitutions, generalContext, specificContext) {
571
584
  let statementUnifiesIntrinsically = false;
572
585
 
@@ -583,6 +596,21 @@ export function unifyStatementIntrinsically(generalStatement, specificStatement,
583
596
  return statementUnifiesIntrinsically;
584
597
  }
585
598
 
599
+ export function unifyStatementWithCombinator(statement, combinator, assignments, stated, generalContext, specificContext) {
600
+ let statementUnifiesWithCombinator = false;
601
+
602
+ const statementNode = statement.getNode(),
603
+ combinatorStatement = combinator.getStatement(),
604
+ combinatorStatementNode = combinatorStatement.getNode(),
605
+ success = combinatorPass.run(combinatorStatementNode, statementNode, assignments, stated, generalContext, specificContext);
606
+
607
+ if (success) {
608
+ statementUnifiesWithCombinator = true;
609
+ }
610
+
611
+ return statementUnifiesWithCombinator;
612
+ }
613
+
586
614
  export function unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, substitutions, generalContext, specificContext) {
587
615
  let metavariableUnifiesIntrinsically = false;
588
616
 
@@ -598,35 +626,3 @@ export function unifyMetavariableIntrinsically(generalMetavariable, specificMeta
598
626
 
599
627
  return metavariableUnifiesIntrinsically;
600
628
  }
601
-
602
- export function unifyTermWithConstructorTerm(term, constructorTerm, context) {
603
- let termUnifiesWithConstructor = false;
604
-
605
- const termNode = term.getNode(),
606
- generalContext = context, ///
607
- specificContext = context, ///
608
- constructorTermNode = constructorTerm.getNode(),
609
- success = constructorPass.run(constructorTermNode, termNode, generalContext, specificContext);
610
-
611
- if (success) {
612
- termUnifiesWithConstructor = true;
613
- }
614
-
615
- return termUnifiesWithConstructor;
616
- }
617
-
618
- export function unifyStatementWithCombinatorStatement(statement, combinatorStatement, assignments, stated, context) {
619
- let statementUnifiesWithCombinator = false;
620
-
621
- const statementNode = statement.getNode(),
622
- generalContext = context, ///
623
- specificContext = context, ///
624
- combinatorStatementNode = combinatorStatement.getNode(),
625
- success = combinatorPass.run(combinatorStatementNode, statementNode, assignments, stated, generalContext, specificContext);
626
-
627
- if (success) {
628
- statementUnifiesWithCombinator = true;
629
- }
630
-
631
- return statementUnifiesWithCombinator;
632
- }
@@ -0,0 +1,316 @@
1
+ "use strict";
2
+
3
+ import { nodeQuery } from "../utilities/query";
4
+ import { isLastRemainingArgumentFunction } from "../utilities/pass";
5
+ import { termFromTermNode, statementFromStatementNode } from "../utilities/element";
6
+
7
+ const nonTerminalNodeQuery = nodeQuery("/*");
8
+
9
+ const termNodeQuery = nodeQuery("/term"),
10
+ typeNodeQuery = nodeQuery("/type"),
11
+ statementNodeQuery = nodeQuery("/statement");
12
+
13
+ class Pass {
14
+ run(node, ...remainingArguments) {
15
+ let success;
16
+
17
+ const visited = this.visitNode(node, ...remainingArguments);
18
+
19
+ success = visited; ///
20
+
21
+ return success;
22
+ }
23
+
24
+ descend(childNodes, ...remainingArguments) {
25
+ let descended = false;
26
+
27
+ const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
28
+
29
+ if (lastRemainingArgumentFunction) {
30
+ const index = 0;
31
+
32
+ descended = this.descendAhead(index, childNodes, ...remainingArguments); ///
33
+ } else {
34
+ const visited = childNodes.every((childNode) => {
35
+ const node = childNode, ///
36
+ visited = this.visitNode(node, ...remainingArguments);
37
+
38
+ if (visited) {
39
+ return true;
40
+ }
41
+ });
42
+
43
+ if (visited) {
44
+ descended = true;
45
+ }
46
+ }
47
+
48
+ return descended;
49
+ }
50
+
51
+ descendAhead(index, childNodes, ...remainingArguments) {
52
+ let descendedAhead = false;
53
+
54
+ const descendAhead = remainingArguments.pop(), ///
55
+ childNodesLength = childNodes.length;
56
+
57
+ if (index === childNodesLength) {
58
+ descendedAhead = descendAhead();
59
+ } else {
60
+ const childNode = childNodes[index],
61
+ node = childNode, ///
62
+ visited = this.visitNode(node, ...remainingArguments, () => {
63
+ remainingArguments.push(descendAhead);
64
+
65
+ const aheadIndex = index + 1,
66
+ descendedAhead = this.descendAhead(aheadIndex, childNodes, ...remainingArguments);
67
+
68
+ return descendedAhead;
69
+ });
70
+
71
+ if (visited) {
72
+ descendedAhead = true;
73
+ }
74
+ }
75
+
76
+ return descendedAhead;
77
+ }
78
+
79
+ visitNode(node, ...remainingArguments) {
80
+ let visited;
81
+
82
+ const nodeTerminalNode = node.isTerminalNode();
83
+
84
+ if (nodeTerminalNode) {
85
+ const terminalNode = node; ///
86
+
87
+ visited = this.visitTerminalNode(terminalNode, ...remainingArguments);
88
+ } else {
89
+ const nonTerminalNode = node; ///
90
+
91
+ visited = this.visitNonTerminalNode(nonTerminalNode, ...remainingArguments);
92
+ }
93
+
94
+ return visited;
95
+ }
96
+
97
+ visitTerminalNode(terminalNode, ...remainingArguments) {
98
+ let visited = false;
99
+
100
+ const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
101
+
102
+ if (lastRemainingArgumentFunction) {
103
+ const descendAhead = remainingArguments.pop(), ///
104
+ descendedAhead = descendAhead();
105
+
106
+ if (descendedAhead) {
107
+ visited = true;
108
+ }
109
+
110
+ remainingArguments.push(descendAhead);
111
+ } else {
112
+ visited = true;
113
+ }
114
+
115
+ return visited;
116
+ }
117
+
118
+ visitNonTerminalNode(nonTerminalNode, ...remainingArguments) {
119
+ let visited = false;
120
+
121
+ let { maps } = this.constructor;
122
+
123
+ maps = [ ///
124
+ ...maps,
125
+ {
126
+ nodeQuery: nonTerminalNodeQuery,
127
+ run: (node, ...remainingArguments) => {
128
+ let visited = false;
129
+
130
+ const childNodes = nonTerminalNode.getChildNodes(), ///
131
+ descended = this.descend(childNodes, ...remainingArguments);
132
+
133
+ if (descended) {
134
+ visited = true;
135
+ }
136
+
137
+ return visited;
138
+ }
139
+ }
140
+ ]
141
+
142
+ maps.some((map) => {
143
+ const { nodeQuery, run } = map;
144
+
145
+ const node = nodeQuery(nonTerminalNode);
146
+
147
+ if (node !== null) {
148
+ const success = run(node, ...remainingArguments);
149
+
150
+ visited = success;
151
+
152
+ return true;
153
+ }
154
+ });
155
+
156
+ return visited;
157
+ }
158
+ }
159
+
160
+ class TermPass extends Pass {
161
+ run(statementNode, context) {
162
+ let success = false;
163
+
164
+ const nonTerminalNode = statementNode, ///
165
+ childNodes = nonTerminalNode.getChildNodes(), ///
166
+ descended = this.descend(childNodes,context);
167
+
168
+ if (descended) {
169
+ success = true;
170
+ }
171
+
172
+ return success;
173
+ }
174
+
175
+ static maps = [
176
+ {
177
+ nodeQuery: termNodeQuery,
178
+ run: (termNode, context, validateAhead) => {
179
+ let success = false;
180
+
181
+ const term = termFromTermNode(termNode, context),
182
+ termValidates = term.validate(context, validateAhead);
183
+
184
+ if (termValidates) {
185
+ success = true;
186
+ }
187
+
188
+ return success;
189
+ }
190
+ },
191
+ {
192
+ nodeQuery: typeNodeQuery,
193
+ run: (typeNode, context, validateAhead) => {
194
+ let success = false;
195
+
196
+ const nominalTypeName = typeNode.getNominalTypeName(),
197
+ typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
198
+
199
+ if (typePresent) {
200
+ const verifiesAhead = validateAhead();
201
+
202
+ if (verifiesAhead) {
203
+ success = true;
204
+ }
205
+ } else {
206
+ const typeString = nominalTypeName; ///
207
+
208
+ context.debug(`The '${typeString}' type is not present.`);
209
+
210
+ success = false;
211
+ }
212
+
213
+ return success;
214
+ }
215
+ }
216
+ ];
217
+ }
218
+
219
+ class StatementPass extends Pass {
220
+ run(statementNode, context) {
221
+ let success = false;
222
+
223
+ const nonTerminalNode = statementNode, ///
224
+ childNodes = nonTerminalNode.getChildNodes(), ///
225
+ descended = this.descend(childNodes,context);
226
+
227
+ if (descended) {
228
+ success = true;
229
+ }
230
+
231
+ return success;
232
+ }
233
+
234
+ static maps = [
235
+ {
236
+ nodeQuery: statementNodeQuery,
237
+ run: (statementNode, context) => {
238
+ let success = false;
239
+
240
+ const statement = statementFromStatementNode(statementNode, context),
241
+ assignments = null,
242
+ stated = false,
243
+ statementValidates = statement.validate(assignments, stated, context);
244
+
245
+ if (statementValidates) {
246
+ success = true;
247
+ }
248
+
249
+ return success;
250
+ }
251
+ },
252
+ {
253
+ nodeQuery: termNodeQuery,
254
+ run: (termNode, context) => {
255
+ let success = false;
256
+
257
+ const term = termFromTermNode(termNode, context),
258
+ termValidates = term.validate(context, () => {
259
+ const verifiesAhead = true;
260
+
261
+ return verifiesAhead;
262
+ });
263
+
264
+ if (termValidates) {
265
+ success = true;
266
+ }
267
+
268
+ return success;
269
+ }
270
+ },
271
+ {
272
+ nodeQuery: typeNodeQuery,
273
+ run: (typeNode, context) => {
274
+ let success = false;
275
+
276
+ const nominalTypeName = typeNode.getNominalTypeName(),
277
+ typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
278
+
279
+ if (typePresent) {
280
+ success = true;
281
+ }
282
+
283
+ return success;
284
+ }
285
+ }
286
+ ];
287
+ }
288
+
289
+ const termPass = new TermPass(),
290
+ statementPass = new StatementPass();
291
+
292
+ export function validateTerm(termNode, context) {
293
+ let termValidates = false;
294
+
295
+ const node = termNode, ///
296
+ sucess = termPass.run(node, context);
297
+
298
+ if (sucess) {
299
+ termValidates = true;
300
+ }
301
+
302
+ return termValidates;
303
+ }
304
+
305
+ export function validateStatement(statementNode, context) {
306
+ let statementValidates = false;
307
+
308
+ const node = statementNode, ///
309
+ sucess = statementPass.run(node, context);
310
+
311
+ if (sucess) {
312
+ statementValidates = true;
313
+ }
314
+
315
+ return statementValidates;
316
+ }