occam-verify-cli 1.0.192 → 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 (165) hide show
  1. package/lib/context/file.js +3 -3
  2. package/lib/dom/assertion/contained.js +12 -24
  3. package/lib/dom/assertion/defined.js +9 -21
  4. package/lib/dom/assertion/property.js +7 -7
  5. package/lib/dom/assertion/satisfies.js +6 -8
  6. package/lib/dom/declaration/complexType.js +3 -3
  7. package/lib/dom/declaration/constructor.js +6 -6
  8. package/lib/dom/declaration/variable.js +6 -6
  9. package/lib/dom/declaration.js +13 -13
  10. package/lib/dom/frame.js +7 -7
  11. package/lib/dom/judgement.js +7 -7
  12. package/lib/dom/propertyRelation.js +7 -7
  13. package/lib/dom/term.js +1 -3
  14. package/lib/dom/topLevelMetaAssertion.js +77 -131
  15. package/lib/dom/type.js +2 -2
  16. package/lib/equivalence.js +4 -6
  17. package/lib/mixins/term/verify.js +4 -8
  18. package/lib/node/argument.js +116 -0
  19. package/lib/node/assertion/contained.js +31 -23
  20. package/lib/node/assertion/defined.js +30 -17
  21. package/lib/node/assertion/property.js +14 -19
  22. package/lib/node/assertion/satisfies.js +20 -13
  23. package/lib/node/assertion/subproof.js +11 -11
  24. package/lib/node/assertion/type.js +12 -17
  25. package/lib/node/combinator.js +9 -4
  26. package/lib/node/conclusion.js +11 -11
  27. package/lib/node/constructor.js +9 -4
  28. package/lib/node/declaration/combinator.js +11 -11
  29. package/lib/node/declaration/complexType.js +38 -34
  30. package/lib/node/declaration/constructor.js +24 -29
  31. package/lib/node/declaration/metavariable.js +12 -17
  32. package/lib/node/declaration/property.js +19 -24
  33. package/lib/node/declaration/type.js +41 -28
  34. package/lib/node/declaration/variable.js +12 -17
  35. package/lib/node/declaration.js +12 -17
  36. package/lib/node/deduction.js +11 -11
  37. package/lib/node/derivation.js +39 -11
  38. package/lib/node/equality.js +21 -18
  39. package/lib/node/error.js +9 -4
  40. package/lib/node/frame.js +13 -30
  41. package/lib/node/judgement.js +15 -20
  42. package/lib/node/label.js +11 -11
  43. package/lib/node/labels.js +11 -11
  44. package/lib/node/metaArgument.js +116 -0
  45. package/lib/node/metaType.js +9 -8
  46. package/lib/node/metavariable.js +12 -17
  47. package/lib/node/nonTerminal.js +200 -0
  48. package/lib/node/parameter.js +9 -4
  49. package/lib/node/parenthesisedLabel.js +116 -0
  50. package/lib/node/parenthesisedLabels.js +11 -11
  51. package/lib/node/premise.js +12 -17
  52. package/lib/node/procedureCall.js +12 -17
  53. package/lib/node/proof.js +11 -11
  54. package/lib/node/property.js +9 -4
  55. package/lib/node/propertyRelation.js +12 -17
  56. package/lib/node/reference.js +11 -11
  57. package/lib/node/rule.js +44 -7
  58. package/lib/node/statement.js +92 -53
  59. package/lib/node/step.js +12 -17
  60. package/lib/node/subDerivation.js +46 -11
  61. package/lib/node/subproof.js +19 -17
  62. package/lib/node/substitution/frame.js +123 -0
  63. package/lib/node/substitution/reference.js +123 -0
  64. package/lib/node/substitution/statement.js +123 -0
  65. package/lib/node/substitution/term.js +123 -0
  66. package/lib/node/supposition.js +12 -17
  67. package/lib/node/term.js +22 -33
  68. package/lib/node/topLevelAssertion.js +14 -29
  69. package/lib/node/topLevelMetaAssertion.js +26 -41
  70. package/lib/node/type.js +9 -4
  71. package/lib/node/types.js +116 -0
  72. package/lib/node/variable.js +9 -4
  73. package/lib/nonTerminalNodeMap.js +11 -3
  74. package/lib/ruleNames.js +33 -1
  75. package/lib/substitution/frame.js +5 -7
  76. package/lib/substitution/reference.js +5 -7
  77. package/lib/substitution/term.js +5 -7
  78. package/lib/unifier/metaLevel.js +4 -4
  79. package/lib/utilities/brackets.js +5 -5
  80. package/lib/utilities/json.js +18 -1
  81. package/lib/utilities/node.js +1 -313
  82. package/lib/utilities/subproof.js +13 -4
  83. package/package.json +1 -1
  84. package/src/context/file.js +2 -2
  85. package/src/dom/assertion/contained.js +12 -34
  86. package/src/dom/assertion/defined.js +9 -30
  87. package/src/dom/assertion/property.js +6 -8
  88. package/src/dom/assertion/satisfies.js +5 -10
  89. package/src/dom/declaration/complexType.js +2 -2
  90. package/src/dom/declaration/constructor.js +6 -7
  91. package/src/dom/declaration/variable.js +6 -7
  92. package/src/dom/declaration.js +11 -15
  93. package/src/dom/frame.js +4 -6
  94. package/src/dom/judgement.js +6 -8
  95. package/src/dom/propertyRelation.js +6 -8
  96. package/src/dom/term.js +0 -3
  97. package/src/dom/topLevelMetaAssertion.js +83 -39
  98. package/src/dom/type.js +2 -2
  99. package/src/equivalence.js +3 -6
  100. package/src/mixins/term/verify.js +5 -11
  101. package/src/node/argument.js +16 -0
  102. package/src/node/assertion/contained.js +30 -22
  103. package/src/node/assertion/defined.js +28 -15
  104. package/src/node/assertion/property.js +7 -17
  105. package/src/node/assertion/satisfies.js +11 -9
  106. package/src/node/assertion/subproof.js +4 -9
  107. package/src/node/assertion/type.js +6 -16
  108. package/src/node/combinator.js +1 -1
  109. package/src/node/conclusion.js +4 -9
  110. package/src/node/constructor.js +1 -1
  111. package/src/node/declaration/combinator.js +4 -9
  112. package/src/node/declaration/complexType.js +31 -35
  113. package/src/node/declaration/constructor.js +16 -26
  114. package/src/node/declaration/metavariable.js +6 -16
  115. package/src/node/declaration/property.js +13 -23
  116. package/src/node/declaration/type.js +35 -29
  117. package/src/node/declaration/variable.js +6 -16
  118. package/src/node/declaration.js +6 -16
  119. package/src/node/deduction.js +4 -9
  120. package/src/node/derivation.js +7 -10
  121. package/src/node/equality.js +19 -18
  122. package/src/node/error.js +1 -1
  123. package/src/node/frame.js +8 -35
  124. package/src/node/judgement.js +8 -18
  125. package/src/node/label.js +4 -9
  126. package/src/node/labels.js +4 -9
  127. package/src/node/metaArgument.js +16 -0
  128. package/src/node/metaType.js +1 -5
  129. package/src/node/metavariable.js +6 -16
  130. package/src/node/nonTerminal.js +112 -0
  131. package/src/node/parameter.js +1 -1
  132. package/src/node/parenthesisedLabel.js +16 -0
  133. package/src/node/parenthesisedLabels.js +5 -10
  134. package/src/node/premise.js +6 -16
  135. package/src/node/procedureCall.js +6 -16
  136. package/src/node/proof.js +4 -9
  137. package/src/node/property.js +1 -1
  138. package/src/node/propertyRelation.js +7 -16
  139. package/src/node/reference.js +4 -9
  140. package/src/node/rule.js +40 -3
  141. package/src/node/statement.js +109 -66
  142. package/src/node/step.js +6 -16
  143. package/src/node/subDerivation.js +14 -10
  144. package/src/node/subproof.js +13 -16
  145. package/src/node/substitution/frame.js +23 -0
  146. package/src/node/substitution/reference.js +23 -0
  147. package/src/node/substitution/statement.js +23 -0
  148. package/src/node/substitution/term.js +23 -0
  149. package/src/node/supposition.js +6 -16
  150. package/src/node/term.js +15 -39
  151. package/src/node/topLevelAssertion.js +13 -33
  152. package/src/node/topLevelMetaAssertion.js +20 -39
  153. package/src/node/type.js +1 -1
  154. package/src/node/types.js +16 -0
  155. package/src/node/variable.js +1 -1
  156. package/src/nonTerminalNodeMap.js +60 -36
  157. package/src/ruleNames.js +8 -0
  158. package/src/substitution/frame.js +7 -10
  159. package/src/substitution/reference.js +7 -10
  160. package/src/substitution/term.js +7 -9
  161. package/src/unifier/metaLevel.js +2 -3
  162. package/src/utilities/brackets.js +8 -8
  163. package/src/utilities/json.js +19 -0
  164. package/src/utilities/node.js +0 -168
  165. package/src/utilities/subproof.js +22 -6
