edn-abnf-ec 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4708 @@
1
+ # Encoding: UTF-8
2
+ # Autogenerated from a Treetop grammar. Edits may be lost.
3
+
4
+
5
+ module EDNGRAMMAR
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root ||= :seq
10
+ end
11
+
12
+ module Seq0
13
+ def OC
14
+ elements[0]
15
+ end
16
+
17
+ def item
18
+ elements[1]
19
+ end
20
+
21
+ def S
22
+ elements[2]
23
+ end
24
+ end
25
+
26
+ module Seq1
27
+ def item
28
+ elements[0]
29
+ end
30
+
31
+ def S
32
+ elements[1]
33
+ end
34
+
35
+ def OC
36
+ elements[3]
37
+ end
38
+ end
39
+
40
+ module Seq2
41
+ def S
42
+ elements[0]
43
+ end
44
+
45
+ end
46
+
47
+ module Seq3
48
+ def ast
49
+ r = if e = elements[1].elements
50
+ [e[0].ast] + e[2].elements.map {|x| x.item.ast }
51
+ else
52
+ []
53
+ end
54
+ if r.size == 1
55
+ r.first
56
+ else
57
+ CBOR::Sequence.new(r)
58
+ end
59
+ end
60
+ end
61
+
62
+ def _nt_seq
63
+ start_index = index
64
+ if node_cache[:seq].has_key?(index)
65
+ cached = node_cache[:seq][index]
66
+ if cached
67
+ node_cache[:seq][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
68
+ @index = cached.interval.end
69
+ end
70
+ return cached
71
+ end
72
+
73
+ i0, s0 = index, []
74
+ r1 = _nt_S
75
+ s0 << r1
76
+ if r1
77
+ i3, s3 = index, []
78
+ r4 = _nt_item
79
+ s3 << r4
80
+ if r4
81
+ r5 = _nt_S
82
+ s3 << r5
83
+ if r5
84
+ s6, i6 = [], index
85
+ loop do
86
+ i7, s7 = index, []
87
+ r8 = _nt_OC
88
+ s7 << r8
89
+ if r8
90
+ r9 = _nt_item
91
+ s7 << r9
92
+ if r9
93
+ r10 = _nt_S
94
+ s7 << r10
95
+ end
96
+ end
97
+ if s7.last
98
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
99
+ r7.extend(Seq0)
100
+ else
101
+ @index = i7
102
+ r7 = nil
103
+ end
104
+ if r7
105
+ s6 << r7
106
+ else
107
+ break
108
+ end
109
+ end
110
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
111
+ s3 << r6
112
+ if r6
113
+ r11 = _nt_OC
114
+ s3 << r11
115
+ end
116
+ end
117
+ end
118
+ if s3.last
119
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
120
+ r3.extend(Seq1)
121
+ else
122
+ @index = i3
123
+ r3 = nil
124
+ end
125
+ if r3
126
+ r2 = r3
127
+ else
128
+ r2 = instantiate_node(SyntaxNode,input, index...index)
129
+ end
130
+ s0 << r2
131
+ end
132
+ if s0.last
133
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
134
+ r0.extend(Seq2)
135
+ r0.extend(Seq3)
136
+ else
137
+ @index = i0
138
+ r0 = nil
139
+ end
140
+
141
+ node_cache[:seq][start_index] = r0
142
+
143
+ r0
144
+ end
145
+
146
+ def _nt_item
147
+ start_index = index
148
+ if node_cache[:item].has_key?(index)
149
+ cached = node_cache[:item][index]
150
+ if cached
151
+ node_cache[:item][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
152
+ @index = cached.interval.end
153
+ end
154
+ return cached
155
+ end
156
+
157
+ i0 = index
158
+ r1 = _nt_map
159
+ if r1
160
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
161
+ r0 = r1
162
+ else
163
+ r2 = _nt_array
164
+ if r2
165
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
166
+ r0 = r2
167
+ else
168
+ r3 = _nt_tagged
169
+ if r3
170
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
171
+ r0 = r3
172
+ else
173
+ r4 = _nt_number
174
+ if r4
175
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
176
+ r0 = r4
177
+ else
178
+ r5 = _nt_simple
179
+ if r5
180
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
181
+ r0 = r5
182
+ else
183
+ r6 = _nt_string
184
+ if r6
185
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
186
+ r0 = r6
187
+ else
188
+ r7 = _nt_streamstring
189
+ if r7
190
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
191
+ r0 = r7
192
+ else
193
+ @index = i0
194
+ r0 = nil
195
+ end
196
+ end
197
+ end
198
+ end
199
+ end
200
+ end
201
+ end
202
+
203
+ node_cache[:item][start_index] = r0
204
+
205
+ r0
206
+ end
207
+
208
+ module String10
209
+ def spec
210
+ elements[1]
211
+ end
212
+ end
213
+
214
+ module String11
215
+ def ast
216
+ if ei = spec.text_value[1..-1]
217
+ warn "*** ignoring unimplemented encoding indicator #{ei.inspect} for #{elements[0].text_value}"
218
+ end
219
+ elements[0].ast
220
+ end
221
+ end
222
+
223
+ def _nt_string1
224
+ start_index = index
225
+ if node_cache[:string1].has_key?(index)
226
+ cached = node_cache[:string1][index]
227
+ if cached
228
+ node_cache[:string1][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
229
+ @index = cached.interval.end
230
+ end
231
+ return cached
232
+ end
233
+
234
+ i0, s0 = index, []
235
+ i1 = index
236
+ r2 = _nt_tstr
237
+ if r2
238
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
239
+ r1 = r2
240
+ else
241
+ r3 = _nt_bstr
242
+ if r3
243
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
244
+ r1 = r3
245
+ else
246
+ @index = i1
247
+ r1 = nil
248
+ end
249
+ end
250
+ s0 << r1
251
+ if r1
252
+ r4 = _nt_spec
253
+ s0 << r4
254
+ end
255
+ if s0.last
256
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
257
+ r0.extend(String10)
258
+ r0.extend(String11)
259
+ else
260
+ @index = i0
261
+ r0 = nil
262
+ end
263
+
264
+ node_cache[:string1][start_index] = r0
265
+
266
+ r0
267
+ end
268
+
269
+ def _nt_string1e
270
+ start_index = index
271
+ if node_cache[:string1e].has_key?(index)
272
+ cached = node_cache[:string1e][index]
273
+ if cached
274
+ node_cache[:string1e][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
275
+ @index = cached.interval.end
276
+ end
277
+ return cached
278
+ end
279
+
280
+ i0 = index
281
+ r1 = _nt_string1
282
+ if r1
283
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
284
+ r0 = r1
285
+ else
286
+ r2 = _nt_ellipsis
287
+ if r2
288
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
289
+ r0 = r2
290
+ else
291
+ @index = i0
292
+ r0 = nil
293
+ end
294
+ end
295
+
296
+ node_cache[:string1e][start_index] = r0
297
+
298
+ r0
299
+ end
300
+
301
+ module Ellipsis0
302
+ def ast; CBOR::Tagged.new(888, nil) end
303
+ end
304
+
305
+ def _nt_ellipsis
306
+ start_index = index
307
+ if node_cache[:ellipsis].has_key?(index)
308
+ cached = node_cache[:ellipsis][index]
309
+ if cached
310
+ node_cache[:ellipsis][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
311
+ @index = cached.interval.end
312
+ end
313
+ return cached
314
+ end
315
+
316
+ s0, i0 = [], index
317
+ loop do
318
+ if (match_len = has_terminal?(".", false, index))
319
+ r1 = true
320
+ @index += match_len
321
+ else
322
+ terminal_parse_failure('"."')
323
+ r1 = nil
324
+ end
325
+ if r1
326
+ s0 << r1
327
+ else
328
+ break
329
+ end
330
+ end
331
+ if s0.size < 3
332
+ @index = i0
333
+ r0 = nil
334
+ else
335
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
336
+ r0.extend(Ellipsis0)
337
+ r0.extend(Ellipsis0)
338
+ end
339
+
340
+ node_cache[:ellipsis][start_index] = r0
341
+
342
+ r0
343
+ end
344
+
345
+ module String0
346
+ def S1
347
+ elements[0]
348
+ end
349
+
350
+ def S2
351
+ elements[2]
352
+ end
353
+
354
+ def string1e
355
+ elements[3]
356
+ end
357
+ end
358
+
359
+ module String1
360
+ def string1e
361
+ elements[0]
362
+ end
363
+
364
+ end
365
+
366
+ module String2
367
+ def join1(s)
368
+ s.join # XXX -- look at encoding and ei
369
+ end
370
+ def unpack_chunk(c, s)
371
+ if c == String
372
+ join1(s)
373
+ else
374
+ unless c == CBOR::Tagged && s.first.tag == 888 && s.first.value == nil # XXX check all values?
375
+ raise "*** unjoinable chunks #{c.inspect} #{s.inspect}" if s.size != 1
376
+ end
377
+ s.first
378
+ end
379
+ end
380
+ def ast
381
+ arr = [elements[0].ast] + elements[1].elements.map {|x| x.elements[3].ast}
382
+ charr = arr.chunk(&:class).to_a
383
+ if charr.size == 1
384
+ unpack_chunk(*charr.first)
385
+ else
386
+ CBOR::Tagged.new(888, charr.map {|x| unpack_chunk(*x)})
387
+ end
388
+ end
389
+ end
390
+
391
+ def _nt_string
392
+ start_index = index
393
+ if node_cache[:string].has_key?(index)
394
+ cached = node_cache[:string][index]
395
+ if cached
396
+ node_cache[:string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
397
+ @index = cached.interval.end
398
+ end
399
+ return cached
400
+ end
401
+
402
+ i0, s0 = index, []
403
+ r1 = _nt_string1e
404
+ s0 << r1
405
+ if r1
406
+ s2, i2 = [], index
407
+ loop do
408
+ i3, s3 = index, []
409
+ r4 = _nt_S
410
+ s3 << r4
411
+ if r4
412
+ if (match_len = has_terminal?("+", false, index))
413
+ r5 = true
414
+ @index += match_len
415
+ else
416
+ terminal_parse_failure('"+"')
417
+ r5 = nil
418
+ end
419
+ s3 << r5
420
+ if r5
421
+ r6 = _nt_S
422
+ s3 << r6
423
+ if r6
424
+ r7 = _nt_string1e
425
+ s3 << r7
426
+ end
427
+ end
428
+ end
429
+ if s3.last
430
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
431
+ r3.extend(String0)
432
+ else
433
+ @index = i3
434
+ r3 = nil
435
+ end
436
+ if r3
437
+ s2 << r3
438
+ else
439
+ break
440
+ end
441
+ end
442
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
443
+ s0 << r2
444
+ end
445
+ if s0.last
446
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
447
+ r0.extend(String1)
448
+ r0.extend(String2)
449
+ else
450
+ @index = i0
451
+ r0 = nil
452
+ end
453
+
454
+ node_cache[:string][start_index] = r0
455
+
456
+ r0
457
+ end
458
+
459
+ module Number0
460
+ def spec
461
+ elements[1]
462
+ end
463
+ end
464
+
465
+ module Number1
466
+ def ast
467
+ if ei = spec.text_value[1..-1]
468
+ warn "*** ignoring unimplemented encoding indicator #{ei.inspect} for #{elements[0].text_value}"
469
+ end
470
+ elements[0].ast
471
+ end
472
+ end
473
+
474
+ def _nt_number
475
+ start_index = index
476
+ if node_cache[:number].has_key?(index)
477
+ cached = node_cache[:number][index]
478
+ if cached
479
+ node_cache[:number][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
480
+ @index = cached.interval.end
481
+ end
482
+ return cached
483
+ end
484
+
485
+ i0, s0 = index, []
486
+ i1 = index
487
+ r2 = _nt_basenumber
488
+ if r2
489
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
490
+ r1 = r2
491
+ else
492
+ r3 = _nt_decnumber
493
+ if r3
494
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
495
+ r1 = r3
496
+ else
497
+ r4 = _nt_infin
498
+ if r4
499
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
500
+ r1 = r4
501
+ else
502
+ @index = i1
503
+ r1 = nil
504
+ end
505
+ end
506
+ end
507
+ s0 << r1
508
+ if r1
509
+ r5 = _nt_spec
510
+ s0 << r5
511
+ end
512
+ if s0.last
513
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
514
+ r0.extend(Number0)
515
+ r0.extend(Number1)
516
+ else
517
+ @index = i0
518
+ r0 = nil
519
+ end
520
+
521
+ node_cache[:number][start_index] = r0
522
+
523
+ r0
524
+ end
525
+
526
+ def _nt_sign
527
+ start_index = index
528
+ if node_cache[:sign].has_key?(index)
529
+ cached = node_cache[:sign][index]
530
+ if cached
531
+ node_cache[:sign][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
532
+ @index = cached.interval.end
533
+ end
534
+ return cached
535
+ end
536
+
537
+ i0 = index
538
+ if (match_len = has_terminal?("+", false, index))
539
+ r1 = true
540
+ @index += match_len
541
+ else
542
+ terminal_parse_failure('"+"')
543
+ r1 = nil
544
+ end
545
+ if r1
546
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
547
+ r0 = r1
548
+ else
549
+ if (match_len = has_terminal?("-", false, index))
550
+ r2 = true
551
+ @index += match_len
552
+ else
553
+ terminal_parse_failure('"-"')
554
+ r2 = nil
555
+ end
556
+ if r2
557
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
558
+ r0 = r2
559
+ else
560
+ @index = i0
561
+ r0 = nil
562
+ end
563
+ end
564
+
565
+ node_cache[:sign][start_index] = r0
566
+
567
+ r0
568
+ end
569
+
570
+ module Decnumber0
571
+ end
572
+
573
+ module Decnumber1
574
+ end
575
+
576
+ module Decnumber2
577
+ end
578
+
579
+ module Decnumber3
580
+ end
581
+
582
+ module Decnumber4
583
+ end
584
+
585
+ module Decnumber5
586
+ def ast
587
+ tv = text_value
588
+ if /[.e]/i =~ tv
589
+ sp = elements[0].text_value
590
+ mp = elements[1].text_value.sub(/\A\./, "0.").sub(/\.\z/, ".0")
591
+ ep = elements[2].text_value
592
+ (sp + mp + ep).to_f
593
+ else
594
+ tv.to_i
595
+ end
596
+ end
597
+ end
598
+
599
+ def _nt_decnumber
600
+ start_index = index
601
+ if node_cache[:decnumber].has_key?(index)
602
+ cached = node_cache[:decnumber][index]
603
+ if cached
604
+ node_cache[:decnumber][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
605
+ @index = cached.interval.end
606
+ end
607
+ return cached
608
+ end
609
+
610
+ i0, s0 = index, []
611
+ r2 = _nt_sign
612
+ if r2
613
+ r1 = r2
614
+ else
615
+ r1 = instantiate_node(SyntaxNode,input, index...index)
616
+ end
617
+ s0 << r1
618
+ if r1
619
+ i3 = index
620
+ i4, s4 = index, []
621
+ s5, i5 = [], index
622
+ loop do
623
+ r6 = _nt_DIGIT
624
+ if r6
625
+ s5 << r6
626
+ else
627
+ break
628
+ end
629
+ end
630
+ if s5.empty?
631
+ @index = i5
632
+ r5 = nil
633
+ else
634
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
635
+ end
636
+ s4 << r5
637
+ if r5
638
+ i8, s8 = index, []
639
+ if (match_len = has_terminal?(".", false, index))
640
+ r9 = true
641
+ @index += match_len
642
+ else
643
+ terminal_parse_failure('"."')
644
+ r9 = nil
645
+ end
646
+ s8 << r9
647
+ if r9
648
+ s10, i10 = [], index
649
+ loop do
650
+ r11 = _nt_DIGIT
651
+ if r11
652
+ s10 << r11
653
+ else
654
+ break
655
+ end
656
+ end
657
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
658
+ s8 << r10
659
+ end
660
+ if s8.last
661
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
662
+ r8.extend(Decnumber0)
663
+ else
664
+ @index = i8
665
+ r8 = nil
666
+ end
667
+ if r8
668
+ r7 = r8
669
+ else
670
+ r7 = instantiate_node(SyntaxNode,input, index...index)
671
+ end
672
+ s4 << r7
673
+ end
674
+ if s4.last
675
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
676
+ r4.extend(Decnumber1)
677
+ else
678
+ @index = i4
679
+ r4 = nil
680
+ end
681
+ if r4
682
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
683
+ r3 = r4
684
+ else
685
+ i12, s12 = index, []
686
+ if (match_len = has_terminal?(".", false, index))
687
+ r13 = true
688
+ @index += match_len
689
+ else
690
+ terminal_parse_failure('"."')
691
+ r13 = nil
692
+ end
693
+ s12 << r13
694
+ if r13
695
+ s14, i14 = [], index
696
+ loop do
697
+ r15 = _nt_DIGIT
698
+ if r15
699
+ s14 << r15
700
+ else
701
+ break
702
+ end
703
+ end
704
+ if s14.empty?
705
+ @index = i14
706
+ r14 = nil
707
+ else
708
+ r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
709
+ end
710
+ s12 << r14
711
+ end
712
+ if s12.last
713
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
714
+ r12.extend(Decnumber2)
715
+ else
716
+ @index = i12
717
+ r12 = nil
718
+ end
719
+ if r12
720
+ r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
721
+ r3 = r12
722
+ else
723
+ @index = i3
724
+ r3 = nil
725
+ end
726
+ end
727
+ s0 << r3
728
+ if r3
729
+ i17, s17 = index, []
730
+ if (match_len = has_terminal?("e", :insens, index))
731
+ r18 = instantiate_node(SyntaxNode,input, index...(index + match_len))
732
+ @index += match_len
733
+ else
734
+ terminal_parse_failure('"e"')
735
+ r18 = nil
736
+ end
737
+ s17 << r18
738
+ if r18
739
+ r20 = _nt_sign
740
+ if r20
741
+ r19 = r20
742
+ else
743
+ r19 = instantiate_node(SyntaxNode,input, index...index)
744
+ end
745
+ s17 << r19
746
+ if r19
747
+ s21, i21 = [], index
748
+ loop do
749
+ r22 = _nt_DIGIT
750
+ if r22
751
+ s21 << r22
752
+ else
753
+ break
754
+ end
755
+ end
756
+ if s21.empty?
757
+ @index = i21
758
+ r21 = nil
759
+ else
760
+ r21 = instantiate_node(SyntaxNode,input, i21...index, s21)
761
+ end
762
+ s17 << r21
763
+ end
764
+ end
765
+ if s17.last
766
+ r17 = instantiate_node(SyntaxNode,input, i17...index, s17)
767
+ r17.extend(Decnumber3)
768
+ else
769
+ @index = i17
770
+ r17 = nil
771
+ end
772
+ if r17
773
+ r16 = r17
774
+ else
775
+ r16 = instantiate_node(SyntaxNode,input, index...index)
776
+ end
777
+ s0 << r16
778
+ end
779
+ end
780
+ if s0.last
781
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
782
+ r0.extend(Decnumber4)
783
+ r0.extend(Decnumber5)
784
+ else
785
+ @index = i0
786
+ r0 = nil
787
+ end
788
+
789
+ node_cache[:decnumber][start_index] = r0
790
+
791
+ r0
792
+ end
793
+
794
+ module Basenumber0
795
+ end
796
+
797
+ module Basenumber1
798
+ end
799
+
800
+ module Basenumber2
801
+ end
802
+
803
+ module Basenumber3
804
+ end
805
+
806
+ module Basenumber4
807
+ end
808
+
809
+ module Basenumber5
810
+ end
811
+
812
+ module Basenumber6
813
+ end
814
+
815
+ module Basenumber7
816
+ def ast; /p/i =~ text_value ? Float(text_value.sub(/x\./i, "x0.").sub(/\.p/i, ".0p")) : Integer(text_value) end
817
+ end
818
+
819
+ def _nt_basenumber
820
+ start_index = index
821
+ if node_cache[:basenumber].has_key?(index)
822
+ cached = node_cache[:basenumber][index]
823
+ if cached
824
+ node_cache[:basenumber][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
825
+ @index = cached.interval.end
826
+ end
827
+ return cached
828
+ end
829
+
830
+ i0, s0 = index, []
831
+ r2 = _nt_sign
832
+ if r2
833
+ r1 = r2
834
+ else
835
+ r1 = instantiate_node(SyntaxNode,input, index...index)
836
+ end
837
+ s0 << r1
838
+ if r1
839
+ if (match_len = has_terminal?("0", false, index))
840
+ r3 = true
841
+ @index += match_len
842
+ else
843
+ terminal_parse_failure('"0"')
844
+ r3 = nil
845
+ end
846
+ s0 << r3
847
+ if r3
848
+ i4 = index
849
+ i5, s5 = index, []
850
+ if (match_len = has_terminal?("x", :insens, index))
851
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
852
+ @index += match_len
853
+ else
854
+ terminal_parse_failure('"x"')
855
+ r6 = nil
856
+ end
857
+ s5 << r6
858
+ if r6
859
+ s7, i7 = [], index
860
+ loop do
861
+ r8 = _nt_HEXDIG
862
+ if r8
863
+ s7 << r8
864
+ else
865
+ break
866
+ end
867
+ end
868
+ if s7.empty?
869
+ @index = i7
870
+ r7 = nil
871
+ else
872
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
873
+ end
874
+ s5 << r7
875
+ if r7
876
+ i10, s10 = index, []
877
+ i12, s12 = index, []
878
+ if (match_len = has_terminal?(".", false, index))
879
+ r13 = true
880
+ @index += match_len
881
+ else
882
+ terminal_parse_failure('"."')
883
+ r13 = nil
884
+ end
885
+ s12 << r13
886
+ if r13
887
+ s14, i14 = [], index
888
+ loop do
889
+ r15 = _nt_HEXDIG
890
+ if r15
891
+ s14 << r15
892
+ else
893
+ break
894
+ end
895
+ end
896
+ r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
897
+ s12 << r14
898
+ end
899
+ if s12.last
900
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
901
+ r12.extend(Basenumber0)
902
+ else
903
+ @index = i12
904
+ r12 = nil
905
+ end
906
+ if r12
907
+ r11 = r12
908
+ else
909
+ r11 = instantiate_node(SyntaxNode,input, index...index)
910
+ end
911
+ s10 << r11
912
+ if r11
913
+ if (match_len = has_terminal?("p", :insens, index))
914
+ r16 = instantiate_node(SyntaxNode,input, index...(index + match_len))
915
+ @index += match_len
916
+ else
917
+ terminal_parse_failure('"p"')
918
+ r16 = nil
919
+ end
920
+ s10 << r16
921
+ if r16
922
+ r18 = _nt_sign
923
+ if r18
924
+ r17 = r18
925
+ else
926
+ r17 = instantiate_node(SyntaxNode,input, index...index)
927
+ end
928
+ s10 << r17
929
+ if r17
930
+ s19, i19 = [], index
931
+ loop do
932
+ r20 = _nt_DIGIT
933
+ if r20
934
+ s19 << r20
935
+ else
936
+ break
937
+ end
938
+ end
939
+ if s19.empty?
940
+ @index = i19
941
+ r19 = nil
942
+ else
943
+ r19 = instantiate_node(SyntaxNode,input, i19...index, s19)
944
+ end
945
+ s10 << r19
946
+ end
947
+ end
948
+ end
949
+ if s10.last
950
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
951
+ r10.extend(Basenumber1)
952
+ else
953
+ @index = i10
954
+ r10 = nil
955
+ end
956
+ if r10
957
+ r9 = r10
958
+ else
959
+ r9 = instantiate_node(SyntaxNode,input, index...index)
960
+ end
961
+ s5 << r9
962
+ end
963
+ end
964
+ if s5.last
965
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
966
+ r5.extend(Basenumber2)
967
+ else
968
+ @index = i5
969
+ r5 = nil
970
+ end
971
+ if r5
972
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
973
+ r4 = r5
974
+ else
975
+ i21, s21 = index, []
976
+ if (match_len = has_terminal?("x", :insens, index))
977
+ r22 = instantiate_node(SyntaxNode,input, index...(index + match_len))
978
+ @index += match_len
979
+ else
980
+ terminal_parse_failure('"x"')
981
+ r22 = nil
982
+ end
983
+ s21 << r22
984
+ if r22
985
+ if (match_len = has_terminal?(".", false, index))
986
+ r23 = true
987
+ @index += match_len
988
+ else
989
+ terminal_parse_failure('"."')
990
+ r23 = nil
991
+ end
992
+ s21 << r23
993
+ if r23
994
+ s24, i24 = [], index
995
+ loop do
996
+ r25 = _nt_HEXDIG
997
+ if r25
998
+ s24 << r25
999
+ else
1000
+ break
1001
+ end
1002
+ end
1003
+ if s24.empty?
1004
+ @index = i24
1005
+ r24 = nil
1006
+ else
1007
+ r24 = instantiate_node(SyntaxNode,input, i24...index, s24)
1008
+ end
1009
+ s21 << r24
1010
+ if r24
1011
+ if (match_len = has_terminal?("p", :insens, index))
1012
+ r26 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1013
+ @index += match_len
1014
+ else
1015
+ terminal_parse_failure('"p"')
1016
+ r26 = nil
1017
+ end
1018
+ s21 << r26
1019
+ if r26
1020
+ r28 = _nt_sign
1021
+ if r28
1022
+ r27 = r28
1023
+ else
1024
+ r27 = instantiate_node(SyntaxNode,input, index...index)
1025
+ end
1026
+ s21 << r27
1027
+ if r27
1028
+ s29, i29 = [], index
1029
+ loop do
1030
+ r30 = _nt_DIGIT
1031
+ if r30
1032
+ s29 << r30
1033
+ else
1034
+ break
1035
+ end
1036
+ end
1037
+ if s29.empty?
1038
+ @index = i29
1039
+ r29 = nil
1040
+ else
1041
+ r29 = instantiate_node(SyntaxNode,input, i29...index, s29)
1042
+ end
1043
+ s21 << r29
1044
+ end
1045
+ end
1046
+ end
1047
+ end
1048
+ end
1049
+ if s21.last
1050
+ r21 = instantiate_node(SyntaxNode,input, i21...index, s21)
1051
+ r21.extend(Basenumber3)
1052
+ else
1053
+ @index = i21
1054
+ r21 = nil
1055
+ end
1056
+ if r21
1057
+ r21 = SyntaxNode.new(input, (index-1)...index) if r21 == true
1058
+ r4 = r21
1059
+ else
1060
+ i31, s31 = index, []
1061
+ if (match_len = has_terminal?("o", :insens, index))
1062
+ r32 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1063
+ @index += match_len
1064
+ else
1065
+ terminal_parse_failure('"o"')
1066
+ r32 = nil
1067
+ end
1068
+ s31 << r32
1069
+ if r32
1070
+ s33, i33 = [], index
1071
+ loop do
1072
+ r34 = _nt_ODIGIT
1073
+ if r34
1074
+ s33 << r34
1075
+ else
1076
+ break
1077
+ end
1078
+ end
1079
+ if s33.empty?
1080
+ @index = i33
1081
+ r33 = nil
1082
+ else
1083
+ r33 = instantiate_node(SyntaxNode,input, i33...index, s33)
1084
+ end
1085
+ s31 << r33
1086
+ end
1087
+ if s31.last
1088
+ r31 = instantiate_node(SyntaxNode,input, i31...index, s31)
1089
+ r31.extend(Basenumber4)
1090
+ else
1091
+ @index = i31
1092
+ r31 = nil
1093
+ end
1094
+ if r31
1095
+ r31 = SyntaxNode.new(input, (index-1)...index) if r31 == true
1096
+ r4 = r31
1097
+ else
1098
+ i35, s35 = index, []
1099
+ if (match_len = has_terminal?("b", :insens, index))
1100
+ r36 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1101
+ @index += match_len
1102
+ else
1103
+ terminal_parse_failure('"b"')
1104
+ r36 = nil
1105
+ end
1106
+ s35 << r36
1107
+ if r36
1108
+ s37, i37 = [], index
1109
+ loop do
1110
+ r38 = _nt_BDIGIT
1111
+ if r38
1112
+ s37 << r38
1113
+ else
1114
+ break
1115
+ end
1116
+ end
1117
+ if s37.empty?
1118
+ @index = i37
1119
+ r37 = nil
1120
+ else
1121
+ r37 = instantiate_node(SyntaxNode,input, i37...index, s37)
1122
+ end
1123
+ s35 << r37
1124
+ end
1125
+ if s35.last
1126
+ r35 = instantiate_node(SyntaxNode,input, i35...index, s35)
1127
+ r35.extend(Basenumber5)
1128
+ else
1129
+ @index = i35
1130
+ r35 = nil
1131
+ end
1132
+ if r35
1133
+ r35 = SyntaxNode.new(input, (index-1)...index) if r35 == true
1134
+ r4 = r35
1135
+ else
1136
+ @index = i4
1137
+ r4 = nil
1138
+ end
1139
+ end
1140
+ end
1141
+ end
1142
+ s0 << r4
1143
+ end
1144
+ end
1145
+ if s0.last
1146
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1147
+ r0.extend(Basenumber6)
1148
+ r0.extend(Basenumber7)
1149
+ else
1150
+ @index = i0
1151
+ r0 = nil
1152
+ end
1153
+
1154
+ node_cache[:basenumber][start_index] = r0
1155
+
1156
+ r0
1157
+ end
1158
+
1159
+ module Infin0
1160
+ def ast; Float::INFINITY end
1161
+ end
1162
+
1163
+ module Infin1
1164
+ def ast; -Float::INFINITY end
1165
+ end
1166
+
1167
+ module Infin2
1168
+ def ast; Float::NAN end
1169
+ end
1170
+
1171
+ def _nt_infin
1172
+ start_index = index
1173
+ if node_cache[:infin].has_key?(index)
1174
+ cached = node_cache[:infin][index]
1175
+ if cached
1176
+ node_cache[:infin][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1177
+ @index = cached.interval.end
1178
+ end
1179
+ return cached
1180
+ end
1181
+
1182
+ i0 = index
1183
+ if (match_len = has_terminal?("Infinity", false, index))
1184
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1185
+ r1.extend(Infin0)
1186
+ @index += match_len
1187
+ else
1188
+ terminal_parse_failure('"Infinity"')
1189
+ r1 = nil
1190
+ end
1191
+ if r1
1192
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1193
+ r0 = r1
1194
+ else
1195
+ if (match_len = has_terminal?("-Infinity", false, index))
1196
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1197
+ r2.extend(Infin1)
1198
+ @index += match_len
1199
+ else
1200
+ terminal_parse_failure('"-Infinity"')
1201
+ r2 = nil
1202
+ end
1203
+ if r2
1204
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1205
+ r0 = r2
1206
+ else
1207
+ if (match_len = has_terminal?("NaN", false, index))
1208
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1209
+ r3.extend(Infin2)
1210
+ @index += match_len
1211
+ else
1212
+ terminal_parse_failure('"NaN"')
1213
+ r3 = nil
1214
+ end
1215
+ if r3
1216
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
1217
+ r0 = r3
1218
+ else
1219
+ @index = i0
1220
+ r0 = nil
1221
+ end
1222
+ end
1223
+ end
1224
+
1225
+ node_cache[:infin][start_index] = r0
1226
+
1227
+ r0
1228
+ end
1229
+
1230
+ module Simple0
1231
+ def ast; false end
1232
+ end
1233
+
1234
+ module Simple1
1235
+ def ast; true end
1236
+ end
1237
+
1238
+ module Simple2
1239
+ def ast; nil end
1240
+ end
1241
+
1242
+ module Simple3
1243
+ def ast; CBOR::Simple.new(23) end
1244
+ end
1245
+
1246
+ module Simple4
1247
+ def S1
1248
+ elements[1]
1249
+ end
1250
+
1251
+ def item
1252
+ elements[2]
1253
+ end
1254
+
1255
+ def S2
1256
+ elements[3]
1257
+ end
1258
+
1259
+ end
1260
+
1261
+ module Simple5
1262
+ def ast; CBOR::Simple.new(item.ast) end
1263
+ end
1264
+
1265
+ def _nt_simple
1266
+ start_index = index
1267
+ if node_cache[:simple].has_key?(index)
1268
+ cached = node_cache[:simple][index]
1269
+ if cached
1270
+ node_cache[:simple][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1271
+ @index = cached.interval.end
1272
+ end
1273
+ return cached
1274
+ end
1275
+
1276
+ i0 = index
1277
+ if (match_len = has_terminal?("false", false, index))
1278
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1279
+ r1.extend(Simple0)
1280
+ @index += match_len
1281
+ else
1282
+ terminal_parse_failure('"false"')
1283
+ r1 = nil
1284
+ end
1285
+ if r1
1286
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1287
+ r0 = r1
1288
+ else
1289
+ if (match_len = has_terminal?("true", false, index))
1290
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1291
+ r2.extend(Simple1)
1292
+ @index += match_len
1293
+ else
1294
+ terminal_parse_failure('"true"')
1295
+ r2 = nil
1296
+ end
1297
+ if r2
1298
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1299
+ r0 = r2
1300
+ else
1301
+ if (match_len = has_terminal?("null", false, index))
1302
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1303
+ r3.extend(Simple2)
1304
+ @index += match_len
1305
+ else
1306
+ terminal_parse_failure('"null"')
1307
+ r3 = nil
1308
+ end
1309
+ if r3
1310
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
1311
+ r0 = r3
1312
+ else
1313
+ if (match_len = has_terminal?("undefined", false, index))
1314
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1315
+ r4.extend(Simple3)
1316
+ @index += match_len
1317
+ else
1318
+ terminal_parse_failure('"undefined"')
1319
+ r4 = nil
1320
+ end
1321
+ if r4
1322
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
1323
+ r0 = r4
1324
+ else
1325
+ i5, s5 = index, []
1326
+ if (match_len = has_terminal?("simple(", false, index))
1327
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1328
+ @index += match_len
1329
+ else
1330
+ terminal_parse_failure('"simple("')
1331
+ r6 = nil
1332
+ end
1333
+ s5 << r6
1334
+ if r6
1335
+ r7 = _nt_S
1336
+ s5 << r7
1337
+ if r7
1338
+ r8 = _nt_item
1339
+ s5 << r8
1340
+ if r8
1341
+ r9 = _nt_S
1342
+ s5 << r9
1343
+ if r9
1344
+ if (match_len = has_terminal?(")", false, index))
1345
+ r10 = true
1346
+ @index += match_len
1347
+ else
1348
+ terminal_parse_failure('")"')
1349
+ r10 = nil
1350
+ end
1351
+ s5 << r10
1352
+ end
1353
+ end
1354
+ end
1355
+ end
1356
+ if s5.last
1357
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1358
+ r5.extend(Simple4)
1359
+ r5.extend(Simple5)
1360
+ else
1361
+ @index = i5
1362
+ r5 = nil
1363
+ end
1364
+ if r5
1365
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
1366
+ r0 = r5
1367
+ else
1368
+ @index = i0
1369
+ r0 = nil
1370
+ end
1371
+ end
1372
+ end
1373
+ end
1374
+ end
1375
+
1376
+ node_cache[:simple][start_index] = r0
1377
+
1378
+ r0
1379
+ end
1380
+
1381
+ module Uint0
1382
+ def DIGIT1
1383
+ elements[0]
1384
+ end
1385
+
1386
+ end
1387
+
1388
+ def _nt_uint
1389
+ start_index = index
1390
+ if node_cache[:uint].has_key?(index)
1391
+ cached = node_cache[:uint][index]
1392
+ if cached
1393
+ node_cache[:uint][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1394
+ @index = cached.interval.end
1395
+ end
1396
+ return cached
1397
+ end
1398
+
1399
+ i0 = index
1400
+ if (match_len = has_terminal?("0", false, index))
1401
+ r1 = true
1402
+ @index += match_len
1403
+ else
1404
+ terminal_parse_failure('"0"')
1405
+ r1 = nil
1406
+ end
1407
+ if r1
1408
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1409
+ r0 = r1
1410
+ else
1411
+ i2, s2 = index, []
1412
+ r3 = _nt_DIGIT1
1413
+ s2 << r3
1414
+ if r3
1415
+ s4, i4 = [], index
1416
+ loop do
1417
+ r5 = _nt_DIGIT
1418
+ if r5
1419
+ s4 << r5
1420
+ else
1421
+ break
1422
+ end
1423
+ end
1424
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1425
+ s2 << r4
1426
+ end
1427
+ if s2.last
1428
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1429
+ r2.extend(Uint0)
1430
+ else
1431
+ @index = i2
1432
+ r2 = nil
1433
+ end
1434
+ if r2
1435
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1436
+ r0 = r2
1437
+ else
1438
+ @index = i0
1439
+ r0 = nil
1440
+ end
1441
+ end
1442
+
1443
+ node_cache[:uint][start_index] = r0
1444
+
1445
+ r0
1446
+ end
1447
+
1448
+ module Tagged0
1449
+ def uint
1450
+ elements[0]
1451
+ end
1452
+
1453
+ def spec
1454
+ elements[1]
1455
+ end
1456
+
1457
+ def S1
1458
+ elements[3]
1459
+ end
1460
+
1461
+ def item
1462
+ elements[4]
1463
+ end
1464
+
1465
+ def S2
1466
+ elements[5]
1467
+ end
1468
+
1469
+ end
1470
+
1471
+ module Tagged1
1472
+ def ast
1473
+ if ei = spec.text_value[1..-1]
1474
+ warn "*** ignoring unimplemented encoding indicator #{ei.inspect} after tag number #{uint.text_value}"
1475
+ end
1476
+ CBOR::Tagged.new(uint.text_value.to_i, item.ast)
1477
+ end
1478
+ end
1479
+
1480
+ def _nt_tagged
1481
+ start_index = index
1482
+ if node_cache[:tagged].has_key?(index)
1483
+ cached = node_cache[:tagged][index]
1484
+ if cached
1485
+ node_cache[:tagged][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1486
+ @index = cached.interval.end
1487
+ end
1488
+ return cached
1489
+ end
1490
+
1491
+ i0, s0 = index, []
1492
+ r1 = _nt_uint
1493
+ s0 << r1
1494
+ if r1
1495
+ r2 = _nt_spec
1496
+ s0 << r2
1497
+ if r2
1498
+ if (match_len = has_terminal?("(", false, index))
1499
+ r3 = true
1500
+ @index += match_len
1501
+ else
1502
+ terminal_parse_failure('"("')
1503
+ r3 = nil
1504
+ end
1505
+ s0 << r3
1506
+ if r3
1507
+ r4 = _nt_S
1508
+ s0 << r4
1509
+ if r4
1510
+ r5 = _nt_item
1511
+ s0 << r5
1512
+ if r5
1513
+ r6 = _nt_S
1514
+ s0 << r6
1515
+ if r6
1516
+ if (match_len = has_terminal?(")", false, index))
1517
+ r7 = true
1518
+ @index += match_len
1519
+ else
1520
+ terminal_parse_failure('")"')
1521
+ r7 = nil
1522
+ end
1523
+ s0 << r7
1524
+ end
1525
+ end
1526
+ end
1527
+ end
1528
+ end
1529
+ end
1530
+ if s0.last
1531
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1532
+ r0.extend(Tagged0)
1533
+ r0.extend(Tagged1)
1534
+ else
1535
+ @index = i0
1536
+ r0 = nil
1537
+ end
1538
+
1539
+ node_cache[:tagged][start_index] = r0
1540
+
1541
+ r0
1542
+ end
1543
+
1544
+ module AppPrefix0
1545
+ def lcalpha
1546
+ elements[0]
1547
+ end
1548
+
1549
+ end
1550
+
1551
+ module AppPrefix1
1552
+ def ucalpha
1553
+ elements[0]
1554
+ end
1555
+
1556
+ end
1557
+
1558
+ def _nt_app_prefix
1559
+ start_index = index
1560
+ if node_cache[:app_prefix].has_key?(index)
1561
+ cached = node_cache[:app_prefix][index]
1562
+ if cached
1563
+ node_cache[:app_prefix][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1564
+ @index = cached.interval.end
1565
+ end
1566
+ return cached
1567
+ end
1568
+
1569
+ i0 = index
1570
+ i1, s1 = index, []
1571
+ r2 = _nt_lcalpha
1572
+ s1 << r2
1573
+ if r2
1574
+ s3, i3 = [], index
1575
+ loop do
1576
+ r4 = _nt_lcalnum
1577
+ if r4
1578
+ s3 << r4
1579
+ else
1580
+ break
1581
+ end
1582
+ end
1583
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1584
+ s1 << r3
1585
+ end
1586
+ if s1.last
1587
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1588
+ r1.extend(AppPrefix0)
1589
+ else
1590
+ @index = i1
1591
+ r1 = nil
1592
+ end
1593
+ if r1
1594
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1595
+ r0 = r1
1596
+ else
1597
+ i5, s5 = index, []
1598
+ r6 = _nt_ucalpha
1599
+ s5 << r6
1600
+ if r6
1601
+ s7, i7 = [], index
1602
+ loop do
1603
+ r8 = _nt_ucalnum
1604
+ if r8
1605
+ s7 << r8
1606
+ else
1607
+ break
1608
+ end
1609
+ end
1610
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
1611
+ s5 << r7
1612
+ end
1613
+ if s5.last
1614
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1615
+ r5.extend(AppPrefix1)
1616
+ else
1617
+ @index = i5
1618
+ r5 = nil
1619
+ end
1620
+ if r5
1621
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
1622
+ r0 = r5
1623
+ else
1624
+ @index = i0
1625
+ r0 = nil
1626
+ end
1627
+ end
1628
+
1629
+ node_cache[:app_prefix][start_index] = r0
1630
+
1631
+ r0
1632
+ end
1633
+
1634
+ module AppString0
1635
+ def app_prefix
1636
+ elements[0]
1637
+ end
1638
+
1639
+ def sqstr
1640
+ elements[1]
1641
+ end
1642
+ end
1643
+
1644
+ module AppString1
1645
+ def ast # XXX ignoring h and b64
1646
+ data = sqstr.ast.force_encoding(Encoding::UTF_8) # XXX undo .b
1647
+ app = app_prefix.text_value
1648
+ # Find a better place to put a default initialization
1649
+ EDNGRAMMAR.const_set(:APPS, Hash.new { |h, k|
1650
+ h[k] = begin ::CBOR_DIAG.const_get("App_#{k.downcase}")
1651
+
1652
+ rescue NameError
1653
+ raise ArgumentError, "cbor-diagnostic: Unknown application-oriented extension '#{k}'", caller
1654
+ end
1655
+ }) unless ::EDNGRAMMAR.const_defined?(:APPS)
1656
+ ::EDNGRAMMAR::APPS[app].decode(app, data)
1657
+ end
1658
+ end
1659
+
1660
+ def _nt_app_string
1661
+ start_index = index
1662
+ if node_cache[:app_string].has_key?(index)
1663
+ cached = node_cache[:app_string][index]
1664
+ if cached
1665
+ node_cache[:app_string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1666
+ @index = cached.interval.end
1667
+ end
1668
+ return cached
1669
+ end
1670
+
1671
+ i0, s0 = index, []
1672
+ r1 = _nt_app_prefix
1673
+ s0 << r1
1674
+ if r1
1675
+ r2 = _nt_sqstr
1676
+ s0 << r2
1677
+ end
1678
+ if s0.last
1679
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1680
+ r0.extend(AppString0)
1681
+ r0.extend(AppString1)
1682
+ else
1683
+ @index = i0
1684
+ r0 = nil
1685
+ end
1686
+
1687
+ node_cache[:app_string][start_index] = r0
1688
+
1689
+ r0
1690
+ end
1691
+
1692
+ module Sqstr0
1693
+ end
1694
+
1695
+ module Sqstr1
1696
+ def ast
1697
+ elements[1].elements.map {|x| x.ast}.join.b # XXX .b
1698
+ end
1699
+ end
1700
+
1701
+ def _nt_sqstr
1702
+ start_index = index
1703
+ if node_cache[:sqstr].has_key?(index)
1704
+ cached = node_cache[:sqstr][index]
1705
+ if cached
1706
+ node_cache[:sqstr][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1707
+ @index = cached.interval.end
1708
+ end
1709
+ return cached
1710
+ end
1711
+
1712
+ i0, s0 = index, []
1713
+ if (match_len = has_terminal?("'", false, index))
1714
+ r1 = true
1715
+ @index += match_len
1716
+ else
1717
+ terminal_parse_failure('"\'"')
1718
+ r1 = nil
1719
+ end
1720
+ s0 << r1
1721
+ if r1
1722
+ s2, i2 = [], index
1723
+ loop do
1724
+ r3 = _nt_single_quoted
1725
+ if r3
1726
+ s2 << r3
1727
+ else
1728
+ break
1729
+ end
1730
+ end
1731
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1732
+ s0 << r2
1733
+ if r2
1734
+ if (match_len = has_terminal?("'", false, index))
1735
+ r4 = true
1736
+ @index += match_len
1737
+ else
1738
+ terminal_parse_failure('"\'"')
1739
+ r4 = nil
1740
+ end
1741
+ s0 << r4
1742
+ end
1743
+ end
1744
+ if s0.last
1745
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1746
+ r0.extend(Sqstr0)
1747
+ r0.extend(Sqstr1)
1748
+ else
1749
+ @index = i0
1750
+ r0 = nil
1751
+ end
1752
+
1753
+ node_cache[:sqstr][start_index] = r0
1754
+
1755
+ r0
1756
+ end
1757
+
1758
+ def _nt_bstr
1759
+ start_index = index
1760
+ if node_cache[:bstr].has_key?(index)
1761
+ cached = node_cache[:bstr][index]
1762
+ if cached
1763
+ node_cache[:bstr][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1764
+ @index = cached.interval.end
1765
+ end
1766
+ return cached
1767
+ end
1768
+
1769
+ i0 = index
1770
+ r1 = _nt_app_string
1771
+ if r1
1772
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1773
+ r0 = r1
1774
+ else
1775
+ r2 = _nt_sqstr
1776
+ if r2
1777
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1778
+ r0 = r2
1779
+ else
1780
+ r3 = _nt_embedded
1781
+ if r3
1782
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
1783
+ r0 = r3
1784
+ else
1785
+ @index = i0
1786
+ r0 = nil
1787
+ end
1788
+ end
1789
+ end
1790
+
1791
+ node_cache[:bstr][start_index] = r0
1792
+
1793
+ r0
1794
+ end
1795
+
1796
+ module Tstr0
1797
+ def DQUOTE1
1798
+ elements[0]
1799
+ end
1800
+
1801
+ def DQUOTE2
1802
+ elements[2]
1803
+ end
1804
+ end
1805
+
1806
+ module Tstr1
1807
+ def ast
1808
+ elements[1].elements.map {|x| x.ast}.join
1809
+ end
1810
+ end
1811
+
1812
+ def _nt_tstr
1813
+ start_index = index
1814
+ if node_cache[:tstr].has_key?(index)
1815
+ cached = node_cache[:tstr][index]
1816
+ if cached
1817
+ node_cache[:tstr][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1818
+ @index = cached.interval.end
1819
+ end
1820
+ return cached
1821
+ end
1822
+
1823
+ i0, s0 = index, []
1824
+ r1 = _nt_DQUOTE
1825
+ s0 << r1
1826
+ if r1
1827
+ s2, i2 = [], index
1828
+ loop do
1829
+ r3 = _nt_double_quoted
1830
+ if r3
1831
+ s2 << r3
1832
+ else
1833
+ break
1834
+ end
1835
+ end
1836
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1837
+ s0 << r2
1838
+ if r2
1839
+ r4 = _nt_DQUOTE
1840
+ s0 << r4
1841
+ end
1842
+ end
1843
+ if s0.last
1844
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1845
+ r0.extend(Tstr0)
1846
+ r0.extend(Tstr1)
1847
+ else
1848
+ @index = i0
1849
+ r0 = nil
1850
+ end
1851
+
1852
+ node_cache[:tstr][start_index] = r0
1853
+
1854
+ r0
1855
+ end
1856
+
1857
+ module Embedded0
1858
+ def seq
1859
+ elements[1]
1860
+ end
1861
+
1862
+ end
1863
+
1864
+ module Embedded1
1865
+ def ast
1866
+ sn = seq.ast
1867
+ if CBOR::Sequence === sn
1868
+ sn.to_cborseq
1869
+ else
1870
+ CBOR.encode(sn)
1871
+ end
1872
+ end
1873
+ end
1874
+
1875
+ def _nt_embedded
1876
+ start_index = index
1877
+ if node_cache[:embedded].has_key?(index)
1878
+ cached = node_cache[:embedded][index]
1879
+ if cached
1880
+ node_cache[:embedded][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1881
+ @index = cached.interval.end
1882
+ end
1883
+ return cached
1884
+ end
1885
+
1886
+ i0, s0 = index, []
1887
+ if (match_len = has_terminal?("<<", false, index))
1888
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1889
+ @index += match_len
1890
+ else
1891
+ terminal_parse_failure('"<<"')
1892
+ r1 = nil
1893
+ end
1894
+ s0 << r1
1895
+ if r1
1896
+ r2 = _nt_seq
1897
+ s0 << r2
1898
+ if r2
1899
+ if (match_len = has_terminal?(">>", false, index))
1900
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1901
+ @index += match_len
1902
+ else
1903
+ terminal_parse_failure('">>"')
1904
+ r3 = nil
1905
+ end
1906
+ s0 << r3
1907
+ end
1908
+ end
1909
+ if s0.last
1910
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1911
+ r0.extend(Embedded0)
1912
+ r0.extend(Embedded1)
1913
+ else
1914
+ @index = i0
1915
+ r0 = nil
1916
+ end
1917
+
1918
+ node_cache[:embedded][start_index] = r0
1919
+
1920
+ r0
1921
+ end
1922
+
1923
+ module Array0
1924
+ def OC
1925
+ elements[0]
1926
+ end
1927
+
1928
+ def item
1929
+ elements[1]
1930
+ end
1931
+
1932
+ def S
1933
+ elements[2]
1934
+ end
1935
+ end
1936
+
1937
+ module Array1
1938
+ def item
1939
+ elements[0]
1940
+ end
1941
+
1942
+ def S
1943
+ elements[1]
1944
+ end
1945
+
1946
+ def OC
1947
+ elements[3]
1948
+ end
1949
+ end
1950
+
1951
+ module Array2
1952
+ def spec
1953
+ elements[1]
1954
+ end
1955
+
1956
+ def S
1957
+ elements[2]
1958
+ end
1959
+
1960
+ end
1961
+
1962
+ module Array3
1963
+ def ast
1964
+ r = if e = elements[3].elements
1965
+ [e[0].ast] + e[2].elements.map {|x| x.item.ast }
1966
+ else
1967
+ []
1968
+ end
1969
+ if ei = spec.text_value[1..-1]
1970
+ # warn "** ei #{ei.inspect}"
1971
+ if ei == ""
1972
+ r.cbor_stream!
1973
+ else
1974
+ warn "*** ignoring unimplemented encoding indicator #{ei.inspect} after ["
1975
+ end
1976
+ end
1977
+ r
1978
+ end
1979
+ end
1980
+
1981
+ def _nt_array
1982
+ start_index = index
1983
+ if node_cache[:array].has_key?(index)
1984
+ cached = node_cache[:array][index]
1985
+ if cached
1986
+ node_cache[:array][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1987
+ @index = cached.interval.end
1988
+ end
1989
+ return cached
1990
+ end
1991
+
1992
+ i0, s0 = index, []
1993
+ if (match_len = has_terminal?("[", false, index))
1994
+ r1 = true
1995
+ @index += match_len
1996
+ else
1997
+ terminal_parse_failure('"["')
1998
+ r1 = nil
1999
+ end
2000
+ s0 << r1
2001
+ if r1
2002
+ r2 = _nt_spec
2003
+ s0 << r2
2004
+ if r2
2005
+ r3 = _nt_S
2006
+ s0 << r3
2007
+ if r3
2008
+ i5, s5 = index, []
2009
+ r6 = _nt_item
2010
+ s5 << r6
2011
+ if r6
2012
+ r7 = _nt_S
2013
+ s5 << r7
2014
+ if r7
2015
+ s8, i8 = [], index
2016
+ loop do
2017
+ i9, s9 = index, []
2018
+ r10 = _nt_OC
2019
+ s9 << r10
2020
+ if r10
2021
+ r11 = _nt_item
2022
+ s9 << r11
2023
+ if r11
2024
+ r12 = _nt_S
2025
+ s9 << r12
2026
+ end
2027
+ end
2028
+ if s9.last
2029
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
2030
+ r9.extend(Array0)
2031
+ else
2032
+ @index = i9
2033
+ r9 = nil
2034
+ end
2035
+ if r9
2036
+ s8 << r9
2037
+ else
2038
+ break
2039
+ end
2040
+ end
2041
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
2042
+ s5 << r8
2043
+ if r8
2044
+ r13 = _nt_OC
2045
+ s5 << r13
2046
+ end
2047
+ end
2048
+ end
2049
+ if s5.last
2050
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2051
+ r5.extend(Array1)
2052
+ else
2053
+ @index = i5
2054
+ r5 = nil
2055
+ end
2056
+ if r5
2057
+ r4 = r5
2058
+ else
2059
+ r4 = instantiate_node(SyntaxNode,input, index...index)
2060
+ end
2061
+ s0 << r4
2062
+ if r4
2063
+ if (match_len = has_terminal?("]", false, index))
2064
+ r14 = true
2065
+ @index += match_len
2066
+ else
2067
+ terminal_parse_failure('"]"')
2068
+ r14 = nil
2069
+ end
2070
+ s0 << r14
2071
+ end
2072
+ end
2073
+ end
2074
+ end
2075
+ if s0.last
2076
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2077
+ r0.extend(Array2)
2078
+ r0.extend(Array3)
2079
+ else
2080
+ @index = i0
2081
+ r0 = nil
2082
+ end
2083
+
2084
+ node_cache[:array][start_index] = r0
2085
+
2086
+ r0
2087
+ end
2088
+
2089
+ module Map0
2090
+ def OC
2091
+ elements[0]
2092
+ end
2093
+
2094
+ def kp
2095
+ elements[1]
2096
+ end
2097
+
2098
+ def S
2099
+ elements[2]
2100
+ end
2101
+ end
2102
+
2103
+ module Map1
2104
+ def kp
2105
+ elements[0]
2106
+ end
2107
+
2108
+ def S
2109
+ elements[1]
2110
+ end
2111
+
2112
+ def OC
2113
+ elements[3]
2114
+ end
2115
+ end
2116
+
2117
+ module Map2
2118
+ def spec
2119
+ elements[1]
2120
+ end
2121
+
2122
+ def S
2123
+ elements[2]
2124
+ end
2125
+
2126
+ end
2127
+
2128
+ module Map3
2129
+ def ast
2130
+ r = if e = elements[3].elements
2131
+ Hash[ [e[0].ast] + e[2].elements.map {|x| x.kp.ast } ]
2132
+ else
2133
+ {}
2134
+ end
2135
+ if ei = spec.text_value[1..-1]
2136
+ if ei == ""
2137
+ r.cbor_stream!
2138
+ else
2139
+ warn "*** ignoring unimplemented encoding indicator #{ei.inspect} after \x7b"
2140
+ end
2141
+ end
2142
+ r
2143
+ end
2144
+ end
2145
+
2146
+ def _nt_map
2147
+ start_index = index
2148
+ if node_cache[:map].has_key?(index)
2149
+ cached = node_cache[:map][index]
2150
+ if cached
2151
+ node_cache[:map][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2152
+ @index = cached.interval.end
2153
+ end
2154
+ return cached
2155
+ end
2156
+
2157
+ i0, s0 = index, []
2158
+ if (match_len = has_terminal?("{", false, index))
2159
+ r1 = true
2160
+ @index += match_len
2161
+ else
2162
+ terminal_parse_failure('"{"')
2163
+ r1 = nil
2164
+ end
2165
+ s0 << r1
2166
+ if r1
2167
+ r2 = _nt_spec
2168
+ s0 << r2
2169
+ if r2
2170
+ r3 = _nt_S
2171
+ s0 << r3
2172
+ if r3
2173
+ i5, s5 = index, []
2174
+ r6 = _nt_kp
2175
+ s5 << r6
2176
+ if r6
2177
+ r7 = _nt_S
2178
+ s5 << r7
2179
+ if r7
2180
+ s8, i8 = [], index
2181
+ loop do
2182
+ i9, s9 = index, []
2183
+ r10 = _nt_OC
2184
+ s9 << r10
2185
+ if r10
2186
+ r11 = _nt_kp
2187
+ s9 << r11
2188
+ if r11
2189
+ r12 = _nt_S
2190
+ s9 << r12
2191
+ end
2192
+ end
2193
+ if s9.last
2194
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
2195
+ r9.extend(Map0)
2196
+ else
2197
+ @index = i9
2198
+ r9 = nil
2199
+ end
2200
+ if r9
2201
+ s8 << r9
2202
+ else
2203
+ break
2204
+ end
2205
+ end
2206
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
2207
+ s5 << r8
2208
+ if r8
2209
+ r13 = _nt_OC
2210
+ s5 << r13
2211
+ end
2212
+ end
2213
+ end
2214
+ if s5.last
2215
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2216
+ r5.extend(Map1)
2217
+ else
2218
+ @index = i5
2219
+ r5 = nil
2220
+ end
2221
+ if r5
2222
+ r4 = r5
2223
+ else
2224
+ r4 = instantiate_node(SyntaxNode,input, index...index)
2225
+ end
2226
+ s0 << r4
2227
+ if r4
2228
+ if (match_len = has_terminal?("}", false, index))
2229
+ r14 = true
2230
+ @index += match_len
2231
+ else
2232
+ terminal_parse_failure('"}"')
2233
+ r14 = nil
2234
+ end
2235
+ s0 << r14
2236
+ end
2237
+ end
2238
+ end
2239
+ end
2240
+ if s0.last
2241
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2242
+ r0.extend(Map2)
2243
+ r0.extend(Map3)
2244
+ else
2245
+ @index = i0
2246
+ r0 = nil
2247
+ end
2248
+
2249
+ node_cache[:map][start_index] = r0
2250
+
2251
+ r0
2252
+ end
2253
+
2254
+ module Kp0
2255
+ def item1
2256
+ elements[0]
2257
+ end
2258
+
2259
+ def S1
2260
+ elements[1]
2261
+ end
2262
+
2263
+ def S2
2264
+ elements[3]
2265
+ end
2266
+
2267
+ def item2
2268
+ elements[4]
2269
+ end
2270
+ end
2271
+
2272
+ module Kp1
2273
+ def ast
2274
+ [elements[0].ast, elements[4].ast]
2275
+ end
2276
+ end
2277
+
2278
+ def _nt_kp
2279
+ start_index = index
2280
+ if node_cache[:kp].has_key?(index)
2281
+ cached = node_cache[:kp][index]
2282
+ if cached
2283
+ node_cache[:kp][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2284
+ @index = cached.interval.end
2285
+ end
2286
+ return cached
2287
+ end
2288
+
2289
+ i0, s0 = index, []
2290
+ r1 = _nt_item
2291
+ s0 << r1
2292
+ if r1
2293
+ r2 = _nt_S
2294
+ s0 << r2
2295
+ if r2
2296
+ if (match_len = has_terminal?(":", false, index))
2297
+ r3 = true
2298
+ @index += match_len
2299
+ else
2300
+ terminal_parse_failure('":"')
2301
+ r3 = nil
2302
+ end
2303
+ s0 << r3
2304
+ if r3
2305
+ r4 = _nt_S
2306
+ s0 << r4
2307
+ if r4
2308
+ r5 = _nt_item
2309
+ s0 << r5
2310
+ end
2311
+ end
2312
+ end
2313
+ end
2314
+ if s0.last
2315
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2316
+ r0.extend(Kp0)
2317
+ r0.extend(Kp1)
2318
+ else
2319
+ @index = i0
2320
+ r0 = nil
2321
+ end
2322
+
2323
+ node_cache[:kp][start_index] = r0
2324
+
2325
+ r0
2326
+ end
2327
+
2328
+ def _nt_blank
2329
+ start_index = index
2330
+ if node_cache[:blank].has_key?(index)
2331
+ cached = node_cache[:blank][index]
2332
+ if cached
2333
+ node_cache[:blank][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2334
+ @index = cached.interval.end
2335
+ end
2336
+ return cached
2337
+ end
2338
+
2339
+ i0 = index
2340
+ if (match_len = has_terminal?("\t", false, index))
2341
+ r1 = true
2342
+ @index += match_len
2343
+ else
2344
+ terminal_parse_failure('"\\t"')
2345
+ r1 = nil
2346
+ end
2347
+ if r1
2348
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2349
+ r0 = r1
2350
+ else
2351
+ if (match_len = has_terminal?("\n", false, index))
2352
+ r2 = true
2353
+ @index += match_len
2354
+ else
2355
+ terminal_parse_failure('"\\n"')
2356
+ r2 = nil
2357
+ end
2358
+ if r2
2359
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2360
+ r0 = r2
2361
+ else
2362
+ if (match_len = has_terminal?("\r", false, index))
2363
+ r3 = true
2364
+ @index += match_len
2365
+ else
2366
+ terminal_parse_failure('"\\r"')
2367
+ r3 = nil
2368
+ end
2369
+ if r3
2370
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2371
+ r0 = r3
2372
+ else
2373
+ if (match_len = has_terminal?(" ", false, index))
2374
+ r4 = true
2375
+ @index += match_len
2376
+ else
2377
+ terminal_parse_failure('" "')
2378
+ r4 = nil
2379
+ end
2380
+ if r4
2381
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2382
+ r0 = r4
2383
+ else
2384
+ @index = i0
2385
+ r0 = nil
2386
+ end
2387
+ end
2388
+ end
2389
+ end
2390
+
2391
+ node_cache[:blank][start_index] = r0
2392
+
2393
+ r0
2394
+ end
2395
+
2396
+ def _nt_non_slash
2397
+ start_index = index
2398
+ if node_cache[:non_slash].has_key?(index)
2399
+ cached = node_cache[:non_slash][index]
2400
+ if cached
2401
+ node_cache[:non_slash][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2402
+ @index = cached.interval.end
2403
+ end
2404
+ return cached
2405
+ end
2406
+
2407
+ i0 = index
2408
+ r1 = _nt_blank
2409
+ if r1
2410
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2411
+ r0 = r1
2412
+ else
2413
+ if has_terminal?(@regexps[gr = '\A[!-\\.]'] ||= Regexp.new(gr), :regexp, index)
2414
+ r2 = true
2415
+ @index += 1
2416
+ else
2417
+ terminal_parse_failure('[!-\\.]')
2418
+ r2 = nil
2419
+ end
2420
+ if r2
2421
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2422
+ r0 = r2
2423
+ else
2424
+ if has_terminal?(@regexps[gr = '\A[0-퟿]'] ||= Regexp.new(gr), :regexp, index)
2425
+ r3 = true
2426
+ @index += 1
2427
+ else
2428
+ terminal_parse_failure('[0-퟿]')
2429
+ r3 = nil
2430
+ end
2431
+ if r3
2432
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2433
+ r0 = r3
2434
+ else
2435
+ if has_terminal?(@regexps[gr = '\A[-􏿿]'] ||= Regexp.new(gr), :regexp, index)
2436
+ r4 = true
2437
+ @index += 1
2438
+ else
2439
+ terminal_parse_failure('[-􏿿]')
2440
+ r4 = nil
2441
+ end
2442
+ if r4
2443
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2444
+ r0 = r4
2445
+ else
2446
+ @index = i0
2447
+ r0 = nil
2448
+ end
2449
+ end
2450
+ end
2451
+ end
2452
+
2453
+ node_cache[:non_slash][start_index] = r0
2454
+
2455
+ r0
2456
+ end
2457
+
2458
+ def _nt_non_lf
2459
+ start_index = index
2460
+ if node_cache[:non_lf].has_key?(index)
2461
+ cached = node_cache[:non_lf][index]
2462
+ if cached
2463
+ node_cache[:non_lf][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2464
+ @index = cached.interval.end
2465
+ end
2466
+ return cached
2467
+ end
2468
+
2469
+ i0 = index
2470
+ if (match_len = has_terminal?("\t", false, index))
2471
+ r1 = true
2472
+ @index += match_len
2473
+ else
2474
+ terminal_parse_failure('"\\t"')
2475
+ r1 = nil
2476
+ end
2477
+ if r1
2478
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2479
+ r0 = r1
2480
+ else
2481
+ if (match_len = has_terminal?("\r", false, index))
2482
+ r2 = true
2483
+ @index += match_len
2484
+ else
2485
+ terminal_parse_failure('"\\r"')
2486
+ r2 = nil
2487
+ end
2488
+ if r2
2489
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2490
+ r0 = r2
2491
+ else
2492
+ if has_terminal?(@regexps[gr = '\A[\\ -퟿]'] ||= Regexp.new(gr), :regexp, index)
2493
+ r3 = true
2494
+ @index += 1
2495
+ else
2496
+ terminal_parse_failure('[\\ -퟿]')
2497
+ r3 = nil
2498
+ end
2499
+ if r3
2500
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2501
+ r0 = r3
2502
+ else
2503
+ if has_terminal?(@regexps[gr = '\A[-􏿿]'] ||= Regexp.new(gr), :regexp, index)
2504
+ r4 = true
2505
+ @index += 1
2506
+ else
2507
+ terminal_parse_failure('[-􏿿]')
2508
+ r4 = nil
2509
+ end
2510
+ if r4
2511
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2512
+ r0 = r4
2513
+ else
2514
+ @index = i0
2515
+ r0 = nil
2516
+ end
2517
+ end
2518
+ end
2519
+ end
2520
+
2521
+ node_cache[:non_lf][start_index] = r0
2522
+
2523
+ r0
2524
+ end
2525
+
2526
+ module S0
2527
+ def comment
2528
+ elements[0]
2529
+ end
2530
+
2531
+ end
2532
+
2533
+ module S1
2534
+ end
2535
+
2536
+ def _nt_S
2537
+ start_index = index
2538
+ if node_cache[:S].has_key?(index)
2539
+ cached = node_cache[:S][index]
2540
+ if cached
2541
+ node_cache[:S][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2542
+ @index = cached.interval.end
2543
+ end
2544
+ return cached
2545
+ end
2546
+
2547
+ i0, s0 = index, []
2548
+ s1, i1 = [], index
2549
+ loop do
2550
+ r2 = _nt_blank
2551
+ if r2
2552
+ s1 << r2
2553
+ else
2554
+ break
2555
+ end
2556
+ end
2557
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2558
+ s0 << r1
2559
+ if r1
2560
+ s3, i3 = [], index
2561
+ loop do
2562
+ i4, s4 = index, []
2563
+ r5 = _nt_comment
2564
+ s4 << r5
2565
+ if r5
2566
+ s6, i6 = [], index
2567
+ loop do
2568
+ r7 = _nt_blank
2569
+ if r7
2570
+ s6 << r7
2571
+ else
2572
+ break
2573
+ end
2574
+ end
2575
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
2576
+ s4 << r6
2577
+ end
2578
+ if s4.last
2579
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
2580
+ r4.extend(S0)
2581
+ else
2582
+ @index = i4
2583
+ r4 = nil
2584
+ end
2585
+ if r4
2586
+ s3 << r4
2587
+ else
2588
+ break
2589
+ end
2590
+ end
2591
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2592
+ s0 << r3
2593
+ end
2594
+ if s0.last
2595
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2596
+ r0.extend(S1)
2597
+ else
2598
+ @index = i0
2599
+ r0 = nil
2600
+ end
2601
+
2602
+ node_cache[:S][start_index] = r0
2603
+
2604
+ r0
2605
+ end
2606
+
2607
+ module Comment0
2608
+ end
2609
+
2610
+ module Comment1
2611
+ end
2612
+
2613
+ def _nt_comment
2614
+ start_index = index
2615
+ if node_cache[:comment].has_key?(index)
2616
+ cached = node_cache[:comment][index]
2617
+ if cached
2618
+ node_cache[:comment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2619
+ @index = cached.interval.end
2620
+ end
2621
+ return cached
2622
+ end
2623
+
2624
+ i0 = index
2625
+ i1, s1 = index, []
2626
+ if (match_len = has_terminal?("/", false, index))
2627
+ r2 = true
2628
+ @index += match_len
2629
+ else
2630
+ terminal_parse_failure('"/"')
2631
+ r2 = nil
2632
+ end
2633
+ s1 << r2
2634
+ if r2
2635
+ s3, i3 = [], index
2636
+ loop do
2637
+ r4 = _nt_non_slash
2638
+ if r4
2639
+ s3 << r4
2640
+ else
2641
+ break
2642
+ end
2643
+ end
2644
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2645
+ s1 << r3
2646
+ if r3
2647
+ if (match_len = has_terminal?("/", false, index))
2648
+ r5 = true
2649
+ @index += match_len
2650
+ else
2651
+ terminal_parse_failure('"/"')
2652
+ r5 = nil
2653
+ end
2654
+ s1 << r5
2655
+ end
2656
+ end
2657
+ if s1.last
2658
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2659
+ r1.extend(Comment0)
2660
+ else
2661
+ @index = i1
2662
+ r1 = nil
2663
+ end
2664
+ if r1
2665
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2666
+ r0 = r1
2667
+ else
2668
+ i6, s6 = index, []
2669
+ if (match_len = has_terminal?("#", false, index))
2670
+ r7 = true
2671
+ @index += match_len
2672
+ else
2673
+ terminal_parse_failure('"#"')
2674
+ r7 = nil
2675
+ end
2676
+ s6 << r7
2677
+ if r7
2678
+ s8, i8 = [], index
2679
+ loop do
2680
+ r9 = _nt_non_lf
2681
+ if r9
2682
+ s8 << r9
2683
+ else
2684
+ break
2685
+ end
2686
+ end
2687
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
2688
+ s6 << r8
2689
+ if r8
2690
+ if (match_len = has_terminal?("\n", false, index))
2691
+ r10 = true
2692
+ @index += match_len
2693
+ else
2694
+ terminal_parse_failure('"\\n"')
2695
+ r10 = nil
2696
+ end
2697
+ s6 << r10
2698
+ end
2699
+ end
2700
+ if s6.last
2701
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
2702
+ r6.extend(Comment1)
2703
+ else
2704
+ @index = i6
2705
+ r6 = nil
2706
+ end
2707
+ if r6
2708
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2709
+ r0 = r6
2710
+ else
2711
+ @index = i0
2712
+ r0 = nil
2713
+ end
2714
+ end
2715
+
2716
+ node_cache[:comment][start_index] = r0
2717
+
2718
+ r0
2719
+ end
2720
+
2721
+ module OC0
2722
+ def S
2723
+ elements[1]
2724
+ end
2725
+ end
2726
+
2727
+ def _nt_OC
2728
+ start_index = index
2729
+ if node_cache[:OC].has_key?(index)
2730
+ cached = node_cache[:OC][index]
2731
+ if cached
2732
+ node_cache[:OC][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2733
+ @index = cached.interval.end
2734
+ end
2735
+ return cached
2736
+ end
2737
+
2738
+ i1, s1 = index, []
2739
+ if (match_len = has_terminal?(",", false, index))
2740
+ r2 = true
2741
+ @index += match_len
2742
+ else
2743
+ terminal_parse_failure('","')
2744
+ r2 = nil
2745
+ end
2746
+ s1 << r2
2747
+ if r2
2748
+ r3 = _nt_S
2749
+ s1 << r3
2750
+ end
2751
+ if s1.last
2752
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2753
+ r1.extend(OC0)
2754
+ else
2755
+ @index = i1
2756
+ r1 = nil
2757
+ end
2758
+ if r1
2759
+ r0 = r1
2760
+ else
2761
+ r0 = instantiate_node(SyntaxNode,input, index...index)
2762
+ end
2763
+
2764
+ node_cache[:OC][start_index] = r0
2765
+
2766
+ r0
2767
+ end
2768
+
2769
+ module Streamstring0
2770
+ def OC
2771
+ elements[0]
2772
+ end
2773
+
2774
+ def string
2775
+ elements[1]
2776
+ end
2777
+
2778
+ def S
2779
+ elements[2]
2780
+ end
2781
+ end
2782
+
2783
+ module Streamstring1
2784
+ def S1
2785
+ elements[1]
2786
+ end
2787
+
2788
+ def string
2789
+ elements[2]
2790
+ end
2791
+
2792
+ def S2
2793
+ elements[3]
2794
+ end
2795
+
2796
+ def OC
2797
+ elements[5]
2798
+ end
2799
+
2800
+ end
2801
+
2802
+ module Streamstring2
2803
+ def ast
2804
+ strings = [elements[2].ast] + elements[4].elements.map {|x| x.string.ast }
2805
+ unless Set[*strings.map(&:encoding)].size == 1
2806
+ warn "*** mixed streamstring #{strings.cbor_diagnostic}"
2807
+ end
2808
+ strings.join.cbor_stream!(strings.map(&:size))
2809
+ end
2810
+ end
2811
+
2812
+ def _nt_streamstring
2813
+ start_index = index
2814
+ if node_cache[:streamstring].has_key?(index)
2815
+ cached = node_cache[:streamstring][index]
2816
+ if cached
2817
+ node_cache[:streamstring][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2818
+ @index = cached.interval.end
2819
+ end
2820
+ return cached
2821
+ end
2822
+
2823
+ i0, s0 = index, []
2824
+ if (match_len = has_terminal?("(_", false, index))
2825
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2826
+ @index += match_len
2827
+ else
2828
+ terminal_parse_failure('"(_"')
2829
+ r1 = nil
2830
+ end
2831
+ s0 << r1
2832
+ if r1
2833
+ r2 = _nt_S
2834
+ s0 << r2
2835
+ if r2
2836
+ r3 = _nt_string
2837
+ s0 << r3
2838
+ if r3
2839
+ r4 = _nt_S
2840
+ s0 << r4
2841
+ if r4
2842
+ s5, i5 = [], index
2843
+ loop do
2844
+ i6, s6 = index, []
2845
+ r7 = _nt_OC
2846
+ s6 << r7
2847
+ if r7
2848
+ r8 = _nt_string
2849
+ s6 << r8
2850
+ if r8
2851
+ r9 = _nt_S
2852
+ s6 << r9
2853
+ end
2854
+ end
2855
+ if s6.last
2856
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
2857
+ r6.extend(Streamstring0)
2858
+ else
2859
+ @index = i6
2860
+ r6 = nil
2861
+ end
2862
+ if r6
2863
+ s5 << r6
2864
+ else
2865
+ break
2866
+ end
2867
+ end
2868
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2869
+ s0 << r5
2870
+ if r5
2871
+ r10 = _nt_OC
2872
+ s0 << r10
2873
+ if r10
2874
+ if (match_len = has_terminal?(")", false, index))
2875
+ r11 = true
2876
+ @index += match_len
2877
+ else
2878
+ terminal_parse_failure('")"')
2879
+ r11 = nil
2880
+ end
2881
+ s0 << r11
2882
+ end
2883
+ end
2884
+ end
2885
+ end
2886
+ end
2887
+ end
2888
+ if s0.last
2889
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2890
+ r0.extend(Streamstring1)
2891
+ r0.extend(Streamstring2)
2892
+ else
2893
+ @index = i0
2894
+ r0 = nil
2895
+ end
2896
+
2897
+ node_cache[:streamstring][start_index] = r0
2898
+
2899
+ r0
2900
+ end
2901
+
2902
+ module Spec0
2903
+ end
2904
+
2905
+ def _nt_spec
2906
+ start_index = index
2907
+ if node_cache[:spec].has_key?(index)
2908
+ cached = node_cache[:spec][index]
2909
+ if cached
2910
+ node_cache[:spec][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2911
+ @index = cached.interval.end
2912
+ end
2913
+ return cached
2914
+ end
2915
+
2916
+ i1, s1 = index, []
2917
+ if (match_len = has_terminal?("_", false, index))
2918
+ r2 = true
2919
+ @index += match_len
2920
+ else
2921
+ terminal_parse_failure('"_"')
2922
+ r2 = nil
2923
+ end
2924
+ s1 << r2
2925
+ if r2
2926
+ s3, i3 = [], index
2927
+ loop do
2928
+ r4 = _nt_wordchar
2929
+ if r4
2930
+ s3 << r4
2931
+ else
2932
+ break
2933
+ end
2934
+ end
2935
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2936
+ s1 << r3
2937
+ end
2938
+ if s1.last
2939
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2940
+ r1.extend(Spec0)
2941
+ else
2942
+ @index = i1
2943
+ r1 = nil
2944
+ end
2945
+ if r1
2946
+ r0 = r1
2947
+ else
2948
+ r0 = instantiate_node(SyntaxNode,input, index...index)
2949
+ end
2950
+
2951
+ node_cache[:spec][start_index] = r0
2952
+
2953
+ r0
2954
+ end
2955
+
2956
+ module DoubleQuoted0
2957
+ def ast; text_value end
2958
+ end
2959
+
2960
+ module DoubleQuoted1
2961
+ def ast; text_value end
2962
+ end
2963
+
2964
+ module DoubleQuoted2
2965
+ def DQUOTE
2966
+ elements[1]
2967
+ end
2968
+ end
2969
+
2970
+ module DoubleQuoted3
2971
+ def ast; elements[1].text_value end
2972
+ end
2973
+
2974
+ module DoubleQuoted4
2975
+ def escapable
2976
+ elements[1]
2977
+ end
2978
+ end
2979
+
2980
+ module DoubleQuoted5
2981
+ def ast; escapable.ast end
2982
+ end
2983
+
2984
+ def _nt_double_quoted
2985
+ start_index = index
2986
+ if node_cache[:double_quoted].has_key?(index)
2987
+ cached = node_cache[:double_quoted][index]
2988
+ if cached
2989
+ node_cache[:double_quoted][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2990
+ @index = cached.interval.end
2991
+ end
2992
+ return cached
2993
+ end
2994
+
2995
+ i0 = index
2996
+ r1 = _nt_unescaped
2997
+ r1.extend(DoubleQuoted0)
2998
+ r1.extend(DoubleQuoted0)
2999
+ if r1
3000
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3001
+ r0 = r1
3002
+ else
3003
+ if (match_len = has_terminal?("'", false, index))
3004
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3005
+ r2.extend(DoubleQuoted1)
3006
+ @index += match_len
3007
+ else
3008
+ terminal_parse_failure('"\'"')
3009
+ r2 = nil
3010
+ end
3011
+ if r2
3012
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3013
+ r0 = r2
3014
+ else
3015
+ i3, s3 = index, []
3016
+ if (match_len = has_terminal?("\\", false, index))
3017
+ r4 = true
3018
+ @index += match_len
3019
+ else
3020
+ terminal_parse_failure('"\\\\"')
3021
+ r4 = nil
3022
+ end
3023
+ s3 << r4
3024
+ if r4
3025
+ r5 = _nt_DQUOTE
3026
+ s3 << r5
3027
+ end
3028
+ if s3.last
3029
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
3030
+ r3.extend(DoubleQuoted2)
3031
+ r3.extend(DoubleQuoted3)
3032
+ else
3033
+ @index = i3
3034
+ r3 = nil
3035
+ end
3036
+ if r3
3037
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3038
+ r0 = r3
3039
+ else
3040
+ i6, s6 = index, []
3041
+ if (match_len = has_terminal?("\\", false, index))
3042
+ r7 = true
3043
+ @index += match_len
3044
+ else
3045
+ terminal_parse_failure('"\\\\"')
3046
+ r7 = nil
3047
+ end
3048
+ s6 << r7
3049
+ if r7
3050
+ r8 = _nt_escapable
3051
+ s6 << r8
3052
+ end
3053
+ if s6.last
3054
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
3055
+ r6.extend(DoubleQuoted4)
3056
+ r6.extend(DoubleQuoted5)
3057
+ else
3058
+ @index = i6
3059
+ r6 = nil
3060
+ end
3061
+ if r6
3062
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
3063
+ r0 = r6
3064
+ else
3065
+ @index = i0
3066
+ r0 = nil
3067
+ end
3068
+ end
3069
+ end
3070
+ end
3071
+
3072
+ node_cache[:double_quoted][start_index] = r0
3073
+
3074
+ r0
3075
+ end
3076
+
3077
+ module SingleQuoted0
3078
+ def ast; text_value end
3079
+ end
3080
+
3081
+ module SingleQuoted1
3082
+ def ast; text_value end
3083
+ end
3084
+
3085
+ module SingleQuoted2
3086
+ end
3087
+
3088
+ module SingleQuoted3
3089
+ def ast; elements[1].text_value end
3090
+ end
3091
+
3092
+ module SingleQuoted4
3093
+ def escapable
3094
+ elements[1]
3095
+ end
3096
+ end
3097
+
3098
+ module SingleQuoted5
3099
+ def ast; escapable.ast end
3100
+ end
3101
+
3102
+ def _nt_single_quoted
3103
+ start_index = index
3104
+ if node_cache[:single_quoted].has_key?(index)
3105
+ cached = node_cache[:single_quoted][index]
3106
+ if cached
3107
+ node_cache[:single_quoted][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3108
+ @index = cached.interval.end
3109
+ end
3110
+ return cached
3111
+ end
3112
+
3113
+ i0 = index
3114
+ r1 = _nt_unescaped
3115
+ r1.extend(SingleQuoted0)
3116
+ r1.extend(SingleQuoted0)
3117
+ if r1
3118
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3119
+ r0 = r1
3120
+ else
3121
+ r2 = _nt_DQUOTE
3122
+ r2.extend(SingleQuoted1)
3123
+ r2.extend(SingleQuoted1)
3124
+ if r2
3125
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3126
+ r0 = r2
3127
+ else
3128
+ i3, s3 = index, []
3129
+ if (match_len = has_terminal?("\\", false, index))
3130
+ r4 = true
3131
+ @index += match_len
3132
+ else
3133
+ terminal_parse_failure('"\\\\"')
3134
+ r4 = nil
3135
+ end
3136
+ s3 << r4
3137
+ if r4
3138
+ if (match_len = has_terminal?("'", false, index))
3139
+ r5 = true
3140
+ @index += match_len
3141
+ else
3142
+ terminal_parse_failure('"\'"')
3143
+ r5 = nil
3144
+ end
3145
+ s3 << r5
3146
+ end
3147
+ if s3.last
3148
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
3149
+ r3.extend(SingleQuoted2)
3150
+ r3.extend(SingleQuoted3)
3151
+ else
3152
+ @index = i3
3153
+ r3 = nil
3154
+ end
3155
+ if r3
3156
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3157
+ r0 = r3
3158
+ else
3159
+ i6, s6 = index, []
3160
+ if (match_len = has_terminal?("\\", false, index))
3161
+ r7 = true
3162
+ @index += match_len
3163
+ else
3164
+ terminal_parse_failure('"\\\\"')
3165
+ r7 = nil
3166
+ end
3167
+ s6 << r7
3168
+ if r7
3169
+ r8 = _nt_escapable
3170
+ s6 << r8
3171
+ end
3172
+ if s6.last
3173
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
3174
+ r6.extend(SingleQuoted4)
3175
+ r6.extend(SingleQuoted5)
3176
+ else
3177
+ @index = i6
3178
+ r6 = nil
3179
+ end
3180
+ if r6
3181
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
3182
+ r0 = r6
3183
+ else
3184
+ @index = i0
3185
+ r0 = nil
3186
+ end
3187
+ end
3188
+ end
3189
+ end
3190
+
3191
+ node_cache[:single_quoted][start_index] = r0
3192
+
3193
+ r0
3194
+ end
3195
+
3196
+ module Escapable0
3197
+ def ast; "\b" end
3198
+ end
3199
+
3200
+ module Escapable1
3201
+ def ast; "\f" end
3202
+ end
3203
+
3204
+ module Escapable2
3205
+ def ast; "\n" end
3206
+ end
3207
+
3208
+ module Escapable3
3209
+ def ast; "\r" end
3210
+ end
3211
+
3212
+ module Escapable4
3213
+ def ast; "\t" end
3214
+ end
3215
+
3216
+ module Escapable5
3217
+ def ast; text_value end
3218
+ end
3219
+
3220
+ module Escapable6
3221
+ def ast; text_value end
3222
+ end
3223
+
3224
+ module Escapable7
3225
+ def hexchar
3226
+ elements[1]
3227
+ end
3228
+ end
3229
+
3230
+ module Escapable8
3231
+ def ast; hexchar.ast end
3232
+ end
3233
+
3234
+ def _nt_escapable
3235
+ start_index = index
3236
+ if node_cache[:escapable].has_key?(index)
3237
+ cached = node_cache[:escapable][index]
3238
+ if cached
3239
+ node_cache[:escapable][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3240
+ @index = cached.interval.end
3241
+ end
3242
+ return cached
3243
+ end
3244
+
3245
+ i0 = index
3246
+ if (match_len = has_terminal?("b", false, index))
3247
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3248
+ r1.extend(Escapable0)
3249
+ @index += match_len
3250
+ else
3251
+ terminal_parse_failure('"b"')
3252
+ r1 = nil
3253
+ end
3254
+ if r1
3255
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3256
+ r0 = r1
3257
+ else
3258
+ if (match_len = has_terminal?("f", false, index))
3259
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3260
+ r2.extend(Escapable1)
3261
+ @index += match_len
3262
+ else
3263
+ terminal_parse_failure('"f"')
3264
+ r2 = nil
3265
+ end
3266
+ if r2
3267
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3268
+ r0 = r2
3269
+ else
3270
+ if (match_len = has_terminal?("n", false, index))
3271
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3272
+ r3.extend(Escapable2)
3273
+ @index += match_len
3274
+ else
3275
+ terminal_parse_failure('"n"')
3276
+ r3 = nil
3277
+ end
3278
+ if r3
3279
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3280
+ r0 = r3
3281
+ else
3282
+ if (match_len = has_terminal?("r", false, index))
3283
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3284
+ r4.extend(Escapable3)
3285
+ @index += match_len
3286
+ else
3287
+ terminal_parse_failure('"r"')
3288
+ r4 = nil
3289
+ end
3290
+ if r4
3291
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
3292
+ r0 = r4
3293
+ else
3294
+ if (match_len = has_terminal?("t", false, index))
3295
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3296
+ r5.extend(Escapable4)
3297
+ @index += match_len
3298
+ else
3299
+ terminal_parse_failure('"t"')
3300
+ r5 = nil
3301
+ end
3302
+ if r5
3303
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
3304
+ r0 = r5
3305
+ else
3306
+ if (match_len = has_terminal?("/", false, index))
3307
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3308
+ r6.extend(Escapable5)
3309
+ @index += match_len
3310
+ else
3311
+ terminal_parse_failure('"/"')
3312
+ r6 = nil
3313
+ end
3314
+ if r6
3315
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
3316
+ r0 = r6
3317
+ else
3318
+ if (match_len = has_terminal?("\\", false, index))
3319
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3320
+ r7.extend(Escapable6)
3321
+ @index += match_len
3322
+ else
3323
+ terminal_parse_failure('"\\\\"')
3324
+ r7 = nil
3325
+ end
3326
+ if r7
3327
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
3328
+ r0 = r7
3329
+ else
3330
+ i8, s8 = index, []
3331
+ if (match_len = has_terminal?("u", false, index))
3332
+ r9 = true
3333
+ @index += match_len
3334
+ else
3335
+ terminal_parse_failure('"u"')
3336
+ r9 = nil
3337
+ end
3338
+ s8 << r9
3339
+ if r9
3340
+ r10 = _nt_hexchar
3341
+ s8 << r10
3342
+ end
3343
+ if s8.last
3344
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
3345
+ r8.extend(Escapable7)
3346
+ r8.extend(Escapable8)
3347
+ else
3348
+ @index = i8
3349
+ r8 = nil
3350
+ end
3351
+ if r8
3352
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
3353
+ r0 = r8
3354
+ else
3355
+ @index = i0
3356
+ r0 = nil
3357
+ end
3358
+ end
3359
+ end
3360
+ end
3361
+ end
3362
+ end
3363
+ end
3364
+ end
3365
+
3366
+ node_cache[:escapable][start_index] = r0
3367
+
3368
+ r0
3369
+ end
3370
+
3371
+ module Hexchar0
3372
+ end
3373
+
3374
+ module Hexchar1
3375
+ end
3376
+
3377
+ module Hexchar2
3378
+ def ast; elements[1].hex_value.chr(Encoding::UTF_8) end
3379
+ end
3380
+
3381
+ module Hexchar3
3382
+ def ast; hex_value.chr(Encoding::UTF_8) end
3383
+ end
3384
+
3385
+ module Hexchar4
3386
+ def high_surrogate
3387
+ elements[0]
3388
+ end
3389
+
3390
+ def low_surrogate
3391
+ elements[3]
3392
+ end
3393
+ end
3394
+
3395
+ module Hexchar5
3396
+ def ast
3397
+ ((high_surrogate.ast << 10) + low_surrogate.ast + 0x10000).chr(Encoding::UTF_8)
3398
+ end
3399
+ end
3400
+
3401
+ def _nt_hexchar
3402
+ start_index = index
3403
+ if node_cache[:hexchar].has_key?(index)
3404
+ cached = node_cache[:hexchar][index]
3405
+ if cached
3406
+ node_cache[:hexchar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3407
+ @index = cached.interval.end
3408
+ end
3409
+ return cached
3410
+ end
3411
+
3412
+ i0 = index
3413
+ i1, s1 = index, []
3414
+ if (match_len = has_terminal?("{", false, index))
3415
+ r2 = true
3416
+ @index += match_len
3417
+ else
3418
+ terminal_parse_failure('"{"')
3419
+ r2 = nil
3420
+ end
3421
+ s1 << r2
3422
+ if r2
3423
+ i3 = index
3424
+ i4, s4 = index, []
3425
+ s5, i5 = [], index
3426
+ loop do
3427
+ if (match_len = has_terminal?("0", false, index))
3428
+ r6 = true
3429
+ @index += match_len
3430
+ else
3431
+ terminal_parse_failure('"0"')
3432
+ r6 = nil
3433
+ end
3434
+ if r6
3435
+ s5 << r6
3436
+ else
3437
+ break
3438
+ end
3439
+ end
3440
+ if s5.empty?
3441
+ @index = i5
3442
+ r5 = nil
3443
+ else
3444
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
3445
+ end
3446
+ s4 << r5
3447
+ if r5
3448
+ r8 = _nt_hexscalar
3449
+ if r8
3450
+ r7 = r8
3451
+ else
3452
+ r7 = instantiate_node(SyntaxNode,input, index...index)
3453
+ end
3454
+ s4 << r7
3455
+ end
3456
+ if s4.last
3457
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
3458
+ r4.extend(Hexchar0)
3459
+ else
3460
+ @index = i4
3461
+ r4 = nil
3462
+ end
3463
+ if r4
3464
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
3465
+ r3 = r4
3466
+ else
3467
+ r9 = _nt_hexscalar
3468
+ if r9
3469
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
3470
+ r3 = r9
3471
+ else
3472
+ @index = i3
3473
+ r3 = nil
3474
+ end
3475
+ end
3476
+ s1 << r3
3477
+ if r3
3478
+ if (match_len = has_terminal?("}", false, index))
3479
+ r10 = true
3480
+ @index += match_len
3481
+ else
3482
+ terminal_parse_failure('"}"')
3483
+ r10 = nil
3484
+ end
3485
+ s1 << r10
3486
+ end
3487
+ end
3488
+ if s1.last
3489
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3490
+ r1.extend(Hexchar1)
3491
+ r1.extend(Hexchar2)
3492
+ else
3493
+ @index = i1
3494
+ r1 = nil
3495
+ end
3496
+ if r1
3497
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3498
+ r0 = r1
3499
+ else
3500
+ r11 = _nt_non_surrogate
3501
+ r11.extend(Hexchar3)
3502
+ r11.extend(Hexchar3)
3503
+ if r11
3504
+ r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
3505
+ r0 = r11
3506
+ else
3507
+ i12, s12 = index, []
3508
+ r13 = _nt_high_surrogate
3509
+ s12 << r13
3510
+ if r13
3511
+ if (match_len = has_terminal?("\\", false, index))
3512
+ r14 = true
3513
+ @index += match_len
3514
+ else
3515
+ terminal_parse_failure('"\\\\"')
3516
+ r14 = nil
3517
+ end
3518
+ s12 << r14
3519
+ if r14
3520
+ if (match_len = has_terminal?("u", false, index))
3521
+ r15 = true
3522
+ @index += match_len
3523
+ else
3524
+ terminal_parse_failure('"u"')
3525
+ r15 = nil
3526
+ end
3527
+ s12 << r15
3528
+ if r15
3529
+ r16 = _nt_low_surrogate
3530
+ s12 << r16
3531
+ end
3532
+ end
3533
+ end
3534
+ if s12.last
3535
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
3536
+ r12.extend(Hexchar4)
3537
+ r12.extend(Hexchar5)
3538
+ else
3539
+ @index = i12
3540
+ r12 = nil
3541
+ end
3542
+ if r12
3543
+ r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
3544
+ r0 = r12
3545
+ else
3546
+ @index = i0
3547
+ r0 = nil
3548
+ end
3549
+ end
3550
+ end
3551
+
3552
+ node_cache[:hexchar][start_index] = r0
3553
+
3554
+ r0
3555
+ end
3556
+
3557
+ module NonSurrogate0
3558
+ end
3559
+
3560
+ module NonSurrogate1
3561
+ def ODIGIT
3562
+ elements[1]
3563
+ end
3564
+
3565
+ end
3566
+
3567
+ def _nt_non_surrogate
3568
+ start_index = index
3569
+ if node_cache[:non_surrogate].has_key?(index)
3570
+ cached = node_cache[:non_surrogate][index]
3571
+ if cached
3572
+ node_cache[:non_surrogate][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3573
+ @index = cached.interval.end
3574
+ end
3575
+ return cached
3576
+ end
3577
+
3578
+ i0 = index
3579
+ i1, s1 = index, []
3580
+ i2 = index
3581
+ r3 = _nt_DIGIT
3582
+ if r3
3583
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3584
+ r2 = r3
3585
+ else
3586
+ if (match_len = has_terminal?("a", :insens, index))
3587
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3588
+ @index += match_len
3589
+ else
3590
+ terminal_parse_failure('"A"')
3591
+ r4 = nil
3592
+ end
3593
+ if r4
3594
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
3595
+ r2 = r4
3596
+ else
3597
+ if (match_len = has_terminal?("b", :insens, index))
3598
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3599
+ @index += match_len
3600
+ else
3601
+ terminal_parse_failure('"B"')
3602
+ r5 = nil
3603
+ end
3604
+ if r5
3605
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
3606
+ r2 = r5
3607
+ else
3608
+ if (match_len = has_terminal?("c", :insens, index))
3609
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3610
+ @index += match_len
3611
+ else
3612
+ terminal_parse_failure('"C"')
3613
+ r6 = nil
3614
+ end
3615
+ if r6
3616
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
3617
+ r2 = r6
3618
+ else
3619
+ if (match_len = has_terminal?("e", :insens, index))
3620
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3621
+ @index += match_len
3622
+ else
3623
+ terminal_parse_failure('"E"')
3624
+ r7 = nil
3625
+ end
3626
+ if r7
3627
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
3628
+ r2 = r7
3629
+ else
3630
+ if (match_len = has_terminal?("f", :insens, index))
3631
+ r8 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3632
+ @index += match_len
3633
+ else
3634
+ terminal_parse_failure('"F"')
3635
+ r8 = nil
3636
+ end
3637
+ if r8
3638
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
3639
+ r2 = r8
3640
+ else
3641
+ @index = i2
3642
+ r2 = nil
3643
+ end
3644
+ end
3645
+ end
3646
+ end
3647
+ end
3648
+ end
3649
+ s1 << r2
3650
+ if r2
3651
+ s9, i9 = [], index
3652
+ loop do
3653
+ r10 = _nt_HEXDIG
3654
+ if r10
3655
+ s9 << r10
3656
+ else
3657
+ break
3658
+ end
3659
+ if s9.size == 3
3660
+ break
3661
+ end
3662
+ end
3663
+ if s9.size < 3
3664
+ @index = i9
3665
+ r9 = nil
3666
+ else
3667
+ if s9.size < 3
3668
+ @terminal_failures.pop
3669
+ end
3670
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
3671
+ end
3672
+ s1 << r9
3673
+ end
3674
+ if s1.last
3675
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3676
+ r1.extend(NonSurrogate0)
3677
+ else
3678
+ @index = i1
3679
+ r1 = nil
3680
+ end
3681
+ if r1
3682
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3683
+ r0 = r1
3684
+ else
3685
+ i11, s11 = index, []
3686
+ if (match_len = has_terminal?("d", :insens, index))
3687
+ r12 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3688
+ @index += match_len
3689
+ else
3690
+ terminal_parse_failure('"D"')
3691
+ r12 = nil
3692
+ end
3693
+ s11 << r12
3694
+ if r12
3695
+ r13 = _nt_ODIGIT
3696
+ s11 << r13
3697
+ if r13
3698
+ s14, i14 = [], index
3699
+ loop do
3700
+ r15 = _nt_HEXDIG
3701
+ if r15
3702
+ s14 << r15
3703
+ else
3704
+ break
3705
+ end
3706
+ if s14.size == 2
3707
+ break
3708
+ end
3709
+ end
3710
+ if s14.size < 2
3711
+ @index = i14
3712
+ r14 = nil
3713
+ else
3714
+ if s14.size < 2
3715
+ @terminal_failures.pop
3716
+ end
3717
+ r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
3718
+ end
3719
+ s11 << r14
3720
+ end
3721
+ end
3722
+ if s11.last
3723
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
3724
+ r11.extend(NonSurrogate1)
3725
+ else
3726
+ @index = i11
3727
+ r11 = nil
3728
+ end
3729
+ if r11
3730
+ r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
3731
+ r0 = r11
3732
+ else
3733
+ @index = i0
3734
+ r0 = nil
3735
+ end
3736
+ end
3737
+
3738
+ node_cache[:non_surrogate][start_index] = r0
3739
+
3740
+ r0
3741
+ end
3742
+
3743
+ module HighSurrogate0
3744
+ end
3745
+
3746
+ module HighSurrogate1
3747
+ def ast; hex_value - 0xD800 end
3748
+ end
3749
+
3750
+ def _nt_high_surrogate
3751
+ start_index = index
3752
+ if node_cache[:high_surrogate].has_key?(index)
3753
+ cached = node_cache[:high_surrogate][index]
3754
+ if cached
3755
+ node_cache[:high_surrogate][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3756
+ @index = cached.interval.end
3757
+ end
3758
+ return cached
3759
+ end
3760
+
3761
+ i0, s0 = index, []
3762
+ if (match_len = has_terminal?("d", :insens, index))
3763
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3764
+ @index += match_len
3765
+ else
3766
+ terminal_parse_failure('"D"')
3767
+ r1 = nil
3768
+ end
3769
+ s0 << r1
3770
+ if r1
3771
+ i2 = index
3772
+ if (match_len = has_terminal?("8", false, index))
3773
+ r3 = true
3774
+ @index += match_len
3775
+ else
3776
+ terminal_parse_failure('"8"')
3777
+ r3 = nil
3778
+ end
3779
+ if r3
3780
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3781
+ r2 = r3
3782
+ else
3783
+ if (match_len = has_terminal?("9", false, index))
3784
+ r4 = true
3785
+ @index += match_len
3786
+ else
3787
+ terminal_parse_failure('"9"')
3788
+ r4 = nil
3789
+ end
3790
+ if r4
3791
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
3792
+ r2 = r4
3793
+ else
3794
+ if (match_len = has_terminal?("a", :insens, index))
3795
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3796
+ @index += match_len
3797
+ else
3798
+ terminal_parse_failure('"A"')
3799
+ r5 = nil
3800
+ end
3801
+ if r5
3802
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
3803
+ r2 = r5
3804
+ else
3805
+ if (match_len = has_terminal?("b", :insens, index))
3806
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3807
+ @index += match_len
3808
+ else
3809
+ terminal_parse_failure('"B"')
3810
+ r6 = nil
3811
+ end
3812
+ if r6
3813
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
3814
+ r2 = r6
3815
+ else
3816
+ @index = i2
3817
+ r2 = nil
3818
+ end
3819
+ end
3820
+ end
3821
+ end
3822
+ s0 << r2
3823
+ if r2
3824
+ s7, i7 = [], index
3825
+ loop do
3826
+ r8 = _nt_HEXDIG
3827
+ if r8
3828
+ s7 << r8
3829
+ else
3830
+ break
3831
+ end
3832
+ if s7.size == 2
3833
+ break
3834
+ end
3835
+ end
3836
+ if s7.size < 2
3837
+ @index = i7
3838
+ r7 = nil
3839
+ else
3840
+ if s7.size < 2
3841
+ @terminal_failures.pop
3842
+ end
3843
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
3844
+ end
3845
+ s0 << r7
3846
+ end
3847
+ end
3848
+ if s0.last
3849
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3850
+ r0.extend(HighSurrogate0)
3851
+ r0.extend(HighSurrogate1)
3852
+ else
3853
+ @index = i0
3854
+ r0 = nil
3855
+ end
3856
+
3857
+ node_cache[:high_surrogate][start_index] = r0
3858
+
3859
+ r0
3860
+ end
3861
+
3862
+ module LowSurrogate0
3863
+ end
3864
+
3865
+ module LowSurrogate1
3866
+ def ast; hex_value - 0xDC00 end
3867
+ end
3868
+
3869
+ def _nt_low_surrogate
3870
+ start_index = index
3871
+ if node_cache[:low_surrogate].has_key?(index)
3872
+ cached = node_cache[:low_surrogate][index]
3873
+ if cached
3874
+ node_cache[:low_surrogate][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3875
+ @index = cached.interval.end
3876
+ end
3877
+ return cached
3878
+ end
3879
+
3880
+ i0, s0 = index, []
3881
+ if (match_len = has_terminal?("d", :insens, index))
3882
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3883
+ @index += match_len
3884
+ else
3885
+ terminal_parse_failure('"D"')
3886
+ r1 = nil
3887
+ end
3888
+ s0 << r1
3889
+ if r1
3890
+ i2 = index
3891
+ if (match_len = has_terminal?("c", :insens, index))
3892
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3893
+ @index += match_len
3894
+ else
3895
+ terminal_parse_failure('"C"')
3896
+ r3 = nil
3897
+ end
3898
+ if r3
3899
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3900
+ r2 = r3
3901
+ else
3902
+ if (match_len = has_terminal?("d", :insens, index))
3903
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3904
+ @index += match_len
3905
+ else
3906
+ terminal_parse_failure('"D"')
3907
+ r4 = nil
3908
+ end
3909
+ if r4
3910
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
3911
+ r2 = r4
3912
+ else
3913
+ if (match_len = has_terminal?("e", :insens, index))
3914
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3915
+ @index += match_len
3916
+ else
3917
+ terminal_parse_failure('"E"')
3918
+ r5 = nil
3919
+ end
3920
+ if r5
3921
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
3922
+ r2 = r5
3923
+ else
3924
+ if (match_len = has_terminal?("f", :insens, index))
3925
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3926
+ @index += match_len
3927
+ else
3928
+ terminal_parse_failure('"F"')
3929
+ r6 = nil
3930
+ end
3931
+ if r6
3932
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
3933
+ r2 = r6
3934
+ else
3935
+ @index = i2
3936
+ r2 = nil
3937
+ end
3938
+ end
3939
+ end
3940
+ end
3941
+ s0 << r2
3942
+ if r2
3943
+ s7, i7 = [], index
3944
+ loop do
3945
+ r8 = _nt_HEXDIG
3946
+ if r8
3947
+ s7 << r8
3948
+ else
3949
+ break
3950
+ end
3951
+ if s7.size == 2
3952
+ break
3953
+ end
3954
+ end
3955
+ if s7.size < 2
3956
+ @index = i7
3957
+ r7 = nil
3958
+ else
3959
+ if s7.size < 2
3960
+ @terminal_failures.pop
3961
+ end
3962
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
3963
+ end
3964
+ s0 << r7
3965
+ end
3966
+ end
3967
+ if s0.last
3968
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3969
+ r0.extend(LowSurrogate0)
3970
+ r0.extend(LowSurrogate1)
3971
+ else
3972
+ @index = i0
3973
+ r0 = nil
3974
+ end
3975
+
3976
+ node_cache[:low_surrogate][start_index] = r0
3977
+
3978
+ r0
3979
+ end
3980
+
3981
+ module Hexscalar0
3982
+ end
3983
+
3984
+ module Hexscalar1
3985
+ def HEXDIG1
3986
+ elements[0]
3987
+ end
3988
+
3989
+ end
3990
+
3991
+ def _nt_hexscalar
3992
+ start_index = index
3993
+ if node_cache[:hexscalar].has_key?(index)
3994
+ cached = node_cache[:hexscalar][index]
3995
+ if cached
3996
+ node_cache[:hexscalar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3997
+ @index = cached.interval.end
3998
+ end
3999
+ return cached
4000
+ end
4001
+
4002
+ i0 = index
4003
+ i1, s1 = index, []
4004
+ if (match_len = has_terminal?("10", false, index))
4005
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4006
+ @index += match_len
4007
+ else
4008
+ terminal_parse_failure('"10"')
4009
+ r2 = nil
4010
+ end
4011
+ s1 << r2
4012
+ if r2
4013
+ s3, i3 = [], index
4014
+ loop do
4015
+ r4 = _nt_HEXDIG
4016
+ if r4
4017
+ s3 << r4
4018
+ else
4019
+ break
4020
+ end
4021
+ if s3.size == 4
4022
+ break
4023
+ end
4024
+ end
4025
+ if s3.size < 4
4026
+ @index = i3
4027
+ r3 = nil
4028
+ else
4029
+ if s3.size < 4
4030
+ @terminal_failures.pop
4031
+ end
4032
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
4033
+ end
4034
+ s1 << r3
4035
+ end
4036
+ if s1.last
4037
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
4038
+ r1.extend(Hexscalar0)
4039
+ else
4040
+ @index = i1
4041
+ r1 = nil
4042
+ end
4043
+ if r1
4044
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
4045
+ r0 = r1
4046
+ else
4047
+ i5, s5 = index, []
4048
+ r6 = _nt_HEXDIG1
4049
+ s5 << r6
4050
+ if r6
4051
+ s7, i7 = [], index
4052
+ loop do
4053
+ r8 = _nt_HEXDIG
4054
+ if r8
4055
+ s7 << r8
4056
+ else
4057
+ break
4058
+ end
4059
+ if s7.size == 4
4060
+ break
4061
+ end
4062
+ end
4063
+ if s7.size < 4
4064
+ @index = i7
4065
+ r7 = nil
4066
+ else
4067
+ if s7.size < 4
4068
+ @terminal_failures.pop
4069
+ end
4070
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
4071
+ end
4072
+ s5 << r7
4073
+ end
4074
+ if s5.last
4075
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
4076
+ r5.extend(Hexscalar1)
4077
+ else
4078
+ @index = i5
4079
+ r5 = nil
4080
+ end
4081
+ if r5
4082
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
4083
+ r0 = r5
4084
+ else
4085
+ r9 = _nt_non_surrogate
4086
+ if r9
4087
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
4088
+ r0 = r9
4089
+ else
4090
+ s10, i10 = [], index
4091
+ loop do
4092
+ r11 = _nt_HEXDIG
4093
+ if r11
4094
+ s10 << r11
4095
+ else
4096
+ break
4097
+ end
4098
+ if s10.size == 3
4099
+ break
4100
+ end
4101
+ end
4102
+ if s10.size < 1
4103
+ @index = i10
4104
+ r10 = nil
4105
+ else
4106
+ if s10.size < 3
4107
+ @terminal_failures.pop
4108
+ end
4109
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
4110
+ end
4111
+ if r10
4112
+ r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
4113
+ r0 = r10
4114
+ else
4115
+ @index = i0
4116
+ r0 = nil
4117
+ end
4118
+ end
4119
+ end
4120
+ end
4121
+
4122
+ node_cache[:hexscalar][start_index] = r0
4123
+
4124
+ r0
4125
+ end
4126
+
4127
+ def _nt_unescaped
4128
+ start_index = index
4129
+ if node_cache[:unescaped].has_key?(index)
4130
+ cached = node_cache[:unescaped][index]
4131
+ if cached
4132
+ node_cache[:unescaped][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4133
+ @index = cached.interval.end
4134
+ end
4135
+ return cached
4136
+ end
4137
+
4138
+ i0 = index
4139
+ if (match_len = has_terminal?("\n", false, index))
4140
+ r1 = true
4141
+ @index += match_len
4142
+ else
4143
+ terminal_parse_failure('"\\n"')
4144
+ r1 = nil
4145
+ end
4146
+ if r1
4147
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
4148
+ r0 = r1
4149
+ else
4150
+ if (match_len = has_terminal?("\r", false, index))
4151
+ r2 = true
4152
+ @index += match_len
4153
+ else
4154
+ terminal_parse_failure('"\\r"')
4155
+ r2 = nil
4156
+ end
4157
+ if r2
4158
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
4159
+ r0 = r2
4160
+ else
4161
+ if has_terminal?(@regexps[gr = '\A[\\ -!]'] ||= Regexp.new(gr), :regexp, index)
4162
+ r3 = true
4163
+ @index += 1
4164
+ else
4165
+ terminal_parse_failure('[\\ -!]')
4166
+ r3 = nil
4167
+ end
4168
+ if r3
4169
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
4170
+ r0 = r3
4171
+ else
4172
+ if has_terminal?(@regexps[gr = '\A[\\#-&]'] ||= Regexp.new(gr), :regexp, index)
4173
+ r4 = true
4174
+ @index += 1
4175
+ else
4176
+ terminal_parse_failure('[\\#-&]')
4177
+ r4 = nil
4178
+ end
4179
+ if r4
4180
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
4181
+ r0 = r4
4182
+ else
4183
+ if has_terminal?(@regexps[gr = '\A[\\(-\\[]'] ||= Regexp.new(gr), :regexp, index)
4184
+ r5 = true
4185
+ @index += 1
4186
+ else
4187
+ terminal_parse_failure('[\\(-\\[]')
4188
+ r5 = nil
4189
+ end
4190
+ if r5
4191
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
4192
+ r0 = r5
4193
+ else
4194
+ if has_terminal?(@regexps[gr = '\A[\\]-퟿]'] ||= Regexp.new(gr), :regexp, index)
4195
+ r6 = true
4196
+ @index += 1
4197
+ else
4198
+ terminal_parse_failure('[\\]-퟿]')
4199
+ r6 = nil
4200
+ end
4201
+ if r6
4202
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
4203
+ r0 = r6
4204
+ else
4205
+ if has_terminal?(@regexps[gr = '\A[-􏿿]'] ||= Regexp.new(gr), :regexp, index)
4206
+ r7 = true
4207
+ @index += 1
4208
+ else
4209
+ terminal_parse_failure('[-􏿿]')
4210
+ r7 = nil
4211
+ end
4212
+ if r7
4213
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
4214
+ r0 = r7
4215
+ else
4216
+ @index = i0
4217
+ r0 = nil
4218
+ end
4219
+ end
4220
+ end
4221
+ end
4222
+ end
4223
+ end
4224
+ end
4225
+
4226
+ node_cache[:unescaped][start_index] = r0
4227
+
4228
+ r0
4229
+ end
4230
+
4231
+ def _nt_DQUOTE
4232
+ start_index = index
4233
+ if node_cache[:DQUOTE].has_key?(index)
4234
+ cached = node_cache[:DQUOTE][index]
4235
+ if cached
4236
+ node_cache[:DQUOTE][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4237
+ @index = cached.interval.end
4238
+ end
4239
+ return cached
4240
+ end
4241
+
4242
+ if (match_len = has_terminal?("\"", false, index))
4243
+ r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4244
+ @index += match_len
4245
+ else
4246
+ terminal_parse_failure('"\\""')
4247
+ r0 = nil
4248
+ end
4249
+
4250
+ node_cache[:DQUOTE][start_index] = r0
4251
+
4252
+ r0
4253
+ end
4254
+
4255
+ def _nt_DIGIT
4256
+ start_index = index
4257
+ if node_cache[:DIGIT].has_key?(index)
4258
+ cached = node_cache[:DIGIT][index]
4259
+ if cached
4260
+ node_cache[:DIGIT][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4261
+ @index = cached.interval.end
4262
+ end
4263
+ return cached
4264
+ end
4265
+
4266
+ if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
4267
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
4268
+ @index += 1
4269
+ else
4270
+ terminal_parse_failure('[0-9]')
4271
+ r0 = nil
4272
+ end
4273
+
4274
+ node_cache[:DIGIT][start_index] = r0
4275
+
4276
+ r0
4277
+ end
4278
+
4279
+ def _nt_DIGIT1
4280
+ start_index = index
4281
+ if node_cache[:DIGIT1].has_key?(index)
4282
+ cached = node_cache[:DIGIT1][index]
4283
+ if cached
4284
+ node_cache[:DIGIT1][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4285
+ @index = cached.interval.end
4286
+ end
4287
+ return cached
4288
+ end
4289
+
4290
+ if has_terminal?(@regexps[gr = '\A[1-9]'] ||= Regexp.new(gr), :regexp, index)
4291
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
4292
+ @index += 1
4293
+ else
4294
+ terminal_parse_failure('[1-9]')
4295
+ r0 = nil
4296
+ end
4297
+
4298
+ node_cache[:DIGIT1][start_index] = r0
4299
+
4300
+ r0
4301
+ end
4302
+
4303
+ def _nt_ODIGIT
4304
+ start_index = index
4305
+ if node_cache[:ODIGIT].has_key?(index)
4306
+ cached = node_cache[:ODIGIT][index]
4307
+ if cached
4308
+ node_cache[:ODIGIT][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4309
+ @index = cached.interval.end
4310
+ end
4311
+ return cached
4312
+ end
4313
+
4314
+ if has_terminal?(@regexps[gr = '\A[0-7]'] ||= Regexp.new(gr), :regexp, index)
4315
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
4316
+ @index += 1
4317
+ else
4318
+ terminal_parse_failure('[0-7]')
4319
+ r0 = nil
4320
+ end
4321
+
4322
+ node_cache[:ODIGIT][start_index] = r0
4323
+
4324
+ r0
4325
+ end
4326
+
4327
+ def _nt_BDIGIT
4328
+ start_index = index
4329
+ if node_cache[:BDIGIT].has_key?(index)
4330
+ cached = node_cache[:BDIGIT][index]
4331
+ if cached
4332
+ node_cache[:BDIGIT][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4333
+ @index = cached.interval.end
4334
+ end
4335
+ return cached
4336
+ end
4337
+
4338
+ if has_terminal?(@regexps[gr = '\A[0-1]'] ||= Regexp.new(gr), :regexp, index)
4339
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
4340
+ @index += 1
4341
+ else
4342
+ terminal_parse_failure('[0-1]')
4343
+ r0 = nil
4344
+ end
4345
+
4346
+ node_cache[:BDIGIT][start_index] = r0
4347
+
4348
+ r0
4349
+ end
4350
+
4351
+ def _nt_HEXDIG
4352
+ start_index = index
4353
+ if node_cache[:HEXDIG].has_key?(index)
4354
+ cached = node_cache[:HEXDIG][index]
4355
+ if cached
4356
+ node_cache[:HEXDIG][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4357
+ @index = cached.interval.end
4358
+ end
4359
+ return cached
4360
+ end
4361
+
4362
+ i0 = index
4363
+ r1 = _nt_DIGIT
4364
+ if r1
4365
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
4366
+ r0 = r1
4367
+ else
4368
+ if (match_len = has_terminal?("a", :insens, index))
4369
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4370
+ @index += match_len
4371
+ else
4372
+ terminal_parse_failure('"A"')
4373
+ r2 = nil
4374
+ end
4375
+ if r2
4376
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
4377
+ r0 = r2
4378
+ else
4379
+ if (match_len = has_terminal?("b", :insens, index))
4380
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4381
+ @index += match_len
4382
+ else
4383
+ terminal_parse_failure('"B"')
4384
+ r3 = nil
4385
+ end
4386
+ if r3
4387
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
4388
+ r0 = r3
4389
+ else
4390
+ if (match_len = has_terminal?("c", :insens, index))
4391
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4392
+ @index += match_len
4393
+ else
4394
+ terminal_parse_failure('"C"')
4395
+ r4 = nil
4396
+ end
4397
+ if r4
4398
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
4399
+ r0 = r4
4400
+ else
4401
+ if (match_len = has_terminal?("d", :insens, index))
4402
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4403
+ @index += match_len
4404
+ else
4405
+ terminal_parse_failure('"D"')
4406
+ r5 = nil
4407
+ end
4408
+ if r5
4409
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
4410
+ r0 = r5
4411
+ else
4412
+ if (match_len = has_terminal?("e", :insens, index))
4413
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4414
+ @index += match_len
4415
+ else
4416
+ terminal_parse_failure('"E"')
4417
+ r6 = nil
4418
+ end
4419
+ if r6
4420
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
4421
+ r0 = r6
4422
+ else
4423
+ if (match_len = has_terminal?("f", :insens, index))
4424
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4425
+ @index += match_len
4426
+ else
4427
+ terminal_parse_failure('"F"')
4428
+ r7 = nil
4429
+ end
4430
+ if r7
4431
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
4432
+ r0 = r7
4433
+ else
4434
+ @index = i0
4435
+ r0 = nil
4436
+ end
4437
+ end
4438
+ end
4439
+ end
4440
+ end
4441
+ end
4442
+ end
4443
+
4444
+ node_cache[:HEXDIG][start_index] = r0
4445
+
4446
+ r0
4447
+ end
4448
+
4449
+ def _nt_HEXDIG1
4450
+ start_index = index
4451
+ if node_cache[:HEXDIG1].has_key?(index)
4452
+ cached = node_cache[:HEXDIG1][index]
4453
+ if cached
4454
+ node_cache[:HEXDIG1][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4455
+ @index = cached.interval.end
4456
+ end
4457
+ return cached
4458
+ end
4459
+
4460
+ i0 = index
4461
+ r1 = _nt_DIGIT1
4462
+ if r1
4463
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
4464
+ r0 = r1
4465
+ else
4466
+ if (match_len = has_terminal?("a", :insens, index))
4467
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4468
+ @index += match_len
4469
+ else
4470
+ terminal_parse_failure('"A"')
4471
+ r2 = nil
4472
+ end
4473
+ if r2
4474
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
4475
+ r0 = r2
4476
+ else
4477
+ if (match_len = has_terminal?("b", :insens, index))
4478
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4479
+ @index += match_len
4480
+ else
4481
+ terminal_parse_failure('"B"')
4482
+ r3 = nil
4483
+ end
4484
+ if r3
4485
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
4486
+ r0 = r3
4487
+ else
4488
+ if (match_len = has_terminal?("c", :insens, index))
4489
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4490
+ @index += match_len
4491
+ else
4492
+ terminal_parse_failure('"C"')
4493
+ r4 = nil
4494
+ end
4495
+ if r4
4496
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
4497
+ r0 = r4
4498
+ else
4499
+ if (match_len = has_terminal?("d", :insens, index))
4500
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4501
+ @index += match_len
4502
+ else
4503
+ terminal_parse_failure('"D"')
4504
+ r5 = nil
4505
+ end
4506
+ if r5
4507
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
4508
+ r0 = r5
4509
+ else
4510
+ if (match_len = has_terminal?("e", :insens, index))
4511
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4512
+ @index += match_len
4513
+ else
4514
+ terminal_parse_failure('"E"')
4515
+ r6 = nil
4516
+ end
4517
+ if r6
4518
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
4519
+ r0 = r6
4520
+ else
4521
+ if (match_len = has_terminal?("f", :insens, index))
4522
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4523
+ @index += match_len
4524
+ else
4525
+ terminal_parse_failure('"F"')
4526
+ r7 = nil
4527
+ end
4528
+ if r7
4529
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
4530
+ r0 = r7
4531
+ else
4532
+ @index = i0
4533
+ r0 = nil
4534
+ end
4535
+ end
4536
+ end
4537
+ end
4538
+ end
4539
+ end
4540
+ end
4541
+
4542
+ node_cache[:HEXDIG1][start_index] = r0
4543
+
4544
+ r0
4545
+ end
4546
+
4547
+ def _nt_lcalpha
4548
+ start_index = index
4549
+ if node_cache[:lcalpha].has_key?(index)
4550
+ cached = node_cache[:lcalpha][index]
4551
+ if cached
4552
+ node_cache[:lcalpha][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4553
+ @index = cached.interval.end
4554
+ end
4555
+ return cached
4556
+ end
4557
+
4558
+ if has_terminal?(@regexps[gr = '\A[a-z]'] ||= Regexp.new(gr), :regexp, index)
4559
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
4560
+ @index += 1
4561
+ else
4562
+ terminal_parse_failure('[a-z]')
4563
+ r0 = nil
4564
+ end
4565
+
4566
+ node_cache[:lcalpha][start_index] = r0
4567
+
4568
+ r0
4569
+ end
4570
+
4571
+ def _nt_lcalnum
4572
+ start_index = index
4573
+ if node_cache[:lcalnum].has_key?(index)
4574
+ cached = node_cache[:lcalnum][index]
4575
+ if cached
4576
+ node_cache[:lcalnum][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4577
+ @index = cached.interval.end
4578
+ end
4579
+ return cached
4580
+ end
4581
+
4582
+ i0 = index
4583
+ r1 = _nt_lcalpha
4584
+ if r1
4585
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
4586
+ r0 = r1
4587
+ else
4588
+ r2 = _nt_DIGIT
4589
+ if r2
4590
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
4591
+ r0 = r2
4592
+ else
4593
+ @index = i0
4594
+ r0 = nil
4595
+ end
4596
+ end
4597
+
4598
+ node_cache[:lcalnum][start_index] = r0
4599
+
4600
+ r0
4601
+ end
4602
+
4603
+ def _nt_ucalpha
4604
+ start_index = index
4605
+ if node_cache[:ucalpha].has_key?(index)
4606
+ cached = node_cache[:ucalpha][index]
4607
+ if cached
4608
+ node_cache[:ucalpha][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4609
+ @index = cached.interval.end
4610
+ end
4611
+ return cached
4612
+ end
4613
+
4614
+ if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
4615
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
4616
+ @index += 1
4617
+ else
4618
+ terminal_parse_failure('[A-Z]')
4619
+ r0 = nil
4620
+ end
4621
+
4622
+ node_cache[:ucalpha][start_index] = r0
4623
+
4624
+ r0
4625
+ end
4626
+
4627
+ def _nt_ucalnum
4628
+ start_index = index
4629
+ if node_cache[:ucalnum].has_key?(index)
4630
+ cached = node_cache[:ucalnum][index]
4631
+ if cached
4632
+ node_cache[:ucalnum][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4633
+ @index = cached.interval.end
4634
+ end
4635
+ return cached
4636
+ end
4637
+
4638
+ i0 = index
4639
+ r1 = _nt_ucalpha
4640
+ if r1
4641
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
4642
+ r0 = r1
4643
+ else
4644
+ r2 = _nt_DIGIT
4645
+ if r2
4646
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
4647
+ r0 = r2
4648
+ else
4649
+ @index = i0
4650
+ r0 = nil
4651
+ end
4652
+ end
4653
+
4654
+ node_cache[:ucalnum][start_index] = r0
4655
+
4656
+ r0
4657
+ end
4658
+
4659
+ def _nt_wordchar
4660
+ start_index = index
4661
+ if node_cache[:wordchar].has_key?(index)
4662
+ cached = node_cache[:wordchar][index]
4663
+ if cached
4664
+ node_cache[:wordchar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4665
+ @index = cached.interval.end
4666
+ end
4667
+ return cached
4668
+ end
4669
+
4670
+ i0 = index
4671
+ if (match_len = has_terminal?("_", false, index))
4672
+ r1 = true
4673
+ @index += match_len
4674
+ else
4675
+ terminal_parse_failure('"_"')
4676
+ r1 = nil
4677
+ end
4678
+ if r1
4679
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
4680
+ r0 = r1
4681
+ else
4682
+ r2 = _nt_lcalnum
4683
+ if r2
4684
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
4685
+ r0 = r2
4686
+ else
4687
+ r3 = _nt_ucalpha
4688
+ if r3
4689
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
4690
+ r0 = r3
4691
+ else
4692
+ @index = i0
4693
+ r0 = nil
4694
+ end
4695
+ end
4696
+ end
4697
+
4698
+ node_cache[:wordchar][start_index] = r0
4699
+
4700
+ r0
4701
+ end
4702
+
4703
+ end
4704
+
4705
+ class EDNGRAMMARParser < Treetop::Runtime::CompiledParser
4706
+ include EDNGRAMMAR
4707
+ end
4708
+