edn-abnf 0.0.9 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1e4580b57714274ff5eb197811b5584c38537e43bf95b7a0add51171ed108db5
4
- data.tar.gz: fc0240e0e1ef858a1f341c14e28bbba97f7108fef336f77e689a9369dc6aa5ea
3
+ metadata.gz: 4dd67fd4813a8adf98e4bbffd069e9d9e40a9c8d4c51c9f1ef1226497d3e7e9b
4
+ data.tar.gz: 524e68b7bb39b5acb883ddcbbbf3afd6531dfbc3892abfdf7346e8a97452e51d
5
5
  SHA512:
6
- metadata.gz: ec376dbe72f63df3dcb2f34509e434b1d8f644369ac7a4e8e957072324b75146e50f4dd035669ec29c3f8199d2ae39a774751d1ac1657a7eccc36a801a483fb5
7
- data.tar.gz: f603be649a4410de915c88109a7d3f5250868cb8ba02d4f2ca059358cdfd9a9bb93e76127c0b39344a3fceed326515d47b3dbc006821467645bef17551a18e0c
6
+ metadata.gz: 132445c4a4c05bd1ce60d552c0c6809df5c92cb850c79243cd26fd5552f5db73e3a1b93dbce1585cddec77ff764d33b1bfb7a868d1907dfa37145a1762530729
7
+ data.tar.gz: e399041d7bf61d00d80fe824daeb72e8d008927cd8cd5958aedce23f100e53ecef2887393d0aca753bafc9fed1c4330bd8696ffdcd6a6e69829331efd28e8e22
data/edn-abnf.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "edn-abnf"
3
- s.version = "0.0.9"
3
+ s.version = "0.0.11"
4
4
  s.summary = "CDDL (Concise Data Definition Language) converters and miscellaneous tools"
