occam-furtle 2.0.297 → 2.0.301

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.
@@ -2,6 +2,37 @@
2
2
 
3
3
  import AssignmentsNode from "../../node/assignment";
4
4
 
5
+ import { TYPE_TOKEN_TYPE } from "../../tokenTypes";
6
+ import { VARIABLE_ASSIGNMENT_RULE_NAME } from "../../ruleNames";
7
+
5
8
  export default class VariableAssignmentsNode extends AssignmentsNode {
9
+ getType() {
10
+ let type = null;
11
+
12
+ this.someChildNode((childNode, index) => {
13
+ const terminalNode = childNode, ///
14
+ terminalNodeType = terminalNode.getType();
15
+
16
+ if (terminalNodeType === TYPE_TOKEN_TYPE) {
17
+ const content = terminalNode.getContent();
18
+
19
+ type = content; ///
20
+ }
21
+
22
+ if (index === 0) {
23
+ return true;
24
+ }
25
+ });
26
+
27
+ return type;
28
+ }
29
+
30
+ getVariableAssignmentNodes() {
31
+ const ruleName = VARIABLE_ASSIGNMENT_RULE_NAME,
32
+ variableAssingnmentNodss = this.getNodesByRuleName(ruleName);
33
+
34
+ return variableAssingnmentNodss;
35
+ }
36
+
6
37
  static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return AssignmentsNode.fromRuleNameChildNodesOpacityAndPrecedence(VariableAssignmentsNode, ruleName, childNodes, opacity, precedence); }
7
38
  }
package/src/node/step.js CHANGED
@@ -2,6 +2,29 @@
2
2
 
3
3
  import NonTerminalNode from "../nonTerminalNode";
4
4
 
5
+ import { ARRAY_ASSIGNMENT_RULE_NAME, OBJECT_ASSIGNMENT_RULE_NAME, VARIABLE_ASSIGNMENTS_RULE_NAME } from "../ruleNames"
6
+
5
7
  export default class StepNode extends NonTerminalNode {
8
+ getArrayAssignmentNode() {
9
+ const ruleName = ARRAY_ASSIGNMENT_RULE_NAME,
10
+ arrayAssignmentNode = this.getNodeByRuleName(ruleName);
11
+
12
+ return arrayAssignmentNode;
13
+ }
14
+
15
+ getObjectAssignmentNode() {
16
+ const ruleName = OBJECT_ASSIGNMENT_RULE_NAME,
17
+ objectAssignmentNode = this.getNodeByRuleName(ruleName);
18
+
19
+ return objectAssignmentNode;
20
+ }
21
+
22
+ getVariableAssignmentsNode() {
23
+ const ruleName = VARIABLE_ASSIGNMENTS_RULE_NAME,
24
+ variableAssignmentsNode = this.getNodeByRuleName(ruleName);
25
+
26
+ return variableAssignmentsNode;
27
+ }
28
+
6
29
  static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(StepNode, ruleName, childNodes, opacity, precedence); }
7
30
  }
@@ -4,6 +4,8 @@ import { nodeQuery } from "../utilities/query";
4
4
 
5
5
  import elements from "../elements";
6
6
 
7
+ import { procedureDeclarationFromProcedureDeclarationNode } from "../utilities/element";
8
+
7
9
  const nonTerminalNodeQuery = nodeQuery("/*");
8
10
 
9
11
  const errorNodeQuery = nodeQuery("/error"),
