astn 0.110.7 → 0.110.8

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.
@@ -23,843 +23,231 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.Parser = exports.Lexer = void 0;
26
+ exports.Parse_Result = exports.Value = exports.Key_Value_Pairs = exports.Elements = exports.Document = exports.String = void 0;
27
27
  const _ea = __importStar(require("exupery-core-alg"));
28
- const throw_parse_error = (type, range) => {
29
- throw new _ea.Error({
30
- 'type': type,
31
- 'range': range
32
- });
33
- };
34
- const throw_unexpected_token = (found, expected) => {
35
- return throw_parse_error(['parser', {
36
- 'expected': expected,
37
- 'cause': ['unexpected token', {
38
- 'found': found.type,
39
- }]
40
- }], {
41
- 'start': found.start,
42
- 'end': found.end
43
- });
28
+ const pg = __importStar(require("./parse_generic"));
29
+ /**
30
+ * to get from a Annotated_Token to a Structural_Token, the type should be omitted.
31
+ * but it is parsd in between the 'start' and 'end' properties, so a little post-processing is needed.
32
+ */
33
+ const make_structural_token = (token) => {
34
+ return {
35
+ 'trailing trivia': token['trailing trivia'],
36
+ 'range': {
37
+ 'start': token['start'],
38
+ 'end': token['end']
39
+ }
40
+ };
44
41
  };
45
- var Lexer;
46
- (function (Lexer) {
47
- const op = {
48
- 'to character list': _ea.impure.text['to character list'],
49
- 'starts with': _ea.impure.text['starts with'],
42
+ const String = (token_iterator) => {
43
+ const token = token_iterator['get required token'](_ea.array_literal(["a string"]));
44
+ if (token.type[0] !== 'string') {
45
+ return pg.throw_unexpected_token(token, _ea.array_literal(['a string']));
46
+ }
47
+ token_iterator['consume token']();
48
+ return {
49
+ 'start': token['start'],
50
+ 'value': token.type[1].value,
51
+ 'type': token.type[1].type,
52
+ 'end': token['end'],
53
+ 'trailing trivia': token['trailing trivia'],
50
54
  };
51
- const parse_whitespace = (string_iterator) => {
52
- const start = string_iterator['create location info']();
53
- return {
54
- 'value': _ea.impure.text['from character list'](_ea.pure.list.build(($i) => {
55
- while (true) {
56
- const Character = {
57
- tab: 0x09, // \t
58
- line_feed: 0x0A, // \n
59
- carriage_return: 0x0D, // \r
60
- space: 0x20, //
61
- };
62
- {
63
- const $ = string_iterator['get current character']();
64
- if ($ === null) {
65
- return;
66
- }
67
- switch ($) {
68
- case Character.tab:
69
- string_iterator['consume character']();
70
- $i['add element']($);
71
- break;
72
- case Character.line_feed:
73
- string_iterator['consume character']();
74
- $i['add element']($);
75
- break;
76
- case Character.carriage_return:
77
- string_iterator['consume character']();
78
- $i['add element']($);
79
- break;
80
- case Character.space:
81
- string_iterator['consume character']();
82
- $i['add element']($);
83
- break;
84
- default:
85
- return;
86
- }
87
- }
88
- }
89
- })),
90
- 'range': {
91
- 'start': start,
92
- 'end': string_iterator['create location info'](),
55
+ };
56
+ exports.String = String;
57
+ const Document = (token_iterator) => {
58
+ return {
59
+ 'header': _ea.block(() => {
60
+ const token = token_iterator['get required token'](_ea.array_literal(['!', 'a value']));
61
+ if (token.type[0] !== '!') {
62
+ return _ea.not_set();
93
63
  }
94
- };
95
- };
96
- const parse_trivia = (string_iterator) => {
97
- return {
98
- 'leading whitespace': parse_whitespace(string_iterator),
99
- 'comments': _ea.pure.list.build(($i) => {
100
- while (true) {
101
- const $ = string_iterator['get current character']();
102
- if ($ === null) {
103
- return; //normal end of input
104
- }
105
- switch ($) {
106
- case 0x2F: // /
107
- const start = string_iterator['create location info']();
108
- const next_char = string_iterator['look ahead'](1);
109
- if (next_char === null) {
110
- const start = string_iterator['create location info']();
111
- string_iterator['consume character']();
112
- const end = string_iterator['create location info']();
113
- return throw_parse_error(['lexer', ['dangling slash', null]], {
114
- 'start': start,
115
- 'end': end
116
- });
117
- }
118
- switch (next_char) {
119
- case 0x2F: // /
120
- string_iterator['consume character'](); // consume the first /
121
- string_iterator['consume character'](); // consume the second /
122
- const Character = {
123
- line_feed: 0x0A, // \n
124
- carriage_return: 0x0D, // \r
125
- solidus: 0x2F, // /
126
- };
127
- $i['add element']({
128
- 'type': ['line', null],
129
- 'content': _ea.impure.text['from character list'](_ea.pure.list.build(($i) => {
130
- while (true) {
131
- const $ = string_iterator['get current character']();
132
- if ($ === null) {
133
- return;
134
- }
135
- switch ($) {
136
- case Character.line_feed:
137
- return;
138
- case Character.carriage_return:
139
- return;
140
- default:
141
- string_iterator['consume character']();
142
- $i['add element']($);
143
- }
144
- }
145
- })),
146
- 'range': {
147
- 'start': start,
148
- 'end': string_iterator['create location info'](),
149
- },
150
- 'trailing whitespace': parse_whitespace(string_iterator)
151
- });
152
- break;
153
- case 0x2A: { // *
154
- string_iterator['consume character'](); // consume the first /
155
- string_iterator['consume character'](); // consume the asterisk
156
- $i['add element']({
157
- 'type': ['block', null],
158
- 'content': _ea.impure.text['from character list'](_ea.pure.list.build(($i) => {
159
- let found_asterisk = false;
160
- const Character = {
161
- solidus: 0x2F, // /
162
- asterisk: 0x2A, // *
163
- };
164
- while (true) {
165
- const $ = string_iterator['get current character']();
166
- if ($ === null) {
167
- return throw_parse_error(['lexer', ['unterminated block comment', null]], {
168
- 'start': start,
169
- 'end': string_iterator['create location info']()
170
- });
171
- }
172
- if ($ === Character.solidus && found_asterisk) {
173
- string_iterator['consume character'](); // consume the solidus
174
- //found asterisk before solidus, so this is the end of the comment
175
- return;
176
- }
177
- //not a solidus, so this is part of the comment
178
- if (found_asterisk) {
179
- $i['add element'](Character.asterisk); // add the asterisk that was found before but was not part of the end delimiter
180
- }
181
- if ($ === Character.asterisk) {
182
- found_asterisk = true;
183
- }
184
- else {
185
- $i['add element']($);
186
- }
187
- string_iterator['consume character']();
188
- }
189
- })),
190
- 'range': {
191
- 'start': start,
192
- 'end': string_iterator['create location info'](),
193
- },
194
- 'trailing whitespace': parse_whitespace(string_iterator)
195
- });
196
- break;
197
- }
198
- default:
199
- return throw_parse_error(['lexer', ['dangling slash', null]], {
200
- 'start': start,
201
- 'end': string_iterator['create location info']()
202
- });
203
- }
204
- break;
205
- default:
206
- return;
207
- }
208
- }
209
- })
210
- };
64
+ token_iterator['consume token']();
65
+ return _ea.set({
66
+ '!': make_structural_token(token),
67
+ 'value': (0, exports.Value)(token_iterator)
68
+ });
69
+ }),
70
+ 'content': (0, exports.Value)(token_iterator)
211
71
  };
212
- const parse_delimited_string = (string_iterator, is_end_character, allow_newlines) => {
213
- const Character = {
214
- backspace: 0x08, // \b
215
- form_feed: 0x0C, // \f
216
- tab: 0x09, // \t
217
- line_feed: 0x0A, // \n
218
- carriage_return: 0x0D, // \r
219
- quotation_mark: 0x22, // "
220
- backtick: 0x60, // `
221
- apostrophe: 0x27, // '
222
- reverse_solidus: 0x5C, // \
223
- solidus: 0x2F, // /
224
- a: 0x61, // a
225
- b: 0x62, // b
226
- f: 0x66, // f
227
- n: 0x6E, // n
228
- r: 0x72, // r
229
- t: 0x74, // t
230
- u: 0x75, // u
231
- A: 0x41, // A
232
- F: 0x46, // F
233
- };
234
- const start = string_iterator['create location info']();
235
- const txt = _ea.impure.text['from character list'](_ea.pure.list.build(($i) => {
236
- while (true) {
237
- const $ = string_iterator['get current character']();
238
- if ($ === null) {
239
- return throw_parse_error(['lexer', ['unterminated string', null]], {
240
- 'start': start,
241
- 'end': string_iterator['create location info']()
242
- });
243
- }
244
- if (is_end_character($)) {
245
- string_iterator['consume character'](); // consume the end character
246
- return;
247
- }
248
- switch ($) {
249
- case Character.reverse_solidus:
250
- string_iterator['consume character']();
251
- {
252
- const $ = string_iterator['get current character']();
253
- if ($ === null) {
254
- return throw_parse_error(['lexer', ['missing character after escape', null]], {
255
- 'start': start,
256
- 'end': string_iterator['create location info']()
257
- });
258
- }
259
- switch ($) {
260
- case Character.quotation_mark:
261
- string_iterator['consume character']();
262
- $i['add element'](Character.quotation_mark);
263
- break;
264
- case Character.reverse_solidus:
265
- string_iterator['consume character']();
266
- $i['add element'](Character.reverse_solidus);
267
- break;
268
- case Character.solidus:
269
- string_iterator['consume character']();
270
- $i['add element'](Character.solidus);
271
- break;
272
- case Character.b:
273
- string_iterator['consume character']();
274
- $i['add element'](Character.backspace);
275
- break;
276
- case Character.f:
277
- string_iterator['consume character']();
278
- $i['add element'](Character.form_feed);
279
- break;
280
- case Character.n:
281
- if (allow_newlines) {
282
- return throw_parse_error(['lexer', ['unexpected end of line in delimited string', null]], {
283
- 'start': start,
284
- 'end': string_iterator['create location info']()
285
- });
286
- }
287
- string_iterator['consume character']();
288
- $i['add element'](Character.line_feed);
289
- break;
290
- case Character.r:
291
- if (allow_newlines) {
292
- return throw_parse_error(['lexer', ['unexpected end of line in delimited string', null]], {
293
- 'start': start,
294
- 'end': string_iterator['create location info']()
295
- });
296
- }
297
- string_iterator['consume character']();
298
- $i['add element'](Character.carriage_return);
299
- break;
300
- case Character.t:
301
- string_iterator['consume character']();
302
- $i['add element'](Character.tab);
303
- break;
304
- case Character.u:
305
- string_iterator['consume character']();
306
- $i['add element'](_ea.impure.integer['parse hexadecimal'](_ea.impure.text['from character list']((_ea.pure.list.build(($i) => {
307
- const get_char = () => {
308
- const char = string_iterator['get current character']();
309
- if (char === null) {
310
- return throw_parse_error(['lexer', ['unterminated unicode escape sequence', null]], {
311
- 'start': start,
312
- 'end': string_iterator['create location info']()
313
- });
314
- }
315
- if (char < Character.a || (char > Character.f && char < Character.A) || char > Character.F || char < 0x30 || char > 0x39) {
316
- return throw_parse_error(['lexer', ['invalid unicode escape sequence', null]], {
317
- 'start': start,
318
- 'end': string_iterator['create location info']()
319
- });
320
- }
321
- string_iterator['consume character']();
322
- return char;
323
- };
324
- $i['add element'](get_char());
325
- $i['add element'](get_char());
326
- $i['add element'](get_char());
327
- $i['add element'](get_char());
328
- })))));
329
- break;
330
- default:
331
- return throw_parse_error(['lexer', ['unknown escape character', null]], {
332
- 'start': start,
333
- 'end': string_iterator['create location info']()
334
- });
335
- }
336
- }
337
- break;
338
- default:
339
- string_iterator['consume character']();
340
- $i['add element']($);
341
- }
72
+ };
73
+ exports.Document = Document;
74
+ const Elements = (token_iterator, end_reached, end_token) => {
75
+ return _ea.pure.list.build(($i) => {
76
+ while (true) {
77
+ const current_token = token_iterator['get required token'](_ea.array_literal([end_token, 'a value']));
78
+ if (end_reached(current_token.type)) {
79
+ return;
342
80
  }
343
- }));
344
- return txt;
345
- };
346
- const Whitespace = {
347
- tab: 0x09, // \t
348
- line_feed: 0x0A, // \n
349
- carriage_return: 0x0D, // \r
350
- space: 0x20, //
351
- };
352
- /**
353
- * Creates a string iterator that allows iterating over characters in a string,
354
- * while keeping track of line numbers, columns, and line indentation.
355
- */
356
- Lexer.create_string_iterator = ($, $p) => {
357
- const source = $;
358
- const characters = op['to character list']($);
359
- const length = characters.__get_length();
360
- let found_carriage_return_before = false;
361
- let position = 0;
362
- let relative_position = {
363
- 'line': 0,
364
- 'column': 0,
365
- 'line indentation': null
366
- };
367
- const consume_character = () => {
368
- const c = characters.__get_element_at(position);
369
- const start = relative_position;
370
- relative_position = c.transform(($) => {
371
- return $ === Whitespace.line_feed
372
- ? {
373
- 'line': relative_position.line + 1,
374
- 'column': 0,
375
- 'line indentation': null,
376
- }
377
- : found_carriage_return_before
378
- ? {
379
- 'line': relative_position.line + 1,
380
- 'column': 0,
381
- 'line indentation': null,
382
- }
383
- : {
384
- 'line': relative_position.line,
385
- 'column': relative_position['column'] + ($ === Whitespace.tab
386
- ? $p['tab size']
387
- : 1),
388
- 'line indentation': relative_position['line indentation'] !== null
389
- ? relative_position['line indentation']
390
- : $ === Whitespace.space || $ === Whitespace.tab
391
- ? null
392
- : relative_position['column'],
393
- };
394
- }, () => relative_position //this is weird, we were already at the end of the list
395
- );
396
- // check for control characters
397
- c.map(($) => {
398
- if ($ < 0x20 && $ !== Whitespace.tab && $ !== Whitespace.line_feed && $ !== Whitespace.carriage_return) {
399
- throw_parse_error(['lexer', ['unexpected control character', $]], {
400
- 'start': {
401
- 'absolute': position - 1,
402
- 'relative': {
403
- 'line': relative_position.line,
404
- 'column': relative_position['column'] - 1,
405
- }
406
- },
407
- 'end': {
408
- 'absolute': position,
409
- 'relative': {
410
- 'line': relative_position.line,
411
- 'column': relative_position['column'],
412
- }
413
- }
414
- });
415
- }
416
- });
417
- found_carriage_return_before = c.transform(($) => $ === Whitespace.carriage_return, () => false);
418
- position += 1;
419
- };
420
- return {
421
- 'consume string': ($) => {
422
- op['to character list']($).__for_each(() => {
423
- consume_character();
424
- });
425
- },
426
- 'consume character': consume_character,
427
- 'get current character': () => {
428
- if (position === length) {
429
- return null;
430
- }
431
- return characters.__get_element_at(position).transform(($) => $, () => null);
432
- },
433
- 'look ahead': ($) => {
434
- const next_position = position + $;
435
- if (next_position >= length) {
436
- return null;
437
- }
438
- return characters.__get_element_at(next_position).transform(($) => $, () => null);
439
- },
440
- 'create location info': () => {
441
- return {
442
- 'absolute': position,
443
- 'relative': {
444
- 'line': relative_position.line,
445
- 'column': relative_position['column'],
446
- }
447
- };
448
- },
449
- 'create offset location info': (subtract) => {
450
- return {
451
- 'absolute': position - subtract,
452
- 'relative': {
453
- 'line': relative_position.line,
454
- 'column': relative_position['column'] - subtract,
81
+ $i['add element']({
82
+ 'value': (0, exports.Value)(token_iterator),
83
+ ',': _ea.block(() => {
84
+ const current_token = token_iterator['get required token'](_ea.array_literal([',', end_token, 'a value']));
85
+ if (current_token.type[0] !== ',') {
86
+ return _ea.not_set();
455
87
  }
456
- };
457
- },
458
- 'create location info string': () => `${relative_position.line}:${relative_position['column']}`,
459
- 'get line indentation': () => {
460
- return relative_position['line indentation'] !== null
461
- ? relative_position['line indentation']
462
- : relative_position['column'];
463
- },
464
- 'starts with': ($) => {
465
- return op['starts with'](source, $, position);
466
- }
467
- };
468
- };
469
- Lexer.Annotated_Token = (st) => {
470
- const $ = st['get current character']();
471
- if ($ === null) {
472
- return throw_parse_error(['lexer', ['unexpected end of input', null]], {
473
- 'start': st['create location info'](),
474
- 'end': st['create location info'](),
88
+ token_iterator['consume token']();
89
+ return _ea.set(make_structural_token(current_token));
90
+ })
475
91
  });
476
92
  }
477
- return {
478
- 'start': st['create location info'](),
479
- 'type': _ea.block(() => {
480
- const Character = {
481
- open_angle_bracket: 0x3C, // <
482
- open_brace: 0x7B, // {
483
- open_bracket: 0x5B, // [
484
- open_paren: 0x28, // (
485
- close_angle_bracket: 0x3E, // >
486
- close_brace: 0x7D, // }
487
- close_bracket: 0x5D, // ]
488
- close_paren: 0x29, // )
489
- apostrophe: 0x27, // '
490
- asterisk: 0x2A, // *
491
- at: 0x40, // @
492
- backtick: 0x60, // `
493
- bang: 0x21,
494
- colon: 0x3A, // :
495
- comma: 0x2C, // ,
496
- pipe: 0x7C, // |
497
- quotation_mark: 0x22, // "
498
- slash: 0x2F, // /
499
- tilde: 0x7E, // ~
500
- space: 0x20, // space
501
- tab: 0x09, // \t
502
- };
503
- switch ($) {
504
- case Character.open_brace:
505
- st['consume character']();
506
- return ['{', null];
507
- case Character.open_bracket:
508
- st['consume character']();
509
- return ['[', null];
510
- case Character.open_angle_bracket:
511
- st['consume character']();
512
- return ['<', null];
513
- case Character.open_paren:
514
- st['consume character']();
515
- return ['(', null];
516
- case Character.close_brace:
517
- st['consume character']();
518
- return ['}', null];
519
- case Character.close_bracket:
520
- st['consume character']();
521
- return [']', null];
522
- case Character.close_angle_bracket:
523
- st['consume character']();
524
- return ['>', null];
525
- case Character.close_paren:
526
- st['consume character']();
527
- return [')', null];
528
- //individuals
529
- case Character.pipe:
530
- st['consume character']();
531
- return ['|', null];
532
- case Character.tilde:
533
- st['consume character']();
534
- return ['~', null];
535
- case Character.asterisk:
536
- st['consume character']();
537
- return ['*', null];
538
- case Character.at:
539
- st['consume character']();
540
- return ['@', null];
541
- case Character.bang:
542
- st['consume character']();
543
- return ['!', null];
544
- case Character.colon:
545
- st['consume character']();
546
- return [':', null];
547
- case Character.comma:
548
- st['consume character']();
549
- return [',', null];
550
- case Character.quotation_mark:
551
- st['consume character']();
552
- return ['string', {
553
- 'value': parse_delimited_string(st, ($) => $ === Character.quotation_mark, true),
554
- 'type': ['quoted', null],
555
- }];
556
- case Character.backtick:
557
- st['consume character']();
558
- return ['string', {
559
- 'value': parse_delimited_string(st, ($) => $ === Character.backtick, false),
560
- 'type': ['backticked', null],
561
- }];
562
- case Character.apostrophe:
563
- st['consume character']();
564
- return ['string', {
565
- 'value': parse_delimited_string(st, ($) => $ === Character.apostrophe, false),
566
- 'type': ['apostrophed', null],
567
- }];
568
- default:
569
- return ['string', {
570
- 'value': _ea.impure.text['from character list'](_ea.pure.list.build(($i) => {
571
- while (true) {
572
- const $ = st['get current character']();
573
- if ($ === null) {
574
- return;
575
- }
576
- if ($ === Character.open_brace ||
577
- $ === Character.close_brace ||
578
- $ === Character.open_bracket ||
579
- $ === Character.close_bracket ||
580
- $ === Character.open_angle_bracket ||
581
- $ === Character.close_angle_bracket ||
582
- $ === Character.open_paren ||
583
- $ === Character.close_paren ||
584
- $ === Character.apostrophe ||
585
- $ === Character.asterisk ||
586
- $ === Character.at ||
587
- $ === Character.backtick ||
588
- $ === Character.bang ||
589
- $ === Character.colon ||
590
- $ === Character.comma ||
591
- $ === Character.pipe ||
592
- $ === Character.quotation_mark ||
593
- $ === Character.slash ||
594
- $ === Character.tilde ||
595
- $ === Whitespace.space ||
596
- $ === Whitespace.tab) {
597
- return;
598
- }
599
- st['consume character']();
600
- $i['add element']($);
601
- }
602
- })),
603
- 'type': ['undelimited', null],
604
- }];
605
- }
606
- }),
607
- 'end': st['create location info'](),
608
- 'trailing trivia': parse_trivia(st)
609
- };
610
- };
611
- Lexer.Tokenizer_Result = ($, $p) => {
612
- return {
613
- 'leading trivia': parse_trivia($p['string iterator']),
614
- 'tokens': _ea.pure.list.build($i => {
615
- while ($p['string iterator']['get current character']() !== null) {
616
- const token = Lexer.Annotated_Token($p['string iterator']);
617
- $i['add element'](token);
618
- }
619
- }),
620
- 'end': $p['string iterator']['create location info']()
621
- };
622
- };
623
- })(Lexer || (exports.Lexer = Lexer = {}));
624
- var Parser;
625
- (function (Parser) {
626
- Parser.create_token_iterator = ($) => {
627
- let position = 0;
628
- return {
629
- 'get required token': (pet) => {
630
- return $.tokens.__get_element_at(position).transform(($) => $, () => throw_parse_error(['parser', {
631
- 'expected': pet,
632
- 'cause': ['missing token', null]
633
- }], {
634
- 'start': $.end,
635
- 'end': $.end,
636
- }));
637
- },
638
- 'consume token': () => {
639
- position += 1;
640
- },
641
- };
642
- };
643
- /**
644
- * to get from a Annotated_Token to a Structural_Token, the type should be omitted.
645
- * but it is parsd in between the 'start' and 'end' properties, so a little post-processing is needed.
646
- */
647
- const make_structural_token = (token) => {
648
- return {
649
- 'trailing trivia': token['trailing trivia'],
650
- 'range': {
651
- 'start': token['start'],
652
- 'end': token['end']
93
+ });
94
+ };
95
+ exports.Elements = Elements;
96
+ const Key_Value_Pairs = (token_iterator, end_reached, end_token) => {
97
+ return _ea.pure.list.build(($i) => {
98
+ while (true) {
99
+ const current_token = token_iterator['get required token'](_ea.array_literal([end_token, 'a string']));
100
+ if (end_reached(current_token.type)) {
101
+ return;
653
102
  }
654
- };
655
- };
656
- const String = (token_iterator) => {
657
- const token = token_iterator['get required token'](_ea.array_literal(["a string"]));
658
- if (token.type[0] !== 'string') {
659
- return throw_unexpected_token(token, _ea.array_literal(['a string']));
660
- }
661
- token_iterator['consume token']();
662
- return {
663
- 'start': token['start'],
664
- 'value': token.type[1].value,
665
- 'type': token.type[1].type,
666
- 'end': token['end'],
667
- 'trailing trivia': token['trailing trivia'],
668
- };
669
- };
670
- let type_parsers;
671
- (function (type_parsers) {
672
- type_parsers.Document = (token_iterator) => {
673
- return {
674
- 'header': _ea.block(() => {
675
- const token = token_iterator['get required token'](_ea.array_literal(['!', 'a value']));
676
- if (token.type[0] !== '!') {
103
+ $i['add element']({
104
+ 'key': (0, exports.String)(token_iterator),
105
+ 'value': _ea.block(() => {
106
+ const candidate_colon = token_iterator['get required token'](_ea.array_literal(['a string', ':', end_token]));
107
+ if (candidate_colon.type[0] !== ':') {
677
108
  return _ea.not_set();
678
109
  }
679
110
  token_iterator['consume token']();
680
111
  return _ea.set({
681
- '!': make_structural_token(token),
682
- 'value': type_parsers.Value(token_iterator)
112
+ ':': make_structural_token(candidate_colon),
113
+ 'value': (0, exports.Value)(token_iterator)
683
114
  });
684
115
  }),
685
- 'content': type_parsers.Value(token_iterator)
686
- };
687
- };
688
- type_parsers.Elements = (token_iterator, end_reached, end_token) => {
689
- return _ea.pure.list.build(($i) => {
690
- while (true) {
691
- const current_token = token_iterator['get required token'](_ea.array_literal([end_token, 'a value']));
692
- if (end_reached(current_token.type)) {
693
- return;
694
- }
695
- $i['add element']({
696
- 'value': type_parsers.Value(token_iterator),
697
- ',': _ea.block(() => {
698
- const current_token = token_iterator['get required token'](_ea.array_literal([',', end_token, 'a value']));
699
- if (current_token.type[0] !== ',') {
700
- return _ea.not_set();
701
- }
702
- token_iterator['consume token']();
703
- return _ea.set(make_structural_token(current_token));
704
- })
705
- });
706
- }
707
- });
708
- };
709
- type_parsers.Key_Value_Pairs = (token_iterator, end_reached, end_token) => {
710
- return _ea.pure.list.build(($i) => {
711
- while (true) {
712
- const current_token = token_iterator['get required token'](_ea.array_literal([end_token, 'a string']));
713
- if (end_reached(current_token.type)) {
714
- return;
715
- }
716
- $i['add element']({
717
- 'key': String(token_iterator),
718
- 'value': _ea.block(() => {
719
- const candidate_colon = token_iterator['get required token'](_ea.array_literal(['a string', ':', end_token]));
720
- if (candidate_colon.type[0] !== ':') {
721
- return _ea.not_set();
722
- }
723
- token_iterator['consume token']();
724
- return _ea.set({
725
- ':': make_structural_token(candidate_colon),
726
- 'value': type_parsers.Value(token_iterator)
727
- });
728
- }),
729
- ',': _ea.block(() => {
730
- const current_token = token_iterator['get required token'](_ea.array_literal(['a string', ',', end_token]));
731
- if (current_token.type[0] !== ',') {
732
- return _ea.not_set();
733
- }
734
- token_iterator['consume token']();
735
- return _ea.set(make_structural_token(current_token));
736
- })
737
- });
738
- }
739
- });
740
- };
741
- type_parsers.Value = (token_iterator) => {
742
- const token = token_iterator['get required token'](_ea.array_literal(['a value']));
743
- return {
744
- 'start': token.start,
745
- 'end': token.end,
746
- 'type': _ea.cc(token.type, ($) => {
747
- switch ($[0]) {
748
- case 'string': return _ea.ss($, ($) => {
749
- return ['string', String(token_iterator)];
750
- });
751
- case '{': return _ea.ss($, ($) => {
752
- token_iterator['consume token']();
753
- return ['indexed collection', ['dictionary', {
754
- '{': make_structural_token(token),
755
- 'entries': type_parsers.Key_Value_Pairs(token_iterator, ($) => $[0] === '}', '}'),
756
- '}': _ea.block(() => {
757
- const current_token = token_iterator['get required token'](_ea.array_literal(['}']));
758
- token_iterator['consume token']();
759
- return make_structural_token(current_token);
760
- })
761
- }]];
762
- });
763
- case '(': return _ea.ss($, ($) => {
764
- token_iterator['consume token']();
765
- return ['indexed collection', ['verbose group', {
766
- '(': make_structural_token(token),
767
- 'entries': type_parsers.Key_Value_Pairs(token_iterator, ($) => $[0] === ')', ')'),
768
- ')': _ea.block(() => {
769
- const current_token = token_iterator['get required token'](_ea.array_literal([')']));
770
- token_iterator['consume token']();
771
- return make_structural_token(current_token);
772
- })
773
- }]];
774
- });
775
- case '[': return _ea.ss($, ($) => {
776
- token_iterator['consume token']();
777
- return ['ordered collection', ['list', {
778
- '[': make_structural_token(token),
779
- 'elements': type_parsers.Elements(token_iterator, ($) => $[0] === ']', ']'),
780
- ']': _ea.block(() => {
781
- const current_token = token_iterator['get required token'](_ea.array_literal([']']));
782
- token_iterator['consume token']();
783
- return make_structural_token(current_token);
784
- }),
785
- }]];
786
- });
787
- case '<': return _ea.ss($, ($) => {
788
- token_iterator['consume token']();
789
- return ['ordered collection', ['concise group', {
790
- '<': make_structural_token(token),
791
- 'elements': type_parsers.Elements(token_iterator, ($) => $[0] === '>', '>'),
792
- '>': _ea.block(() => {
793
- const current_token = token_iterator['get required token'](_ea.array_literal(['>']));
794
- token_iterator['consume token']();
795
- return make_structural_token(current_token);
796
- }),
797
- }]];
798
- });
799
- case '@': return _ea.ss($, ($) => {
800
- token_iterator['consume token']();
801
- return ['include', {
802
- '@': make_structural_token(token),
803
- 'path': String(token_iterator)
804
- }];
805
- });
806
- case '~': return _ea.ss($, ($) => {
807
- token_iterator['consume token']();
808
- return ['not set', {
809
- '~': make_structural_token(token),
810
- }];
811
- });
812
- case '|': return _ea.ss($, ($) => {
813
- token_iterator['consume token']();
814
- return ['tagged value', {
815
- '|': make_structural_token(token),
816
- 'state': String(token_iterator),
817
- 'value': type_parsers.Value(token_iterator)
818
- }];
819
- });
820
- case '*': return _ea.ss($, ($) => {
821
- token_iterator['consume token']();
822
- return ['set optional value', {
823
- '*': make_structural_token(token),
824
- 'value': type_parsers.Value(token_iterator)
825
- }];
826
- });
827
- default:
828
- //unexpected token
829
- return throw_unexpected_token(token, _ea.array_literal([
830
- 'a value'
831
- ]));
116
+ ',': _ea.block(() => {
117
+ const current_token = token_iterator['get required token'](_ea.array_literal(['a string', ',', end_token]));
118
+ if (current_token.type[0] !== ',') {
119
+ return _ea.not_set();
832
120
  }
121
+ token_iterator['consume token']();
122
+ return _ea.set(make_structural_token(current_token));
833
123
  })
834
- };
835
- };
836
- })(type_parsers = Parser.type_parsers || (Parser.type_parsers = {}));
837
- Parser.parse = ($, $p) => {
838
- try {
839
- const string_iterator = Lexer.create_string_iterator($, {
840
- 'tab size': $p['tab size']
841
124
  });
842
- const tokenizer_result = Lexer.Tokenizer_Result(null, {
843
- 'string iterator': string_iterator
844
- });
845
- // tokenizer_result.tokens.__for_each(($) => {
846
- // pdev.log_debug_message(`token: ${_ea.cc($.type, ($) => {
847
- // switch ($[0]) {
848
- // case 'string': return _ea.ss($, ($) => `string: ${$.value.value}`)
849
- // default: return `structural: ${$[0]}`
850
- // }
851
- // })}`)
852
- // })
853
- const token_iterator = Parser.create_token_iterator(tokenizer_result);
854
- return ['success', Parser.type_parsers.Document(token_iterator)];
855
125
  }
856
- catch (error) {
857
- if (error instanceof _ea.Error) {
858
- const parse_error = error.type; //this has to be the case
859
- return ['failure', parse_error];
126
+ });
127
+ };
128
+ exports.Key_Value_Pairs = Key_Value_Pairs;
129
+ const Value = (token_iterator) => {
130
+ const token = token_iterator['get required token'](_ea.array_literal(['a value']));
131
+ return {
132
+ 'start': token.start,
133
+ 'end': token.end,
134
+ 'type': _ea.cc(token.type, ($) => {
135
+ switch ($[0]) {
136
+ case 'string': return _ea.ss($, ($) => {
137
+ return ['string', (0, exports.String)(token_iterator)];
138
+ });
139
+ case '{': return _ea.ss($, ($) => {
140
+ token_iterator['consume token']();
141
+ return ['indexed collection', ['dictionary', {
142
+ '{': make_structural_token(token),
143
+ 'entries': (0, exports.Key_Value_Pairs)(token_iterator, ($) => $[0] === '}', '}'),
144
+ '}': _ea.block(() => {
145
+ const current_token = token_iterator['get required token'](_ea.array_literal(['}']));
146
+ token_iterator['consume token']();
147
+ return make_structural_token(current_token);
148
+ })
149
+ }]];
150
+ });
151
+ case '(': return _ea.ss($, ($) => {
152
+ token_iterator['consume token']();
153
+ return ['indexed collection', ['verbose group', {
154
+ '(': make_structural_token(token),
155
+ 'entries': (0, exports.Key_Value_Pairs)(token_iterator, ($) => $[0] === ')', ')'),
156
+ ')': _ea.block(() => {
157
+ const current_token = token_iterator['get required token'](_ea.array_literal([')']));
158
+ token_iterator['consume token']();
159
+ return make_structural_token(current_token);
160
+ })
161
+ }]];
162
+ });
163
+ case '[': return _ea.ss($, ($) => {
164
+ token_iterator['consume token']();
165
+ return ['ordered collection', ['list', {
166
+ '[': make_structural_token(token),
167
+ 'elements': (0, exports.Elements)(token_iterator, ($) => $[0] === ']', ']'),
168
+ ']': _ea.block(() => {
169
+ const current_token = token_iterator['get required token'](_ea.array_literal([']']));
170
+ token_iterator['consume token']();
171
+ return make_structural_token(current_token);
172
+ }),
173
+ }]];
174
+ });
175
+ case '<': return _ea.ss($, ($) => {
176
+ token_iterator['consume token']();
177
+ return ['ordered collection', ['concise group', {
178
+ '<': make_structural_token(token),
179
+ 'elements': (0, exports.Elements)(token_iterator, ($) => $[0] === '>', '>'),
180
+ '>': _ea.block(() => {
181
+ const current_token = token_iterator['get required token'](_ea.array_literal(['>']));
182
+ token_iterator['consume token']();
183
+ return make_structural_token(current_token);
184
+ }),
185
+ }]];
186
+ });
187
+ case '@': return _ea.ss($, ($) => {
188
+ token_iterator['consume token']();
189
+ return ['include', {
190
+ '@': make_structural_token(token),
191
+ 'path': (0, exports.String)(token_iterator)
192
+ }];
193
+ });
194
+ case '~': return _ea.ss($, ($) => {
195
+ token_iterator['consume token']();
196
+ return ['not set', {
197
+ '~': make_structural_token(token),
198
+ }];
199
+ });
200
+ case '|': return _ea.ss($, ($) => {
201
+ token_iterator['consume token']();
202
+ return ['tagged value', {
203
+ '|': make_structural_token(token),
204
+ 'state': (0, exports.String)(token_iterator),
205
+ 'value': (0, exports.Value)(token_iterator)
206
+ }];
207
+ });
208
+ case '*': return _ea.ss($, ($) => {
209
+ token_iterator['consume token']();
210
+ return ['set optional value', {
211
+ '*': make_structural_token(token),
212
+ 'value': (0, exports.Value)(token_iterator)
213
+ }];
214
+ });
215
+ default:
216
+ //unexpected token
217
+ return pg.throw_unexpected_token(token, _ea.array_literal([
218
+ 'a value'
219
+ ]));
860
220
  }
861
- return _ea.panic("unknown error thrown");
862
- }
221
+ })
863
222
  };
864
- })(Parser || (exports.Parser = Parser = {}));
865
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zZm9ybWF0aW9ucy9wYXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF1QztBQVF2QyxNQUFNLGlCQUFpQixHQUFHLENBQ3RCLElBQW1DLEVBQ25DLEtBQWdCLEVBQ1gsRUFBRTtJQUNQLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUEyQjtRQUMxQyxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxLQUFLO0tBQ2pCLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQUVELE1BQU0sc0JBQXNCLEdBQUcsQ0FDM0IsS0FBc0MsRUFDdEMsUUFBMEMsRUFDckMsRUFBRTtJQUNQLE9BQU8saUJBQWlCLENBQ3BCLENBQUMsUUFBUSxFQUFFO1lBQ1AsVUFBVSxFQUFFLFFBQVE7WUFDcEIsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUU7b0JBQzFCLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSTtpQkFDdEIsQ0FBQztTQUNMLENBQUMsRUFDRjtRQUNJLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSztRQUNwQixLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUc7S0FDbkIsQ0FDSixDQUFBO0FBQ0wsQ0FBQyxDQUFBO0FBRUQsSUFBaUIsS0FBSyxDQW1zQnJCO0FBbnNCRCxXQUFpQixLQUFLO0lBNEJsQixNQUFNLEVBQUUsR0FBRztRQUNQLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ3pELGFBQWEsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7S0FDaEQsQ0FBQTtJQUVELE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxlQUFnQyxFQUFrQixFQUFFO1FBQzFFLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxzQkFBc0Is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
223
+ };
224
+ exports.Value = Value;
225
+ const Parse_Result = ($, $p) => {
226
+ try {
227
+ const string_iterator = pg.create_string_iterator($, {
228
+ 'tab size': $p['tab size']
229
+ });
230
+ const tokenizer_result = pg.Tokenizer_Result(null, {
231
+ 'string iterator': string_iterator
232
+ });
233
+ // tokenizer_result.tokens.__for_each(($) => {
234
+ // pdev.log_debug_message(`token: ${_ea.cc($.type, ($) => {
235
+ // switch ($[0]) {
236
+ // case 'string': return _ea.ss($, ($) => `string: ${$.value.value}`)
237
+ // default: return `structural: ${$[0]}`
238
+ // }
239
+ // })}`)
240
+ // })
241
+ const token_iterator = pg.create_token_iterator(tokenizer_result);
242
+ return ['success', (0, exports.Document)(token_iterator)];
243
+ }
244
+ catch (error) {
245
+ if (error instanceof _ea.Error) {
246
+ const parse_error = error.type; //this has to be the case
247
+ return ['failure', parse_error];
248
+ }
249
+ return _ea.panic("unknown error thrown");
250
+ }
251
+ };
252
+ exports.Parse_Result = Parse_Result;
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zZm9ybWF0aW9ucy9wYXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF1QztBQU12QyxvREFBcUM7QUFLckM7OztHQUdHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQXNDLEVBQXdCLEVBQUU7SUFDM0YsT0FBTztRQUNILGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztRQUMzQyxPQUFPLEVBQUU7WUFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztTQUN0QjtLQUNKLENBQUE7QUFDTCxDQUFDLENBQUE7QUFFTSxNQUFNLE1BQU0sR0FBRyxDQUFDLGNBQWlDLEVBQWUsRUFBRTtJQUNyRSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ25GLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM1RSxDQUFDO0lBQ0QsY0FBYyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUE7SUFDakMsT0FBTztRQUNILE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7UUFDNUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtR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