5
5
  s.description = %q{edn-abnf implements converters and miscellaneous tools for CBOR EDN's ABNF}
6
6
  s.author = "Carsten Bormann"
@@ -28,16 +28,60 @@ module HGRAMMAR
28
28
  end
29
29
 
30
30
  module AppStringH1
31
+ def ast
32
+ Integer(elements[0].text_value + elements[2].text_value, 16).chr("BINARY")
33
+ end
34
+ end
35
+
36
+ module AppStringH2
37
+ def ellipsis
38
+ elements[0]
39
+ end
40
+
41
+ def S
42
+ elements[1]
43
+ end
44
+ end
45
+
46
+ module AppStringH3
47
+ def ast; ellipsis.ast end
48
+ end
49
+
50
+ module AppStringH4
31
51
  def S
32
52
  elements[0]
33
53
  end
34
54
 
35
55
  end
36
56
 
37
- module AppStringH2
57
+ module AppStringH5
58
+ def unpack_thread(s)
59
+ case s[0]
60
+ when CBOR::Tagged
61
+ s[0]
62
+ when String
63
+ s.join
64
+ else
65
+ raise "@@@ unpack_thread #{s.inspect}"
66
+ end
67
+ end
38
68
  def ast
39
- e1 = elements[1].elements
40
- e1.map {|e| Integer(e.elements[0].text_value + e.elements[2].text_value, 16).chr("BINARY")}.join.b
69
+ e1 = elements[1].elements.map {|e| e.ast}
70
+ out = []
71
+ curr = []
72
+ e1.each { |el|
73
+ if curr.size == 0 || curr[0].class == el.class
74
+ curr << el
75
+ else
76
+ out << curr
77
+ curr = [el]
78
+ end
79
+ }
80
+ if out.size == 0 && String === curr[0]
81
+ curr.join # unpack_thread(curr)
82
+ else
83
+ CBOR::Tagged.new(888, (out << curr).map {|x| unpack_thread(x)})
84
+ end
41
85
  end
42
86
  end
43
87
 
@@ -58,27 +102,56 @@ module HGRAMMAR
58
102
  if r1
59
103
  s2, i2 = [], index
60
104
  loop do
61
- i3, s3 = index, []
62
- r4 = _nt_HEXDIG
63
- s3 << r4
64
- if r4
65
- r5 = _nt_S
66
- s3 << r5
67
- if r5
68
- r6 = _nt_HEXDIG
69
- s3 << r6
70
- if r6
71
- r7 = _nt_S
72
- s3 << r7
105
+ i3 = index
106
+ i4, s4 = index, []
107
+ r5 = _nt_HEXDIG
108
+ s4 << r5
109
+ if r5
110
+ r6 = _nt_S
111
+ s4 << r6
112
+ if r6
113
+ r7 = _nt_HEXDIG
114
+ s4 << r7
115
+ if r7
116
+ r8 = _nt_S
117
+ s4 << r8
73
118
  end
74
119
  end
75
120
  end
76
- if s3.last
77
- r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
78
- r3.extend(AppStringH0)
121
+ if s4.last
122
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
123
+ r4.extend(AppStringH0)
124
+ r4.extend(AppStringH1)
79
125
  else
80
- @index = i3
81
- r3 = nil
126
+ @index = i4
127
+ r4 = nil
128
+ end
129
+ if r4
130
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
131
+ r3 = r4
132
+ else
133
+ i9, s9 = index, []
134
+ r10 = _nt_ellipsis
135
+ s9 << r10
136
+ if r10
137
+ r11 = _nt_S
138
+ s9 << r11
139
+ end
140
+ if s9.last
141
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
142
+ r9.extend(AppStringH2)
143
+ r9.extend(AppStringH3)
144
+ else
145
+ @index = i9
146
+ r9 = nil
147
+ end
148
+ if r9
149
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
150
+ r3 = r9
151
+ else
152
+ @index = i3
153
+ r3 = nil
154
+ end
82
155
  end
83
156
  if r3
84
157
  s2 << r3
@@ -91,8 +164,8 @@ module HGRAMMAR
91
164
  end
92
165
  if s0.last
93
166
  r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
94
- r0.extend(AppStringH1)
95
- r0.extend(AppStringH2)
167
+ r0.extend(AppStringH4)
168
+ r0.extend(AppStringH5)
96
169
  else
97
170
  @index = i0
98
171
  r0 = nil
@@ -103,6 +176,50 @@ module HGRAMMAR
103
176
  r0
104
177
  end
105
178
 
179
+ module Ellipsis0
180
+ def ast; CBOR::Tagged.new(888, nil) end
181
+ end
182
+
183
+ def _nt_ellipsis
184
+ start_index = index
185
+ if node_cache[:ellipsis].has_key?(index)
186
+ cached = node_cache[:ellipsis][index]
187
+ if cached
188
+ node_cache[:ellipsis][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
189
+ @index = cached.interval.end
190
+ end
191
+ return cached
192
+ end
193
+
194
+ s0, i0 = [], index
195
+ loop do
196
+ if (match_len = has_terminal?(".", false, index))
197
+ r1 = true
198
+ @index += match_len
199
+ else
200
+ terminal_parse_failure('"."')
201
+ r1 = nil
202
+ end
203
+ if r1
204
+ s0 << r1
205
+ else
206
+ break
207
+ end
208
+ end
209
+ if s0.size < 3
210
+ @index = i0
211
+ r0 = nil
212
+ else
213
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
214
+ r0.extend(Ellipsis0)
215
+ r0.extend(Ellipsis0)
216
+ end
217
+
218
+ node_cache[:ellipsis][start_index] = r0
219
+
220
+ r0
221
+ end
222
+
106
223
  def _nt_HEXDIG
107
224
  start_index = index
108
225
  if node_cache[:HEXDIG].has_key?(index)
@@ -343,7 +460,79 @@ module HGRAMMAR
343
460
  r0
344
461
  end
345
462
 
463
+ def _nt_non_lf
464
+ start_index = index
465
+ if node_cache[:non_lf].has_key?(index)
466
+ cached = node_cache[:non_lf][index]
467
+ if cached
468
+ node_cache[:non_lf][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
469
+ @index = cached.interval.end
470
+ end
471
+ return cached
472
+ end
473
+
474
+ i0 = index
475
+ if (match_len = has_terminal?("\t", false, index))
476
+ r1 = true
477
+ @index += match_len
478
+ else
479
+ terminal_parse_failure('"\\t"')
480
+ r1 = nil
481
+ end
482
+ if r1
483
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
484
+ r0 = r1
485
+ else
486
+ if (match_len = has_terminal?("\r", false, index))
487
+ r2 = true
488
+ @index += match_len
489
+ else
490
+ terminal_parse_failure('"\\r"')
491
+ r2 = nil
492
+ end
493
+ if r2
494
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
495
+ r0 = r2
496
+ else
497
+ if has_terminal?(@regexps[gr = '\A[\\ -퟿]'] ||= Regexp.new(gr), :regexp, index)
498
+ r3 = true
499
+ @index += 1
500
+ else
501
+ terminal_parse_failure('[\\ -퟿]')
502
+ r3 = nil
503
+ end
504
+ if r3
505
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
506
+ r0 = r3
507
+ else
508
+ if has_terminal?(@regexps[gr = '\A[-􏿿]'] ||= Regexp.new(gr), :regexp, index)
509
+ r4 = true
510
+ @index += 1
511
+ else
512
+ terminal_parse_failure('[-􏿿]')
513
+ r4 = nil
514
+ end
515
+ if r4
516
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
517
+ r0 = r4
518
+ else
519
+ @index = i0
520
+ r0 = nil
521
+ end
522
+ end
523
+ end
524
+ end
525
+
526
+ node_cache[:non_lf][start_index] = r0
527
+
528
+ r0
529
+ end
530
+
346
531
  module S0
532
+ def comment
533
+ elements[0]
534
+ end
535
+
347
536
  end
348
537
 
349
538
  module S1
@@ -376,18 +565,12 @@ module HGRAMMAR
376
565
  s3, i3 = [], index
377
566
  loop do
378
567
  i4, s4 = index, []
379
- if (match_len = has_terminal?("/", false, index))
380
- r5 = true
381
- @index += match_len
382
- else
383
- terminal_parse_failure('"/"')
384
- r5 = nil
385
- end
568
+ r5 = _nt_comment
386
569
  s4 << r5
387
570
  if r5
388
571
  s6, i6 = [], index
389
572
  loop do
390
- r7 = _nt_non_slash
573
+ r7 = _nt_blank
391
574
  if r7
392
575
  s6 << r7
393
576
  else
@@ -396,29 +579,6 @@ module HGRAMMAR
396
579
  end
397
580
  r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
398
581
  s4 << r6
399
- if r6
400
- if (match_len = has_terminal?("/", false, index))
401
- r8 = true
402
- @index += match_len
403
- else
404
- terminal_parse_failure('"/"')
405
- r8 = nil
406
- end
407
- s4 << r8
408
- if r8
409
- s9, i9 = [], index
410
- loop do
411
- r10 = _nt_blank
412
- if r10
413
- s9 << r10
414
- else
415
- break
416
- end
417
- end
418
- r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
419
- s4 << r9
420
- end
421
- end
422
582
  end
423
583
  if s4.last
424
584
  r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
@@ -449,6 +609,120 @@ module HGRAMMAR
449
609
  r0
450
610
  end
451
611
 
612
+ module Comment0
613
+ end
614
+
615
+ module Comment1
616
+ end
617
+
618
+ def _nt_comment
619
+ start_index = index
620
+ if node_cache[:comment].has_key?(index)
621
+ cached = node_cache[:comment][index]
622
+ if cached
623
+ node_cache[:comment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
624
+ @index = cached.interval.end
625
+ end
626
+ return cached
627
+ end
628
+
629
+ i0 = index
630
+ i1, s1 = index, []
631
+ if (match_len = has_terminal?("/", false, index))
632
+ r2 = true
633
+ @index += match_len
634
+ else
635
+ terminal_parse_failure('"/"')
636
+ r2 = nil
637
+ end
638
+ s1 << r2
639
+ if r2
640
+ s3, i3 = [], index
641
+ loop do
642
+ r4 = _nt_non_slash
643
+ if r4
644
+ s3 << r4
645
+ else
646
+ break
647
+ end
648
+ end
649
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
650
+ s1 << r3
651
+ if r3
652
+ if (match_len = has_terminal?("/", false, index))
653
+ r5 = true
654
+ @index += match_len
655
+ else
656
+ terminal_parse_failure('"/"')
657
+ r5 = nil
658
+ end
659
+ s1 << r5
660
+ end
661
+ end
662
+ if s1.last
663
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
664
+ r1.extend(Comment0)
665
+ else
666
+ @index = i1
667
+ r1 = nil
668
+ end
669
+ if r1
670
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
671
+ r0 = r1
672
+ else
673
+ i6, s6 = index, []
674
+ if (match_len = has_terminal?("#", false, index))
675
+ r7 = true
676
+ @index += match_len
677
+ else
678
+ terminal_parse_failure('"#"')
679
+ r7 = nil
680
+ end
681
+ s6 << r7
682
+ if r7
683
+ s8, i8 = [], index
684
+ loop do
685
+ r9 = _nt_non_lf
686
+ if r9
687
+ s8 << r9
688
+ else
689
+ break
690
+ end
691
+ end
692
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
693
+ s6 << r8
694
+ if r8
695
+ if (match_len = has_terminal?("\n", false, index))
696
+ r10 = true
697
+ @index += match_len
698
+ else
699
+ terminal_parse_failure('"\\n"')
700
+ r10 = nil
701
+ end
702
+ s6 << r10
703
+ end
704
+ end
705
+ if s6.last
706
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
707
+ r6.extend(Comment1)
708
+ else
709
+ @index = i6
710
+ r6 = nil
711
+ end
712
+ if r6
713
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
714
+ r0 = r6
715
+ else
716
+ @index = i0
717
+ r0 = nil
718
+ end
719
+ end
720
+
721
+ node_cache[:comment][start_index] = r0
722
+
723
+ r0
724
+ end
725
+
452
726
  end
453
727
 
454
728
  class HGRAMMARParser < Treetop::Runtime::CompiledParser
@@ -289,13 +289,13 @@ module EDNGRAMMAR
289
289
  r0
290
290
  end
291
291
 
292
- module String0
292
+ module String10
293
293
  def spec
294
294
  elements[1]
295
295
  end
296
296
  end
297
297
 
298
- module String1
298
+ module String11
299
299
  def ast
300
300
  if ei = spec.text_value[1..-1]
301
301
  warn "*** ignoring unimplemented encoding indicator #{ei.inspect} for #{elements[0].text_value}"
@@ -304,12 +304,12 @@ module EDNGRAMMAR
304
304
  end
305
305
  end
306
306
 
307
- def _nt_string
307
+ def _nt_string1
308
308
  start_index = index
309
- if node_cache[:string].has_key?(index)
310
- cached = node_cache[:string][index]
309
+ if node_cache[:string1].has_key?(index)
310
+ cached = node_cache[:string1][index]
311
311
  if cached
312
- node_cache[:string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
312
+ node_cache[:string1][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
313
313
  @index = cached.interval.end
314
314
  end
315
315
  return cached
@@ -338,8 +338,180 @@ module EDNGRAMMAR
338
338
  end
339
339
  if s0.last
340
340
  r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
341
- r0.extend(String0)
341
+ r0.extend(String10)
342
+ r0.extend(String11)
343
+ else
344
+ @index = i0
345
+ r0 = nil
346
+ end
347
+
348
+ node_cache[:string1][start_index] = r0
349
+
350
+ r0
351
+ end
352
+
353
+ def _nt_string1e
354
+ start_index = index
355
+ if node_cache[:string1e].has_key?(index)
356
+ cached = node_cache[:string1e][index]
357
+ if cached
358
+ node_cache[:string1e][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
359
+ @index = cached.interval.end
360
+ end
361
+ return cached
362
+ end
363
+
364
+ i0 = index
365
+ r1 = _nt_string1
366
+ if r1
367
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
368
+ r0 = r1
369
+ else
370
+ r2 = _nt_ellipsis
371
+ if r2
372
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
373
+ r0 = r2
374
+ else
375
+ @index = i0
376
+ r0 = nil
377
+ end
378
+ end
379
+
380
+ node_cache[:string1e][start_index] = r0
381
+
382
+ r0
383
+ end
384
+
385
+ module Ellipsis0
386
+ def ast; CBOR::Tagged.new(888, nil) end
387
+ end
388
+
389
+ def _nt_ellipsis
390
+ start_index = index
391
+ if node_cache[:ellipsis].has_key?(index)
392
+ cached = node_cache[:ellipsis][index]
393
+ if cached
394
+ node_cache[:ellipsis][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
395
+ @index = cached.interval.end
396
+ end
397
+ return cached
398
+ end
399
+
400
+ s0, i0 = [], index
401
+ loop do
402
+ if (match_len = has_terminal?(".", false, index))
403
+ r1 = true
404
+ @index += match_len
405
+ else
406
+ terminal_parse_failure('"."')
407
+ r1 = nil
408
+ end
409
+ if r1
410
+ s0 << r1
411
+ else
412
+ break
413
+ end
414
+ end
415
+ if s0.size < 3
416
+ @index = i0
417
+ r0 = nil
418
+ else
419
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
420
+ r0.extend(Ellipsis0)
421
+ r0.extend(Ellipsis0)
422
+ end
423
+
424
+ node_cache[:ellipsis][start_index] = r0
425
+
426
+ r0
427
+ end
428
+
429
+ module String0
430
+ def S
431
+ elements[0]
432
+ end
433
+
434
+ def string1e
435
+ elements[1]
436
+ end
437
+ end
438
+
439
+ module String1
440
+ def string1e
441
+ elements[0]
442
+ end
443
+
444
+ end
445
+
446
+ module String2
447
+ def join1(s)
448
+ s.join # XXX -- look at encoding and ei
449
+ end
450
+ def unpack_chunk(c, s)
451
+ if c == String
452
+ join1(s)
453
+ else
454
+ unless c == CBOR::Tagged && s.first.tag == 888 && s.first.value == nil # XXX check all values?
455
+ raise "*** unjoinable chunks #{c.inspect} #{s.inspect}" if s.size != 1
456
+ end
457
+ s.first
458
+ end
459
+ end
460
+ def ast
461
+ arr = [elements[0].ast] + elements[1].elements.map {|x| x.elements[1].ast}
462
+ charr = arr.chunk(&:class).to_a
463
+ if charr.size == 1
464
+ unpack_chunk(*charr.first)
465
+ else
466
+ CBOR::Tagged.new(888, charr.map {|x| unpack_chunk(*x)})
467
+ end
468
+ end
469
+ end
470
+
471
+ def _nt_string
472
+ start_index = index
473
+ if node_cache[:string].has_key?(index)
474
+ cached = node_cache[:string][index]
475
+ if cached
476
+ node_cache[:string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
477
+ @index = cached.interval.end
478
+ end
479
+ return cached
480
+ end
481
+
482
+ i0, s0 = index, []
483
+ r1 = _nt_string1e
484
+ s0 << r1
485
+ if r1
486
+ s2, i2 = [], index
487
+ loop do
488
+ i3, s3 = index, []
489
+ r4 = _nt_S
490
+ s3 << r4
491
+ if r4
492
+ r5 = _nt_string1e
493
+ s3 << r5
494
+ end
495
+ if s3.last
496
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
497
+ r3.extend(String0)
498
+ else
499
+ @index = i3
500
+ r3 = nil
501
+ end
502
+ if r3
503
+ s2 << r3
504
+ else
505
+ break
506
+ end
507
+ end
508
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
509
+ s0 << r2
510
+ end
511
+ if s0.last
512
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
342
513
  r0.extend(String1)
514
+ r0.extend(String2)
343
515
  else
344
516
  @index = i0
345
517
  r0 = nil
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: edn-abnf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carsten Bormann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-08 00:00:00.000000000 Z
11
+ date: 2023-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler