functionalscript 0.3.12 → 0.3.13

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.
package/bnf/test.f.js DELETED
@@ -1,368 +0,0 @@
1
- import { firstSet, setOp } from "./module.f.js";
2
- import * as j from "../json/module.f.js";
3
- import { sort } from "../types/object/module.f.js";
4
- const stringify = j.stringify(sort);
5
- const eq = (a, e) => () => {
6
- const r = stringify(firstSet(a));
7
- if (r !== e) {
8
- throw [r, e];
9
- }
10
- };
11
- // https://www.json.org/json-en.html
12
- const classic = () => {
13
- // {"empty":true,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32]]}
14
- const ws = () => ({ or: [
15
- [],
16
- ['\t', ws], // 9
17
- ['\n', ws], // 10
18
- ['\r', ws], // 13
19
- [' ', ws], // 32
20
- ] });
21
- // {"empty":true,"map":[[false,42],[true,43],[false,44],[true,45]]}
22
- const sign = { or: [
23
- [],
24
- '+', // 43
25
- '-', // 45
26
- ] };
27
- // {"empty":false,"map":[[false,48],[true,57]]}
28
- const onenine = [0x31, 0x39];
29
- // {"empty":false,"map":[[false,47],[true,57]]}
30
- const digit = { or: [
31
- '0',
32
- onenine,
33
- ] };
34
- // {"empty":false,"map":[[false,47],[true,57]]}
35
- const digits = () => ({ or: [
36
- digit,
37
- [digit, digits]
38
- ] });
39
- // {"empty":true,"map":[[false,68],[true,69],[false,100],[true,101]]}
40
- const exponent = { or: [
41
- [],
42
- ['E', sign, digits], // 69
43
- ['e', sign, digits], // 101
44
- ] };
45
- // {"empty":true,"map":[[false,45],[true,46]]}
46
- const fraction = { or: [
47
- [],
48
- ['.', digits] // 46
49
- ] };
50
- // {"empty":false,"map":[[false,44],[true,45],[false,47],[true,57]]}
51
- const integer = { or: [
52
- digit, // 48-57
53
- [onenine, digits],
54
- ['-', digit], // 45
55
- ['-', onenine, digits],
56
- ] };
57
- // {"empty":false,"map":[[false,44],[true,45],[false,47],[true,57]]}
58
- const number = [integer, fraction, exponent];
59
- // {"empty":false,"map":[[false,47],[true,57],[false,64],[true,70],[false,96],[true,102]]}
60
- const hex = { or: [
61
- digit, // 48-57
62
- [0x41, 0x46], // A..F
63
- [0x61, 0x66], // a..f
64
- ] };
65
- // {"empty":false,"map":[[false,33],[true,34],[false,46],[true,47],[false,91],[true,92],[false,97],[true,98],[false,101],[true,102],[false,109],[true,110],[false,113],[true,114],[false,115],[true,117]]}
66
- const escape = { or: [
67
- '"', // 34
68
- '/', // 47
69
- '\\', // 92
70
- 'b', // 98
71
- 'f', // 102
72
- 'n', // 110
73
- 'r', // 114
74
- 't', // 116
75
- ['u', hex, hex, hex, hex] // 117
76
- ] };
77
- // {"empty":false,"map":[[false,31],[true,33],[false,34],[true,1114111]]}
78
- const character = { or: [
79
- [0x20, 0x21], // exclude '"' 0x22
80
- [0x23, 0x5B], // exclude '\' 0x5C
81
- [0x5D, 0x10FFFF], // 93-1114111
82
- ['\\', escape], // 92
83
- ] };
84
- // {"empty":true,"map":[[false,31],[true,33],[false,34],[true,1114111]]}
85
- const characters = () => ({ or: [
86
- [],
87
- [character, characters]
88
- ] });
89
- // {"empty":false,"map":[[false,33],[true,34]]}
90
- const string = ['"', characters, '"'];
91
- // {"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}
92
- const element = () => [ws, value, ws];
93
- // {"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}
94
- const elements = () => ({ or: [
95
- element,
96
- [element, ',', elements]
97
- ] });
98
- // {"empty":false,"map":[[false,90],[true,91]]}
99
- const array = { or: [
100
- ['[', ws, ']'], // 91
101
- ['[', elements, ']'],
102
- ] };
103
- // {"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34]]}
104
- const member = [ws, string, ws, ':', element];
105
- // {"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34]]}
106
- const members = () => ({ or: [
107
- member,
108
- [member, ',', members],
109
- ] });
110
- // {"empty":false,"map":[[false,122],[true,123]]}
111
- const object = { or: [
112
- ['{', ws, '}'], // 123
113
- ['{', members, '}'],
114
- ] };
115
- // {"empty":false,"map":[[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}
116
- const value = { or: [
117
- object, // 123
118
- array, // 91
119
- string, // 34
120
- number, // 45, 48-57
121
- 'true', // 116
122
- 'false', // 102
123
- 'null', // 110
124
- ] };
125
- // {"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}
126
- const json = element;
127
- return {
128
- ws: eq(ws, '{"empty":true,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32]]}'),
129
- sign: eq(sign, '{"empty":true,"map":[[false,42],[true,43],[false,44],[true,45]]}'),
130
- digits: eq(digits, '{"empty":false,"map":[[false,47],[true,57]]}'),
131
- exponent: eq(exponent, '{"empty":true,"map":[[false,68],[true,69],[false,100],[true,101]]}'),
132
- fraction: eq(fraction, '{"empty":true,"map":[[false,45],[true,46]]}'),
133
- onenine: eq(onenine, '{"empty":false,"map":[[false,48],[true,57]]}'),
134
- digit: eq(digit, '{"empty":false,"map":[[false,47],[true,57]]}'),
135
- string: eq(string, '{"empty":false,"map":[[false,33],[true,34]]}'),
136
- member: eq(member, '{"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34]]}'),
137
- members: eq(members, '{"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34]]}'),
138
- object: eq(object, '{"empty":false,"map":[[false,122],[true,123]]}'),
139
- array: eq(array, '{"empty":false,"map":[[false,90],[true,91]]}'),
140
- integer: eq(integer, '{"empty":false,"map":[[false,44],[true,45],[false,47],[true,57]]}'),
141
- number: eq(number, '{"empty":false,"map":[[false,44],[true,45],[false,47],[true,57]]}'),
142
- value: eq(value, '{"empty":false,"map":[[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}'),
143
- element: eq(element, '{"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}'),
144
- elements: eq(elements, '{"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}'),
145
- json: eq(json, '{"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}'),
146
- hex: eq(hex, '{"empty":false,"map":[[false,47],[true,57],[false,64],[true,70],[false,96],[true,102]]}'),
147
- escape: eq(escape, '{"empty":false,"map":[[false,33],[true,34],[false,46],[true,47],[false,91],[true,92],[false,97],[true,98],[false,101],[true,102],[false,109],[true,110],[false,113],[true,114],[false,115],[true,117]]}'),
148
- character: eq(character, '{"empty":false,"map":[[false,31],[true,33],[false,34],[true,1114111]]}'),
149
- characters: eq(characters, '{"empty":true,"map":[[false,31],[true,33],[false,34],[true,1114111]]}'),
150
- };
151
- };
152
- const deterministic = () => {
153
- // {"empty":true,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32]]}
154
- const ws = () => ({ or: [
155
- [],
156
- ['\t', ws], // 9
157
- ['\n', ws], // 10
158
- ['\r', ws], // 13
159
- [' ', ws], // 32
160
- ] });
161
- // {"empty":true,"map":[[false,42],[true,43],[false,44],[true,45]]}
162
- const sign = { or: [
163
- [],
164
- '+', // 43
165
- '-', // 45
166
- ] };
167
- // {"empty":false,"map":[[false,48],[true,57]]}
168
- const onenine = [0x31, 0x39];
169
- // {"empty":false,"map":[[false,47],[true,57]]}
170
- const digit = { or: [
171
- '0',
172
- onenine,
173
- ] };
174
- // {"empty":true,"map":[[false,47],[true,57]]}
175
- const digits1 = () => ({ or: [
176
- [],
177
- [digit, digits1]
178
- ]
179
- });
180
- // {"empty":false,"map":[[false,47],[true,57]]}
181
- const digits = [digit, digits1];
182
- // {"empty":true,"map":[[false,68],[true,69],[false,100],[true,101]]}
183
- const exponent = { or: [
184
- [],
185
- ['E', sign, digits], // 69
186
- ['e', sign, digits], // 101
187
- ] };
188
- // {"empty":true,"map":[[false,45],[true,46]]}
189
- const fraction = { or: [
190
- [],
191
- ['.', digits] // 46
192
- ] };
193
- // {"empty":false,"map":[[false,47],[true,57]]}
194
- const integer1 = { or: [
195
- '0', // 48
196
- [onenine, digits1], // 49-57
197
- ] };
198
- // {"empty":false,"map":[[false,44],[true,45],[false,47],[true,57]]}
199
- const integer = { or: [
200
- integer1, // 48-57
201
- ['-', integer1], // 45
202
- ] };
203
- // {"empty":false,"map":[[false,44],[true,45],[false,47],[true,57]]}
204
- const number = [integer, fraction, exponent];
205
- // {"empty":false,"map":[[false,47],[true,57],[false,64],[true,70],[false,96],[true,102]]}
206
- const hex = { or: [
207
- digit, // 48-57
208
- [0x41, 0x46], // A..F
209
- [0x61, 0x66], // a..f
210
- ] };
211
- // {"empty":false,"map":[[false,33],[true,34],[false,46],[true,47],[false,91],[true,92],[false,97],[true,98],[false,101],[true,102],[false,109],[true,110],[false,113],[true,114],[false,115],[true,117]]}
212
- const escape = { or: [
213
- '"', // 34
214
- '/', // 47
215
- '\\', // 92
216
- 'b', // 98
217
- 'f', // 102
218
- 'n', // 110
219
- 'r', // 114
220
- 't', // 116
221
- ['u', hex, hex, hex, hex] // 117
222
- ] };
223
- // {"empty":false,"map":[[false,31],[true,33],[false,34],[true,1114111]]}
224
- const character = { or: [
225
- [0x20, 0x21], // exclude '"' 0x22
226
- [0x23, 0x5B], // exclude '\' 0x5C
227
- [0x5D, 0x10FFFF], // 93-1114111
228
- ['\\', escape], // 92
229
- ] };
230
- // {"empty":true,"map":[[false,31],[true,33],[false,34],[true,1114111]]}
231
- const characters = () => ({ or: [
232
- [],
233
- [character, characters]
234
- ] });
235
- // {"empty":false,"map":[[false,33],[true,34]]}
236
- const string = ['"', characters, '"'];
237
- // {"empty":false,"map":[[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}
238
- const element1 = () => [value, ws];
239
- // {"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}
240
- const element = [ws, element1];
241
- // {"empty":true,"map":[[false,43],[true,44]]}
242
- const elements2 = () => ({ or: [
243
- [],
244
- [',', elements] // 44
245
- ] });
246
- // {"empty":false,"map":[[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}
247
- const elements1 = [element1, elements2];
248
- // {"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}
249
- const elements = [ws, elements1];
250
- // {"empty":false,"map":[[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,92],[true,93],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}
251
- const array1 = { or: [
252
- [']'], // 93
253
- [elements1, ']'],
254
- ] };
255
- // {"empty":false,"map":[[false,90],[true,91]]}
256
- const array = ['[', ws, array1];
257
- // {"empty":false,"map":[[false,33],[true,34]]}
258
- const member1 = [string, ws, ':', element];
259
- // {"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34]]}
260
- const member = [ws, member1];
261
- // {"empty":true,"map":[[false,43],[true,44]]}
262
- const members2 = () => ({ or: [
263
- [],
264
- [',', members], // 44
265
- ] });
266
- // {"empty":false,"map":[[false,33],[true,34]]}
267
- const members1 = [member1, members2];
268
- // {"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34]]}
269
- const members = [ws, members1];
270
- // {"empty":false,"map":[[false,33],[true,34],[false,124],[true,125]]}
271
- const object1 = { or: [
272
- ['}'], // 125
273
- [members1, '}'],
274
- ] };
275
- // {"empty":false,"map":[[false,122],[true,123]]}
276
- const object = ['{', ws, object1];
277
- // {"empty":false,"map":[[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}
278
- const value = { or: [
279
- object, // 123
280
- array, // 91
281
- string, // 34
282
- number, // 45, 48-57
283
- 'true', // 116
284
- 'false', // 102
285
- 'null', // 110
286
- ] };
287
- // {"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}
288
- const json = element;
289
- return {
290
- ws: eq(ws, '{"empty":true,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32]]}'),
291
- sign: eq(sign, '{"empty":true,"map":[[false,42],[true,43],[false,44],[true,45]]}'),
292
- digits1: eq(digits1, '{"empty":true,"map":[[false,47],[true,57]]}'),
293
- digits: eq(digits, '{"empty":false,"map":[[false,47],[true,57]]}'),
294
- exponent: eq(exponent, '{"empty":true,"map":[[false,68],[true,69],[false,100],[true,101]]}'),
295
- fraction: eq(fraction, '{"empty":true,"map":[[false,45],[true,46]]}'),
296
- onenine: eq(onenine, '{"empty":false,"map":[[false,48],[true,57]]}'),
297
- digit: eq(digit, '{"empty":false,"map":[[false,47],[true,57]]}'),
298
- string: eq(string, '{"empty":false,"map":[[false,33],[true,34]]}'),
299
- member1: eq(member1, '{"empty":false,"map":[[false,33],[true,34]]}'),
300
- member: eq(member, '{"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34]]}'),
301
- members2: eq(members2, '{"empty":true,"map":[[false,43],[true,44]]}'),
302
- members1: eq(members1, '{"empty":false,"map":[[false,33],[true,34]]}'),
303
- members: eq(members, '{"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34]]}'),
304
- object1: eq(object1, '{"empty":false,"map":[[false,33],[true,34],[false,124],[true,125]]}'),
305
- object: eq(object, '{"empty":false,"map":[[false,122],[true,123]]}'),
306
- array1: eq(array1, '{"empty":false,"map":[[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,92],[true,93],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}'),
307
- array: eq(array, '{"empty":false,"map":[[false,90],[true,91]]}'),
308
- integer1: eq(integer1, '{"empty":false,"map":[[false,47],[true,57]]}'),
309
- integer: eq(integer, '{"empty":false,"map":[[false,44],[true,45],[false,47],[true,57]]}'),
310
- number: eq(number, '{"empty":false,"map":[[false,44],[true,45],[false,47],[true,57]]}'),
311
- value: eq(value, '{"empty":false,"map":[[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}'),
312
- element1: eq(element1, '{"empty":false,"map":[[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}'),
313
- element: eq(element, '{"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}'),
314
- elements2: eq(elements2, '{"empty":true,"map":[[false,43],[true,44]]}'),
315
- elements1: eq(elements1, '{"empty":false,"map":[[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}'),
316
- elements: eq(elements, '{"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}'),
317
- json: eq(json, '{"empty":false,"map":[[false,8],[true,10],[false,12],[true,13],[false,31],[true,32],[false,33],[true,34],[false,44],[true,45],[false,47],[true,57],[false,90],[true,91],[false,101],[true,102],[false,109],[true,110],[false,115],[true,116],[false,122],[true,123]]}'),
318
- hex: eq(hex, '{"empty":false,"map":[[false,47],[true,57],[false,64],[true,70],[false,96],[true,102]]}'),
319
- escape: eq(escape, '{"empty":false,"map":[[false,33],[true,34],[false,46],[true,47],[false,91],[true,92],[false,97],[true,98],[false,101],[true,102],[false,109],[true,110],[false,113],[true,114],[false,115],[true,117]]}'),
320
- character: eq(character, '{"empty":false,"map":[[false,31],[true,33],[false,34],[true,1114111]]}'),
321
- characters: eq(characters, '{"empty":true,"map":[[false,31],[true,33],[false,34],[true,1114111]]}'),
322
- };
323
- };
324
- //
325
- export default {
326
- example: {
327
- module: () => {
328
- const grammar = [
329
- { or: [[65, 90], [97, 122], [48, 57]] }, // Matches 'A-Z', 'a-z', and '0-9'
330
- ];
331
- const s = firstSet(grammar);
332
- if (s.empty) {
333
- throw s;
334
- }
335
- if (setOp.get('0'.codePointAt(0))(s.map) !== true) {
336
- throw s;
337
- }
338
- if (setOp.get('h'.codePointAt(0))(s.map) !== true) {
339
- throw s;
340
- }
341
- if (setOp.get('$'.codePointAt(0))(s.map) !== false) {
342
- throw s;
343
- }
344
- },
345
- types: () => {
346
- const alpha = [65, 90]; // Matches 'A-Z'
347
- const id2 = [alpha, alpha]; // Matches two uppercase letters
348
- const digit = [48, 57]; // Matches '0-9'
349
- // Matches two uppercase letters or one digit
350
- const id2OrDigit = { or: [
351
- id2,
352
- digit,
353
- ] };
354
- // Matches 'true', 'false'
355
- const bool = { or: [
356
- 'true',
357
- 'false',
358
- ] };
359
- const id = () => [alpha, { or: [
360
- [], // Empty
361
- id // Recursive
362
- ] }];
363
- const _ = [id2OrDigit, bool, id];
364
- }
365
- },
366
- classic,
367
- deterministic,
368
- };