@@ -1,29 +1,11 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
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
8
  export default class TypeDeclarationNode extends NonTerminalNode {
9
- getTypeName() {
10
- let typeName = null;
11
-
12
- this.someChildNode((childNode) => {
13
- const childNodeTypeNode = isNodeTypeNode(childNode);
14
-
15
- if (childNodeTypeNode) {
16
- const typeNode = childNode; ///
17
-
18
- typeName = typeNode.getTypeName();
19
-
20
- return true;
21
- }
22
- });
23
-
24
- return typeName;
25
- }
26
-
27
9
  isProvisional() {
28
10
  let provisional = false;
29
11
 
@@ -31,7 +13,7 @@ export default class TypeDeclarationNode extends NonTerminalNode {
31
13
  const childNodeTerminalNode = childNode.isTerminalNode();
32
14
 
33
15
  if (childNodeTerminalNode) {
34
- const terminalNode = childNode, ///
16
+ const terminalNode = childNode,
35
17
  content = terminalNode.getContent(),
36
18
  contentProvisional = (content === PROVISIONAL);
37
19
 
@@ -46,18 +28,42 @@ export default class TypeDeclarationNode extends NonTerminalNode {
46
28
  return provisional;
47
29
  }
48
30
 
31
+ getTypeName() {
32
+ let typeName = null;
33
+
34
+ const typeNode = this.getTypeNode();
35
+
36
+ if (typeNode !== null) {
37
+ typeName = typeNode.getTypeName();
38
+ }
39
+
40
+ return typeName;
41
+ }
42
+
43
+ getTypeNode() {
44
+ const ruleName = TYPE_RULE_NAME,
45
+ typeNode = this.getNodeByRuleName(ruleName);
46
+
47
+ return typeNode;
48
+ }
49
+
50
+ getTypesNode() {
51
+ const ruleName = TYPES_RULE_NAME,
52
+ typesNode = this.getNodeByRuleName(ruleName);
53
+
54
+ return typesNode;
55
+ }
56
+
49
57
  getSuperTypeNodes() {
50
- const typeNodes = this.filterChildNode((childNode) => {
51
- const childNodeTypeNode = isNodeTypeNode(childNode);
58
+ let superTypeNodes = [];
52
59
 
53
- if (childNodeTypeNode) {
54
- return true;
55
- }
56
- });
60
+ const typesNode = this.getTypesNode();
57
61
 
58
- typeNodes.pop();
62
+ if (typesNode !== null) {
63
+ const typeNodes = typesNode.getTypeNodes();
59
64
 
60
- const superTypeNodes = typeNodes; ///
65
+ superTypeNodes = typeNodes; ///
66
+ }
61
67
 
62
68
  return superTypeNodes;
63
69
  }
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../../node/nonTerminal";
4
4
 
5
5
  import { PROVISIONALLY } from "../../constants";
6
- import { isNodeTypeNode, isNodeVariableNode } from "../../utilities/node";
6
+ import { TYPE_RULE_NAME, VARIABLE_RULE_NAME } from "../../ruleNames";
7
7
 
8
8
  export default class VariableDeclarationNode extends NonTerminalNode {
9
9
  isProvisional() {
@@ -29,25 +29,15 @@ export default class VariableDeclarationNode extends NonTerminalNode {
29
29
  }
30
30
 
31
31
  getTypeNode() {
32
- const typeNode = this.findChildNode((childNode) => {
33
- const childNodeTypeNode = isNodeTypeNode(childNode);
34
-
35
- if (childNodeTypeNode) {
36
- return true;
37
- }
38
- }) || null;
32
+ const ruleName = TYPE_RULE_NAME,
33
+ typeNode = this.getNodeByRuleName(ruleName);
39
34
 
40
35
  return typeNode;
41
36
  }
42
37
 
43
38
  getVariableNode() {
44
- const variableNode = this.findChildNode((childNode) => {
45
- const childNodeVariableNode = isNodeVariableNode(childNode);
46
-
47
- if (childNodeVariableNode) {
48
- return true;
49
- }
50
- }) || null;
39
+ const ruleName = VARIABLE_RULE_NAME,
40
+ variableNode = this.getNodeByRuleName(ruleName);
51
41
 
52
42
  return variableNode;
53
43
  }
@@ -1,30 +1,20 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- import { isNodeStatementNode, isNodeMetavariableNode } from "../utilities/node";
5
+ import { STATEMENT_RULE_NAME, METAVARIABLE_RULE_NAME } from "../ruleNames";
6
6
 
7
7
  export default class DeclarationNode extends NonTerminalNode {
8
8
  getStatementNode() {
9
- const statementNode = this.findChildNode((childNode) => {
10
- const childNodeStatementNode = isNodeStatementNode(childNode);
11
-
12
- if (childNodeStatementNode) {
13
- return true;
14
- }
15
- }) || null;
9
+ const ruleName = STATEMENT_RULE_NAME,
10
+ statementNode = this.getNodeByRuleName(ruleName);
16
11
 
17
12
  return statementNode;
18
13
  }
19
14
 
20
15
  getMetavariableNode() {
21
- const metavariableNode = this.findChildNode((childNode) => {
22
- const childNodeMetavariableNode = isNodeMetavariableNode(childNode);
23
-
24
- if (childNodeMetavariableNode) {
25
- return true;
26
- }
27
- }) || null;
16
+ const ruleName = METAVARIABLE_RULE_NAME,
17
+ metavariableNode = this.getNodeByRuleName(ruleName);
28
18
 
29
19
  return metavariableNode;
30
20
  }
@@ -1,18 +1,13 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- import { isNodeStatementNode } from "../utilities/node";
5
+ import { STATEMENT_RULE_NAME } from "../ruleNames";
6
6
 
7
7
  export default class DeductionNode extends NonTerminalNode {
8
8
  getStatementNode() {
9
- const statementNode = this.findChildNode((childNode) => {
10
- const childNodeStatementNode = isNodeStatementNode(childNode);
11
-
12
- if (childNodeStatementNode) {
13
- return true;
14
- }
15
- }) || null;
9
+ const ruleName = STATEMENT_RULE_NAME,
10
+ statementNode = this.getNodeByRuleName(ruleName);
16
11
 
17
12
  return statementNode;
18
13
  }
@@ -1,19 +1,16 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- import { isNodeStepNode, isNodeSubproofNode } from "../utilities/node";
5
+ import { STEP_RULE_NAME, SUBPROOF_RULE_NAME } from "../ruleNames";
6
6
 
7
7
  export default class DerivationNode extends NonTerminalNode {
8
8
  getStepOrSubproofNodes() {
9
- const stepOrSubproofNodes = this.filterChildNode((childNode) => {
10
- const childNodeStepNode = isNodeStepNode(childNode),
11
- childNodeSubproofNode = isNodeSubproofNode(childNode);
12
-
13
- if (childNodeStepNode || childNodeSubproofNode) {
14
- return true;
15
- }
16
- });
9
+ const ruleNames = [
10
+ STEP_RULE_NAME,
11
+ SUBPROOF_RULE_NAME,
12
+ ],
13
+ stepOrSubproofNodes = this.getNodesByRuleName(...ruleNames);
17
14
 
18
15
  return stepOrSubproofNodes;
19
16
  }
@@ -1,32 +1,33 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import NonTerminalNode from "../node/nonTerminal";
6
+
7
+ import { TERM_RULE_NAME } from "../ruleNames";
8
+
9
+ const { first, last } = arrayUtilities;
4
10
 
5
11
  export default class EqualityNode extends NonTerminalNode {
6
- getLeftTermNode() {
7
- let leftTermNode;
12
+ getTermNodes() {
13
+ const ruleName = TERM_RULE_NAME,
14
+ termNodes = this.getNodeByRuleName(ruleName);
8
15
 
9
- this.someChildNode((childNode, index) => {
10
- if (index === 0) {
11
- leftTermNode = childNode; ///
16
+ return termNodes;
17
+ }
12
18
 
13
- return true;
14
- }
15
- });
19
+ getLeftTermNode() {
20
+ const termNodes = this.getTermNodes(),
21
+ firstTermNode = first(termNodes),
22
+ leftTermNode = firstTermNode; ///
16
23
 
17
24
  return leftTermNode;
18
25
  }
19
26
 
20
27
  getRightTermNode() {
21
- let rightTermNode;
22
-
23
- this.someChildNode((childNode, index) => {
24
- if (index === 2) {
25
- rightTermNode = childNode; ///
26
-
27
- return true;
28
- }
29
- });
28
+ const termNodes = this.getTermNodes(),
29
+ firstTermNode = last(termNodes),
30
+ rightTermNode = firstTermNode; ///
30
31
 
31
32
  return rightTermNode;
32
33
  }
package/src/node/error.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
5
  export default class ErrorNode extends NonTerminalNode {
6
6
  static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ErrorNode, ruleName, childNodes, opacity, precedence); }
package/src/node/frame.js CHANGED
@@ -1,54 +1,27 @@
1
1
  "use strict";
2
2
 
3
- import { arrayUtilities } from "necessary";
4
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../node/nonTerminal";
5
4
 
6
- import { isNodeDeclarationNode, isNodeMetavariableNode } from "../utilities/node";
7
-
8
- const { first } = arrayUtilities;
5
+ import { DECLARATION_RULE_NAME, METAVARIABLE_RULE_NAME } from "../ruleNames";
9
6
 
10
7
  export default class FrameNode extends NonTerminalNode {
11
8
  getDeclarationNodes() {
12
- const declarationNodes = this.filterChildNode((childNode) => {
13
- const childNodeDeclarationNode = isNodeDeclarationNode(childNode);
14
-
15
- if (childNodeDeclarationNode) {
16
- return true;
17
- }
18
- });
9
+ const ruleName = DECLARATION_RULE_NAME,
10
+ declarationNodes = this.getNodesByRuleName(ruleName);
19
11
 
20
12
  return declarationNodes;
21
13
  }
22
14
 
23
15
  getMetavariableNodes() {
24
- const metavariableNodes = this.filterChildNode((childNode) => {
25
- const childNodeMetavariableNode = isNodeMetavariableNode(childNode);
26
-
27
- if (childNodeMetavariableNode) {
28
- return true;
29
- }
30
- });
16
+ const ruleName = METAVARIABLE_RULE_NAME,
17
+ metavariableNodes = this.getNodesByRuleName(ruleName);
31
18
 
32
19
  return metavariableNodes;
33
20
  }
34
21
 
35
22
  getSingularMetavariableNode() {
36
- let singularMetavariableNode = null;
37
-
38
- const metavariableNodes = this.filterChildNode((childNode) => {
39
- const childNodeMetavariableNode = isNodeMetavariableNode(childNode);
40
-
41
- if (!childNodeMetavariableNode) {
42
- return true;
43
- }
44
- }),
45
- metavariableNodesLength = metavariableNodes.length;
46
-
47
- if (metavariableNodesLength === 1) {
48
- const firstMetavariableNode = first(metavariableNodes);
49
-
50
- singularMetavariableNode = firstMetavariableNode; ///
51
- }
23
+ const ruleName = METAVARIABLE_RULE_NAME,
24
+ singularMetavariableNode = this.getSingularTNodeByRuleName(ruleName);
52
25
 
53
26
  return singularMetavariableNode;
54
27
  }
@@ -1,32 +1,22 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- import { isNodeFrameNode, isNodeDeclarationNode } from "../utilities/node";
5
+ import { FRAME_RULE_NAME, DECLARATION_RULE_NAME } from "../ruleNames";
6
6
 
7
7
  export default class JudgementNode extends NonTerminalNode {
8
8
  getFrameNode() {
9
- const frameNode = this.findChildNode((childNode) => {
10
- const childNodeFrameNode = isNodeFrameNode(childNode);
11
-
12
- if (childNodeFrameNode) {
13
- return true;
14
- }
15
- }) || null;
9
+ const ruleName = FRAME_RULE_NAME,
10
+ frameNode = this.getNodesByRuleName(ruleName);
16
11
 
17
12
  return frameNode;
18
13
  }
19
14
 
20
- getDeclarationNode() {
21
- const declarationNode = this.findChildNode((childNode) => {
22
- const childNodeDeclarationNode = isNodeDeclarationNode(childNode);
23
-
24
- if (childNodeDeclarationNode) {
25
- return true;
26
- }
27
- }) || null;
15
+ getDeclarationNodes() {
16
+ const ruleName = DECLARATION_RULE_NAME,
17
+ declarationNodes = this.getNodesByRuleName(ruleName);
28
18
 
29
- return declarationNode;
19
+ return declarationNodes;
30
20
  }
31
21
 
32
22
  static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(JudgementNode, ruleName, childNodes, opacity, precedence); }
package/src/node/label.js CHANGED
@@ -1,18 +1,13 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- import { isNodeMetavariableNode } from "../utilities/node";
5
+ import { METAVARIABLE_RULE_NAME } from "../ruleNames";
6
6
 
7
7
  export default class LabelNode extends NonTerminalNode {
8
8
  getMetavariableNode() {
9
- const metavariableNode = this.findChildNode((childNode) => {
10
- const childNodeMetavariableNode = isNodeMetavariableNode(childNode);
11
-
12
- if (childNodeMetavariableNode) {
13
- return true;
14
- }
15
- }) || null;
9
+ const ruleName = METAVARIABLE_RULE_NAME,
10
+ metavariableNode = this.getNodeByRuleName(ruleName);
16
11
 
17
12
  return metavariableNode;
18
13
  }
@@ -1,18 +1,13 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- import { isNodeLabelNode } from "../utilities/node";
5
+ import { LABEL_RULE_NAME } from "../ruleNames";
6
6
 
7
7
  export default class LabelsNode extends NonTerminalNode {
8
8
  getLabelNodes() {
9
- const labelNodes = this.filterChildNode((childNode) => {
10
- const childNodeLabelNode = isNodeLabelNode(childNode);
11
-
12
- if (childNodeLabelNode) {
13
- return true;
14
- }
15
- });
9
+ const ruleName = LABEL_RULE_NAME,
10
+ labelNodes = this.getNodesByRuleName(ruleName);
16
11
 
17
12
  return labelNodes;
18
13
  }
@@ -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,12 +1,8 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
5
  export default class MetaTypeNode extends NonTerminalNode {
6
- getTypeNode() {
7
-
8
- }
9
-
10
6
  getMetaTypeName() {
11
7
  let metaTypeName;
12
8
 
@@ -1,30 +1,20 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- import { isNodeTermNode, isNodeTypeNode } from "../utilities/node";
5
+ import { TERM_RULE_NAME, TYPE_RULE_NAME } from "../ruleNames";
6
6
 
7
7
  export default class MetavariableNode extends NonTerminalNode {
8
8
  getTermNode() {
9
- const termNode = this.findChildNode((childNode) => {
10
- const childNodeTermNode = isNodeTermNode(childNode);
11
-
12
- if (childNodeTermNode) {
13
- return true;
14
- }
15
- }) || null;
9
+ const ruleName = TERM_RULE_NAME,
10
+ termNode = this.getNodeByRuleName(ruleName);
16
11
 
17
12
  return termNode;
18
13
  }
19
14
 
20
15
  getTypeNode() {
21
- const typeNode = this.findChildNode((childNode) => {
22
- const childNodeTypeNode = isNodeTypeNode(childNode);
23
-
24
- if (childNodeTypeNode) {
25
- return true;
26
- }
27
- }) || null;
16
+ const ruleName = TYPE_RULE_NAME,
17
+ typeNode = this.getNodeByRuleName(ruleName);
28
18
 
29
19
  return typeNode;
30
20
  }
@@ -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,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
5
  export default class ParameterNode extends NonTerminalNode {
6
6
  getParameterName() {
@@ -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
+ }
@@ -1,25 +1,20 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-parsers";
3
+ import NonTerminalNode from "../node/nonTerminal";
4
4
 
5
- import { isNodeLabelsNode } from "../utilities/node";
5
+ import { LABELS_RULE_NAME } from "../ruleNames";
6
6
 
7
7
  export default class ParenthesisedLabelsNode extends NonTerminalNode {
8
8
  getLabelNodes() {
9
9
  const labelsNode = this.getLabelsNode(),
10
- labelNodes = labelsNode.getLabelNodes();
10
+ labelNodes = labelsNode.getLabelNodes();
11
11
 
12
12
  return labelNodes;
13
13
  }
14
14
 
15
15
  getLabelsNode() {
16
- const labelsNode = this.findChildNode((childNode) => {
17
- const childNodeLabelsNode = isNodeLabelsNode(childNode);
18
-
19
- if (childNodeLabelsNode) {
20
- return true;
21
- }
22
- }) || null;
16
+ const ruleName = LABELS_RULE_NAME,
17
+ labelsNode = this.getNodeByRuleName(ruleName);
23
18
 
24
19
  return labelsNode;
25
20
  }