occam-furtle 3.0.521 → 3.0.524

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 (59) hide show
  1. package/lib/element/all.js +126 -0
  2. package/lib/element/assignment/object.js +23 -1
  3. package/lib/element/error.js +3 -3
  4. package/lib/element/every.js +13 -13
  5. package/lib/element/exists.js +39 -0
  6. package/lib/element/expression.js +18 -2
  7. package/lib/element/importStatement.js +3 -2
  8. package/lib/element/procedure.js +2 -1
  9. package/lib/element/procedureCall.js +8 -1
  10. package/lib/element/reduce.js +5 -5
  11. package/lib/element/referenceListLiteral.js +24 -0
  12. package/lib/element/references.js +32 -0
  13. package/lib/element/some.js +7 -7
  14. package/lib/element/terms.js +2 -2
  15. package/lib/element/values.js +16 -3
  16. package/lib/example/furtle/bnf.js +2 -2
  17. package/lib/node/all.js +39 -0
  18. package/lib/node/exists.js +39 -0
  19. package/lib/node/expression.js +9 -1
  20. package/lib/node/references.js +23 -0
  21. package/lib/node/referencesListLiteral.js +27 -0
  22. package/lib/nominalValueProperties.js +34 -18
  23. package/lib/nonTerminalNodeMap.js +10 -2
  24. package/lib/parameterNames.js +5 -1
  25. package/lib/preamble.js +7 -3
  26. package/lib/process/instantiate.js +1 -1
  27. package/lib/ruleNames.js +17 -1
  28. package/lib/utilities/element.js +110 -7
  29. package/lib/utilities/string.js +38 -5
  30. package/package.json +5 -5
  31. package/src/element/all.js +119 -0
  32. package/src/element/assignment/object.js +48 -1
  33. package/src/element/error.js +3 -3
  34. package/src/element/every.js +14 -12
  35. package/src/element/exists.js +42 -0
  36. package/src/element/expression.js +19 -1
  37. package/src/element/importStatement.js +3 -1
  38. package/src/element/procedure.js +2 -0
  39. package/src/element/procedureCall.js +14 -0
  40. package/src/element/reduce.js +4 -4
  41. package/src/element/referenceListLiteral.js +19 -0
  42. package/src/element/references.js +31 -0
  43. package/src/element/some.js +7 -6
  44. package/src/element/terms.js +1 -1
  45. package/src/element/values.js +26 -2
  46. package/src/example/furtle/bnf.js +1 -1
  47. package/src/node/all.js +44 -0
  48. package/src/node/exists.js +44 -0
  49. package/src/node/expression.js +17 -1
  50. package/src/node/references.js +16 -0
  51. package/src/node/referencesListLiteral.js +23 -0
  52. package/src/nominalValueProperties.js +43 -25
  53. package/src/nonTerminalNodeMap.js +15 -3
  54. package/src/parameterNames.js +1 -0
  55. package/src/preamble.js +6 -2
  56. package/src/process/instantiate.js +6 -1
  57. package/src/ruleNames.js +4 -0
  58. package/src/utilities/element.js +147 -14
  59. package/src/utilities/string.js +49 -6
