edn-abnf 0.0.8 → 0.0.10

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad6ca6781c8f1fab8f4be83db41604619f4a38049b13e934f4eea8ab3a2fe757
4
- data.tar.gz: b8d503680fffa8e5a81232ce301026f9780df6c35aaec80598549fd81fea63ab
3
+ metadata.gz: 932c447340ccec81fa10c0b51f802906872bdbd544473aa6301f98b490ef8aef
4
+ data.tar.gz: fa2e2062c8eb6243029011b790e519dd5d24b3fe61960e12cefc4d253d92dd1f
5
5
  SHA512:
6
- metadata.gz: 50ad3b1462112822df91e51617ef5dc0ba704e896be060562d6a42cd6c7f67980121b250ccfd080f11be9f51e406c005b1e37133f41156d1684ba13f07c80e78
7
- data.tar.gz: 28d52a6d4f5b1e55b85d4cc8534341de042834fb36bb5b6962609332ead01bd66629fc664d4e88adcc0eb6b74948d357be979c4b5266524b61af44a6feee26c4
6
+ metadata.gz: df16c6657287cdd6c3c1a717dd7e2e6ab20e64d53a910dc77b9b8f3b7a6dd9a20c3c9330e4d272ce3230f497ef1a936de184a41b35105af15c7a6d27f50c4c90
7
+ data.tar.gz: 0ea2cd3c43c44d3ec0c6881558f407fbf0368abceeb66f022f121a45be16aa49d7e23b64f5c66479b9ad804dc07ba36fce78952de603a17f6bc2185ed3fac69d
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.8"
3
+ s.version = "0.0.10"
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
@@ -230,6 +230,9 @@ module EDNGRAMMAR
230
230
 
231
231
  module Number1
232
232
  def ast
233
+ if ei = spec.text_value[1..-1]
234
+ warn "*** ignoring unimplemented encoding indicator #{ei.inspect} for #{elements[0].text_value}"
235
+ end
233
236
  elements[0].ast
234
237
  end
235
238
  end
@@ -294,6 +297,9 @@ module EDNGRAMMAR
294
297
 
295
298
  module String1
296
299
  def ast
300
+ if ei = spec.text_value[1..-1]
301
+ warn "*** ignoring unimplemented encoding indicator #{ei.inspect} for #{elements[0].text_value}"
302
+ end
297
303
  elements[0].ast
298
304
  end
299
305
  end
@@ -1144,6 +1150,9 @@ module EDNGRAMMAR
1144
1150
 
1145
1151
  module Tagged1
1146
1152
  def ast
1153
+ if ei = spec.text_value[1..-1]
1154
+ warn "*** ignoring unimplemented encoding indicator #{ei.inspect} after tag number #{uint.text_value}"
1155
+ end
1147
1156
  CBOR::Tagged.new(uint.text_value.to_i, item.ast)
1148
1157
  end
1149
1158
  end
@@ -1580,16 +1589,21 @@ module EDNGRAMMAR
1580
1589
  elements[1]
1581
1590
  end
1582
1591
 
1592
+ def S
1593
+ elements[2]
1594
+ end
1595
+
1583
1596
  end
1584
1597
 
1585
1598
  module Array3
1586
1599
  def ast
1587
- r = if e = elements[2].elements
1600
+ r = if e = elements[3].elements
1588
1601
  [e[0].ast] + e[2].elements.map {|x| x.item.ast }
1589
1602
  else
1590
1603
  []
1591
1604
  end
1592
- if ei = spec.ast
1605
+ if ei = spec.text_value[1..-1]
1606
+ # warn "** ei #{ei.inspect}"
1593
1607
  if ei == ""
1594
1608
  r.cbor_stream!
1595
1609
  else
@@ -1624,79 +1638,83 @@ module EDNGRAMMAR
1624
1638
  r2 = _nt_spec
1625
1639
  s0 << r2
1626
1640
  if r2