@@ -128,8 +130,7 @@ class TopLevelPass extends Pass {
128
130
  run: (procedureDeclarationNode, context) => {
129
131
  let success = false;
130
132
 
131
- const { ProcedureDeclaration } = elements,
132
- procedureDeclaration = ProcedureDeclaration.fromProcedureDeclarationNode(procedureDeclarationNode, context),
133
+ const procedureDeclaration = procedureDeclarationFromProcedureDeclarationNode(procedureDeclarationNode, context),
133
134
  procedureDeclarationVerifies = procedureDeclaration.verify(context);
134
135
 
135
136
  if (procedureDeclarationVerifies) {
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ export const TYPE_TOKEN_TYPE = "type";
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+
3
+ import elements from "../elements";
4
+
5
+ import { procedureDeclarationStringFromProcedure,
6
+ arrayAssignmentStringFromVariableAndParameters,
7
+ variableAssignmentStringFromExpressionAndVariable,
8
+ objectAssignmentStringFromVariableAndNamedParameters,
9
+ varaibleAssignmentsStringFromVariableAssignmentsArray } from "../utilities/string";
10
+
11
+ export function arrayAssignmentFromArrayAssignmentNode(arrayAssignmentNode, context) {
12
+ const { Variable, Parameters, ArrayAssignment } = elements,
13
+ parameters = Parameters.fromArrayAssignmentNode(arrayAssignmentNode, context),
14
+ variable = Variable.fromArrayAssignmentNode(arrayAssignmentNode, context),
15
+ arrayAssignmentString = arrayAssignmentStringFromVariableAndParameters(variable, parameters),
16
+ string = arrayAssignmentString, ///
17
+ arrayAssignment = new ArrayAssignment(string, variable, parameters);
18
+
19
+ return arrayAssignment;
20
+ }
21
+
22
+ export function objectAssignmentFromObjectAssignmentNode(objectAssignmentNode, context) {
23
+ const { Variable, NamedParameters, ObjectAssigment } = elements,
24
+ namedParameters = NamedParameters.fromObjectAssignmentNode(objectAssignmentNode, context),
25
+ variable = Variable.fromObjectAssignmentNode(objectAssignmentNode, context),
26
+ objectAssignmentString = objectAssignmentStringFromVariableAndNamedParameters(variable, namedParameters, context),
27
+ string = objectAssignmentString, ///
28
+ objectAssignment = new ObjectAssigment(string, variable, namedParameters);
29
+
30
+ return objectAssignment;
31
+ }
32
+
33
+ export function variableAssignmentsFromVariableAssignmentsNode(variableAssignmentsNode, context) {
34
+ const { VariableAssignments } = elements,
35
+ variableAssignmentsArray = variableAssignmentsArrayFromVariableAssignmentsNode(variableAssignmentsNode, context),
36
+ variableAssignmentsString = varaibleAssignmentsStringFromVariableAssignmentsArray(variableAssignmentsArray, context),
37
+ string = variableAssignmentsString, ///
38
+ array = variableAssignmentsArray, ///
39
+ variableAssignments = new VariableAssignments(string, array);
40
+
41
+ return variableAssignments;
42
+ }
43
+
44
+ export function arrayAssignmentFromStepNode(stepNode, context) {
45
+ let arrayAssignment = null;
46
+
47
+ const arrayAssignmentNode = stepNode.getArrayAssignmentNode();
48
+
49
+ if (arrayAssignmentNode !== null) {
50
+ arrayAssignment = arrayAssignmentFromArrayAssignmentNode(arrayAssignmentNode, context);
51
+ }
52
+
53
+ return arrayAssignment;
54
+ }
55
+
56
+ export function objectAssignmentFromStepNode(stepNode, context) {
57
+ let objectAssignment = null;
58
+
59
+ const objectAssignmentNode = stepNode.getObjectAssignmentNode();
60
+
61
+ if (objectAssignmentNode !== null) {
62
+ objectAssignment = objectAssignmentFromObjectAssignmentNode(objectAssignmentNode, context);
63
+ }
64
+
65
+ return objectAssignment;
66
+ }
67
+
68
+ export function variableAssignmentsFromStepNode(stepNode, context) {
69
+ let variableAssignments = null;
70
+
71
+ const variableAssignmentsNode = stepNode.getVariableAssignmentsNode();
72
+
73
+ if (variableAssignmentsNode !== null) {
74
+ variableAssignments = variableAssignmentsFromVariableAssignmentsNode(variableAssignmentsNode, context);
75
+ }
76
+
77
+ return variableAssignments;
78
+ }
79
+
80
+ export function procedureDeclarationFromProcedureDeclarationNode(procedureDeclarationNode, context) {
81
+ const { Procedure, ProcedureDeclaration } = elements,
82
+ procedure = Procedure.fromProcedureDeclarationNode(procedureDeclarationNode, context),
83
+ procedureDeclarationString = procedureDeclarationStringFromProcedure(procedure),
84
+ string = procedureDeclarationString, ///
85
+ procedureDeclaration = new ProcedureDeclaration(string, procedure);
86
+
87
+ return procedureDeclaration;
88
+ }
89
+
90
+ export function variableAssignmentsArrayFromVariableAssignmentsNode(variableAssignmentsNode, context) {
91
+ const type = variableAssignmentsNode.getType(),
92
+ variableAssignmentNodes = variableAssignmentsNode.getVariableAssignmentNodes(),
93
+ variableAssignmentsArray = variableAssignmentNodes.map((variableAssignmentNode) => {
94
+ const variableAssignment = variableAssignmentFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context);
95
+
96
+ return variableAssignment;
97
+ });
98
+
99
+ return variableAssignmentsArray;
100
+ }
101
+
102
+ export function variableAssignmentFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context) {
103
+ const { Variable, Expression, VariableAssignment } = elements,
104
+ expression = Expression.fromVariableAssignmentNode(variableAssignmentNode, context),
105
+ variable = Variable.fromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context),
106
+ variableAssignmentString = variableAssignmentStringFromExpressionAndVariable(expression, variable, context),
107
+ string = variableAssignmentString, ///
108
+ assignment = new VariableAssignment(string, variable, expression);
109
+
110
+ return assignment;
111
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ export function procedureDeclarationStringFromProcedure(procedure) {
4
+ const procedureString = procedure.getString(),
5
+ procedureDeclarationString = `${procedureString};`;
6
+
7
+ return procedureDeclarationString;
8
+ }
9
+
10
+ export function arrayAssignmentStringFromVariableAndParameters(variable, parameters) {
11
+ const variableString = variable.getString(),
12
+ parametersString = parameters.getString(),
13
+ arrayAssignmentString = `[ ${parametersString} ] = ${variableString};`;
14
+
15
+ return arrayAssignmentString;
16
+ }
17
+
18
+ export function variableAssignmentStringFromExpressionAndVariable(expression, variable, context) {
19
+ const variableString = variable.getString(),
20
+ expressionString = expression.asString(context),
21
+ variableAssignmentString = `${variableString} = ${expressionString};`;
22
+
23
+ return variableAssignmentString;
24
+ }
25
+
26
+ export function objectAssignmentStringFromVariableAndNamedParameters(variable, namedParameters) {
27
+ const variableString = variable.getString(),
28
+ namedParametersString = namedParameters.getString(),
29
+ objectAssignmentString = `{ ${namedParametersString} } = ${variableString};`;
30
+
31
+ return objectAssignmentString;
32
+ }
33
+
34
+ export function varaibleAssignmentsStringFromVariableAssignmentsArray(variableAssignmentsArray) {
35
+ const variableAssignmentsString = variableAssignmentsArray.reduce((variableAssignmentsString, variableAssignment) => {
36
+ const variableAssignmentString = variableAssignment.getString();
37
+
38
+ variableAssignmentsString = (variableAssignmentsString === null) ?
39
+ variableAssignmentString :
40
+ `${variableAssignmentsString}, ${variableAssignmentString}`;
41
+
42
+ return variableAssignmentsString;
43
+ }, null),
44
+ string = variableAssignmentsString; ///
45
+
46
+ return string;
47
+ }
@@ -3,7 +3,7 @@ Boolean isVariableFree(Node termNode, Node statementNode) {
3
3
 
4
4
  Boolean variableFree = !variableBound;
5
5
 
6
- Return variableFree;
6
+ return variableFree;
7
7
  }
8
8
 
9
9
  Boolean isVariableBound(Node termNode, Node statementNode) {
@@ -11,14 +11,14 @@ Boolean isVariableBound(Node termNode, Node statementNode) {
11
11
 
12
12
  Boolean variableBound =
13
13
 
14
- If (variableIdentitifer != "")
14
+ if (variableIdentitifer != "")
15
15
  variableBoundFromVariableIdentifierAndStatementNode(variableIdentitifer, statementNode)
16
16
 
17
- Else
17
+ else
18
18
  false
19
19
  ;
20
20
 
21
- Return variableBound;
21
+ return variableBound;
22
22
  }
23
23
 
24
24
  String variableIdentitiferFromTermNode(Node termNode) {
@@ -26,21 +26,21 @@ String variableIdentitiferFromTermNode(Node termNode) {
26
26
 
27
27
  String variableIdentitifer =
28
28
 
29
- If (variableIdentifierTerminalNode != null) {
30
- { String content As variableIdentitifer } = variableIdentifierTerminalNode;
29
+ if (variableIdentifierTerminalNode != null) {
30
+ { String content as variableIdentitifer } = variableIdentifierTerminalNode;
31
31
 
32
- Return variableIdentitifer;
32
+ return variableIdentitifer;
33
33
  }
34
34
 
35
- Else
35
+ else
36
36
  ""
37
37
  ;
38
38
 
39
- Return variableIdentitifer;
39
+ return variableIdentitifer;
40
40
  }
41
41
 
42
42
  String boundVariableIdentifierFromStatementNode(Node statementNode) {
43
- { Nodes childNodes As statementChildNodes } = statementNode;
43
+ { Nodes childNodes as statementChildNodes } = statementNode;
44
44
 
45
45
  [ Node firstStatementChildNode ] = statementChildNodes;
46
46
 
@@ -48,14 +48,14 @@ String boundVariableIdentifierFromStatementNode(Node statementNode) {
48
48
 
49
49
  String boundVariableIdentifier =
50
50
 
51
- If (terminal)
51
+ if (terminal)
52
52
  boundVariableIdentifierFromStatementChildNodes(statementChildNodes)
53
53
 
54
- Else
54
+ else
55
55
  ""
56
56
  ;
57
57
 
58
- Return boundVariableIdentifier;
58
+ return boundVariableIdentifier;
59
59
  }
60
60
 
61
61
  String boundVariableIdentifierFromStatementChildNodes(Nodes statementChildNodes) {
@@ -65,18 +65,18 @@ String boundVariableIdentifierFromStatementChildNodes(Nodes statementChildNodes)
65
65
 
66
66
  String boundVariableIdentifier =
67
67
 
68
- If ((content == "∀") || (content == "∃")) {
68
+ if ((content == "∀") || (content == "∃")) {
69
69
  [ _, Node argumentNode ] = statementChildNodes;
70
70
 
71
71
  String boundVariableIdentifier = boundVariableIdentifierFromArgumentNode(argumentNode);
72
72
 
73
- Return boundVariableIdentifier;
73
+ return boundVariableIdentifier;
74
74
  }
75
- Else
75
+ else
76
76
  ""
77
77
  ;
78
78
 
79
- Return boundVariableIdentifier;
79
+ return boundVariableIdentifier;
80
80
  }
81
81
 
82
82
  String boundVariableIdentifierFromArgumentNode(Node argumentNode) {
@@ -84,29 +84,29 @@ String boundVariableIdentifierFromArgumentNode(Node argumentNode) {
84
84
 
85
85
  String boundVariableIdentifier =
86
86
 
87
- If (boundVariableIdentityTerminalNode != null) {
88
- { String content As boundVariableIdentifier } = boundVariableIdentityTerminalNode;
87
+ if (boundVariableIdentityTerminalNode != null) {
88
+ { String content as boundVariableIdentifier } = boundVariableIdentityTerminalNode;
89
89
 
90
- Return boundVariableIdentifier;
90
+ return boundVariableIdentifier;
91
91
  }
92
92
 
93
- Else
93
+ else
94
94
  ""
95
95
  ;
96
96
 
97
- Return boundVariableIdentifier;
97
+ return boundVariableIdentifier;
98
98
  }
99
99
 
100
100
  Boolean variableBoundFromVariableIdentifierAndStatementNode(String variableIdentitifer, Node statementNode) {
101
101
  Nodes statementNodes = nodesQuery(statementNode, "//statement");
102
102
 
103
- Boolean variableBound = Some(statementNodes, Boolean (Node statementNode) {
103
+ Boolean variableBound = some(statementNodes, Boolean (Node statementNode) {
104
104
  String boundVariableIdentifier = boundVariableIdentifierFromStatementNode(statementNode);
105
105
 
106
106
  Boolean variableBound = (boundVariableIdentifier == variableIdentitifer);
107
107
 
108
- Return variableBound;
108
+ return variableBound;
109
109
  });
110
110
 
111
- Return variableBound;
111
+ return variableBound;
112
112
  }