@@ -10,6 +10,8 @@ import { ternaryStringFromTerm,
10
10
  termStringFromProperties,
11
11
  valueStringFromProperties,
12
12
  expressionStringFromProperties,
13
+ allStringFromVariableAndValues,
14
+ referencesStringFromReferencesArray,
13
15
  returnBlockStringFromReturnStatementNode,
14
16
  variableAssignmentStringFromTypeAndVariable,
15
17
  someStringFromVariableAndAnonymousProcedure,
@@ -19,6 +21,23 @@ import { ternaryStringFromTerm,
19
21
  procedureStringFromTypeLabelExportedParametersAndReturnBlock,
20
22
  reduceStringFromVariableInitialExpressionAndAnonymousProcedure } from "../utilities/string";
21
23
 
24
+ export function allFromAllNode(someNode, context) {
25
+ const { All } = elements,
26
+ node = someNode, ///
27
+ values = valuesFromAllNode(someNode, context),
28
+ variable = variableFromAllNode(someNode, context),
29
+ references = referencesFromAllNode(someNode, context),
30
+ allString = allStringFromVariableAndValues(variable, values),
31
+ string = allString, ///
32
+ breakPoint = null;
33
+
34
+ context = null;
35
+
36
+ const all = new All(context, string, node, breakPoint, values, variable, references);
37
+
38
+ return all;
39
+ }
40
+
22
41
  export function someFromSomeNode(someNode, context) {
23
42
  const { Some } = elements,
24
43
  node = someNode, ///
@@ -141,18 +160,21 @@ export function labelFromLabelNode(labelNode, context) {
141
160
  return label;
142
161
  }
143
162
 
144
- export function labelFromReferenceNode(referenceNode, context) {
145
- const { Label } = elements,
146
- node = referenceNode,
147
- string = context.nodeAsString(node),
148
- breakPoint = null,
149
- name = nameFromReferenceNode(referenceNode, context);
163
+ export function existsFromExistsNode(someNode, context) {
164
+ const { Exists } = elements,
165
+ node = someNode, ///
166
+ values = valuesFromExistsNode(someNode, context),
167
+ variable = variableFromExistsNode(someNode, context),
168
+ references = referencesFromExistsNode(someNode, context),
169
+ existsString = existsStringFromVariableAndValues(variable, values),
170
+ string = existsString, ///
171
+ breakPoint = null;
150
172
 
151
173
  context = null;
152
174
 
153
- const label = new Label(context, string, node, breakPoint, name);
175
+ const exists = new Exists(context, string, node, breakPoint, values, variable, references);
154
176
 
155
- return label;
177
+ return exists;
156
178
  }
157
179
 
158
180
  export function valuesFromValuesNode(valuesNode, context) {
@@ -221,6 +243,20 @@ export function ternaryFromTernaryNode(ternaryNode, context) {
221
243
  return ternary;
222
244
  }
223
245
 
246
+ export function labelFromReferenceNode(referenceNode, context) {
247
+ const { Label } = elements,
248
+ node = referenceNode,
249
+ string = context.nodeAsString(node),
250
+ breakPoint = null,
251
+ name = nameFromReferenceNode(referenceNode, context);
252
+
253
+ context = null;
254
+
255
+ const label = new Label(context, string, node, breakPoint, name);
256
+
257
+ return label;
258
+ }
259
+
224
260
  export function containsFromContainsNode(containsNode, context) {
225
261
  const { Contains } = elements,
226
262
  node = containsNode, ///
@@ -453,6 +489,8 @@ export function expressionFromExpressionNode(expressionNode, context) {
453
489
  some = someFromExpressionNode(expressionNode, context),
454
490
  every = everyFromExpressionNode(expressionNode, context),
455
491
  reduce = reduceFromExpressionNode(expressionNode, context),
492
+ all = allFromExpressionNode(expressionNode, context),
493
+ exists = existsFromExpressionNode(expressionNode, context),
456
494
  ternary = ternaryFromExpressionNode(expressionNode, context),
457
495
  nodeQuery = nodeQueryFromExpressionNode(expressionNode, context),
458
496
  nodesQuery = nodesQueryFromExpressionNode(expressionNode, context),
@@ -469,6 +507,8 @@ export function expressionFromExpressionNode(expressionNode, context) {
469
507
  some,
470
508
  every,
471
509
  reduce,
510
+ all,
511
+ exists,
472
512
  ternary,
473
513
  nodeQuery,
474
514
  nodesQuery,
@@ -487,7 +527,7 @@ export function expressionFromExpressionNode(expressionNode, context) {
487
527
 
488
528
  context = null;
489
529
 
490
- const expression = new Expression(context, string, node, breakPoint, term, some, every, reduce, ternary, nodeQuery, nodesQuery, lengthOf, toInteger, tryInteger, contains, endsWith, startsWith, returnBlock, procedureCall);
530
+ const expression = new Expression(context, string, node, breakPoint, term, some, every, reduce, all, exists, ternary, nodeQuery, nodesQuery, lengthOf, toInteger, tryInteger, contains, endsWith, startsWith, returnBlock, procedureCall);
491
531
 
492
532
  return expression;
493
533
  }
@@ -506,6 +546,23 @@ export function tryIntegerFromTryIntegerNode(tryIntegerNode, context) {
506
546
  return tryInteger;
507
547
  }
508
548
 
549
+ export function referencesFromReferencesNode(referencesNode, context) {
550
+ const { References } = elements,
551
+ node = referencesNode, ///
552
+ referenceNodes = referencesNode.getReferenceNodes(),
553
+ referencesArray = referencesArrayFromReferenceNodes(referenceNodes, context),
554
+ referencesString = referencesStringFromReferencesArray(referencesArray),
555
+ string = referencesString, ///
556
+ array = referencesArray, ///
557
+ breakPoint = null;
558
+
559
+ context = null;
560
+
561
+ const references = new References(context, string, node, breakPoint, array);
562
+
563
+ return references;
564
+ }
565
+
509
566
  export function returnBlockFromReturnBlockNode(returnBlockNode, context) {
510
567
  const { ReturnBlock } = elements,
511
568
  node = returnBlockNode, ///
@@ -752,12 +809,26 @@ export function nameFromTypeNode(typeNode, context) {
752
809
  return name;
753
810
  }
754
811
 
812
+ export function valuesFromAllNode(allNode, context) {
813
+ const valuesNode = allNode.getValuesNode(), ///
814
+ values = valuesFromValuesNode(valuesNode, context);
815
+
816
+ return values;
817
+ }
818
+
755
819
  export function nameFromLabelNode(labelNode, context) {
756
820
  const name = labelNode.getName();
757
821
 
758
822
  return name;
759
823
  }
760
824
 
825
+ export function variableFromAllNode(allNode, context) {
826
+ const variableNode = allNode.getVariableNode(), ///
827
+ variable = variableFromVariableNode(variableNode, context);
828
+
829
+ return variable;
830
+ }
831
+
761
832
  export function valueFromReduceNode(reduceNode, context) {
762
833
  const valueNode = reduceNode.getValueNode(),
763
834
  value = valueFromValueNode(valueNode, context);
@@ -790,8 +861,15 @@ export function typeFromBindingNode(bindingNode, context) {
790
861
  return type;
791
862
  }
792
863
 
864
+ export function valuesFromExistsNode(existsNode, context) {
865
+ const valuesNode = existsNode.getValuesNode(), ///
866
+ values = valuesFromValuesNode(valuesNode, context);
867
+
868
+ return values;
869
+ }
870
+
793
871
  export function variableFromSomeNode(someNode, context) {
794
- const variableNode = someNode.getVariableNode(), ///
872
+ const variableNode = someNode.getVariableNode(),
795
873
  variable = variableFromVariableNode(variableNode, context);
796
874
 
797
875
  return variable;
@@ -821,6 +899,13 @@ export function typeFromVariableNode(variableNode, context) {
821
899
  return type;
822
900
  }
823
901
 
902
+ export function referencesFromAllNode(allNode, context) {
903
+ const referencesNode = allNode.getReferencesNode(),
904
+ references = referencesFromReferencesNode(referencesNode, context);
905
+
906
+ return references;
907
+ }
908
+
824
909
  export function typeFromProcedureNode(procedureNode, context) {
825
910
  const typeNode = procedureNode.getTypeNode(),
826
911
  type = typeFromTypeNode(typeNode, context);
@@ -892,6 +977,18 @@ export function variableFromValueNode(valueNode, context) {
892
977
  return variable;
893
978
  }
894
979
 
980
+ export function allFromExpressionNode(expressionNode, context) {
981
+ let all = null;
982
+
983
+ const allNode = expressionNode.getAllNode();
984
+
985
+ if (allNode !== null) {
986
+ all = allFromAllNode(allNode, context);
987
+ }
988
+
989
+ return all;
990
+ }
991
+
895
992
  export function primitiveFromValueNode(valueNode, context) {
896
993
  let primitive = null;
897
994
 
@@ -911,10 +1008,17 @@ export function variableFromReduceNode(reduceNode, context) {
911
1008
  return variable;
912
1009
  }
913
1010
 
1011
+ export function variableFromExistsNode(existsNode, context) {
1012
+ const variableNode = existsNode.getVariableNode(), ///
1013
+ variable = variableFromVariableNode(variableNode, context);
1014
+
1015
+ return variable;
1016
+ }
1017
+
914
1018
  export function queryFromNodeQueryNode(nodeQueryNode, context) {
915
1019
  const string = nodeQueryNode.getString(),
916
- expressionString = string, ///
917
- query = Query.fromExpressionString(expressionString);
1020
+ expressionString = string, ///
1021
+ query = Query.fromExpressionString(expressionString);
918
1022
 
919
1023
  return query;
920
1024
  }
@@ -1019,6 +1123,18 @@ export function termFromNegatedTermNode(negatedTermNode, context) {
1019
1123
  return term;
1020
1124
  }
1021
1125
 
1126
+ export function existsFromExpressionNode(expressionNode, context) {
1127
+ let exists = null;
1128
+
1129
+ const existsNode = expressionNode.getExistsNode();
1130
+
1131
+ if (existsNode !== null) {
1132
+ exists = existsFromExistsNode(existsNode, context);
1133
+ }
1134
+
1135
+ return exists;
1136
+ }
1137
+
1022
1138
  export function argumentTypeFromTypeNode(typeNode, context) {
1023
1139
  let argumentType = null;
1024
1140
 
@@ -1033,9 +1149,16 @@ export function argumentTypeFromTypeNode(typeNode, context) {
1033
1149
  return argumentType;
1034
1150
  }
1035
1151
 
1152
+ export function referencesFromExistsNode(existsNode, context) {
1153
+ const referencesNode = existsNode.getReferencesNode(),
1154
+ references = referencesFromReferencesNode(referencesNode, context);
1155
+
1156
+ return references;
1157
+ }
1158
+
1036
1159
  export function variableFromLengthOfNode(lengthOfNode, context) {
1037
1160
  const variableNode = lengthOfNode.getVariableNode(),
1038
- variable = variableFromVariableNode(variableNode, context);
1161
+ variable = variableFromVariableNode(variableNode, context);
1039
1162
 
1040
1163
  return variable;
1041
1164
  }
@@ -1139,7 +1262,7 @@ export function variableFromToIntegerNode(toIntegerNode, context) {
1139
1262
 
1140
1263
  export function termFromBracketedTermNode(bracketedTermNode, context) {
1141
1264
  const termNode = bracketedTermNode.getTermNode(),
1142
- term = termFromTermNode(termNode, context);
1265
+ term = termFromTermNode(termNode, context);
1143
1266
 
1144
1267
  return term;
1145
1268
  }
@@ -1632,6 +1755,16 @@ export function bindingsArrayFromBindingsNode(bindingsNode, context) {
1632
1755
  return bindingsArray;
1633
1756
  }
1634
1757
 
1758
+ export function referencesArrayFromReferenceNodes(referenceNodes, context) {
1759
+ const referencesArray = referenceNodes.map((referenceNode) => { ///
1760
+ const reference = referenceFromReferenceNode(referenceNode, context);
1761
+
1762
+ return reference;
1763
+ });
1764
+
1765
+ return referencesArray;
1766
+ }
1767
+
1635
1768
  export function parametersArrayFromParametersNode(parametersNode, context) {
1636
1769
  const parameterNodes = parametersNode.getParameterNodes(),
1637
1770
  parametersArray = parameterNodes.map((parameterNode) => { ///
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { EXPORT, EMPTY_STRING } from "../constants";
4
4
  import { stringFromStringLiteral } from "./stringLiteral";
5
+ import {referenceFromReferenceNode} from "./element";
5
6
 
6
7
  export function ternaryStringFromTerm(term) {
7
8
  const termString = term.getString(),
@@ -84,11 +85,14 @@ export function valuesStringFromValuesArray(valuesArray) {
84
85
  return valuesString;
85
86
  }
86
87
 
87
- export function primtiveStringFromNominalValue(nominalValue) {
88
- const string = nominalValue.getString(),
89
- primtiveString = string; ///
88
+ export function allStringFromVariableAndValues(variable, values) {
89
+ const variableString = variable.getString(),
90
+ valuesString = values.getString(),
91
+ allString = (valuesString !== EMPTY_STRING) ?
92
+ `all(${variableString}, ${valuesString})` :
93
+ `all(${variableString})`;
90
94
 
91
- return primtiveString;
95
+ return allString;
92
96
  }
93
97
 
94
98
  export function expressionStringFromProperties(properties) {
@@ -105,6 +109,13 @@ export function expressionStringFromProperties(properties) {
105
109
  return expressionString;
106
110
  }
107
111
 
112
+ export function primtiveStringFromNominalValue(nominalValue) {
113
+ const string = nominalValue.getString(),
114
+ primtiveString = string; ///
115
+
116
+ return primtiveString;
117
+ }
118
+
108
119
  export function primtiveStringFromStringLiteral(stringLiteral) {
109
120
  const string = stringFromStringLiteral(stringLiteral),
110
121
  primtiveString = string; ///
@@ -119,8 +130,8 @@ export function primtiveStringFromNominalValues(nominalValues) {
119
130
  const nominalValueString = nominalValue.getString();
120
131
 
121
132
  primitiveString = (primitiveString !== null) ?
122
- `${primitiveString}, ${nominalValueString}` :
123
- nominalValueString; ///
133
+ `${primitiveString}, '${nominalValueString}'` :
134
+ `'${nominalValueString}'`;
124
135
 
125
136
  return primitiveString;
126
137
  }, null);
@@ -130,6 +141,30 @@ export function primtiveStringFromNominalValues(nominalValues) {
130
141
  return primtiveString;
131
142
  }
132
143
 
144
+ export function existsStringFromVariableAndValues(variable, values) {
145
+ const variableString = variable.getString(),
146
+ valuesString = values.getString(),
147
+ existsString = (valuesString !== EMPTY_STRING) ?
148
+ `exists(${variableString}, ${valuesString})` :
149
+ `exists(${variableString})`;
150
+
151
+ return existsString;
152
+ }
153
+
154
+ export function referencesStringFromReferencesArray(referencesArray) {
155
+ const referencesString = referencesArray.reduce((referencesString, reference) => {
156
+ const referenceString = reference.getString();
157
+
158
+ referencesString = (referencesString === null) ?
159
+ referenceString :
160
+ `${referencesString}, ${referenceString}`;
161
+
162
+ return referencesString;
163
+ }, null); ///
164
+
165
+ return referencesString;
166
+ }
167
+
133
168
  export function returnBlockStringFromReturnStatementNode(returnStatement) {
134
169
  const returnStatementString = returnStatement.getString(),
135
170
  returnBlockString = `{ ... ${returnStatementString} }`;
@@ -157,6 +192,14 @@ export function typeStringFromTypeNameAndArgumentTypeName(typeName, argumentType
157
192
  return typeString;
158
193
  }
159
194
 
195
+ export function procedureCallStringFromReferenceAndValues(reference, values) {
196
+ const valuesString = values.getString(),
197
+ referenceString = reference.getString(),
198
+ procedureCallString = `${referenceString}(${valuesString})`;
199
+
200
+ return procedureCallString;
201
+ }
202
+
160
203
  export function variableAssignmentStringFromTypeAndVariable(type, variable) {
161
204
  const typeString = type.getString(),
162
205
  variableString = variable.getString(),