1627
- i4, s4 = index, []
1628
- r5 = _nt_item
1629
- s4 << r5
1630
- if r5
1631
- r6 = _nt_S
1632
- s4 << r6
1641
+ r3 = _nt_S
1642
+ s0 << r3
1643
+ if r3
1644
+ i5, s5 = index, []
1645
+ r6 = _nt_item
1646
+ s5 << r6
1633
1647
  if r6
1634
- s7, i7 = [], index
1635
- loop do
1636
- i8, s8 = index, []
1637
- if (match_len = has_terminal?(",", false, index))
1638
- r9 = true
1639
- @index += match_len
1640
- else
1641
- terminal_parse_failure('","')
1642
- r9 = nil
1643
- end
1644
- s8 << r9
1645
- if r9
1646
- r10 = _nt_S
1647
- s8 << r10
1648
+ r7 = _nt_S
1649
+ s5 << r7
1650
+ if r7
1651
+ s8, i8 = [], index
1652
+ loop do
1653
+ i9, s9 = index, []
1654
+ if (match_len = has_terminal?(",", false, index))
1655
+ r10 = true
1656
+ @index += match_len
1657
+ else
1658
+ terminal_parse_failure('","')
1659
+ r10 = nil
1660
+ end
1661
+ s9 << r10
1648
1662
  if r10
1649
- r11 = _nt_item
1650
- s8 << r11
1663
+ r11 = _nt_S
1664
+ s9 << r11
1651
1665
  if r11
1652
- r12 = _nt_S
1653
- s8 << r12
1666
+ r12 = _nt_item
1667
+ s9 << r12
1668
+ if r12
1669
+ r13 = _nt_S
1670
+ s9 << r13
1671
+ end
1654
1672
  end
1655
1673
  end
1674
+ if s9.last
1675
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
1676
+ r9.extend(Array0)
1677
+ else
1678
+ @index = i9
1679
+ r9 = nil
1680
+ end
1681
+ if r9
1682
+ s8 << r9
1683
+ else
1684
+ break
1685
+ end
1656
1686
  end
1657
- if s8.last
1658
- r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1659
- r8.extend(Array0)
1660
- else
1661
- @index = i8
1662
- r8 = nil
1663
- end
1687
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1688
+ s5 << r8
1664
1689
  if r8
1665
- s7 << r8
1666
- else
1667
- break
1690
+ r14 = _nt_OC
1691
+ s5 << r14
1668
1692
  end
1669
1693
  end
1670
- r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
1671
- s4 << r7
1672
- if r7
1673
- r13 = _nt_OC
1674
- s4 << r13
1675
- end
1676
1694
  end
1677
- end
1678
- if s4.last
1679
- r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1680
- r4.extend(Array1)
1681
- else
1682
- @index = i4
1683
- r4 = nil
1684
- end
1685
- if r4
1686
- r3 = r4
1687
- else
1688
- r3 = instantiate_node(SyntaxNode,input, index...index)
1689
- end
1690
- s0 << r3
1691
- if r3
1692
- if (match_len = has_terminal?("]", false, index))
1693
- r14 = true
1694
- @index += match_len
1695
+ if s5.last
1696
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1697
+ r5.extend(Array1)
1695
1698
  else
1696
- terminal_parse_failure('"]"')
1697
- r14 = nil
1699
+ @index = i5
1700
+ r5 = nil
1701
+ end
1702
+ if r5
1703
+ r4 = r5
1704
+ else
1705
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1706
+ end
1707
+ s0 << r4
1708
+ if r4
1709
+ if (match_len = has_terminal?("]", false, index))
1710
+ r15 = true
1711
+ @index += match_len
1712
+ else
1713
+ terminal_parse_failure('"]"')
1714
+ r15 = nil
1715
+ end
1716
+ s0 << r15
1698
1717
  end
1699
- s0 << r14
1700
1718
  end
1701
1719
  end
1702
1720
  end
@@ -1747,16 +1765,20 @@ module EDNGRAMMAR
1747
1765
  elements[1]
1748
1766
  end
1749
1767
 
1768
+ def S
1769
+ elements[2]
1770
+ end
1771
+
1750
1772
  end
1751
1773
 
1752
1774
  module Map3
1753
1775
  def ast
