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,36 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import { arrayUtilities } from "necessary";
4
4
 
5
- export default class EqualityNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(EqualityNode, ruleName, childNodes, opacity, precedence); }
5
+ import NonTerminalNode from "../node/nonTerminal";
6
+
7
+ import { TERM_RULE_NAME } from "../ruleNames";
8
+
9
+ const { first, last } = arrayUtilities;
10
+
11
+ export default class EqualityNode extends NonTerminalNode {
12
+ getTermNodes() {
13
+ const ruleName = TERM_RULE_NAME,
14
+ termNodes = this.getNodeByRuleName(ruleName);
15
+
16
+ return termNodes;
17
+ }
18
+
19
+ getLeftTermNode() {
20
+ const termNodes = this.getTermNodes(),
21
+ firstTermNode = first(termNodes),
22
+ leftTermNode = firstTermNode; ///
23
+
24
+ return leftTermNode;
25
+ }
26
+
27
+ getRightTermNode() {
28
+ const termNodes = this.getTermNodes(),
29
+ firstTermNode = last(termNodes),
30
+ rightTermNode = firstTermNode; ///
31
+
32
+ return rightTermNode;
33
+ }
34
+
35
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(EqualityNode, ruleName, childNodes, opacity, precedence); }
7
36
  }
package/src/node/error.js CHANGED
@@ -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 ErrorNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(ErrorNode, ruleName, childNodes, opacity, precedence); }
5
+ export default class ErrorNode extends NonTerminalNode {
6
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ErrorNode, ruleName, childNodes, opacity, precedence); }
7
7
  }
package/src/node/frame.js CHANGED
@@ -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 FrameNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(FrameNode, ruleName, childNodes, opacity, precedence); }
5
+ import { DECLARATION_RULE_NAME, METAVARIABLE_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class FrameNode extends NonTerminalNode {
8
+ getDeclarationNodes() {
9
+ const ruleName = DECLARATION_RULE_NAME,
10
+ declarationNodes = this.getNodesByRuleName(ruleName);
11
+
12
+ return declarationNodes;
13
+ }
14
+
15
+ getMetavariableNodes() {
16
+ const ruleName = METAVARIABLE_RULE_NAME,
17
+ metavariableNodes = this.getNodesByRuleName(ruleName);
18
+
19
+ return metavariableNodes;
20
+ }
21
+
22
+ getSingularMetavariableNode() {
23
+ const ruleName = METAVARIABLE_RULE_NAME,
24
+ singularMetavariableNode = this.getSingularTNodeByRuleName(ruleName);
25
+
26
+ return singularMetavariableNode;
27
+ }
28
+
29
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(FrameNode, ruleName, childNodes, opacity, precedence); }
7
30
  }
@@ -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 JudgementNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(JudgementNode, ruleName, childNodes, opacity, precedence); }
5
+ import { FRAME_RULE_NAME, DECLARATION_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class JudgementNode extends NonTerminalNode {
8
+ getFrameNode() {
9
+ const ruleName = FRAME_RULE_NAME,
10
+ frameNode = this.getNodesByRuleName(ruleName);
11
+
12
+ return frameNode;
13
+ }
14
+
15
+ getDeclarationNodes() {
16
+ const ruleName = DECLARATION_RULE_NAME,
17
+ declarationNodes = this.getNodesByRuleName(ruleName);
18
+
19
+ return declarationNodes;
20
+ }
21
+
22
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(JudgementNode, ruleName, childNodes, opacity, precedence); }
7
23
  }
package/src/node/label.js CHANGED
@@ -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 LabelNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(LabelNode, ruleName, childNodes, opacity, precedence); }
5
+ import { METAVARIABLE_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class LabelNode extends NonTerminalNode {
8
+ getMetavariableNode() {
9
+ const ruleName = METAVARIABLE_RULE_NAME,
10
+ metavariableNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return metavariableNode;
13
+ }
14
+
15
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(LabelNode, ruleName, childNodes, opacity, precedence); }
7
16
  }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ import NonTerminalNode from "../node/nonTerminal";
