occam-verify-cli 1.0.185 → 1.0.198

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 (244) hide show
  1. package/lib/constants.js +5 -1
  2. package/lib/context/file.js +3 -3
  3. package/lib/dom/assertion/contained.js +12 -24
  4. package/lib/dom/assertion/defined.js +9 -21
  5. package/lib/dom/assertion/property.js +8 -10
  6. package/lib/dom/assertion/satisfies.js +6 -8
  7. package/lib/dom/assertion/subproof.js +3 -5
  8. package/lib/dom/assertion/type.js +6 -8
  9. package/lib/dom/axiom.js +15 -100
  10. package/lib/dom/conjecture.js +5 -4
  11. package/lib/dom/constructor/bracketed.js +6 -7
  12. package/lib/dom/declaration/complexType.js +6 -6
  13. package/lib/dom/declaration/constructor.js +6 -6
  14. package/lib/dom/declaration/metavariable.js +3 -5
  15. package/lib/dom/declaration/type.js +2 -2
  16. package/lib/dom/declaration/variable.js +6 -6
  17. package/lib/dom/declaration.js +14 -16
  18. package/lib/dom/derivation.js +2 -4
  19. package/lib/dom/equality.js +9 -11
  20. package/lib/dom/frame.js +14 -18
  21. package/lib/dom/judgement.js +8 -10
  22. package/lib/dom/lemma.js +5 -4
  23. package/lib/dom/metaLemma.js +5 -4
  24. package/lib/dom/metaType.js +2 -4
  25. package/lib/dom/metatheorem.js +5 -4
  26. package/lib/dom/metavariable.js +12 -15
  27. package/lib/dom/parameter.js +2 -4
  28. package/lib/dom/procedureCall.js +6 -10
  29. package/lib/dom/proof.js +2 -4
  30. package/lib/dom/property.js +16 -51
  31. package/lib/dom/propertyRelation.js +14 -16
  32. package/lib/dom/reference.js +7 -11
  33. package/lib/dom/rule.js +6 -8
  34. package/lib/dom/statement.js +27 -31
  35. package/lib/dom/step.js +4 -6
  36. package/lib/dom/subDerivation.js +2 -4
  37. package/lib/dom/subproof.js +6 -8
  38. package/lib/dom/term.js +12 -20
  39. package/lib/dom/theorem.js +5 -4
  40. package/lib/dom/topLevelAssertion.js +30 -24
  41. package/lib/dom/topLevelMetaAssertion.js +76 -140
  42. package/lib/dom/type.js +8 -25
  43. package/lib/dom/variable.js +5 -11
  44. package/lib/equivalence.js +4 -6
  45. package/lib/mixins/term/verify.js +4 -8
  46. package/lib/node/argument.js +116 -0
  47. package/lib/node/assertion/contained.js +48 -53
  48. package/lib/node/assertion/defined.js +41 -53
  49. package/lib/node/assertion/property.js +23 -53
  50. package/lib/node/assertion/satisfies.js +23 -53
  51. package/lib/node/assertion/subproof.js +16 -53
  52. package/lib/node/assertion/type.js +23 -53
  53. package/lib/node/axiom.js +6 -52
  54. package/lib/node/combinator.js +6 -52
  55. package/lib/node/conclusion.js +16 -53
  56. package/lib/node/conjecture.js +6 -52
  57. package/lib/node/constructor.js +6 -52
  58. package/lib/node/declaration/combinator.js +8 -56
  59. package/lib/node/declaration/complexType.js +42 -86
  60. package/lib/node/declaration/constructor.js +26 -77
  61. package/lib/node/declaration/metavariable.js +30 -53
  62. package/lib/node/declaration/property.js +19 -69
  63. package/lib/node/declaration/type.js +45 -78
  64. package/lib/node/declaration/variable.js +21 -81
  65. package/lib/node/declaration.js +23 -53
  66. package/lib/node/deduction.js +16 -53
  67. package/lib/node/derivation.js +42 -51
  68. package/lib/node/equality.js +32 -53
  69. package/lib/node/error.js +6 -52
  70. package/lib/node/frame.js +30 -53
  71. package/lib/node/judgement.js +23 -53
  72. package/lib/node/label.js +16 -53
  73. package/lib/node/labels.js +116 -0
  74. package/lib/node/lemma.js +6 -52
  75. package/lib/node/metaArgument.js +116 -0
  76. package/lib/node/metaLemma.js +6 -52
  77. package/lib/node/metaType.js +14 -55
  78. package/lib/node/metatheorem.js +6 -52
  79. package/lib/node/metavariable.js +30 -56
  80. package/lib/node/nonTerminal.js +200 -0
  81. package/lib/node/parameter.js +22 -53
  82. package/lib/node/parenthesisedLabel.js +116 -0
  83. package/lib/node/parenthesisedLabels.js +123 -0
  84. package/lib/node/premise.js +23 -53
  85. package/lib/node/procedureCall.js +23 -53
  86. package/lib/node/proof.js +16 -53
  87. package/lib/node/property.js +18 -57
  88. package/lib/node/propertyRelation.js +30 -53
  89. package/lib/node/reference.js +16 -53
  90. package/lib/node/rule.js +44 -53
  91. package/lib/node/statement.js +139 -53
  92. package/lib/node/step.js +37 -53
  93. package/lib/node/subDerivation.js +49 -51
  94. package/lib/node/subproof.js +44 -53
  95. package/lib/node/substitution/frame.js +123 -0
  96. package/lib/node/substitution/reference.js +123 -0
  97. package/lib/node/substitution/statement.js +123 -0
  98. package/lib/node/substitution/term.js +123 -0
  99. package/lib/node/supposition.js +23 -53
  100. package/lib/node/term.js +41 -53
  101. package/lib/node/theorem.js +6 -52
  102. package/lib/node/topLevelAssertion.js +66 -54
  103. package/lib/node/topLevelMetaAssertion.js +45 -54
  104. package/lib/node/type.js +14 -55
  105. package/lib/{node.js → node/types.js} +22 -24
  106. package/lib/node/variable.js +14 -55
  107. package/lib/nominal/parser.js +3 -3
  108. package/lib/nonTerminalNodeMap.js +14 -4
  109. package/lib/ruleNames.js +42 -2
  110. package/lib/substitution/frame.js +5 -7
  111. package/lib/substitution/reference.js +5 -7
  112. package/lib/substitution/term.js +5 -7
  113. package/lib/unifier/metaLevel.js +4 -4
  114. package/lib/utilities/brackets.js +5 -5
  115. package/lib/utilities/json.js +18 -1
  116. package/lib/utilities/node.js +1 -37
  117. package/lib/utilities/subproof.js +13 -4
  118. package/lib/utilities/type.js +16 -4
  119. package/lib/verifier/topLevel.js +6 -6
  120. package/package.json +2 -2
  121. package/src/constants.js +1 -0
  122. package/src/context/file.js +2 -2
  123. package/src/dom/assertion/contained.js +12 -34
  124. package/src/dom/assertion/defined.js +9 -30
  125. package/src/dom/assertion/property.js +7 -12
  126. package/src/dom/assertion/satisfies.js +5 -10
  127. package/src/dom/assertion/subproof.js +2 -6
  128. package/src/dom/assertion/type.js +7 -10
  129. package/src/dom/axiom.js +7 -77
  130. package/src/dom/conjecture.js +6 -1
  131. package/src/dom/constructor/bracketed.js +6 -8
  132. package/src/dom/declaration/complexType.js +8 -7
  133. package/src/dom/declaration/constructor.js +6 -7
  134. package/src/dom/declaration/metavariable.js +2 -6
  135. package/src/dom/declaration/type.js +4 -2
  136. package/src/dom/declaration/variable.js +6 -7
  137. package/src/dom/declaration.js +12 -20
  138. package/src/dom/derivation.js +1 -4
  139. package/src/dom/equality.js +13 -17
  140. package/src/dom/frame.js +11 -25
  141. package/src/dom/judgement.js +7 -12
  142. package/src/dom/lemma.js +6 -1
  143. package/src/dom/metaLemma.js +6 -1
  144. package/src/dom/metaType.js +1 -5
  145. package/src/dom/metatheorem.js +6 -1
  146. package/src/dom/metavariable.js +11 -25
  147. package/src/dom/parameter.js +2 -6
  148. package/src/dom/procedureCall.js +5 -14
  149. package/src/dom/proof.js +1 -4
  150. package/src/dom/property.js +21 -78
  151. package/src/dom/propertyRelation.js +16 -22
  152. package/src/dom/reference.js +6 -18
  153. package/src/dom/rule.js +6 -12
  154. package/src/dom/statement.js +26 -46
  155. package/src/dom/step.js +3 -5
  156. package/src/dom/subDerivation.js +1 -4
  157. package/src/dom/subproof.js +8 -12
  158. package/src/dom/term.js +14 -33
  159. package/src/dom/theorem.js +6 -1
  160. package/src/dom/topLevelAssertion.js +30 -25
  161. package/src/dom/topLevelMetaAssertion.js +87 -55
  162. package/src/dom/type.js +11 -37
  163. package/src/dom/variable.js +4 -12
  164. package/src/equivalence.js +3 -6
  165. package/src/mixins/term/verify.js +5 -11
  166. package/src/node/argument.js +16 -0
  167. package/src/node/assertion/contained.js +49 -3
  168. package/src/node/assertion/defined.js +42 -3
  169. package/src/node/assertion/property.js +19 -3
  170. package/src/node/assertion/satisfies.js +19 -3
  171. package/src/node/assertion/subproof.js +12 -3
  172. package/src/node/assertion/type.js +19 -3
  173. package/src/node/axiom.js +3 -3
  174. package/src/node/combinator.js +3 -3
  175. package/src/node/conclusion.js +12 -3
  176. package/src/node/conjecture.js +3 -3
  177. package/src/node/constructor.js +3 -3
  178. package/src/node/declaration/combinator.js +7 -8
  179. package/src/node/declaration/complexType.js +40 -43
  180. package/src/node/declaration/constructor.js +25 -30
  181. package/src/node/declaration/metavariable.js +26 -3
  182. package/src/node/declaration/property.js +17 -23
  183. package/src/node/declaration/type.js +43 -32
  184. package/src/node/declaration/variable.js +19 -37
  185. package/src/node/declaration.js +19 -3
  186. package/src/node/deduction.js +12 -3
  187. package/src/node/derivation.js +15 -3
  188. package/src/node/equality.js +32 -3
  189. package/src/node/error.js +3 -3
  190. package/src/node/frame.js +26 -3
  191. package/src/node/judgement.js +19 -3
  192. package/src/node/label.js +12 -3
  193. package/src/node/labels.js +16 -0
  194. package/src/node/lemma.js +3 -3
  195. package/src/node/metaArgument.js +16 -0
  196. package/src/node/metaLemma.js +3 -3
  197. package/src/node/metaType.js +15 -8
  198. package/src/node/metatheorem.js +3 -3
  199. package/src/node/metavariable.js +32 -9
  200. package/src/node/nonTerminal.js +112 -0
  201. package/src/node/parameter.js +20 -3
  202. package/src/node/parenthesisedLabel.js +16 -0
  203. package/src/node/parenthesisedLabels.js +23 -0
  204. package/src/node/premise.js +19 -3
  205. package/src/node/procedureCall.js +19 -3
  206. package/src/node/proof.js +12 -3
  207. package/src/node/property.js +18 -12
  208. package/src/node/propertyRelation.js +26 -3
  209. package/src/node/reference.js +12 -3
  210. package/src/node/rule.js +40 -3
  211. package/src/node/statement.js +151 -3
  212. package/src/node/step.js +31 -3
  213. package/src/node/subDerivation.js +22 -3
  214. package/src/node/subproof.js +38 -3
  215. package/src/node/substitution/frame.js +23 -0
  216. package/src/node/substitution/reference.js +23 -0
  217. package/src/node/substitution/statement.js +23 -0
  218. package/src/node/substitution/term.js +23 -0
  219. package/src/node/supposition.js +19 -3
  220. package/src/node/term.js +38 -3
  221. package/src/node/theorem.js +3 -3
  222. package/src/node/topLevelAssertion.js +69 -3
  223. package/src/node/topLevelMetaAssertion.js +40 -3
  224. package/src/node/type.js +15 -8
  225. package/src/node/types.js +16 -0
  226. package/src/node/variable.js +15 -8
  227. package/src/nominal/parser.js +1 -1
  228. package/src/nonTerminalNodeMap.js +67 -37
  229. package/src/ruleNames.js +11 -1
  230. package/src/substitution/frame.js +7 -10
  231. package/src/substitution/reference.js +7 -10
  232. package/src/substitution/term.js +7 -9
  233. package/src/unifier/metaLevel.js +2 -3
  234. package/src/utilities/brackets.js +8 -8
  235. package/src/utilities/json.js +19 -0
  236. package/src/utilities/node.js +0 -27
  237. package/src/utilities/subproof.js +22 -6
  238. package/src/utilities/type.js +9 -0
  239. package/src/verifier/topLevel.js +5 -10
  240. package/lib/defaultTerminalNode.js +0 -20
  241. package/lib/mixins/node.js +0 -145
  242. package/src/defaultTerminalNode.js +0 -7
  243. package/src/mixins/node.js +0 -201
  244. package/src/node.js +0 -29
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- export default class CombinatorNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(CombinatorNode, ruleName, childNodes, opacity, precedence); }
5
+ export default class CombinatorNode extends NonTerminalNode {
6
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(CombinatorNode, ruleName, childNodes, opacity, precedence); }
7
7
  }