1754
- r = if e = elements[2].elements
1776
+ r = if e = elements[3].elements
1755
1777
  Hash[ [e[0].ast] + e[2].elements.map {|x| x.kp.ast } ]
1756
1778
  else
1757
1779
  {}
1758
1780
  end
1759
- if ei = spec.ast
1781
+ if ei = spec.text_value[1..-1]
1760
1782
  if ei == ""
1761
1783
  r.cbor_stream!
1762
1784
  else
@@ -1791,79 +1813,83 @@ module EDNGRAMMAR
1791
1813
  r2 = _nt_spec
1792
1814
  s0 << r2
1793
1815
  if r2
1794
- i4, s4 = index, []
1795
- r5 = _nt_kp
1796
- s4 << r5
1797
- if r5
1798
- r6 = _nt_S
1799
- s4 << r6
1816
+ r3 = _nt_S
1817
+ s0 << r3
1818
+ if r3
1819
+ i5, s5 = index, []
1820
+ r6 = _nt_kp
1821
+ s5 << r6
1800
1822
  if r6
1801
- s7, i7 = [], index
1802
- loop do
1803
- i8, s8 = index, []
1804
- if (match_len = has_terminal?(",", false, index))
1805
- r9 = true
1806
- @index += match_len
1807
- else
1808
- terminal_parse_failure('","')
1809
- r9 = nil
1810
- end
1811
- s8 << r9
1812
- if r9
1813
- r10 = _nt_S
1814
- s8 << r10
1823
+ r7 = _nt_S
1824
+ s5 << r7
1825
+ if r7
1826
+ s8, i8 = [], index
1827
+ loop do
1828
+ i9, s9 = index, []
1829
+ if (match_len = has_terminal?(",", false, index))
1830
+ r10 = true
1831
+ @index += match_len
1832
+ else
1833
+ terminal_parse_failure('","')
1834
+ r10 = nil
1835
+ end
1836
+ s9 << r10
1815
1837
  if r10
1816
- r11 = _nt_kp
1817
- s8 << r11
1838
+ r11 = _nt_S
1839
+ s9 << r11
1818
1840
  if r11
1819
- r12 = _nt_S
1820
- s8 << r12
1841
+ r12 = _nt_kp
1842
+ s9 << r12
1843
+ if r12
1844
+ r13 = _nt_S
1845
+ s9 << r13
1846
+ end
1821
1847
  end
1822
1848
  end
1849
+ if s9.last
1850
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
1851
+ r9.extend(Map0)
1852
+ else
1853
+ @index = i9
1854
+ r9 = nil
1855
+ end
1856
+ if r9
1857
+ s8 << r9
1858
+ else
1859
+ break
1860
+ end
1823
1861
  end
1824
- if s8.last
1825
- r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1826
- r8.extend(Map0)
1827
- else
1828
- @index = i8
1829
- r8 = nil
1830
- end
1862
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1863
+ s5 << r8
1831
1864
  if r8
1832
- s7 << r8
1833
- else
1834
- break
1865
+ r14 = _nt_OC
1866
+ s5 << r14
1835
1867
  end
1836
1868
  end
1837
- r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
1838
- s4 << r7
1839
- if r7
1840
- r13 = _nt_OC
1841
- s4 << r13
1842
- end
1843
1869
  end
1844
- end
1845
- if s4.last
1846
- r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1847
- r4.extend(Map1)
1848
- else
1849
- @index = i4
1850
- r4 = nil
1851
- end
1852
- if r4
1853
- r3 = r4
1854
- else
1855
- r3 = instantiate_node(SyntaxNode,input, index...index)
1856
- end
1857
- s0 << r3
1858
- if r3
1859
- if (match_len = has_terminal?("}", false, index))
1860
- r14 = true
1861
- @index += match_len
1870
+ if s5.last
1871
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1872
+ r5.extend(Map1)
1862
1873
  else