4
+
5
+ import { LABEL_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class LabelsNode extends NonTerminalNode {
8
+ getLabelNodes() {
9
+ const ruleName = LABEL_RULE_NAME,
10
+ labelNodes = this.getNodesByRuleName(ruleName);
11
+
12
+ return labelNodes;
13
+ }
14
+
15
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(LabelsNode, ruleName, childNodes, opacity, precedence); }
16
+ }
package/src/node/lemma.js CHANGED
@@ -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 LemmaNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(LemmaNode, ruleName, childNodes, opacity, precedence); }
5
+ export default class LemmaNode extends TopLevelAssertionNode {
6
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return TopLevelAssertionNode.fromRuleNameChildNodesOpacityAndPrecedence(LemmaNode, ruleName, childNodes, opacity, precedence); }
7
7
  }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ import NonTerminalNode from "../node/nonTerminal";
4
+
5
+ import { STATEMENT_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class MetaArgumentNode extends NonTerminalNode {
8
+ getSingularStatementNode() {
9
+ const ruleName = STATEMENT_RULE_NAME,
10
+ singularStatementNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return singularStatementNode;
13
+ }
14
+
15
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(MetaArgumentNode, ruleName, childNodes, opacity, precedence); }
16
+ }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import TopLevelMetaAssertionNode from "../node/topLevelMetaAssertion";
4
4
 
5
- export default class MetaLemmaNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(MetaLemmaNode, ruleName, childNodes, opacity, precedence); }
5
+ export default class MetaLemmaNode extends TopLevelMetaAssertionNode {
6
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return TopLevelMetaAssertionNode.fromRuleNameChildNodesOpacityAndPrecedence(MetaLemmaNode, ruleName, childNodes, opacity, precedence); }
7
7
  }
@@ -1,19 +1,26 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- export default class MetaTypeNode extends Node {
5
+ export default class MetaTypeNode extends NonTerminalNode {
6
6
  getMetaTypeName() {
7
- const metaTypeName = this.fromFirstChildNode((firstChildNode) => {
8
- const metaTypeTerminalNode = firstChildNode, ///
9
- content = metaTypeTerminalNode.getContent(),
10
- metaTypeName = content; ///
7
+ let metaTypeName;
11
8
 
12
- return metaTypeName;
9
+ this.someChildNode((childNode) => {
10
+ const childNodeTerminalNode = childNode.isTerminalNode();
11
+
12
+ if (childNodeTerminalNode) {
13
+ const terminalNode = childNode, ///
14
+ content = terminalNode.getContent();
15
+
16
+ metaTypeName = content; ///
17
+
18
+ return true;
19
+ }
13
20
  });
14
21
 
15
22
  return metaTypeName;
16
23
  }
17
24
 
18
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(MetaTypeNode, ruleName, childNodes, opacity, precedence); }
25
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(MetaTypeNode, ruleName, childNodes, opacity, precedence); }
19
26
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import TopLevelMetaAssertionNode from "../node/topLevelMetaAssertion";
4
4
 
5
- export default class MetatheoremNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(MetatheoremNode, ruleName, childNodes, opacity, precedence); }
5
+ export default class MetatheoremNode extends TopLevelMetaAssertionNode {
6
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return TopLevelMetaAssertionNode.fromRuleNameChildNodesOpacityAndPrecedence(MetatheoremNode, ruleName, childNodes, opacity, precedence); }
7
7
  }
@@ -1,19 +1,42 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
+
5
+ import { TERM_RULE_NAME, TYPE_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class MetavariableNode extends NonTerminalNode {
8
+ getTermNode() {
9
+ const ruleName = TERM_RULE_NAME,
10
+ termNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return termNode;
13
+ }
14
+
15
+ getTypeNode() {
16
+ const ruleName = TYPE_RULE_NAME,
17
+ typeNode = this.getNodeByRuleName(ruleName);
18
+
19
+ return typeNode;
20
+ }
4
21
 
5
- export default class MetavariableNode extends Node {
6
22
  getMetavariableName() {
7
- const metavariableName = this.fromFirstChildNode((firstChildNode) => {
8
- const nameTerminalNode = firstChildNode, ///
9
- content = nameTerminalNode.getContent(),
10
- metavariableName = content; ///
23
+ let metaVariableName;
24
+
25
+ this.someChildNode((childNode) => {
26
+ const childNodeTerminalNode = childNode.isTerminalNode();
27
+
28
+ if (childNodeTerminalNode) {
29
+ const terminalNode = childNode, ///
30
+ content = terminalNode.getContent();
31
+
32
+ metaVariableName = content; ///
11
33
 
12
- return metavariableName;
34
+ return true;
35
+ }
13
36
  });
14
37
 
15
- return metavariableName;
38
+ return metaVariableName;
16
39
  }
17
40
 
18
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(MetavariableNode, ruleName, childNodes, opacity, precedence); }
41
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(MetavariableNode, ruleName, childNodes, opacity, precedence); }
19
42
  }
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import { NonTerminalNode as NonTerminalNodeBase } from "occam-parsers";
6
+
7
+ const { first, forwardsFind, backwardsFind } = arrayUtilities;
8
+
9
+ export default class NonTerminalNode extends NonTerminalNodeBase {
10
+ getNodeByRuleName(...ruleNames) {
11
+ const node = this.findChildNode((childNode) => {
12
+ const childNodeNonTerminalNode = childNode.isNonTerminalNode();
13
+
14
+ if (childNodeNonTerminalNode) {
15
+ const nonTerminalNode = childNode, ///
16
+ ruleName = nonTerminalNode.getRuleName(),
17
+ ruleNamesIncludesRuleName = ruleNames.includes(ruleName);
18
+
19
+ if (ruleNamesIncludesRuleName) {
20
+ return true;
21
+ }
22
+ }
23
+ }) || null;
24
+
25
+ return node;
26
+ }
27
+
28
+ getNodesByRuleName(...ruleNames) {
29
+ const nodes = this.filterChildNode((childNode) => {
30
+ const childNodeNonTerminalNode = childNode.isNonTerminalNode();
31
+
32
+ if (childNodeNonTerminalNode) {
33
+ const nonTerminalNode = childNode, ///
34
+ ruleName = nonTerminalNode.getRuleName(),
35
+ ruleNamesIncludesRuleName = ruleNames.includes(ruleName);
36
+
37
+ if (ruleNamesIncludesRuleName) {
38
+ return true;
39
+ }
40
+ }
41
+ });
42
+
43
+ return nodes;
44
+ }
45
+
46
+ getLastNodeByRuleName(...ruleNames) {
47
+ const childNodes = this.getChildNodes(),
48
+ lastNode = backwardsFind(childNodes, (childNode) => {
49
+ const childNodeNonTerminalNode = childNode.isNonTerminalNode();
50
+
51
+ if (childNodeNonTerminalNode) {
52
+ const nonTerminalNode = childNode, ///
53
+ ruleName = nonTerminalNode.getRuleName(),
54
+ ruleNamesIncludesRuleName = ruleNames.includes(ruleName);
55
+
56
+ if (ruleNamesIncludesRuleName) {
57
+ return true;
58
+ }
59
+ }
60
+ }) || null;
61
+
62
+ return lastNode;
63
+ }
64
+
65
+ getFirstNodeByRuleName(...ruleNames) {
66
+ const childNodes = this.getChildNodes(),
67
+ firstNode = forwardsFind(childNodes, (childNode) => {
68
+ const childNodeNonTerminalNode = childNode.isNonTerminalNode();
69
+
70
+ if (childNodeNonTerminalNode) {
71
+ const nonTerminalNode = childNode, ///
72
+ ruleName = nonTerminalNode.getRuleName(),
73
+ ruleNamesIncludesRuleName = ruleNames.includes(ruleName);
74
+
75
+ if (ruleNamesIncludesRuleName) {
76
+ return true;
77
+ }
78
+ }
79
+ }) || null;
80
+
81
+ return firstNode;
82
+ }
83
+
84
+ getSingularTNodeByRuleName(...ruleNames) {
85
+ let singularNode = null;
86
+
87
+ const nodes = this.filterChildNode((childNode) => {
88
+ const childNodeNonTerminalNode = childNode.isNonTerminalNode();
89
+
90
+ if (childNodeNonTerminalNode) {
91
+ const nonTerminalNode = childNode, ///
92
+ ruleName = nonTerminalNode.getRuleName(),
93
+ ruleNamesIncludesRuleName = ruleNames.includes(ruleName);
94
+
95
+ if (ruleNamesIncludesRuleName) {
96
+ return true;
97
+ }
98
+ }
99
+ }),
100
+ nodesLength = nodes.length;
101
+
102
+ if (nodesLength === 1) {
103
+ const firstNode = first(nodes);
104
+
105
+ singularNode = firstNode; ///
106
+ }
107
+
108
+ return singularNode;
109
+ }
110
+
111
+ static fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence) { return NonTerminalNodeBase.fromRuleNameChildNodesOpacityAndPrecedence(Class, ruleName, childNodes, opacity, precedence); }
112
+ }
@@ -1,7 +1,24 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- export default class ParameterNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(ParameterNode, ruleName, childNodes, opacity, precedence); }
5
+ export default class ParameterNode extends NonTerminalNode {
6
+ getParameterName() {
7
+ let parameterName;
8
+
9
+ this.someChildNode((childNode, index) => {
10
+ const nameTerminalNode = childNode, ///
11
+ content = nameTerminalNode.getContent();
12
+
13
+ parameterName = content; ///
14
+
15
+ if (index === 0) {
16
+ return true;
17
+ }
18
+ });
19
+
20
+ return parameterName;
21
+ }
22
+
23
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ParameterNode, ruleName, childNodes, opacity, precedence); }
7
24
  }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ import NonTerminalNode from "../node/nonTerminal";