@@ -1,7 +1,16 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- export default class ConclusionNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(ConclusionNode, ruleName, childNodes, opacity, precedence); }
5
+ import { STATEMENT_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class ConclusionNode extends NonTerminalNode {
8
+ getStatementNode() {
9
+ const ruleName = STATEMENT_RULE_NAME,
10
+ statementNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return statementNode;
13
+ }
14
+
15
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ConclusionNode, ruleName, childNodes, opacity, precedence); }
7
16
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import TopLevelAssertionNode from "../node/topLevelAssertion";
4
4
 
5
- export default class ConjectureNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(ConjectureNode, ruleName, childNodes, opacity, precedence); }
5
+ export default class ConjectureNode extends TopLevelAssertionNode {
6
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return TopLevelAssertionNode.fromRuleNameChildNodesOpacityAndPrecedence(ConjectureNode, ruleName, childNodes, opacity, precedence); }
7
7
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- export default class ConstructorNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(ConstructorNode, ruleName, childNodes, opacity, precedence); }
5
+ export default class ConstructorNode extends NonTerminalNode {
6
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ConstructorNode, ruleName, childNodes, opacity, precedence); }
7
7
  }
@@ -1,17 +1,16 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../../node";
3
+ import NonTerminalNode from "../../node/nonTerminal";
4
4
 
5
- export default class ContainedDeclarationNode extends Node {
6
- getStatementNode() {
7
- const statementNode = this.fromSecondChildNode((secondChildNode) => {
8
- const statementNode = secondChildNode; ///
5
+ import { STATEMENT_RULE_NAME } from "../../ruleNames";
9
6
 
10
- return statementNode;
11
- });
7
+ export default class ContainedDeclarationNode extends NonTerminalNode {
8
+ getStatementNode() {
9
+ const ruleName = STATEMENT_RULE_NAME,
10
+ statementNode = this.getNodeByRuleName(ruleName);
12
11
 
13
12
  return statementNode;
14
13
  }
15
14
 
16
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(ContainedDeclarationNode, ruleName, childNodes, opacity, precedence); }
15
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ContainedDeclarationNode, ruleName, childNodes, opacity, precedence); }
17
16
  }
@@ -1,77 +1,74 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../../node";
3
+ import NonTerminalNode from "../../node/nonTerminal";
4
4
 
5
5
  import { PROVISIONAL } from "../../constants";
6
- import { isNodeTypeNode, isNodePropertyDeclarationNode } from "../../utilities/node";
6
+ import { TYPE_RULE_NAME, TYPES_RULE_NAME, PROPERTY_DECLARATION_RULE_NAME } from "../../ruleNames";
7
7
 
8
- export default class ComplexTypeDeclarationNode extends Node {
9
- getTypeName() {
10
- let typeName;
8
+ export default class ComplexTypeDeclarationNode extends NonTerminalNode {
9
+ isProvisional() {
10
+ let provisional = false;
11
11
 
12
12
  this.someChildNode((childNode) => {
13
- const childNodeTypeNode = isNodeTypeNode(childNode);
13
+ const childNodeTerminalNode = childNode.isTerminalNode();
14
14
 
15
- if (childNodeTypeNode) {
16
- const typeNode = childNode; ///
15
+ if (childNodeTerminalNode) {
16
+ const terminalNode = childNode,
17
+ content = terminalNode.getContent(),
18
+ contentProvisional = (content === PROVISIONAL);
17
19
 
18
- typeName = typeNode.getTypeName();
20
+ if (contentProvisional) {
21
+ provisional = true;
19
22
 
20
- return true;
23
+ return true;
24
+ }
21
25
  }
22
26
  });
23
27
 
24
- return typeName;
28
+ return provisional;
25
29
  }
26
30
 
27
- isProvisional() {
28
- const provisional = this.fromFirstChildNode((firstChildNode) => {
29
- const terminalNode = firstChildNode, ///
30
- content = terminalNode.getContent(),
31
- contentProvisional = (content === PROVISIONAL),
32
- provisional = contentProvisional; ///
31
+ getTypeName() {
32
+ const typeNode = this.getTypeNode(),
33
+ typeName = typeNode.getTypeName();
33
34
 
34
- return provisional;
35
- });
35
+ return typeName;
36
+ }
36
37
 
37
- return provisional;
38
+ getTypeNode() {
39
+ const ruleName = TYPE_RULE_NAME,
40
+ typeNode = this.getNodeByRuleName(ruleName);
41
+
42
+ return typeNode;
38
43
  }
39
44
 
40
- getSuperTypeNodes() {
41
- const typeNodes = this.reduceChildNode((typeNodes, childNode) => {
42
- const childNodeTypeNode = isNodeTypeNode(childNode);
45
+ getTypesNode() {
46
+ const ruleName = TYPES_RULE_NAME,
47
+ typesNode = this.getNodeByRuleName(ruleName);
43
48
 
44
- if (childNodeTypeNode) {
45
- const typeNode = childNode; ///
49
+ return typesNode;
50
+ }
46
51
 
47
- typeNodes.push(typeNode);
48
- }
52
+ getSuperTypeNodes() {
53
+ let superTypeNodes = [];
49
54
 
50
- return typeNodes;
51
- }, []);
55
+ const typesNode = this.getTypesNode();
52
56
 
53
- typeNodes.pop();
57
+ if (typesNode !== null) {
58
+ const typeNodes = typesNode.getTypeNodes();
54
59
 
55
- const superTypeNodes = typeNodes; ///
60
+ superTypeNodes = typeNodes; ///
61
+ }
56
62
 
57
63
  return superTypeNodes;
58
64
  }
59
65
 
60
66
  getPropertyDeclarationNodes() {
61
- const propertyDeclarationNodes = this.reduceChildNode((propertyDeclarationNodes, childNode) => {
62
- const childNodePropertyDeclarationNode = isNodePropertyDeclarationNode(childNode);
63
-
64
- if (childNodePropertyDeclarationNode) {
65
- const propertyDeclarationNode = childNode; ///
66
-
67
- propertyDeclarationNodes.push(propertyDeclarationNode);
68
- }
69
-
70
- return propertyDeclarationNodes;
71
- }, []);
67
+ const ruleName = PROPERTY_DECLARATION_RULE_NAME,
68
+ propertyDeclarationNodes = this.getNodesByRuleName(ruleName);
72
69
 
73
70
  return propertyDeclarationNodes;
74
71
  }
75
72
 
76
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(ComplexTypeDeclarationNode, ruleName, childNodes, opacity, precedence); }
73
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ComplexTypeDeclarationNode, ruleName, childNodes, opacity, precedence); }
77
74
  }
@@ -1,51 +1,46 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../../node";
3
+ import NonTerminalNode from "../../node/nonTerminal";
4
4
 
5
5
  import { PROVISIONALLY } from "../../constants";
6
+ import { TERM_RULE_NAME, TYPE_RULE_NAME } from "../../ruleNames";
6
7
 
7
- export default class ConstructorDeclarationNode extends Node {
8
- getTermNode() {
9
- const termNode = this.fromSecondChildNode((secondChildNode) => {
10
- const termNode = secondChildNode; ///
11
-
12
- return termNode;
13
- });
14
-
15
- return termNode;
16
- }
17
-
18
- getTypeNode() {
19
- const typeNode = this.fromFourthChildNode((fourthChildNode) => {
20
- const typeNode = fourthChildNode; ///
21
-
22
- return typeNode;
23
- }) || null;
24
-
25
- return typeNode;
26
- }
27
-
8
+ export default class ConstructorDeclarationNode extends NonTerminalNode {
28
9
  isProvisional() {
29
- const provisional = this.fromSecondLastChildNode((secondLastChildNode) => {
30
- let provisional = false;
10
+ let provisional = false;
31
11
 
32
- const secondLastChildNodeTerminalNode = secondLastChildNode.isTerminalNode();
12
+ this.someChildNode((childNode) => {
13
+ const childNodeTerminalNode = childNode.isTerminalNode();
33
14
 
34
- if (secondLastChildNodeTerminalNode) {
35
- const terminalNode = secondLastChildNode, ///
15
+ if (childNodeTerminalNode) {
16
+ const terminalNode = childNode,
36
17
  content = terminalNode.getContent(),
37
18
  contentProvisionally = (content === PROVISIONALLY);
38
19
 
39
20
  if (contentProvisionally) {
40
21
  provisional = true;
22
+
23
+ return true;
41
24
  }
42
25
  }
43
-
44
- return provisional;
45
26
  });
46
27
 
47
28
  return provisional;
48
29
  }
49
30
 
50
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(ConstructorDeclarationNode, ruleName, childNodes, opacity, precedence); }
31
+ getTermNode() {
32
+ const ruleName = TERM_RULE_NAME,
33
+ termNode = this.getNodeByRuleName(ruleName);
34
+
35
+ return termNode;
36
+ }
37
+
38
+ getTypeNode() {
39
+ const ruleName = TYPE_RULE_NAME,
40
+ typeNode = this.getNodeByRuleName(ruleName);
41
+
42
+ return typeNode;
43
+ }
44
+
45
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ConstructorDeclarationNode, ruleName, childNodes, opacity, precedence); }
51
46
  }
@@ -1,7 +1,30 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../../node";
3
+ import NonTerminalNode from "../../node/nonTerminal";
4
4
 
5
- export default class MetavariableDeclarationNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(MetavariableDeclarationNode, ruleName, childNodes, opacity, precedence); }
5
+ import { META_TYPE_RULE_NAME, METAVARIABLE_RULE_NAME } from "../../ruleNames";
6
+
7
+ export default class MetavariableDeclarationNode extends NonTerminalNode {
8
+ getTypeNode() {
9
+ const metavariableNode = this.getMetavariableNode(),
10
+ typeNode = metavariableNode.getTypeNode();
11
+
12
+ return typeNode;
13
+ }
14
+
15
+ getMetaTypeNode() {
16
+ const ruleName = META_TYPE_RULE_NAME,
17
+ metaTypeNode = this.getNodeByRuleName(ruleName);
18
+
19
+ return metaTypeNode
20
+ }
21
+
22
+ getMetavariableNode() {
23
+ const ruleName = METAVARIABLE_RULE_NAME,
24
+ metavariableNode = this.getNodeByRuleName(ruleName);
25
+
26
+ return metavariableNode;
27
+ }
28
+
29
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(MetavariableDeclarationNode, ruleName, childNodes, opacity, precedence); }
7
30
  }
@@ -1,36 +1,30 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../../node";
3
+ import NonTerminalNode from "../../node/nonTerminal";
4
4
 
5
- import { isNodePropertyNode } from "../../utilities/node";
5
+ import { TYPE_RULE_NAME, PROPERTY_RULE_NAME } from "../../ruleNames";
6
6
 
7
- export default class PropertyDeclarationNode extends Node {
8
- getTypeNode() {
9
- const typeNode = this.fromSecondLastChildNode((secondLastChildNode) => {
10
- const typeNode = secondLastChildNode;; ///
11
-
12
- return typeNode;
13
- });
7
+ export default class PropertyDeclarationNode extends NonTerminalNode {
8
+ getPropertyName() {
9
+ const propertyNode = this.getPropertyNode(),
10
+ propertyName = propertyNode.getPropertyName();
14
11
 
15
- return typeNode;
12
+ return propertyName;
16
13
  }
17
14
 
18
- getPropertyNames() {
19
- const propertyNames = this.reduceChildNode((propertyNames, childNode) => {
20
- const childNodePropertyNode = isNodePropertyNode(childNode);
21
-
22
- if (childNodePropertyNode) {
23
- const propertyNode = childNode, ///
24
- propertyName = propertyNode.getPropertyName();
15
+ getTypeNode() {
16
+ const ruleName = TYPE_RULE_NAME,
17
+ typeNode = this.getNodeByRuleName(ruleName);
25
18
 
26
- propertyNames.push(propertyName);
27
- }
19
+ return typeNode;
20
+ }
28
21
 
29
- return propertyNames;
30
- }, []);
22
+ getPropertyNode() {
23
+ const ruleName = PROPERTY_RULE_NAME,
24
+ propertyNode = this.getNodeByRuleName(ruleName);
31
25
 
32
- return propertyNames;
26
+ return propertyNode;
33
27
  }
34
28
 
35
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(PropertyDeclarationNode, ruleName, childNodes, opacity, precedence); }
29
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(PropertyDeclarationNode, ruleName, childNodes, opacity, precedence); }
36
30
  }
@@ -1,62 +1,73 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../../node";
3
+ import NonTerminalNode from "../../node/nonTerminal";
4
4
 
5
5
  import { PROVISIONAL } from "../../constants";
6
- import { isNodeTypeNode } from "../../utilities/node";
6
+ import { TYPE_RULE_NAME, TYPES_RULE_NAME } from "../../ruleNames";
7
7
 
8
- export default class TypeDeclarationNode extends Node {
9
- getTypeName() {
10
- let typeName;
8
+ export default class TypeDeclarationNode extends NonTerminalNode {
9
+ isProvisional() {
10
+ let provisional = false;
11
11
 
12
12
  this.someChildNode((childNode) => {
13
- const childNodeTypeNode = isNodeTypeNode(childNode);
13
+ const childNodeTerminalNode = childNode.isTerminalNode();
14
14
 
15
- if (childNodeTypeNode) {
16
- const typeNode = childNode; ///
15
+ if (childNodeTerminalNode) {
16
+ const terminalNode = childNode,
17
+ content = terminalNode.getContent(),
18
+ contentProvisional = (content === PROVISIONAL);
17
19
 
18
- typeName = typeNode.getTypeName();
20
+ if (contentProvisional) {
21
+ provisional = true;
19
22
 
20
- return true;
23
+ return true;
24
+ }
21
25
  }
22
26
  });
23
27
 
24
- return typeName;
28
+ return provisional;
25
29
  }
26
30
 
27
- isProvisional() {
28
- const provisional = this.fromFirstChildNode((firstChildNode) => {
29
- const terminalNode = firstChildNode, ///
30
- content = terminalNode.getContent(),
31
- contentProvisional = (content === PROVISIONAL),
32
- provisional = contentProvisional; ///
31
+ getTypeName() {
32
+ let typeName = null;
33
33
 
34
- return provisional;
35
- });
34
+ const typeNode = this.getTypeNode();
36
35
 
37
- return provisional;
36
+ if (typeNode !== null) {
37
+ typeName = typeNode.getTypeName();
38
+ }
39
+
40
+ return typeName;
38
41
  }
39
42
 
40
- getSuperTypeNodes() {
41
- const typeNodes = this.reduceChildNode((typeNodes, childNode) => {
42
- const childNodeTypeNode = isNodeTypeNode(childNode);
43
+ getTypeNode() {
44
+ const ruleName = TYPE_RULE_NAME,
45
+ typeNode = this.getNodeByRuleName(ruleName);
43
46
 
44
- if (childNodeTypeNode) {
45
- const typeNode = childNode; ///
47
+ return typeNode;
48
+ }
46
49
 
47
- typeNodes.push(typeNode);
48
- }
50
+ getTypesNode() {
51
+ const ruleName = TYPES_RULE_NAME,
52
+ typesNode = this.getNodeByRuleName(ruleName);
53
+
54
+ return typesNode;
55
+ }
56
+
57
+ getSuperTypeNodes() {
58
+ let superTypeNodes = [];
49
59
 
50
- return typeNodes;
51
- }, []);
60
+ const typesNode = this.getTypesNode();
52
61
 
53
- typeNodes.pop();
62
+ if (typesNode !== null) {
63
+ const typeNodes = typesNode.getTypeNodes();
54
64
 
55
- const superTypeNodes = typeNodes; ///
65
+ superTypeNodes = typeNodes; ///
66
+ }
56
67
 
57
68
  return superTypeNodes;
58
69
  }
59
70
 
60
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(TypeDeclarationNode, ruleName, childNodes, opacity, precedence); }
71
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(TypeDeclarationNode, ruleName, childNodes, opacity, precedence); }
61
72
  }
62
73
 
@@ -1,61 +1,43 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../../node";
3
+ import NonTerminalNode from "../../node/nonTerminal";
4
4
 
5
5
  import { PROVISIONALLY } from "../../constants";
6
- import { isNodeTypeNode, isNodeVariableNode } from "../../utilities/node";
7
-
8
- export default class VariableDeclarationNode extends Node {
9
- getTypeNode() {
10
- let typeNode;
11
-
12
- this.someChildNode((childNode) => {
13
- const childNodeTypeNode = isNodeTypeNode(childNode);
14
-
15
- if (childNodeTypeNode) {
16
- typeNode = childNode; ///
17
-
18
- return true;
19
- }
20
- });
21
-
22
- return typeNode;
23
- }
6
+ import { TYPE_RULE_NAME, VARIABLE_RULE_NAME } from "../../ruleNames";
24
7
 
8
+ export default class VariableDeclarationNode extends NonTerminalNode {
25
9
  isProvisional() {
26
- const provisional = this.fromSecondLastChildNode((secondLastChildNode) => {
27
- let provisional = false;
10
+ let provisional = false;
28
11
 
29
- const secondLastChildNodeTerminalNode = secondLastChildNode.isTerminalNode();
12
+ this.someChildNode((childNode) => {
13
+ const childNodeTerminalNode = childNode.isTerminalNode();
30
14
 
31
- if (secondLastChildNodeTerminalNode) {
32
- const terminalNode = secondLastChildNode, ///
15
+ if (childNodeTerminalNode) {
16
+ const terminalNode = childNode, ///
33
17
  content = terminalNode.getContent(),
34
18
  contentProvisionally = (content === PROVISIONALLY);
35
19
 
36
20
  if (contentProvisionally) {
37
21
  provisional = true;
22
+
23
+ return true;
38
24
  }
39
25
  }
40
-
41
- return provisional;
42
26
  });
43
27
 
44
28
  return provisional;
45
29
  }
46
30
 
47
- getVariableNode() {
48
- let variableNode;
49
-
50
- this.someChildNode((childNode) => {
51
- const childNodeVariableNode = isNodeVariableNode(childNode);
31
+ getTypeNode() {
32
+ const ruleName = TYPE_RULE_NAME,
33
+ typeNode = this.getNodeByRuleName(ruleName);
52
34
 
53
- if (childNodeVariableNode) {
54
- variableNode = childNode; ///
35
+ return typeNode;
36
+ }
55
37
 
56
- return true;
57
- }
58
- });
38
+ getVariableNode() {
39
+ const ruleName = VARIABLE_RULE_NAME,
40
+ variableNode = this.getNodeByRuleName(ruleName);
59
41
 
60
42
  return variableNode;
61
43
  }
@@ -67,5 +49,5 @@ export default class VariableDeclarationNode extends Node {
67
49
  return variableName;
68
50
  }
69
51
 
70
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(VariableDeclarationNode, ruleName, childNodes, opacity, precedence); }
52
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(VariableDeclarationNode, ruleName, childNodes, opacity, precedence); }
71
53
  }
@@ -1,7 +1,23 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- export default class DeclarationNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(DeclarationNode, ruleName, childNodes, opacity, precedence); }
5
+ import { STATEMENT_RULE_NAME, METAVARIABLE_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class DeclarationNode extends NonTerminalNode {
8
+ getStatementNode() {
9
+ const ruleName = STATEMENT_RULE_NAME,
10
+ statementNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return statementNode;
13
+ }
14
+
15
+ getMetavariableNode() {
16
+ const ruleName = METAVARIABLE_RULE_NAME,
17
+ metavariableNode = this.getNodeByRuleName(ruleName);
18
+
19
+ return metavariableNode;
20
+ }
21
+
22
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(DeclarationNode, ruleName, childNodes, opacity, precedence); }
7
23
  }
@@ -1,7 +1,16 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- export default class DeductionNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(DeductionNode, ruleName, childNodes, opacity, precedence); }
5
+ import { STATEMENT_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class DeductionNode extends NonTerminalNode {
8
+ getStatementNode() {
9
+ const ruleName = STATEMENT_RULE_NAME,
10
+ statementNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return statementNode;
13
+ }
14
+
15
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(DeductionNode, ruleName, childNodes, opacity, precedence); }
7
16
  }
@@ -1,7 +1,19 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- export default class DerivationNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(DerivationNode, ruleName, childNodes, opacity, precedence); }
5
+ import { STEP_RULE_NAME, SUBPROOF_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class DerivationNode extends NonTerminalNode {
8
+ getStepOrSubproofNodes() {
9
+ const ruleNames = [
10
+ STEP_RULE_NAME,
11
+ SUBPROOF_RULE_NAME,
12
+ ],
13
+ stepOrSubproofNodes = this.getNodesByRuleName(...ruleNames);
14
+
15
+ return stepOrSubproofNodes;
16
+ }
17
+
18
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(DerivationNode, ruleName, childNodes, opacity, precedence); }
7
19
  }