1863
- terminal_parse_failure('"}"')
1864
- r14 = nil
1874
+ @index = i5
1875
+ r5 = nil
1876
+ end
1877
+ if r5
1878
+ r4 = r5
1879
+ else
1880
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1881
+ end
1882
+ s0 << r4
1883
+ if r4
1884
+ if (match_len = has_terminal?("}", false, index))
1885
+ r15 = true
1886
+ @index += match_len
1887
+ else
1888
+ terminal_parse_failure('"}"')
1889
+ r15 = nil
1890
+ end
1891
+ s0 << r15
1865
1892
  end
1866
- s0 << r14
1867
1893
  end
1868
1894
  end
1869
1895
  end
@@ -2411,7 +2437,7 @@ module EDNGRAMMAR
2411
2437
  end
2412
2438
 
2413
2439
  module Streamstring1
2414
- def spec1
2440
+ def S1
2415
2441
  elements[1]
2416
2442
  end
2417
2443
 
@@ -2419,7 +2445,7 @@ module EDNGRAMMAR
2419
2445
  elements[2]
2420
2446
  end
2421
2447
 
2422
- def S
2448
+ def S2
2423
2449
  elements[3]
2424
2450
  end
2425
2451
 
@@ -2451,16 +2477,16 @@ module EDNGRAMMAR
2451
2477
  end
2452
2478
 
2453
2479
  i0, s0 = index, []
2454
- if (match_len = has_terminal?("(", false, index))
2455
- r1 = true
2480
+ if (match_len = has_terminal?("(_", false, index))
2481
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2456
2482
  @index += match_len
2457
2483
  else
2458
- terminal_parse_failure('"("')
2484
+ terminal_parse_failure('"(_"')
2459
2485
  r1 = nil
2460
2486
  end
2461
2487
  s0 << r1
2462
2488
  if r1
2463
- r2 = _nt_spec1
2489
+ r2 = _nt_S
2464
2490
  s0 << r2
2465
2491
  if r2
2466
2492
  r3 = _nt_string
@@ -2540,17 +2566,6 @@ module EDNGRAMMAR
2540
2566
  end
2541
2567
 
2542
2568
  module Spec0
2543
- def S
2544
- elements[2]
2545
- end
2546
- end
2547
-
2548
- module Spec1
2549
- def ast;
2550
- if (e1 = elements[1].elements) && !e1[0].empty?
2551
- e1[1].text_value
2552
- end
2553
- end
2554
2569
  end
2555
2570
 
2556
2571
  def _nt_spec
@@ -2585,10 +2600,6 @@ module EDNGRAMMAR
2585
2600
  end
2586
2601
  r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2587
2602
  s1 << r3
2588
- if r3
2589
- r5 = _nt_S
2590
- s1 << r5
2591
- end
2592
2603
  end
2593
2604
  if s1.last
2594
2605
  r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
@@ -2608,49 +2619,6 @@ module EDNGRAMMAR
2608
2619
  r0
2609
2620
  end
2610
2621
 
2611
- module Spec10
2612
- def S
2613
- elements[1]
2614
- end
2615
- end
2616
-
2617
- def _nt_spec1
2618
- start_index = index
2619
- if node_cache[:spec1].has_key?(index)
2620
- cached = node_cache[:spec1][index]
2621
- if cached
2622
- node_cache[:spec1][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2623
- @index = cached.interval.end
2624
- end
2625
- return cached
2626
- end
2627
-
2628
- i0, s0 = index, []
2629
- if (match_len = has_terminal?("_", false, index))
2630
- r1 = true
2631
- @index += match_len
2632
- else
2633
- terminal_parse_failure('"_"')
2634
- r1 = nil
2635
- end
2636
- s0 << r1
2637
- if r1
2638
- r2 = _nt_S
2639
- s0 << r2
2640
- end
2641
- if s0.last
2642
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2643
- r0.extend(Spec10)
2644
- else
2645
- @index = i0
2646
- r0 = nil
2647
- end
2648
-
2649
- node_cache[:spec1][start_index] = r0
2650
-
2651
- r0
2652
- end
2653
-
2654
2622
  module DoubleQuoted0
2655
2623
  def ast; text_value end
2656
2624
  end
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.8
4
+ version: 0.0.10
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-06 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