4
+
5
+ import { LABEL_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class ParenthesisedLabelNode extends NonTerminalNode {
8
+ getLabelNode() {
9
+ const ruleName = LABEL_RULE_NAME,
10
+ labelNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return labelNode;
13
+ }
14
+
15
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ParenthesisedLabelNode, ruleName, childNodes, opacity, precedence); }
16
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ import NonTerminalNode from "../node/nonTerminal";
4
+
5
+ import { LABELS_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class ParenthesisedLabelsNode extends NonTerminalNode {
8
+ getLabelNodes() {
9
+ const labelsNode = this.getLabelsNode(),
10
+ labelNodes = labelsNode.getLabelNodes();
11
+
12
+ return labelNodes;
13
+ }
14
+
15
+ getLabelsNode() {
16
+ const ruleName = LABELS_RULE_NAME,
17
+ labelsNode = this.getNodeByRuleName(ruleName);
18
+
19
+ return labelsNode;
20
+ }
21
+
22
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ParenthesisedLabelsNode, ruleName, childNodes, opacity, precedence); }
23
+ }
@@ -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 PremiseNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(PremiseNode, ruleName, childNodes, opacity, precedence); }
5
+ import { STATEMENT_RULE_NAME, PROCEDURE_CALL_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class PremiseNode extends NonTerminalNode {
8
+ getStatementNode() {
9
+ const ruleName = STATEMENT_RULE_NAME,
10
+ statementNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return statementNode;
13
+ }
14
+
15
+ getProcedureCallNode() {
16
+ const ruleName = PROCEDURE_CALL_RULE_NAME,
17
+ procedureCallNode = this.getNodeByRuleName(ruleName);
18
+
19
+ return procedureCallNode;
20
+ }
21
+
22
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(PremiseNode, ruleName, childNodes, opacity, precedence); }
7
23
  }
@@ -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 ProcedureCallNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(ProcedureCallNode, ruleName, childNodes, opacity, precedence); }
5
+ import { REFERENCE_RULE_NAME, PARAMETER_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class ProcedureCallNode extends NonTerminalNode {
8
+ getReferenceNode() {
9
+ const ruleName = REFERENCE_RULE_NAME,
10
+ referenceNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return referenceNode;
13
+ }
14
+
15
+ getParameterNodes() {
16
+ const ruleName = PARAMETER_RULE_NAME,
17
+ parameterNodes = this.getNodesByRuleName(ruleName);
18
+
19
+ return parameterNodes;
20
+ }
21
+
22
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ProcedureCallNode, ruleName, childNodes, opacity, precedence); }
7
23
  }
package/src/node/proof.js CHANGED
@@ -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 ProofNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(ProofNode, ruleName, childNodes, opacity, precedence); }
5
+ import { DERIVATION_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class ProofNode extends NonTerminalNode {
8
+ getDerivationNode() {
9
+ const ruleName = DERIVATION_RULE_NAME,
10
+ derivationNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return derivationNode;
13
+ }
14
+
15
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ProofNode, ruleName, childNodes, opacity, precedence); }
7
16
  }
@@ -1,22 +1,28 @@
1
1
  "use strict";
2
2
 
3
- import Node from "../node";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- export default class PropertyNode extends Node {
5
+ import { SINGLE_SPACE } from "../constants";
6
+
7
+ export default class PropertyNode extends NonTerminalNode {
6
8
  getPropertyName() {
7
- const propertyName = this.reduceChildNode((propertyName, firstChildNode) => {
8
- const nameTerminalNode = firstChildNode, ///
9
- content = nameTerminalNode.getContent();
9
+ const names = this.getNames(),
10
+ propertyName = names.join(SINGLE_SPACE);
10
11
 
11
- propertyName = (propertyName !== null) ?
12
- `${propertyName} ${content}` :
13
- content; ///
12
+ return propertyName;
13
+ }
14
14
 
15
- return propertyName;
16
- }, null);
15
+ getNames() {
16
+ const names = this.mapChildNode((childNode) => {
17
+ const terminalNode = childNode, ///
18
+ content = terminalNode.getContent(),
19
+ name = content; //
17
20
 
18
- return propertyName;
21
+ return name;
22
+ });
23
+
24
+ return names;
19
25
  }
20
26
 
21
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(PropertyNode, ruleName, childNodes, opacity, precedence); }
27
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(PropertyNode, ruleName, childNodes, opacity, precedence); }
22
28
  }
@@ -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 PropertyRelationNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(PropertyRelationNode, ruleName, childNodes, opacity, precedence); }
5
+ import { TERM_RULE_NAME, PROPERTY_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class PropertyRelationNode extends NonTerminalNode {
8
+ getTermNode() {
9
+ const ruleName = TERM_RULE_NAME,
10
+ termNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return termNode;
13
+ }
14
+
15
+ getPropertyNode() {
16
+ const ruleName = PROPERTY_RULE_NAME,
17
+ propertyNode = this.getNodeByRuleName(ruleName);
18
+
19
+ return propertyNode;
20
+ }
21
+
22
+ getPropertyName() {
23
+ const propertyNode = this.getPropertyNode(),
24
+ propertyName = propertyNode.getPropertyName();
25
+
26
+ return propertyName;
27
+ }
28
+
29
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(PropertyRelationNode, ruleName, childNodes, opacity, precedence); }
7
30
  }
@@ -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 ReferenceNode extends Node {
6
- static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return Node.fromRuleNameChildNodesOpacityAndPrecedence(ReferenceNode, ruleName, childNodes, opacity, precedence); }
5
+ import { METAVARIABLE_RULE_NAME } from "../ruleNames";
6
+
7
+ export default class ReferenceNode extends NonTerminalNode {
8
+ getMetavariableNode() {
9
+ const ruleName = METAVARIABLE_RULE_NAME,
10
+ metavariableNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return metavariableNode;
13
+ }
14
+
15
+ static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ReferenceNode, ruleName, childNodes, opacity, precedence); }
7
16
  }