edn-abnf 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3736 @@
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 S1
14
+ elements[1]
15
+ end
16
+
17
+ def item
18
+ elements[2]
19
+ end
20
+
21
+ def S2
22
+ elements[3]
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 S1
42
+ elements[0]
43
+ end
44
+
45
+ def S2
46
+ elements[2]
47
+ end
48
+ end
49
+
50
+ module Seq3
51
+ def ast
52
+ r = if e = elements[1].elements
53
+ [e[0].ast] + e[2].elements.map {|x| x.item.ast }
54
+ else
55
+ []
56
+ end
57
+ if r.size == 1
58
+ r.first
59
+ else
60
+ CBOR::Sequence.new(r)
61
+ end
62
+ end
63
+ end
64
+
65
+ def _nt_seq
66
+ start_index = index
67
+ if node_cache[:seq].has_key?(index)
68
+ cached = node_cache[:seq][index]
69
+ if cached
70
+ node_cache[:seq][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
71
+ @index = cached.interval.end
72
+ end
73
+ return cached
74
+ end
75
+
76
+ i0, s0 = index, []
77
+ r1 = _nt_S
78
+ s0 << r1
79
+ if r1
80
+ i3, s3 = index, []
81
+ r4 = _nt_item
82
+ s3 << r4
83
+ if r4
84
+ r5 = _nt_S
85
+ s3 << r5
86
+ if r5
87
+ s6, i6 = [], index
88
+ loop do
89
+ i7, s7 = index, []
90
+ if (match_len = has_terminal?(",", false, index))
91
+ r8 = true
92
+ @index += match_len
93
+ else
94
+ terminal_parse_failure('","')
95
+ r8 = nil
96
+ end
97
+ s7 << r8
98
+ if r8
99
+ r9 = _nt_S
100
+ s7 << r9
101
+ if r9
102
+ r10 = _nt_item
103
+ s7 << r10
104
+ if r10
105
+ r11 = _nt_S
106
+ s7 << r11
107
+ end
108
+ end
109
+ end
110
+ if s7.last
111
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
112
+ r7.extend(Seq0)
113
+ else
114
+ @index = i7
115
+ r7 = nil
116
+ end
117
+ if r7
118
+ s6 << r7
119
+ else
120
+ break
121
+ end
122
+ end
123
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
124
+ s3 << r6
125
+ if r6
126
+ r12 = _nt_OC
127
+ s3 << r12
128
+ end
129
+ end
130
+ end
131
+ if s3.last
132
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
133
+ r3.extend(Seq1)
134
+ else
135
+ @index = i3
136
+ r3 = nil
137
+ end
138
+ if r3
139
+ r2 = r3
140
+ else
141
+ r2 = instantiate_node(SyntaxNode,input, index...index)
142
+ end
143
+ s0 << r2
144
+ if r2
145
+ r13 = _nt_S
146
+ s0 << r13
147
+ end
148
+ end
149
+ if s0.last
150
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
151
+ r0.extend(Seq2)
152
+ r0.extend(Seq3)
153
+ else
154
+ @index = i0
155
+ r0 = nil
156
+ end
157
+
158
+ node_cache[:seq][start_index] = r0
159
+
160
+ r0
161
+ end
162
+
163
+ def _nt_item
164
+ start_index = index
165
+ if node_cache[:item].has_key?(index)
166
+ cached = node_cache[:item][index]
167
+ if cached
168
+ node_cache[:item][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
169
+ @index = cached.interval.end
170
+ end
171
+ return cached
172
+ end
173
+
174
+ i0 = index
175
+ r1 = _nt_map
176
+ if r1
177
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
178
+ r0 = r1
179
+ else
180
+ r2 = _nt_array
181
+ if r2
182
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
183
+ r0 = r2
184
+ else
185
+ r3 = _nt_tagged
186
+ if r3
187
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
188
+ r0 = r3
189
+ else
190
+ r4 = _nt_basenumber
191
+ if r4
192
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
193
+ r0 = r4
194
+ else
195
+ r5 = _nt_decnumber
196
+ if r5
197
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
198
+ r0 = r5
199
+ else
200
+ r6 = _nt_infin
201
+ if r6
202
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
203
+ r0 = r6
204
+ else
205
+ r7 = _nt_simple
206
+ if r7
207
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
208
+ r0 = r7
209
+ else
210
+ r8 = _nt_tstr
211
+ if r8
212
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
213
+ r0 = r8
214
+ else
215
+ r9 = _nt_bstr
216
+ if r9
217
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
218
+ r0 = r9
219
+ else
220
+ r10 = _nt_embedded
221
+ if r10
222
+ r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
223
+ r0 = r10
224
+ else
225
+ r11 = _nt_streamstring
226
+ if r11
227
+ r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
228
+ r0 = r11
229
+ else
230
+ @index = i0
231
+ r0 = nil
232
+ end
233
+ end
234
+ end
235
+ end
236
+ end
237
+ end
238
+ end
239
+ end
240
+ end
241
+ end
242
+ end
243
+
244
+ node_cache[:item][start_index] = r0
245
+
246
+ r0
247
+ end
248
+
249
+ def _nt_sign
250
+ start_index = index
251
+ if node_cache[:sign].has_key?(index)
252
+ cached = node_cache[:sign][index]
253
+ if cached
254
+ node_cache[:sign][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
255
+ @index = cached.interval.end
256
+ end
257
+ return cached
258
+ end
259
+
260
+ i0 = index
261
+ if (match_len = has_terminal?("+", false, index))
262
+ r1 = true
263
+ @index += match_len
264
+ else
265
+ terminal_parse_failure('"+"')
266
+ r1 = nil
267
+ end
268
+ if r1
269
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
270
+ r0 = r1
271
+ else
272
+ if (match_len = has_terminal?("-", false, index))
273
+ r2 = true
274
+ @index += match_len
275
+ else
276
+ terminal_parse_failure('"-"')
277
+ r2 = nil
278
+ end
279
+ if r2
280
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
281
+ r0 = r2
282
+ else
283
+ @index = i0
284
+ r0 = nil
285
+ end
286
+ end
287
+
288
+ node_cache[:sign][start_index] = r0
289
+
290
+ r0
291
+ end
292
+
293
+ module Decnumber0
294
+ end
295
+
296
+ module Decnumber1
297
+ end
298
+
299
+ module Decnumber2
300
+ end
301
+
302
+ module Decnumber3
303
+ def ast
304
+ ip = elements[0].text_value + elements[1].text_value
305
+ dp = elements[2].text_value
306
+ ep = elements[3].text_value
307
+ if dp.empty? && ep.empty?
308
+ ip.to_i
309
+ else
310
+ (ip + dp + ep).to_f
311
+ end
312
+ end
313
+ end
314
+
315
+ def _nt_decnumber
316
+ start_index = index
317
+ if node_cache[:decnumber].has_key?(index)
318
+ cached = node_cache[:decnumber][index]
319
+ if cached
320
+ node_cache[:decnumber][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
321
+ @index = cached.interval.end
322
+ end
323
+ return cached
324
+ end
325
+
326
+ i0, s0 = index, []
327
+ r2 = _nt_sign
328
+ if r2
329
+ r1 = r2
330
+ else
331
+ r1 = instantiate_node(SyntaxNode,input, index...index)
332
+ end
333
+ s0 << r1
334
+ if r1
335
+ s3, i3 = [], index
336
+ loop do
337
+ r4 = _nt_DIGIT
338
+ if r4
339
+ s3 << r4
340
+ else
341
+ break
342
+ end
343
+ end
344
+ if s3.empty?
345
+ @index = i3
346
+ r3 = nil
347
+ else
348
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
349
+ end
350
+ s0 << r3
351
+ if r3
352
+ i6, s6 = index, []
353
+ if (match_len = has_terminal?(".", false, index))
354
+ r7 = true
355
+ @index += match_len
356
+ else
357
+ terminal_parse_failure('"."')
358
+ r7 = nil
359
+ end
360
+ s6 << r7
361
+ if r7
362
+ s8, i8 = [], index
363
+ loop do
364
+ r9 = _nt_DIGIT
365
+ if r9
366
+ s8 << r9
367
+ else
368
+ break
369
+ end
370
+ end
371
+ if s8.empty?
372
+ @index = i8
373
+ r8 = nil
374
+ else
375
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
376
+ end
377
+ s6 << r8
378
+ end
379
+ if s6.last
380
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
381
+ r6.extend(Decnumber0)
382
+ else
383
+ @index = i6
384
+ r6 = nil
385
+ end
386
+ if r6
387
+ r5 = r6
388
+ else
389
+ r5 = instantiate_node(SyntaxNode,input, index...index)
390
+ end
391
+ s0 << r5
392
+ if r5
393
+ i11, s11 = index, []
394
+ if (match_len = has_terminal?("e", :insens, index))
395
+ r12 = instantiate_node(SyntaxNode,input, index...(index + match_len))
396
+ @index += match_len
397
+ else
398
+ terminal_parse_failure('"e"')
399
+ r12 = nil
400
+ end
401
+ s11 << r12
402
+ if r12
403
+ r14 = _nt_sign
404
+ if r14
405
+ r13 = r14
406
+ else
407
+ r13 = instantiate_node(SyntaxNode,input, index...index)
408
+ end
409
+ s11 << r13
410
+ if r13
411
+ s15, i15 = [], index
412
+ loop do
413
+ r16 = _nt_DIGIT
414
+ if r16
415
+ s15 << r16
416
+ else
417
+ break
418
+ end
419
+ end
420
+ if s15.empty?
421
+ @index = i15
422
+ r15 = nil
423
+ else
424
+ r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
425
+ end
426
+ s11 << r15
427
+ end
428
+ end
429
+ if s11.last
430
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
431
+ r11.extend(Decnumber1)
432
+ else
433
+ @index = i11
434
+ r11 = nil
435
+ end
436
+ if r11
437
+ r10 = r11
438
+ else
439
+ r10 = instantiate_node(SyntaxNode,input, index...index)
440
+ end
441
+ s0 << r10
442
+ end
443
+ end
444
+ end
445
+ if s0.last
446
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
447
+ r0.extend(Decnumber2)
448
+ r0.extend(Decnumber3)
449
+ else
450
+ @index = i0
451
+ r0 = nil
452
+ end
453
+
454
+ node_cache[:decnumber][start_index] = r0
455
+
456
+ r0
457
+ end
458
+
459
+ module Basenumber0
460
+ end
461
+
462
+ module Basenumber1
463
+ end
464
+
465
+ module Basenumber2
466
+ end
467
+
468
+ module Basenumber3
469
+ end
470
+
471
+ module Basenumber4
472
+ def ast; Integer(text_value) end
473
+ end
474
+
475
+ def _nt_basenumber
476
+ start_index = index
477
+ if node_cache[:basenumber].has_key?(index)
478
+ cached = node_cache[:basenumber][index]
479
+ if cached
480
+ node_cache[:basenumber][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
481
+ @index = cached.interval.end
482
+ end
483
+ return cached
484
+ end
485
+
486
+ i0, s0 = index, []
487
+ r2 = _nt_sign
488
+ if r2
489
+ r1 = r2
490
+ else
491
+ r1 = instantiate_node(SyntaxNode,input, index...index)
492
+ end
493
+ s0 << r1
494
+ if r1
495
+ if (match_len = has_terminal?("0", false, index))
496
+ r3 = true
497
+ @index += match_len
498
+ else
499
+ terminal_parse_failure('"0"')
500
+ r3 = nil
501
+ end
502
+ s0 << r3
503
+ if r3
504
+ i4 = index
505
+ i5, s5 = index, []
506
+ if (match_len = has_terminal?("x", :insens, index))
507
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
508
+ @index += match_len
509
+ else
510
+ terminal_parse_failure('"x"')
511
+ r6 = nil
512
+ end
513
+ s5 << r6
514
+ if r6
515
+ s7, i7 = [], index
516
+ loop do
517
+ r8 = _nt_HEXDIG
518
+ if r8
519
+ s7 << r8
520
+ else
521
+ break
522
+ end
523
+ end
524
+ if s7.empty?
525
+ @index = i7
526
+ r7 = nil
527
+ else
528
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
529
+ end
530
+ s5 << r7
531
+ end
532
+ if s5.last
533
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
534
+ r5.extend(Basenumber0)
535
+ else
536
+ @index = i5
537
+ r5 = nil
538
+ end
539
+ if r5
540
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
541
+ r4 = r5
542
+ else
543
+ i9, s9 = index, []
544
+ if (match_len = has_terminal?("o", :insens, index))
545
+ r10 = instantiate_node(SyntaxNode,input, index...(index + match_len))
546
+ @index += match_len
547
+ else
548
+ terminal_parse_failure('"o"')
549
+ r10 = nil
550
+ end
551
+ s9 << r10
552
+ if r10
553
+ s11, i11 = [], index
554
+ loop do
555
+ r12 = _nt_ODIGIT
556
+ if r12
557
+ s11 << r12
558
+ else
559
+ break
560
+ end
561
+ end
562
+ if s11.empty?
563
+ @index = i11
564
+ r11 = nil
565
+ else
566
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
567
+ end
568
+ s9 << r11
569
+ end
570
+ if s9.last
571
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
572
+ r9.extend(Basenumber1)
573
+ else
574
+ @index = i9
575
+ r9 = nil
576
+ end
577
+ if r9
578
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
579
+ r4 = r9
580
+ else
581
+ i13, s13 = index, []
582
+ if (match_len = has_terminal?("b", :insens, index))
583
+ r14 = instantiate_node(SyntaxNode,input, index...(index + match_len))
584
+ @index += match_len
585
+ else
586
+ terminal_parse_failure('"b"')
587
+ r14 = nil
588
+ end
589
+ s13 << r14
590
+ if r14
591
+ s15, i15 = [], index
592
+ loop do
593
+ r16 = _nt_BDIGIT
594
+ if r16
595
+ s15 << r16
596
+ else
597
+ break
598
+ end
599
+ end
600
+ if s15.empty?
601
+ @index = i15
602
+ r15 = nil
603
+ else
604
+ r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
605
+ end
606
+ s13 << r15
607
+ end
608
+ if s13.last
609
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
610
+ r13.extend(Basenumber2)
611
+ else
612
+ @index = i13
613
+ r13 = nil
614
+ end
615
+ if r13
616
+ r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true
617
+ r4 = r13
618
+ else
619
+ @index = i4
620
+ r4 = nil
621
+ end
622
+ end
623
+ end
624
+ s0 << r4
625
+ end
626
+ end
627
+ if s0.last
628
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
629
+ r0.extend(Basenumber3)
630
+ r0.extend(Basenumber4)
631
+ else
632
+ @index = i0
633
+ r0 = nil
634
+ end
635
+
636
+ node_cache[:basenumber][start_index] = r0
637
+
638
+ r0
639
+ end
640
+
641
+ module Infin0
642
+ def ast; Float::INFINITY end
643
+ end
644
+
645
+ module Infin1
646
+ def ast; -Float::INFINITY end
647
+ end
648
+
649
+ module Infin2
650
+ def ast; Float::NAN end
651
+ end
652
+
653
+ def _nt_infin
654
+ start_index = index
655
+ if node_cache[:infin].has_key?(index)
656
+ cached = node_cache[:infin][index]
657
+ if cached
658
+ node_cache[:infin][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
659
+ @index = cached.interval.end
660
+ end
661
+ return cached
662
+ end
663
+
664
+ i0 = index
665
+ if (match_len = has_terminal?("Infinity", false, index))
666
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
667
+ r1.extend(Infin0)
668
+ @index += match_len
669
+ else
670
+ terminal_parse_failure('"Infinity"')
671
+ r1 = nil
672
+ end
673
+ if r1
674
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
675
+ r0 = r1
676
+ else
677
+ if (match_len = has_terminal?("-Infinity", false, index))
678
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
679
+ r2.extend(Infin1)
680
+ @index += match_len
681
+ else
682
+ terminal_parse_failure('"-Infinity"')
683
+ r2 = nil
684
+ end
685
+ if r2
686
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
687
+ r0 = r2
688
+ else
689
+ if (match_len = has_terminal?("NaN", false, index))
690
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
691
+ r3.extend(Infin2)
692
+ @index += match_len
693
+ else
694
+ terminal_parse_failure('"NaN"')
695
+ r3 = nil
696
+ end
697
+ if r3
698
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
699
+ r0 = r3
700
+ else
701
+ @index = i0
702
+ r0 = nil
703
+ end
704
+ end
705
+ end
706
+
707
+ node_cache[:infin][start_index] = r0
708
+
709
+ r0
710
+ end
711
+
712
+ module Simple0
713
+ def ast; false end
714
+ end
715
+
716
+ module Simple1
717
+ def ast; true end
718
+ end
719
+
720
+ module Simple2
721
+ def ast; nil end
722
+ end
723
+
724
+ module Simple3
725
+ def ast; CBOR::Simple.new(23) end
726
+ end
727
+
728
+ module Simple4
729
+ def S1
730
+ elements[1]
731
+ end
732
+
733
+ def item
734
+ elements[2]
735
+ end
736
+
737
+ def S2
738
+ elements[3]
739
+ end
740
+
741
+ end
742
+
743
+ module Simple5
744
+ def ast; CBOR::Simple.new(item.ast) end
745
+ end
746
+
747
+ def _nt_simple
748
+ start_index = index
749
+ if node_cache[:simple].has_key?(index)
750
+ cached = node_cache[:simple][index]
751
+ if cached
752
+ node_cache[:simple][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
753
+ @index = cached.interval.end
754
+ end
755
+ return cached
756
+ end
757
+
758
+ i0 = index
759
+ if (match_len = has_terminal?("false", false, index))
760
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
761
+ r1.extend(Simple0)
762
+ @index += match_len
763
+ else
764
+ terminal_parse_failure('"false"')
765
+ r1 = nil
766
+ end
767
+ if r1
768
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
769
+ r0 = r1
770
+ else
771
+ if (match_len = has_terminal?("true", false, index))
772
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
773
+ r2.extend(Simple1)
774
+ @index += match_len
775
+ else
776
+ terminal_parse_failure('"true"')
777
+ r2 = nil
778
+ end
779
+ if r2
780
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
781
+ r0 = r2
782
+ else
783
+ if (match_len = has_terminal?("null", false, index))
784
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
785
+ r3.extend(Simple2)
786
+ @index += match_len
787
+ else
788
+ terminal_parse_failure('"null"')
789
+ r3 = nil
790
+ end
791
+ if r3
792
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
793
+ r0 = r3
794
+ else
795
+ if (match_len = has_terminal?("undefined", false, index))
796
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
797
+ r4.extend(Simple3)
798
+ @index += match_len
799
+ else
800
+ terminal_parse_failure('"undefined"')
801
+ r4 = nil
802
+ end
803
+ if r4
804
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
805
+ r0 = r4
806
+ else
807
+ i5, s5 = index, []
808
+ if (match_len = has_terminal?("simple(", false, index))
809
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
810
+ @index += match_len
811
+ else
812
+ terminal_parse_failure('"simple("')
813
+ r6 = nil
814
+ end
815
+ s5 << r6
816
+ if r6
817
+ r7 = _nt_S
818
+ s5 << r7
819
+ if r7
820
+ r8 = _nt_item
821
+ s5 << r8
822
+ if r8
823
+ r9 = _nt_S
824
+ s5 << r9
825
+ if r9
826
+ if (match_len = has_terminal?(")", false, index))
827
+ r10 = true
828
+ @index += match_len
829
+ else
830
+ terminal_parse_failure('")"')
831
+ r10 = nil
832
+ end
833
+ s5 << r10
834
+ end
835
+ end
836
+ end
837
+ end
838
+ if s5.last
839
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
840
+ r5.extend(Simple4)
841
+ r5.extend(Simple5)
842
+ else
843
+ @index = i5
844
+ r5 = nil
845
+ end
846
+ if r5
847
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
848
+ r0 = r5
849
+ else
850
+ @index = i0
851
+ r0 = nil
852
+ end
853
+ end
854
+ end
855
+ end
856
+ end
857
+
858
+ node_cache[:simple][start_index] = r0
859
+
860
+ r0
861
+ end
862
+
863
+ module Uint0
864
+ def DIGIT1
865
+ elements[0]
866
+ end
867
+
868
+ end
869
+
870
+ def _nt_uint
871
+ start_index = index
872
+ if node_cache[:uint].has_key?(index)
873
+ cached = node_cache[:uint][index]
874
+ if cached
875
+ node_cache[:uint][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
876
+ @index = cached.interval.end
877
+ end
878
+ return cached
879
+ end
880
+
881
+ i0 = index
882
+ if (match_len = has_terminal?("0", false, index))
883
+ r1 = true
884
+ @index += match_len
885
+ else
886
+ terminal_parse_failure('"0"')
887
+ r1 = nil
888
+ end
889
+ if r1
890
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
891
+ r0 = r1
892
+ else
893
+ i2, s2 = index, []
894
+ r3 = _nt_DIGIT1
895
+ s2 << r3
896
+ if r3
897
+ s4, i4 = [], index
898
+ loop do
899
+ r5 = _nt_DIGIT
900
+ if r5
901
+ s4 << r5
902
+ else
903
+ break
904
+ end
905
+ end
906
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
907
+ s2 << r4
908
+ end
909
+ if s2.last
910
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
911
+ r2.extend(Uint0)
912
+ else
913
+ @index = i2
914
+ r2 = nil
915
+ end
916
+ if r2
917
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
918
+ r0 = r2
919
+ else
920
+ @index = i0
921
+ r0 = nil
922
+ end
923
+ end
924
+
925
+ node_cache[:uint][start_index] = r0
926
+
927
+ r0
928
+ end
929
+
930
+ module Tagged0
931
+ def uint
932
+ elements[0]
933
+ end
934
+
935
+ def S1
936
+ elements[2]
937
+ end
938
+
939
+ def item
940
+ elements[3]
941
+ end
942
+
943
+ def S2
944
+ elements[4]
945
+ end
946
+
947
+ end
948
+
949
+ module Tagged1
950
+ def ast
951
+ CBOR::Tagged.new(uint.text_value.to_i, item.ast)
952
+ end
953
+ end
954
+
955
+ def _nt_tagged
956
+ start_index = index
957
+ if node_cache[:tagged].has_key?(index)
958
+ cached = node_cache[:tagged][index]
959
+ if cached
960
+ node_cache[:tagged][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
961
+ @index = cached.interval.end
962
+ end
963
+ return cached
964
+ end
965
+
966
+ i0, s0 = index, []
967
+ r1 = _nt_uint
968
+ s0 << r1
969
+ if r1
970
+ if (match_len = has_terminal?("(", false, index))
971
+ r2 = true
972
+ @index += match_len
973
+ else
974
+ terminal_parse_failure('"("')
975
+ r2 = nil
976
+ end
977
+ s0 << r2
978
+ if r2
979
+ r3 = _nt_S
980
+ s0 << r3
981
+ if r3
982
+ r4 = _nt_item
983
+ s0 << r4
984
+ if r4
985
+ r5 = _nt_S
986
+ s0 << r5
987
+ if r5
988
+ if (match_len = has_terminal?(")", false, index))
989
+ r6 = true
990
+ @index += match_len
991
+ else
992
+ terminal_parse_failure('")"')
993
+ r6 = nil
994
+ end
995
+ s0 << r6
996
+ end
997
+ end
998
+ end
999
+ end
1000
+ end
1001
+ if s0.last
1002
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1003
+ r0.extend(Tagged0)
1004
+ r0.extend(Tagged1)
1005
+ else
1006
+ @index = i0
1007
+ r0 = nil
1008
+ end
1009
+
1010
+ node_cache[:tagged][start_index] = r0
1011
+
1012
+ r0
1013
+ end
1014
+
1015
+ module AppPrefix0
1016
+ def lcalpha
1017
+ elements[0]
1018
+ end
1019
+
1020
+ end
1021
+
1022
+ def _nt_app_prefix
1023
+ start_index = index
1024
+ if node_cache[:app_prefix].has_key?(index)
1025
+ cached = node_cache[:app_prefix][index]
1026
+ if cached
1027
+ node_cache[:app_prefix][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1028
+ @index = cached.interval.end
1029
+ end
1030
+ return cached
1031
+ end
1032
+
1033
+ i0, s0 = index, []
1034
+ r1 = _nt_lcalpha
1035
+ s0 << r1
1036
+ if r1
1037
+ s2, i2 = [], index
1038
+ loop do
1039
+ r3 = _nt_lcalnum
1040
+ if r3
1041
+ s2 << r3
1042
+ else
1043
+ break
1044
+ end
1045
+ end
1046
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1047
+ s0 << r2
1048
+ end
1049
+ if s0.last
1050
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1051
+ r0.extend(AppPrefix0)
1052
+ else
1053
+ @index = i0
1054
+ r0 = nil
1055
+ end
1056
+
1057
+ node_cache[:app_prefix][start_index] = r0
1058
+
1059
+ r0
1060
+ end
1061
+
1062
+ module AppString0
1063
+ def app_prefix
1064
+ elements[0]
1065
+ end
1066
+
1067
+ def sqstr
1068
+ elements[1]
1069
+ end
1070
+ end
1071
+
1072
+ module AppString1
1073
+ def ast # XXX ignoring h and b64
1074
+ data = sqstr.ast.force_encoding(Encoding::UTF_8) # XXX undo .b
1075
+ app = app_prefix.text_value
1076
+ # Find a better place to put a default initialization
1077
+ EDNGRAMMAR.const_set(:APPS, Hash.new { |h, k|
1078
+ h[k] = begin ::CBOR_DIAG.const_get("App_#{app}")
1079
+ rescue NameError
1080
+ raise ArgumentError.new("cbor-diagnostic: Unknown application-oriented extension #{k}")
1081
+ end
1082
+ }) unless ::EDNGRAMMAR.const_defined?(:APPS)
1083
+ ::EDNGRAMMAR::APPS[app].decode(app, data)
1084
+ end
1085
+ end
1086
+
1087
+ def _nt_app_string
1088
+ start_index = index
1089
+ if node_cache[:app_string].has_key?(index)
1090
+ cached = node_cache[:app_string][index]
1091
+ if cached
1092
+ node_cache[:app_string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1093
+ @index = cached.interval.end
1094
+ end
1095
+ return cached
1096
+ end
1097
+
1098
+ i0, s0 = index, []
1099
+ r1 = _nt_app_prefix
1100
+ s0 << r1
1101
+ if r1
1102
+ r2 = _nt_sqstr
1103
+ s0 << r2
1104
+ end
1105
+ if s0.last
1106
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1107
+ r0.extend(AppString0)
1108
+ r0.extend(AppString1)
1109
+ else
1110
+ @index = i0
1111
+ r0 = nil
1112
+ end
1113
+
1114
+ node_cache[:app_string][start_index] = r0
1115
+
1116
+ r0
1117
+ end
1118
+
1119
+ module Sqstr0
1120
+ end
1121
+
1122
+ module Sqstr1
1123
+ def ast
1124
+ elements[1].elements.map {|x| x.ast}.join.b # XXX .b
1125
+ end
1126
+ end
1127
+
1128
+ def _nt_sqstr
1129
+ start_index = index
1130
+ if node_cache[:sqstr].has_key?(index)
1131
+ cached = node_cache[:sqstr][index]
1132
+ if cached
1133
+ node_cache[:sqstr][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1134
+ @index = cached.interval.end
1135
+ end
1136
+ return cached
1137
+ end
1138
+
1139
+ i0, s0 = index, []
1140
+ if (match_len = has_terminal?("'", false, index))
1141
+ r1 = true
1142
+ @index += match_len
1143
+ else
1144
+ terminal_parse_failure('"\'"')
1145
+ r1 = nil
1146
+ end
1147
+ s0 << r1
1148
+ if r1
1149
+ s2, i2 = [], index
1150
+ loop do
1151
+ r3 = _nt_single_quoted
1152
+ if r3
1153
+ s2 << r3
1154
+ else
1155
+ break
1156
+ end
1157
+ end
1158
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1159
+ s0 << r2
1160
+ if r2
1161
+ if (match_len = has_terminal?("'", false, index))
1162
+ r4 = true
1163
+ @index += match_len
1164
+ else
1165
+ terminal_parse_failure('"\'"')
1166
+ r4 = nil
1167
+ end
1168
+ s0 << r4
1169
+ end
1170
+ end
1171
+ if s0.last
1172
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1173
+ r0.extend(Sqstr0)
1174
+ r0.extend(Sqstr1)
1175
+ else
1176
+ @index = i0
1177
+ r0 = nil
1178
+ end
1179
+
1180
+ node_cache[:sqstr][start_index] = r0
1181
+
1182
+ r0
1183
+ end
1184
+
1185
+ def _nt_bstr
1186
+ start_index = index
1187
+ if node_cache[:bstr].has_key?(index)
1188
+ cached = node_cache[:bstr][index]
1189
+ if cached
1190
+ node_cache[:bstr][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1191
+ @index = cached.interval.end
1192
+ end
1193
+ return cached
1194
+ end
1195
+
1196
+ i0 = index
1197
+ r1 = _nt_app_string
1198
+ if r1
1199
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1200
+ r0 = r1
1201
+ else
1202
+ r2 = _nt_sqstr
1203
+ if r2
1204
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1205
+ r0 = r2
1206
+ else
1207
+ @index = i0
1208
+ r0 = nil
1209
+ end
1210
+ end
1211
+
1212
+ node_cache[:bstr][start_index] = r0
1213
+
1214
+ r0
1215
+ end
1216
+
1217
+ module Tstr0
1218
+ def DQUOTE1
1219
+ elements[0]
1220
+ end
1221
+
1222
+ def DQUOTE2
1223
+ elements[2]
1224
+ end
1225
+ end
1226
+
1227
+ module Tstr1
1228
+ def ast
1229
+ elements[1].elements.map {|x| x.ast}.join
1230
+ end
1231
+ end
1232
+
1233
+ def _nt_tstr
1234
+ start_index = index
1235
+ if node_cache[:tstr].has_key?(index)
1236
+ cached = node_cache[:tstr][index]
1237
+ if cached
1238
+ node_cache[:tstr][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1239
+ @index = cached.interval.end
1240
+ end
1241
+ return cached
1242
+ end
1243
+
1244
+ i0, s0 = index, []
1245
+ r1 = _nt_DQUOTE
1246
+ s0 << r1
1247
+ if r1
1248
+ s2, i2 = [], index
1249
+ loop do
1250
+ r3 = _nt_double_quoted
1251
+ if r3
1252
+ s2 << r3
1253
+ else
1254
+ break
1255
+ end
1256
+ end
1257
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1258
+ s0 << r2
1259
+ if r2
1260
+ r4 = _nt_DQUOTE
1261
+ s0 << r4
1262
+ end
1263
+ end
1264
+ if s0.last
1265
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1266
+ r0.extend(Tstr0)
1267
+ r0.extend(Tstr1)
1268
+ else
1269
+ @index = i0
1270
+ r0 = nil
1271
+ end
1272
+
1273
+ node_cache[:tstr][start_index] = r0
1274
+
1275
+ r0
1276
+ end
1277
+
1278
+ module Embedded0
1279
+ def seq
1280
+ elements[1]
1281
+ end
1282
+
1283
+ end
1284
+
1285
+ module Embedded1
1286
+ def ast
1287
+ sn = seq.ast
1288
+ if CBOR::Sequence === sn
1289
+ sn.to_cborseq
1290
+ else
1291
+ CBOR.encode(sn)
1292
+ end
1293
+ end
1294
+ end
1295
+
1296
+ def _nt_embedded
1297
+ start_index = index
1298
+ if node_cache[:embedded].has_key?(index)
1299
+ cached = node_cache[:embedded][index]
1300
+ if cached
1301
+ node_cache[:embedded][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1302
+ @index = cached.interval.end
1303
+ end
1304
+ return cached
1305
+ end
1306
+
1307
+ i0, s0 = index, []
1308
+ if (match_len = has_terminal?("<<", false, index))
1309
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1310
+ @index += match_len
1311
+ else
1312
+ terminal_parse_failure('"<<"')
1313
+ r1 = nil
1314
+ end
1315
+ s0 << r1
1316
+ if r1
1317
+ r2 = _nt_seq
1318
+ s0 << r2
1319
+ if r2
1320
+ if (match_len = has_terminal?(">>", false, index))
1321
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1322
+ @index += match_len
1323
+ else
1324
+ terminal_parse_failure('">>"')
1325
+ r3 = nil
1326
+ end
1327
+ s0 << r3
1328
+ end
1329
+ end
1330
+ if s0.last
1331
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1332
+ r0.extend(Embedded0)
1333
+ r0.extend(Embedded1)
1334
+ else
1335
+ @index = i0
1336
+ r0 = nil
1337
+ end
1338
+
1339
+ node_cache[:embedded][start_index] = r0
1340
+
1341
+ r0
1342
+ end
1343
+
1344
+ module Array0
1345
+ def S1
1346
+ elements[1]
1347
+ end
1348
+
1349
+ def item
1350
+ elements[2]
1351
+ end
1352
+
1353
+ def S2
1354
+ elements[3]
1355
+ end
1356
+ end
1357
+
1358
+ module Array1
1359
+ def item
1360
+ elements[0]
1361
+ end
1362
+
1363
+ def S
1364
+ elements[1]
1365
+ end
1366
+
1367
+ def OC
1368
+ elements[3]
1369
+ end
1370
+ end
1371
+
1372
+ module Array2
1373
+ def spec
1374
+ elements[1]
1375
+ end
1376
+
1377
+ end
1378
+
1379
+ module Array3
1380
+ def ast
1381
+ r = if e = elements[2].elements
1382
+ [e[0].ast] + e[2].elements.map {|x| x.item.ast }
1383
+ else
1384
+ []
1385
+ end
1386
+ if spec.ast
1387
+ r.cbor_stream!
1388
+ end
1389
+ r
1390
+ end
1391
+ end
1392
+
1393
+ def _nt_array
1394
+ start_index = index
1395
+ if node_cache[:array].has_key?(index)
1396
+ cached = node_cache[:array][index]
1397
+ if cached
1398
+ node_cache[:array][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1399
+ @index = cached.interval.end
1400
+ end
1401
+ return cached
1402
+ end
1403
+
1404
+ i0, s0 = index, []
1405
+ if (match_len = has_terminal?("[", false, index))
1406
+ r1 = true
1407
+ @index += match_len
1408
+ else
1409
+ terminal_parse_failure('"["')
1410
+ r1 = nil
1411
+ end
1412
+ s0 << r1
1413
+ if r1
1414
+ r2 = _nt_spec
1415
+ s0 << r2
1416
+ if r2
1417
+ i4, s4 = index, []
1418
+ r5 = _nt_item
1419
+ s4 << r5
1420
+ if r5
1421
+ r6 = _nt_S
1422
+ s4 << r6
1423
+ if r6
1424
+ s7, i7 = [], index
1425
+ loop do
1426
+ i8, s8 = index, []
1427
+ if (match_len = has_terminal?(",", false, index))
1428
+ r9 = true
1429
+ @index += match_len
1430
+ else
1431
+ terminal_parse_failure('","')
1432
+ r9 = nil
1433
+ end
1434
+ s8 << r9
1435
+ if r9
1436
+ r10 = _nt_S
1437
+ s8 << r10
1438
+ if r10
1439
+ r11 = _nt_item
1440
+ s8 << r11
1441
+ if r11
1442
+ r12 = _nt_S
1443
+ s8 << r12
1444
+ end
1445
+ end
1446
+ end
1447
+ if s8.last
1448
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1449
+ r8.extend(Array0)
1450
+ else
1451
+ @index = i8
1452
+ r8 = nil
1453
+ end
1454
+ if r8
1455
+ s7 << r8
1456
+ else
1457
+ break
1458
+ end
1459
+ end
1460
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
1461
+ s4 << r7
1462
+ if r7
1463
+ r13 = _nt_OC
1464
+ s4 << r13
1465
+ end
1466
+ end
1467
+ end
1468
+ if s4.last
1469
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1470
+ r4.extend(Array1)
1471
+ else
1472
+ @index = i4
1473
+ r4 = nil
1474
+ end
1475
+ if r4
1476
+ r3 = r4
1477
+ else
1478
+ r3 = instantiate_node(SyntaxNode,input, index...index)
1479
+ end
1480
+ s0 << r3
1481
+ if r3
1482
+ if (match_len = has_terminal?("]", false, index))
1483
+ r14 = true
1484
+ @index += match_len
1485
+ else
1486
+ terminal_parse_failure('"]"')
1487
+ r14 = nil
1488
+ end
1489
+ s0 << r14
1490
+ end
1491
+ end
1492
+ end
1493
+ if s0.last
1494
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1495
+ r0.extend(Array2)
1496
+ r0.extend(Array3)
1497
+ else
1498
+ @index = i0
1499
+ r0 = nil
1500
+ end
1501
+
1502
+ node_cache[:array][start_index] = r0
1503
+
1504
+ r0
1505
+ end
1506
+
1507
+ module Map0
1508
+ def S1
1509
+ elements[1]
1510
+ end
1511
+
1512
+ def kp
1513
+ elements[2]
1514
+ end
1515
+
1516
+ def S2
1517
+ elements[3]
1518
+ end
1519
+ end
1520
+
1521
+ module Map1
1522
+ def kp
1523
+ elements[0]
1524
+ end
1525
+
1526
+ def S
1527
+ elements[1]
1528
+ end
1529
+
1530
+ def OC
1531
+ elements[3]
1532
+ end
1533
+ end
1534
+
1535
+ module Map2
1536
+ def spec
1537
+ elements[1]
1538
+ end
1539
+
1540
+ end
1541
+
1542
+ module Map3
1543
+ def ast
1544
+ r = if e = elements[2].elements
1545
+ Hash[ [e[0].ast] + e[2].elements.map {|x| x.kp.ast } ]
1546
+ else
1547
+ {}
1548
+ end
1549
+ if spec.ast
1550
+ r.cbor_stream!
1551
+ end
1552
+ r
1553
+ end
1554
+ end
1555
+
1556
+ def _nt_map
1557
+ start_index = index
1558
+ if node_cache[:map].has_key?(index)
1559
+ cached = node_cache[:map][index]
1560
+ if cached
1561
+ node_cache[:map][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1562
+ @index = cached.interval.end
1563
+ end
1564
+ return cached
1565
+ end
1566
+
1567
+ i0, s0 = index, []
1568
+ if (match_len = has_terminal?("{", false, index))
1569
+ r1 = true
1570
+ @index += match_len
1571
+ else
1572
+ terminal_parse_failure('"{"')
1573
+ r1 = nil
1574
+ end
1575
+ s0 << r1
1576
+ if r1
1577
+ r2 = _nt_spec
1578
+ s0 << r2
1579
+ if r2
1580
+ i4, s4 = index, []
1581
+ r5 = _nt_kp
1582
+ s4 << r5
1583
+ if r5
1584
+ r6 = _nt_S
1585
+ s4 << r6
1586
+ if r6
1587
+ s7, i7 = [], index
1588
+ loop do
1589
+ i8, s8 = index, []
1590
+ if (match_len = has_terminal?(",", false, index))
1591
+ r9 = true
1592
+ @index += match_len
1593
+ else
1594
+ terminal_parse_failure('","')
1595
+ r9 = nil
1596
+ end
1597
+ s8 << r9
1598
+ if r9
1599
+ r10 = _nt_S
1600
+ s8 << r10
1601
+ if r10
1602
+ r11 = _nt_kp
1603
+ s8 << r11
1604
+ if r11
1605
+ r12 = _nt_S
1606
+ s8 << r12
1607
+ end
1608
+ end
1609
+ end
1610
+ if s8.last
1611
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1612
+ r8.extend(Map0)
1613
+ else
1614
+ @index = i8
1615
+ r8 = nil
1616
+ end
1617
+ if r8
1618
+ s7 << r8
1619
+ else
1620
+ break
1621
+ end
1622
+ end
1623
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
1624
+ s4 << r7
1625
+ if r7
1626
+ r13 = _nt_OC
1627
+ s4 << r13
1628
+ end
1629
+ end
1630
+ end
1631
+ if s4.last
1632
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1633
+ r4.extend(Map1)
1634
+ else
1635
+ @index = i4
1636
+ r4 = nil
1637
+ end
1638
+ if r4
1639
+ r3 = r4
1640
+ else
1641
+ r3 = instantiate_node(SyntaxNode,input, index...index)
1642
+ end
1643
+ s0 << r3
1644
+ if r3
1645
+ if (match_len = has_terminal?("}", false, index))
1646
+ r14 = true
1647
+ @index += match_len
1648
+ else
1649
+ terminal_parse_failure('"}"')
1650
+ r14 = nil
1651
+ end
1652
+ s0 << r14
1653
+ end
1654
+ end
1655
+ end
1656
+ if s0.last
1657
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1658
+ r0.extend(Map2)
1659
+ r0.extend(Map3)
1660
+ else
1661
+ @index = i0
1662
+ r0 = nil
1663
+ end
1664
+
1665
+ node_cache[:map][start_index] = r0
1666
+
1667
+ r0
1668
+ end
1669
+
1670
+ module Kp0
1671
+ def item1
1672
+ elements[0]
1673
+ end
1674
+
1675
+ def S1
1676
+ elements[1]
1677
+ end
1678
+
1679
+ def S2
1680
+ elements[3]
1681
+ end
1682
+
1683
+ def item2
1684
+ elements[4]
1685
+ end
1686
+ end
1687
+
1688
+ module Kp1
1689
+ def ast
1690
+ [elements[0].ast, elements[4].ast]
1691
+ end
1692
+ end
1693
+
1694
+ def _nt_kp
1695
+ start_index = index
1696
+ if node_cache[:kp].has_key?(index)
1697
+ cached = node_cache[:kp][index]
1698
+ if cached
1699
+ node_cache[:kp][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1700
+ @index = cached.interval.end
1701
+ end
1702
+ return cached
1703
+ end
1704
+
1705
+ i0, s0 = index, []
1706
+ r1 = _nt_item
1707
+ s0 << r1
1708
+ if r1
1709
+ r2 = _nt_S
1710
+ s0 << r2
1711
+ if r2
1712
+ if (match_len = has_terminal?(":", false, index))
1713
+ r3 = true
1714
+ @index += match_len
1715
+ else
1716
+ terminal_parse_failure('":"')
1717
+ r3 = nil
1718
+ end
1719
+ s0 << r3
1720
+ if r3
1721
+ r4 = _nt_S
1722
+ s0 << r4
1723
+ if r4
1724
+ r5 = _nt_item
1725
+ s0 << r5
1726
+ end
1727
+ end
1728
+ end
1729
+ end
1730
+ if s0.last
1731
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1732
+ r0.extend(Kp0)
1733
+ r0.extend(Kp1)
1734
+ else
1735
+ @index = i0
1736
+ r0 = nil
1737
+ end
1738
+
1739
+ node_cache[:kp][start_index] = r0
1740
+
1741
+ r0
1742
+ end
1743
+
1744
+ def _nt_blank
1745
+ start_index = index
1746
+ if node_cache[:blank].has_key?(index)
1747
+ cached = node_cache[:blank][index]
1748
+ if cached
1749
+ node_cache[:blank][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1750
+ @index = cached.interval.end
1751
+ end
1752
+ return cached
1753
+ end
1754
+
1755
+ i0 = index
1756
+ if (match_len = has_terminal?("\t", false, index))
1757
+ r1 = true
1758
+ @index += match_len
1759
+ else
1760
+ terminal_parse_failure('"\\t"')
1761
+ r1 = nil
1762
+ end
1763
+ if r1
1764
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1765
+ r0 = r1
1766
+ else
1767
+ if (match_len = has_terminal?("\n", false, index))
1768
+ r2 = true
1769
+ @index += match_len
1770
+ else
1771
+ terminal_parse_failure('"\\n"')
1772
+ r2 = nil
1773
+ end
1774
+ if r2
1775
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1776
+ r0 = r2
1777
+ else
1778
+ if (match_len = has_terminal?("\r", false, index))
1779
+ r3 = true
1780
+ @index += match_len
1781
+ else
1782
+ terminal_parse_failure('"\\r"')
1783
+ r3 = nil
1784
+ end
1785
+ if r3
1786
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
1787
+ r0 = r3
1788
+ else
1789
+ if (match_len = has_terminal?(" ", false, index))
1790
+ r4 = true
1791
+ @index += match_len
1792
+ else
1793
+ terminal_parse_failure('" "')
1794
+ r4 = nil
1795
+ end
1796
+ if r4
1797
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
1798
+ r0 = r4
1799
+ else
1800
+ @index = i0
1801
+ r0 = nil
1802
+ end
1803
+ end
1804
+ end
1805
+ end
1806
+
1807
+ node_cache[:blank][start_index] = r0
1808
+
1809
+ r0
1810
+ end
1811
+
1812
+ def _nt_non_slash
1813
+ start_index = index
1814
+ if node_cache[:non_slash].has_key?(index)
1815
+ cached = node_cache[:non_slash][index]
1816
+ if cached
1817
+ node_cache[:non_slash][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 = index
1824
+ r1 = _nt_blank
1825
+ if r1
1826
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1827
+ r0 = r1
1828
+ else
1829
+ if has_terminal?(@regexps[gr = '\A[!-\\.]'] ||= Regexp.new(gr), :regexp, index)
1830
+ r2 = true
1831
+ @index += 1
1832
+ else
1833
+ terminal_parse_failure('[!-\\.]')
1834
+ r2 = nil
1835
+ end
1836
+ if r2
1837
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1838
+ r0 = r2
1839
+ else
1840
+ if has_terminal?(@regexps[gr = '\A[0-􏿿]'] ||= Regexp.new(gr), :regexp, index)
1841
+ r3 = true
1842
+ @index += 1
1843
+ else
1844
+ terminal_parse_failure('[0-􏿿]')
1845
+ r3 = nil
1846
+ end
1847
+ if r3
1848
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
1849
+ r0 = r3
1850
+ else
1851
+ @index = i0
1852
+ r0 = nil
1853
+ end
1854
+ end
1855
+ end
1856
+
1857
+ node_cache[:non_slash][start_index] = r0
1858
+
1859
+ r0
1860
+ end
1861
+
1862
+ module S0
1863
+ end
1864
+
1865
+ module S1
1866
+ end
1867
+
1868
+ def _nt_S
1869
+ start_index = index
1870
+ if node_cache[:S].has_key?(index)
1871
+ cached = node_cache[:S][index]
1872
+ if cached
1873
+ node_cache[:S][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1874
+ @index = cached.interval.end
1875
+ end
1876
+ return cached
1877
+ end
1878
+
1879
+ i0, s0 = index, []
1880
+ s1, i1 = [], index
1881
+ loop do
1882
+ r2 = _nt_blank
1883
+ if r2
1884
+ s1 << r2
1885
+ else
1886
+ break
1887
+ end
1888
+ end
1889
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1890
+ s0 << r1
1891
+ if r1
1892
+ s3, i3 = [], index
1893
+ loop do
1894
+ i4, s4 = index, []
1895
+ if (match_len = has_terminal?("/", false, index))
1896
+ r5 = true
1897
+ @index += match_len
1898
+ else
1899
+ terminal_parse_failure('"/"')
1900
+ r5 = nil
1901
+ end
1902
+ s4 << r5
1903
+ if r5
1904
+ s6, i6 = [], index
1905
+ loop do
1906
+ r7 = _nt_non_slash
1907
+ if r7
1908
+ s6 << r7
1909
+ else
1910
+ break
1911
+ end
1912
+ end
1913
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
1914
+ s4 << r6
1915
+ if r6
1916
+ if (match_len = has_terminal?("/", false, index))
1917
+ r8 = true
1918
+ @index += match_len
1919
+ else
1920
+ terminal_parse_failure('"/"')
1921
+ r8 = nil
1922
+ end
1923
+ s4 << r8
1924
+ if r8
1925
+ s9, i9 = [], index
1926
+ loop do
1927
+ r10 = _nt_blank
1928
+ if r10
1929
+ s9 << r10
1930
+ else
1931
+ break
1932
+ end
1933
+ end
1934
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
1935
+ s4 << r9
1936
+ end
1937
+ end
1938
+ end
1939
+ if s4.last
1940
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1941
+ r4.extend(S0)
1942
+ else
1943
+ @index = i4
1944
+ r4 = nil
1945
+ end
1946
+ if r4
1947
+ s3 << r4
1948
+ else
1949
+ break
1950
+ end
1951
+ end
1952
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1953
+ s0 << r3
1954
+ end
1955
+ if s0.last
1956
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1957
+ r0.extend(S1)
1958
+ else
1959
+ @index = i0
1960
+ r0 = nil
1961
+ end
1962
+
1963
+ node_cache[:S][start_index] = r0
1964
+
1965
+ r0
1966
+ end
1967
+
1968
+ module OC0
1969
+ def S
1970
+ elements[1]
1971
+ end
1972
+ end
1973
+
1974
+ def _nt_OC
1975
+ start_index = index
1976
+ if node_cache[:OC].has_key?(index)
1977
+ cached = node_cache[:OC][index]
1978
+ if cached
1979
+ node_cache[:OC][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1980
+ @index = cached.interval.end
1981
+ end
1982
+ return cached
1983
+ end
1984
+
1985
+ i1, s1 = index, []
1986
+ if (match_len = has_terminal?(",", false, index))
1987
+ r2 = true
1988
+ @index += match_len
1989
+ else
1990
+ terminal_parse_failure('","')
1991
+ r2 = nil
1992
+ end
1993
+ s1 << r2
1994
+ if r2
1995
+ r3 = _nt_S
1996
+ s1 << r3
1997
+ end
1998
+ if s1.last
1999
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2000
+ r1.extend(OC0)
2001
+ else
2002
+ @index = i1
2003
+ r1 = nil
2004
+ end
2005
+ if r1
2006
+ r0 = r1
2007
+ else
2008
+ r0 = instantiate_node(SyntaxNode,input, index...index)
2009
+ end
2010
+
2011
+ node_cache[:OC][start_index] = r0
2012
+
2013
+ r0
2014
+ end
2015
+
2016
+ module Streamstring0
2017
+ def S1
2018
+ elements[1]
2019
+ end
2020
+
2021
+ def tstr
2022
+ elements[2]
2023
+ end
2024
+
2025
+ def S2
2026
+ elements[3]
2027
+ end
2028
+ end
2029
+
2030
+ module Streamstring1
2031
+ def spec1
2032
+ elements[1]
2033
+ end
2034
+
2035
+ def tstr
2036
+ elements[2]
2037
+ end
2038
+
2039
+ def S
2040
+ elements[3]
2041
+ end
2042
+
2043
+ def OC
2044
+ elements[5]
2045
+ end
2046
+
2047
+ end
2048
+
2049
+ module Streamstring2
2050
+ def S1
2051
+ elements[1]
2052
+ end
2053
+
2054
+ def sqstr
2055
+ elements[2]
2056
+ end
2057
+
2058
+ def S2
2059
+ elements[3]
2060
+ end
2061
+ end
2062
+
2063
+ module Streamstring3
2064
+ def spec1
2065
+ elements[1]
2066
+ end
2067
+
2068
+ def sqstr
2069
+ elements[2]
2070
+ end
2071
+
2072
+ def S
2073
+ elements[3]
2074
+ end
2075
+
2076
+ def OC
2077
+ elements[5]
2078
+ end
2079
+
2080
+ end
2081
+
2082
+ def _nt_streamstring
2083
+ start_index = index
2084
+ if node_cache[:streamstring].has_key?(index)
2085
+ cached = node_cache[:streamstring][index]
2086
+ if cached
2087
+ node_cache[:streamstring][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2088
+ @index = cached.interval.end
2089
+ end
2090
+ return cached
2091
+ end
2092
+
2093
+ i0 = index
2094
+ i1, s1 = index, []
2095
+ if (match_len = has_terminal?("(", false, index))
2096
+ r2 = true
2097
+ @index += match_len
2098
+ else
2099
+ terminal_parse_failure('"("')
2100
+ r2 = nil
2101
+ end
2102
+ s1 << r2
2103
+ if r2
2104
+ r3 = _nt_spec1
2105
+ s1 << r3
2106
+ if r3
2107
+ r4 = _nt_tstr
2108
+ s1 << r4
2109
+ if r4
2110
+ r5 = _nt_S
2111
+ s1 << r5
2112
+ if r5
2113
+ s6, i6 = [], index
2114
+ loop do
2115
+ i7, s7 = index, []
2116
+ if (match_len = has_terminal?(",", false, index))
2117
+ r8 = true
2118
+ @index += match_len
2119
+ else
2120
+ terminal_parse_failure('","')
2121
+ r8 = nil
2122
+ end
2123
+ s7 << r8
2124
+ if r8
2125
+ r9 = _nt_S
2126
+ s7 << r9
2127
+ if r9
2128
+ r10 = _nt_tstr
2129
+ s7 << r10
2130
+ if r10
2131
+ r11 = _nt_S
2132
+ s7 << r11
2133
+ end
2134
+ end
2135
+ end
2136
+ if s7.last
2137
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
2138
+ r7.extend(Streamstring0)
2139
+ else
2140
+ @index = i7
2141
+ r7 = nil
2142
+ end
2143
+ if r7
2144
+ s6 << r7
2145
+ else
2146
+ break
2147
+ end
2148
+ end
2149
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
2150
+ s1 << r6
2151
+ if r6
2152
+ r12 = _nt_OC
2153
+ s1 << r12
2154
+ if r12
2155
+ if (match_len = has_terminal?(")", false, index))
2156
+ r13 = true
2157
+ @index += match_len
2158
+ else
2159
+ terminal_parse_failure('")"')
2160
+ r13 = nil
2161
+ end
2162
+ s1 << r13
2163
+ end
2164
+ end
2165
+ end
2166
+ end
2167
+ end
2168
+ end
2169
+ if s1.last
2170
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2171
+ r1.extend(Streamstring1)
2172
+ else
2173
+ @index = i1
2174
+ r1 = nil
2175
+ end
2176
+ if r1
2177
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2178
+ r0 = r1
2179
+ else
2180
+ i14, s14 = index, []
2181
+ if (match_len = has_terminal?("(", false, index))
2182
+ r15 = true
2183
+ @index += match_len
2184
+ else
2185
+ terminal_parse_failure('"("')
2186
+ r15 = nil
2187
+ end
2188
+ s14 << r15
2189
+ if r15
2190
+ r16 = _nt_spec1
2191
+ s14 << r16
2192
+ if r16
2193
+ r17 = _nt_sqstr
2194
+ s14 << r17
2195
+ if r17
2196
+ r18 = _nt_S
2197
+ s14 << r18
2198
+ if r18
2199
+ s19, i19 = [], index
2200
+ loop do
2201
+ i20, s20 = index, []
2202
+ if (match_len = has_terminal?(",", false, index))
2203
+ r21 = true
2204
+ @index += match_len
2205
+ else
2206
+ terminal_parse_failure('","')
2207
+ r21 = nil
2208
+ end
2209
+ s20 << r21
2210
+ if r21
2211
+ r22 = _nt_S
2212
+ s20 << r22
2213
+ if r22
2214
+ r23 = _nt_sqstr
2215
+ s20 << r23
2216
+ if r23
2217
+ r24 = _nt_S
2218
+ s20 << r24
2219
+ end
2220
+ end
2221
+ end
2222
+ if s20.last
2223
+ r20 = instantiate_node(SyntaxNode,input, i20...index, s20)
2224
+ r20.extend(Streamstring2)
2225
+ else
2226
+ @index = i20
2227
+ r20 = nil
2228
+ end
2229
+ if r20
2230
+ s19 << r20
2231
+ else
2232
+ break
2233
+ end
2234
+ end
2235
+ r19 = instantiate_node(SyntaxNode,input, i19...index, s19)
2236
+ s14 << r19
2237
+ if r19
2238
+ r25 = _nt_OC
2239
+ s14 << r25
2240
+ if r25
2241
+ if (match_len = has_terminal?(")", false, index))
2242
+ r26 = true
2243
+ @index += match_len
2244
+ else
2245
+ terminal_parse_failure('")"')
2246
+ r26 = nil
2247
+ end
2248
+ s14 << r26
2249
+ end
2250
+ end
2251
+ end
2252
+ end
2253
+ end
2254
+ end
2255
+ if s14.last
2256
+ r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
2257
+ r14.extend(Streamstring3)
2258
+ else
2259
+ @index = i14
2260
+ r14 = nil
2261
+ end
2262
+ if r14
2263
+ r14 = SyntaxNode.new(input, (index-1)...index) if r14 == true
2264
+ r0 = r14
2265
+ else
2266
+ @index = i0
2267
+ r0 = nil
2268
+ end
2269
+ end
2270
+
2271
+ node_cache[:streamstring][start_index] = r0
2272
+
2273
+ r0
2274
+ end
2275
+
2276
+ module Spec0
2277
+ def S
2278
+ elements[1]
2279
+ end
2280
+ end
2281
+
2282
+ module Spec1
2283
+ def S
2284
+ elements[0]
2285
+ end
2286
+
2287
+ end
2288
+
2289
+ module Spec2
2290
+ def ast; (e1 = elements[1].elements) && !e1[0].empty? end
2291
+ end
2292
+
2293
+ def _nt_spec
2294
+ start_index = index
2295
+ if node_cache[:spec].has_key?(index)
2296
+ cached = node_cache[:spec][index]
2297
+ if cached
2298
+ node_cache[:spec][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2299
+ @index = cached.interval.end
2300
+ end
2301
+ return cached
2302
+ end
2303
+
2304
+ i0, s0 = index, []
2305
+ r1 = _nt_S
2306
+ s0 << r1
2307
+ if r1
2308
+ i3, s3 = index, []
2309
+ if (match_len = has_terminal?("_", false, index))
2310
+ r4 = true
2311
+ @index += match_len
2312
+ else
2313
+ terminal_parse_failure('"_"')
2314
+ r4 = nil
2315
+ end
2316
+ s3 << r4
2317
+ if r4
2318
+ r5 = _nt_S
2319
+ s3 << r5
2320
+ end
2321
+ if s3.last
2322
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2323
+ r3.extend(Spec0)
2324
+ else
2325
+ @index = i3
2326
+ r3 = nil
2327
+ end
2328
+ if r3
2329
+ r2 = r3
2330
+ else
2331
+ r2 = instantiate_node(SyntaxNode,input, index...index)
2332
+ end
2333
+ s0 << r2
2334
+ end
2335
+ if s0.last
2336
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2337
+ r0.extend(Spec1)
2338
+ r0.extend(Spec2)
2339
+ else
2340
+ @index = i0
2341
+ r0 = nil
2342
+ end
2343
+
2344
+ node_cache[:spec][start_index] = r0
2345
+
2346
+ r0
2347
+ end
2348
+
2349
+ module Spec10
2350
+ def S1
2351
+ elements[0]
2352
+ end
2353
+
2354
+ def S2
2355
+ elements[2]
2356
+ end
2357
+ end
2358
+
2359
+ def _nt_spec1
2360
+ start_index = index
2361
+ if node_cache[:spec1].has_key?(index)
2362
+ cached = node_cache[:spec1][index]
2363
+ if cached
2364
+ node_cache[:spec1][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2365
+ @index = cached.interval.end
2366
+ end
2367
+ return cached
2368
+ end
2369
+
2370
+ i0, s0 = index, []
2371
+ r1 = _nt_S
2372
+ s0 << r1
2373
+ if r1
2374
+ if (match_len = has_terminal?("_", false, index))
2375
+ r2 = true
2376
+ @index += match_len
2377
+ else
2378
+ terminal_parse_failure('"_"')
2379
+ r2 = nil
2380
+ end
2381
+ s0 << r2
2382
+ if r2
2383
+ r3 = _nt_S
2384
+ s0 << r3
2385
+ end
2386
+ end
2387
+ if s0.last
2388
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2389
+ r0.extend(Spec10)
2390
+ else
2391
+ @index = i0
2392
+ r0 = nil
2393
+ end
2394
+
2395
+ node_cache[:spec1][start_index] = r0
2396
+
2397
+ r0
2398
+ end
2399
+
2400
+ module DoubleQuoted0
2401
+ def ast; text_value end
2402
+ end
2403
+
2404
+ module DoubleQuoted1
2405
+ def ast; text_value end
2406
+ end
2407
+
2408
+ module DoubleQuoted2
2409
+ def DQUOTE
2410
+ elements[1]
2411
+ end
2412
+ end
2413
+
2414
+ module DoubleQuoted3
2415
+ def ast; elements[1].text_value end
2416
+ end
2417
+
2418
+ module DoubleQuoted4
2419
+ def escapable
2420
+ elements[1]
2421
+ end
2422
+ end
2423
+
2424
+ module DoubleQuoted5
2425
+ def ast; escapable.ast end
2426
+ end
2427
+
2428
+ def _nt_double_quoted
2429
+ start_index = index
2430
+ if node_cache[:double_quoted].has_key?(index)
2431
+ cached = node_cache[:double_quoted][index]
2432
+ if cached
2433
+ node_cache[:double_quoted][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2434
+ @index = cached.interval.end
2435
+ end
2436
+ return cached
2437
+ end
2438
+
2439
+ i0 = index
2440
+ r1 = _nt_unescaped
2441
+ r1.extend(DoubleQuoted0)
2442
+ r1.extend(DoubleQuoted0)
2443
+ if r1
2444
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2445
+ r0 = r1
2446
+ else
2447
+ if (match_len = has_terminal?("'", false, index))
2448
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2449
+ r2.extend(DoubleQuoted1)
2450
+ @index += match_len
2451
+ else
2452
+ terminal_parse_failure('"\'"')
2453
+ r2 = nil
2454
+ end
2455
+ if r2
2456
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2457
+ r0 = r2
2458
+ else
2459
+ i3, s3 = index, []
2460
+ if (match_len = has_terminal?("\\", false, index))
2461
+ r4 = true
2462
+ @index += match_len
2463
+ else
2464
+ terminal_parse_failure('"\\\\"')
2465
+ r4 = nil
2466
+ end
2467
+ s3 << r4
2468
+ if r4
2469
+ r5 = _nt_DQUOTE
2470
+ s3 << r5
2471
+ end
2472
+ if s3.last
2473
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2474
+ r3.extend(DoubleQuoted2)
2475
+ r3.extend(DoubleQuoted3)
2476
+ else
2477
+ @index = i3
2478
+ r3 = nil
2479
+ end
2480
+ if r3
2481
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2482
+ r0 = r3
2483
+ else
2484
+ i6, s6 = index, []
2485
+ if (match_len = has_terminal?("\\", false, index))
2486
+ r7 = true
2487
+ @index += match_len
2488
+ else
2489
+ terminal_parse_failure('"\\\\"')
2490
+ r7 = nil
2491
+ end
2492
+ s6 << r7
2493
+ if r7
2494
+ r8 = _nt_escapable
2495
+ s6 << r8
2496
+ end
2497
+ if s6.last
2498
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
2499
+ r6.extend(DoubleQuoted4)
2500
+ r6.extend(DoubleQuoted5)
2501
+ else
2502
+ @index = i6
2503
+ r6 = nil
2504
+ end
2505
+ if r6
2506
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2507
+ r0 = r6
2508
+ else
2509
+ @index = i0
2510
+ r0 = nil
2511
+ end
2512
+ end
2513
+ end
2514
+ end
2515
+
2516
+ node_cache[:double_quoted][start_index] = r0
2517
+
2518
+ r0
2519
+ end
2520
+
2521
+ module SingleQuoted0
2522
+ def ast; text_value end
2523
+ end
2524
+
2525
+ module SingleQuoted1
2526
+ def ast; text_value end
2527
+ end
2528
+
2529
+ module SingleQuoted2
2530
+ end
2531
+
2532
+ module SingleQuoted3
2533
+ def ast; elements[1].text_value end
2534
+ end
2535
+
2536
+ module SingleQuoted4
2537
+ def escapable
2538
+ elements[1]
2539
+ end
2540
+ end
2541
+
2542
+ module SingleQuoted5
2543
+ def ast; escapable.ast end
2544
+ end
2545
+
2546
+ def _nt_single_quoted
2547
+ start_index = index
2548
+ if node_cache[:single_quoted].has_key?(index)
2549
+ cached = node_cache[:single_quoted][index]
2550
+ if cached
2551
+ node_cache[:single_quoted][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2552
+ @index = cached.interval.end
2553
+ end
2554
+ return cached
2555
+ end
2556
+
2557
+ i0 = index
2558
+ r1 = _nt_unescaped
2559
+ r1.extend(SingleQuoted0)
2560
+ r1.extend(SingleQuoted0)
2561
+ if r1
2562
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2563
+ r0 = r1
2564
+ else
2565
+ r2 = _nt_DQUOTE
2566
+ r2.extend(SingleQuoted1)
2567
+ r2.extend(SingleQuoted1)
2568
+ if r2
2569
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2570
+ r0 = r2
2571
+ else
2572
+ i3, s3 = index, []
2573
+ if (match_len = has_terminal?("\\", false, index))
2574
+ r4 = true
2575
+ @index += match_len
2576
+ else
2577
+ terminal_parse_failure('"\\\\"')
2578
+ r4 = nil
2579
+ end
2580
+ s3 << r4
2581
+ if r4
2582
+ if (match_len = has_terminal?("'", false, index))
2583
+ r5 = true
2584
+ @index += match_len
2585
+ else
2586
+ terminal_parse_failure('"\'"')
2587
+ r5 = nil
2588
+ end
2589
+ s3 << r5
2590
+ end
2591
+ if s3.last
2592
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2593
+ r3.extend(SingleQuoted2)
2594
+ r3.extend(SingleQuoted3)
2595
+ else
2596
+ @index = i3
2597
+ r3 = nil
2598
+ end
2599
+ if r3
2600
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2601
+ r0 = r3
2602
+ else
2603
+ i6, s6 = index, []
2604
+ if (match_len = has_terminal?("\\", false, index))
2605
+ r7 = true
2606
+ @index += match_len
2607
+ else
2608
+ terminal_parse_failure('"\\\\"')
2609
+ r7 = nil
2610
+ end
2611
+ s6 << r7
2612
+ if r7
2613
+ r8 = _nt_escapable
2614
+ s6 << r8
2615
+ end
2616
+ if s6.last
2617
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
2618
+ r6.extend(SingleQuoted4)
2619
+ r6.extend(SingleQuoted5)
2620
+ else
2621
+ @index = i6
2622
+ r6 = nil
2623
+ end
2624
+ if r6
2625
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2626
+ r0 = r6
2627
+ else
2628
+ @index = i0
2629
+ r0 = nil
2630
+ end
2631
+ end
2632
+ end
2633
+ end
2634
+
2635
+ node_cache[:single_quoted][start_index] = r0
2636
+
2637
+ r0
2638
+ end
2639
+
2640
+ module Escapable0
2641
+ def ast; "\b" end
2642
+ end
2643
+
2644
+ module Escapable1
2645
+ def ast; "\f" end
2646
+ end
2647
+
2648
+ module Escapable2
2649
+ def ast; "\n" end
2650
+ end
2651
+
2652
+ module Escapable3
2653
+ def ast; "\r" end
2654
+ end
2655
+
2656
+ module Escapable4
2657
+ def ast; "\t" end
2658
+ end
2659
+
2660
+ module Escapable5
2661
+ def ast; text_value end
2662
+ end
2663
+
2664
+ module Escapable6
2665
+ def ast; text_value end
2666
+ end
2667
+
2668
+ module Escapable7
2669
+ def hexchar
2670
+ elements[1]
2671
+ end
2672
+ end
2673
+
2674
+ module Escapable8
2675
+ def ast; hexchar.ast end
2676
+ end
2677
+
2678
+ def _nt_escapable
2679
+ start_index = index
2680
+ if node_cache[:escapable].has_key?(index)
2681
+ cached = node_cache[:escapable][index]
2682
+ if cached
2683
+ node_cache[:escapable][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2684
+ @index = cached.interval.end
2685
+ end
2686
+ return cached
2687
+ end
2688
+
2689
+ i0 = index
2690
+ if (match_len = has_terminal?("b", false, index))
2691
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2692
+ r1.extend(Escapable0)
2693
+ @index += match_len
2694
+ else
2695
+ terminal_parse_failure('"b"')
2696
+ r1 = nil
2697
+ end
2698
+ if r1
2699
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2700
+ r0 = r1
2701
+ else
2702
+ if (match_len = has_terminal?("f", false, index))
2703
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2704
+ r2.extend(Escapable1)
2705
+ @index += match_len
2706
+ else
2707
+ terminal_parse_failure('"f"')
2708
+ r2 = nil
2709
+ end
2710
+ if r2
2711
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2712
+ r0 = r2
2713
+ else
2714
+ if (match_len = has_terminal?("n", false, index))
2715
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2716
+ r3.extend(Escapable2)
2717
+ @index += match_len
2718
+ else
2719
+ terminal_parse_failure('"n"')
2720
+ r3 = nil
2721
+ end
2722
+ if r3
2723
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2724
+ r0 = r3
2725
+ else
2726
+ if (match_len = has_terminal?("r", false, index))
2727
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2728
+ r4.extend(Escapable3)
2729
+ @index += match_len
2730
+ else
2731
+ terminal_parse_failure('"r"')
2732
+ r4 = nil
2733
+ end
2734
+ if r4
2735
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2736
+ r0 = r4
2737
+ else
2738
+ if (match_len = has_terminal?("t", false, index))
2739
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2740
+ r5.extend(Escapable4)
2741
+ @index += match_len
2742
+ else
2743
+ terminal_parse_failure('"t"')
2744
+ r5 = nil
2745
+ end
2746
+ if r5
2747
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2748
+ r0 = r5
2749
+ else
2750
+ if (match_len = has_terminal?("/", false, index))
2751
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2752
+ r6.extend(Escapable5)
2753
+ @index += match_len
2754
+ else
2755
+ terminal_parse_failure('"/"')
2756
+ r6 = nil
2757
+ end
2758
+ if r6
2759
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2760
+ r0 = r6
2761
+ else
2762
+ if (match_len = has_terminal?("\\", false, index))
2763
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2764
+ r7.extend(Escapable6)
2765
+ @index += match_len
2766
+ else
2767
+ terminal_parse_failure('"\\\\"')
2768
+ r7 = nil
2769
+ end
2770
+ if r7
2771
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2772
+ r0 = r7
2773
+ else
2774
+ i8, s8 = index, []
2775
+ if (match_len = has_terminal?("u", false, index))
2776
+ r9 = true
2777
+ @index += match_len
2778
+ else
2779
+ terminal_parse_failure('"u"')
2780
+ r9 = nil
2781
+ end
2782
+ s8 << r9
2783
+ if r9
2784
+ r10 = _nt_hexchar
2785
+ s8 << r10
2786
+ end
2787
+ if s8.last
2788
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
2789
+ r8.extend(Escapable7)
2790
+ r8.extend(Escapable8)
2791
+ else
2792
+ @index = i8
2793
+ r8 = nil
2794
+ end
2795
+ if r8
2796
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
2797
+ r0 = r8
2798
+ else
2799
+ @index = i0
2800
+ r0 = nil
2801
+ end
2802
+ end
2803
+ end
2804
+ end
2805
+ end
2806
+ end
2807
+ end
2808
+ end
2809
+
2810
+ node_cache[:escapable][start_index] = r0
2811
+
2812
+ r0
2813
+ end
2814
+
2815
+ module Hexchar0
2816
+ def ast; hex_value.chr(Encoding::UTF_8) end
2817
+ end
2818
+
2819
+ module Hexchar1
2820
+ def high_surrogate
2821
+ elements[0]
2822
+ end
2823
+
2824
+ def low_surrogate
2825
+ elements[3]
2826
+ end
2827
+ end
2828
+
2829
+ module Hexchar2
2830
+ def ast
2831
+ ((high_surrogate.ast << 10) + low_surrogate.ast + 0x10000).chr(Encoding::UTF_8)
2832
+ end
2833
+ end
2834
+
2835
+ def _nt_hexchar
2836
+ start_index = index
2837
+ if node_cache[:hexchar].has_key?(index)
2838
+ cached = node_cache[:hexchar][index]
2839
+ if cached
2840
+ node_cache[:hexchar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2841
+ @index = cached.interval.end
2842
+ end
2843
+ return cached
2844
+ end
2845
+
2846
+ i0 = index
2847
+ r1 = _nt_non_surrogate
2848
+ r1.extend(Hexchar0)
2849
+ r1.extend(Hexchar0)
2850
+ if r1
2851
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2852
+ r0 = r1
2853
+ else
2854
+ i2, s2 = index, []
2855
+ r3 = _nt_high_surrogate
2856
+ s2 << r3
2857
+ if r3
2858
+ if (match_len = has_terminal?("\\", false, index))
2859
+ r4 = true
2860
+ @index += match_len
2861
+ else
2862
+ terminal_parse_failure('"\\\\"')
2863
+ r4 = nil
2864
+ end
2865
+ s2 << r4
2866
+ if r4
2867
+ if (match_len = has_terminal?("u", false, index))
2868
+ r5 = true
2869
+ @index += match_len
2870
+ else
2871
+ terminal_parse_failure('"u"')
2872
+ r5 = nil
2873
+ end
2874
+ s2 << r5
2875
+ if r5
2876
+ r6 = _nt_low_surrogate
2877
+ s2 << r6
2878
+ end
2879
+ end
2880
+ end
2881
+ if s2.last
2882
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2883
+ r2.extend(Hexchar1)
2884
+ r2.extend(Hexchar2)
2885
+ else
2886
+ @index = i2
2887
+ r2 = nil
2888
+ end
2889
+ if r2
2890
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2891
+ r0 = r2
2892
+ else
2893
+ @index = i0
2894
+ r0 = nil
2895
+ end
2896
+ end
2897
+
2898
+ node_cache[:hexchar][start_index] = r0
2899
+
2900
+ r0
2901
+ end
2902
+
2903
+ module NonSurrogate0
2904
+ end
2905
+
2906
+ module NonSurrogate1
2907
+ def ODIGIT
2908
+ elements[1]
2909
+ end
2910
+
2911
+ end
2912
+
2913
+ def _nt_non_surrogate
2914
+ start_index = index
2915
+ if node_cache[:non_surrogate].has_key?(index)
2916
+ cached = node_cache[:non_surrogate][index]
2917
+ if cached
2918
+ node_cache[:non_surrogate][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2919
+ @index = cached.interval.end
2920
+ end
2921
+ return cached
2922
+ end
2923
+
2924
+ i0 = index
2925
+ i1, s1 = index, []
2926
+ i2 = index
2927
+ r3 = _nt_DIGIT
2928
+ if r3
2929
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2930
+ r2 = r3
2931
+ else
2932
+ if (match_len = has_terminal?("a", :insens, index))
2933
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2934
+ @index += match_len
2935
+ else
2936
+ terminal_parse_failure('"A"')
2937
+ r4 = nil
2938
+ end
2939
+ if r4
2940
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2941
+ r2 = r4
2942
+ else
2943
+ if (match_len = has_terminal?("b", :insens, index))
2944
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2945
+ @index += match_len
2946
+ else
2947
+ terminal_parse_failure('"B"')
2948
+ r5 = nil
2949
+ end
2950
+ if r5
2951
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2952
+ r2 = r5
2953
+ else
2954
+ if (match_len = has_terminal?("c", :insens, index))
2955
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2956
+ @index += match_len
2957
+ else
2958
+ terminal_parse_failure('"C"')
2959
+ r6 = nil
2960
+ end
2961
+ if r6
2962
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2963
+ r2 = r6
2964
+ else
2965
+ if (match_len = has_terminal?("e", :insens, index))
2966
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2967
+ @index += match_len
2968
+ else
2969
+ terminal_parse_failure('"E"')
2970
+ r7 = nil
2971
+ end
2972
+ if r7
2973
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2974
+ r2 = r7
2975
+ else
2976
+ if (match_len = has_terminal?("f", :insens, index))
2977
+ r8 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2978
+ @index += match_len
2979
+ else
2980
+ terminal_parse_failure('"F"')
2981
+ r8 = nil
2982
+ end
2983
+ if r8
2984
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
2985
+ r2 = r8
2986
+ else
2987
+ @index = i2
2988
+ r2 = nil
2989
+ end
2990
+ end
2991
+ end
2992
+ end
2993
+ end
2994
+ end
2995
+ s1 << r2
2996
+ if r2
2997
+ s9, i9 = [], index
2998
+ loop do
2999
+ r10 = _nt_HEXDIG
3000
+ if r10
3001
+ s9 << r10
3002
+ else
3003
+ break
3004
+ end
3005
+ if s9.size == 3
3006
+ break
3007
+ end
3008
+ end
3009
+ if s9.size < 3
3010
+ @index = i9
3011
+ r9 = nil
3012
+ else
3013
+ if s9.size < 3
3014
+ @terminal_failures.pop
3015
+ end
3016
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
3017
+ end
3018
+ s1 << r9
3019
+ end
3020
+ if s1.last
3021
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3022
+ r1.extend(NonSurrogate0)
3023
+ else
3024
+ @index = i1
3025
+ r1 = nil
3026
+ end
3027
+ if r1
3028
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3029
+ r0 = r1
3030
+ else
3031
+ i11, s11 = index, []
3032
+ if (match_len = has_terminal?("d", :insens, index))
3033
+ r12 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3034
+ @index += match_len
3035
+ else
3036
+ terminal_parse_failure('"D"')
3037
+ r12 = nil
3038
+ end
3039
+ s11 << r12
3040
+ if r12
3041
+ r13 = _nt_ODIGIT
3042
+ s11 << r13
3043
+ if r13
3044
+ s14, i14 = [], index
3045
+ loop do
3046
+ r15 = _nt_HEXDIG
3047
+ if r15
3048
+ s14 << r15
3049
+ else
3050
+ break
3051
+ end
3052
+ if s14.size == 2
3053
+ break
3054
+ end
3055
+ end
3056
+ if s14.size < 2
3057
+ @index = i14
3058
+ r14 = nil
3059
+ else
3060
+ if s14.size < 2
3061
+ @terminal_failures.pop
3062
+ end
3063
+ r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
3064
+ end
3065
+ s11 << r14
3066
+ end
3067
+ end
3068
+ if s11.last
3069
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
3070
+ r11.extend(NonSurrogate1)
3071
+ else
3072
+ @index = i11
3073
+ r11 = nil
3074
+ end
3075
+ if r11
3076
+ r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
3077
+ r0 = r11
3078
+ else
3079
+ @index = i0
3080
+ r0 = nil
3081
+ end
3082
+ end
3083
+
3084
+ node_cache[:non_surrogate][start_index] = r0
3085
+
3086
+ r0
3087
+ end
3088
+
3089
+ module HighSurrogate0
3090
+ end
3091
+
3092
+ module HighSurrogate1
3093
+ def ast; hex_value - 0xD800 end
3094
+ end
3095
+
3096
+ def _nt_high_surrogate
3097
+ start_index = index
3098
+ if node_cache[:high_surrogate].has_key?(index)
3099
+ cached = node_cache[:high_surrogate][index]
3100
+ if cached
3101
+ node_cache[:high_surrogate][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3102
+ @index = cached.interval.end
3103
+ end
3104
+ return cached
3105
+ end
3106
+
3107
+ i0, s0 = index, []
3108
+ if (match_len = has_terminal?("d", :insens, index))
3109
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3110
+ @index += match_len
3111
+ else
3112
+ terminal_parse_failure('"D"')
3113
+ r1 = nil
3114
+ end
3115
+ s0 << r1
3116
+ if r1
3117
+ i2 = index
3118
+ if (match_len = has_terminal?("8", false, index))
3119
+ r3 = true
3120
+ @index += match_len
3121
+ else
3122
+ terminal_parse_failure('"8"')
3123
+ r3 = nil
3124
+ end
3125
+ if r3
3126
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3127
+ r2 = r3
3128
+ else
3129
+ if (match_len = has_terminal?("9", false, index))
3130
+ r4 = true
3131
+ @index += match_len
3132
+ else
3133
+ terminal_parse_failure('"9"')
3134
+ r4 = nil
3135
+ end
3136
+ if r4
3137
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
3138
+ r2 = r4
3139
+ else
3140
+ if (match_len = has_terminal?("a", :insens, index))
3141
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3142
+ @index += match_len
3143
+ else
3144
+ terminal_parse_failure('"A"')
3145
+ r5 = nil
3146
+ end
3147
+ if r5
3148
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
3149
+ r2 = r5
3150
+ else
3151
+ if (match_len = has_terminal?("b", :insens, index))
3152
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3153
+ @index += match_len
3154
+ else
3155
+ terminal_parse_failure('"B"')
3156
+ r6 = nil
3157
+ end
3158
+ if r6
3159
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
3160
+ r2 = r6
3161
+ else
3162
+ @index = i2
3163
+ r2 = nil
3164
+ end
3165
+ end
3166
+ end
3167
+ end
3168
+ s0 << r2
3169
+ if r2
3170
+ s7, i7 = [], index
3171
+ loop do
3172
+ r8 = _nt_HEXDIG
3173
+ if r8
3174
+ s7 << r8
3175
+ else
3176
+ break
3177
+ end
3178
+ if s7.size == 2
3179
+ break
3180
+ end
3181
+ end
3182
+ if s7.size < 2
3183
+ @index = i7
3184
+ r7 = nil
3185
+ else
3186
+ if s7.size < 2
3187
+ @terminal_failures.pop
3188
+ end
3189
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
3190
+ end
3191
+ s0 << r7
3192
+ end
3193
+ end
3194
+ if s0.last
3195
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3196
+ r0.extend(HighSurrogate0)
3197
+ r0.extend(HighSurrogate1)
3198
+ else
3199
+ @index = i0
3200
+ r0 = nil
3201
+ end
3202
+
3203
+ node_cache[:high_surrogate][start_index] = r0
3204
+
3205
+ r0
3206
+ end
3207
+
3208
+ module LowSurrogate0
3209
+ end
3210
+
3211
+ module LowSurrogate1
3212
+ def ast; hex_value - 0xDC00 end
3213
+ end
3214
+
3215
+ def _nt_low_surrogate
3216
+ start_index = index
3217
+ if node_cache[:low_surrogate].has_key?(index)
3218
+ cached = node_cache[:low_surrogate][index]
3219
+ if cached
3220
+ node_cache[:low_surrogate][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3221
+ @index = cached.interval.end
3222
+ end
3223
+ return cached
3224
+ end
3225
+
3226
+ i0, s0 = index, []
3227
+ if (match_len = has_terminal?("d", :insens, index))
3228
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3229
+ @index += match_len
3230
+ else
3231
+ terminal_parse_failure('"D"')
3232
+ r1 = nil
3233
+ end
3234
+ s0 << r1
3235
+ if r1
3236
+ i2 = index
3237
+ if (match_len = has_terminal?("c", :insens, index))
3238
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3239
+ @index += match_len
3240
+ else
3241
+ terminal_parse_failure('"C"')
3242
+ r3 = nil
3243
+ end
3244
+ if r3
3245
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3246
+ r2 = r3
3247
+ else
3248
+ if (match_len = has_terminal?("d", :insens, index))
3249
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3250
+ @index += match_len
3251
+ else
3252
+ terminal_parse_failure('"D"')
3253
+ r4 = nil
3254
+ end
3255
+ if r4
3256
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
3257
+ r2 = r4
3258
+ else
3259
+ if (match_len = has_terminal?("e", :insens, index))
3260
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3261
+ @index += match_len
3262
+ else
3263
+ terminal_parse_failure('"E"')
3264
+ r5 = nil
3265
+ end
3266
+ if r5
3267
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
3268
+ r2 = r5
3269
+ else
3270
+ if (match_len = has_terminal?("f", :insens, index))
3271
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3272
+ @index += match_len
3273
+ else
3274
+ terminal_parse_failure('"F"')
3275
+ r6 = nil
3276
+ end
3277
+ if r6
3278
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
3279
+ r2 = r6
3280
+ else
3281
+ @index = i2
3282
+ r2 = nil
3283
+ end
3284
+ end
3285
+ end
3286
+ end
3287
+ s0 << r2
3288
+ if r2
3289
+ s7, i7 = [], index
3290
+ loop do
3291
+ r8 = _nt_HEXDIG
3292
+ if r8
3293
+ s7 << r8
3294
+ else
3295
+ break
3296
+ end
3297
+ if s7.size == 2
3298
+ break
3299
+ end
3300
+ end
3301
+ if s7.size < 2
3302
+ @index = i7
3303
+ r7 = nil
3304
+ else
3305
+ if s7.size < 2
3306
+ @terminal_failures.pop
3307
+ end
3308
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
3309
+ end
3310
+ s0 << r7
3311
+ end
3312
+ end
3313
+ if s0.last
3314
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3315
+ r0.extend(LowSurrogate0)
3316
+ r0.extend(LowSurrogate1)
3317
+ else
3318
+ @index = i0
3319
+ r0 = nil
3320
+ end
3321
+
3322
+ node_cache[:low_surrogate][start_index] = r0
3323
+
3324
+ r0
3325
+ end
3326
+
3327
+ def _nt_unescaped
3328
+ start_index = index
3329
+ if node_cache[:unescaped].has_key?(index)
3330
+ cached = node_cache[:unescaped][index]
3331
+ if cached
3332
+ node_cache[:unescaped][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3333
+ @index = cached.interval.end
3334
+ end
3335
+ return cached
3336
+ end
3337
+
3338
+ i0 = index
3339
+ if (match_len = has_terminal?("\n", false, index))
3340
+ r1 = true
3341
+ @index += match_len
3342
+ else
3343
+ terminal_parse_failure('"\\n"')
3344
+ r1 = nil
3345
+ end
3346
+ if r1
3347
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3348
+ r0 = r1
3349
+ else
3350
+ if (match_len = has_terminal?("\r", false, index))
3351
+ r2 = true
3352
+ @index += match_len
3353
+ else
3354
+ terminal_parse_failure('"\\r"')
3355
+ r2 = nil
3356
+ end
3357
+ if r2
3358
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3359
+ r0 = r2
3360
+ else
3361
+ if has_terminal?(@regexps[gr = '\A[\\ -!]'] ||= Regexp.new(gr), :regexp, index)
3362
+ r3 = true
3363
+ @index += 1
3364
+ else
3365
+ terminal_parse_failure('[\\ -!]')
3366
+ r3 = nil
3367
+ end
3368
+ if r3
3369
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3370
+ r0 = r3
3371
+ else
3372
+ if has_terminal?(@regexps[gr = '\A[\\#-&]'] ||= Regexp.new(gr), :regexp, index)
3373
+ r4 = true
3374
+ @index += 1
3375
+ else
3376
+ terminal_parse_failure('[\\#-&]')
3377
+ r4 = nil
3378
+ end
3379
+ if r4
3380
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
3381
+ r0 = r4
3382
+ else
3383
+ if has_terminal?(@regexps[gr = '\A[\\(-\\[]'] ||= Regexp.new(gr), :regexp, index)
3384
+ r5 = true
3385
+ @index += 1
3386
+ else
3387
+ terminal_parse_failure('[\\(-\\[]')
3388
+ r5 = nil
3389
+ end
3390
+ if r5
3391
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
3392
+ r0 = r5
3393
+ else
3394
+ if has_terminal?(@regexps[gr = '\A[\\]-􏿿]'] ||= Regexp.new(gr), :regexp, index)
3395
+ r6 = true
3396
+ @index += 1
3397
+ else
3398
+ terminal_parse_failure('[\\]-􏿿]')
3399
+ r6 = nil
3400
+ end
3401
+ if r6
3402
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
3403
+ r0 = r6
3404
+ else
3405
+ @index = i0
3406
+ r0 = nil
3407
+ end
3408
+ end
3409
+ end
3410
+ end
3411
+ end
3412
+ end
3413
+
3414
+ node_cache[:unescaped][start_index] = r0
3415
+
3416
+ r0
3417
+ end
3418
+
3419
+ def _nt_DQUOTE
3420
+ start_index = index
3421
+ if node_cache[:DQUOTE].has_key?(index)
3422
+ cached = node_cache[:DQUOTE][index]
3423
+ if cached
3424
+ node_cache[:DQUOTE][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3425
+ @index = cached.interval.end
3426
+ end
3427
+ return cached
3428
+ end
3429
+
3430
+ if (match_len = has_terminal?("\"", false, index))
3431
+ r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3432
+ @index += match_len
3433
+ else
3434
+ terminal_parse_failure('"\\""')
3435
+ r0 = nil
3436
+ end
3437
+
3438
+ node_cache[:DQUOTE][start_index] = r0
3439
+
3440
+ r0
3441
+ end
3442
+
3443
+ def _nt_DIGIT
3444
+ start_index = index
3445
+ if node_cache[:DIGIT].has_key?(index)
3446
+ cached = node_cache[:DIGIT][index]
3447
+ if cached
3448
+ node_cache[:DIGIT][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3449
+ @index = cached.interval.end
3450
+ end
3451
+ return cached
3452
+ end
3453
+
3454
+ if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
3455
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
3456
+ @index += 1
3457
+ else
3458
+ terminal_parse_failure('[0-9]')
3459
+ r0 = nil
3460
+ end
3461
+
3462
+ node_cache[:DIGIT][start_index] = r0
3463
+
3464
+ r0
3465
+ end
3466
+
3467
+ def _nt_DIGIT1
3468
+ start_index = index
3469
+ if node_cache[:DIGIT1].has_key?(index)
3470
+ cached = node_cache[:DIGIT1][index]
3471
+ if cached
3472
+ node_cache[:DIGIT1][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3473
+ @index = cached.interval.end
3474
+ end
3475
+ return cached
3476
+ end
3477
+
3478
+ if has_terminal?(@regexps[gr = '\A[1-9]'] ||= Regexp.new(gr), :regexp, index)
3479
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
3480
+ @index += 1
3481
+ else
3482
+ terminal_parse_failure('[1-9]')
3483
+ r0 = nil
3484
+ end
3485
+
3486
+ node_cache[:DIGIT1][start_index] = r0
3487
+
3488
+ r0
3489
+ end
3490
+
3491
+ def _nt_ODIGIT
3492
+ start_index = index
3493
+ if node_cache[:ODIGIT].has_key?(index)
3494
+ cached = node_cache[:ODIGIT][index]
3495
+ if cached
3496
+ node_cache[:ODIGIT][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3497
+ @index = cached.interval.end
3498
+ end
3499
+ return cached
3500
+ end
3501
+
3502
+ if has_terminal?(@regexps[gr = '\A[0-7]'] ||= Regexp.new(gr), :regexp, index)
3503
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
3504
+ @index += 1
3505
+ else
3506
+ terminal_parse_failure('[0-7]')
3507
+ r0 = nil
3508
+ end
3509
+
3510
+ node_cache[:ODIGIT][start_index] = r0
3511
+
3512
+ r0
3513
+ end
3514
+
3515
+ def _nt_BDIGIT
3516
+ start_index = index
3517
+ if node_cache[:BDIGIT].has_key?(index)
3518
+ cached = node_cache[:BDIGIT][index]
3519
+ if cached
3520
+ node_cache[:BDIGIT][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3521
+ @index = cached.interval.end
3522
+ end
3523
+ return cached
3524
+ end
3525
+
3526
+ if has_terminal?(@regexps[gr = '\A[0-1]'] ||= Regexp.new(gr), :regexp, index)
3527
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
3528
+ @index += 1
3529
+ else
3530
+ terminal_parse_failure('[0-1]')
3531
+ r0 = nil
3532
+ end
3533
+
3534
+ node_cache[:BDIGIT][start_index] = r0
3535
+
3536
+ r0
3537
+ end
3538
+
3539
+ def _nt_HEXDIG
3540
+ start_index = index
3541
+ if node_cache[:HEXDIG].has_key?(index)
3542
+ cached = node_cache[:HEXDIG][index]
3543
+ if cached
3544
+ node_cache[:HEXDIG][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3545
+ @index = cached.interval.end
3546
+ end
3547
+ return cached
3548
+ end
3549
+
3550
+ i0 = index
3551
+ r1 = _nt_DIGIT
3552
+ if r1
3553
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3554
+ r0 = r1
3555
+ else
3556
+ if (match_len = has_terminal?("a", :insens, index))
3557
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3558
+ @index += match_len
3559
+ else
3560
+ terminal_parse_failure('"A"')
3561
+ r2 = nil
3562
+ end
3563
+ if r2
3564
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3565
+ r0 = r2
3566
+ else
3567
+ if (match_len = has_terminal?("b", :insens, index))
3568
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3569
+ @index += match_len
3570
+ else
3571
+ terminal_parse_failure('"B"')
3572
+ r3 = nil
3573
+ end
3574
+ if r3
3575
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3576
+ r0 = r3
3577
+ else
3578
+ if (match_len = has_terminal?("c", :insens, index))
3579
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3580
+ @index += match_len
3581
+ else
3582
+ terminal_parse_failure('"C"')
3583
+ r4 = nil
3584
+ end
3585
+ if r4
3586
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
3587
+ r0 = r4
3588
+ else
3589
+ if (match_len = has_terminal?("d", :insens, index))
3590
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3591
+ @index += match_len
3592
+ else
3593
+ terminal_parse_failure('"D"')
3594
+ r5 = nil
3595
+ end
3596
+ if r5
3597
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
3598
+ r0 = r5
3599
+ else
3600
+ if (match_len = has_terminal?("e", :insens, index))
3601
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3602
+ @index += match_len
3603
+ else
3604
+ terminal_parse_failure('"E"')
3605
+ r6 = nil
3606
+ end
3607
+ if r6
3608
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
3609
+ r0 = r6
3610
+ else
3611
+ if (match_len = has_terminal?("f", :insens, index))
3612
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3613
+ @index += match_len
3614
+ else
3615
+ terminal_parse_failure('"F"')
3616
+ r7 = nil
3617
+ end
3618
+ if r7
3619
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
3620
+ r0 = r7
3621
+ else
3622
+ @index = i0
3623
+ r0 = nil
3624
+ end
3625
+ end
3626
+ end
3627
+ end
3628
+ end
3629
+ end
3630
+ end
3631
+
3632
+ node_cache[:HEXDIG][start_index] = r0
3633
+
3634
+ r0
3635
+ end
3636
+
3637
+ def _nt_lcalpha
3638
+ start_index = index
3639
+ if node_cache[:lcalpha].has_key?(index)
3640
+ cached = node_cache[:lcalpha][index]
3641
+ if cached
3642
+ node_cache[:lcalpha][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3643
+ @index = cached.interval.end
3644
+ end
3645
+ return cached
3646
+ end
3647
+
3648
+ if has_terminal?(@regexps[gr = '\A[a-z]'] ||= Regexp.new(gr), :regexp, index)
3649
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
3650
+ @index += 1
3651
+ else
3652
+ terminal_parse_failure('[a-z]')
3653
+ r0 = nil
3654
+ end
3655
+
3656
+ node_cache[:lcalpha][start_index] = r0
3657
+
3658
+ r0
3659
+ end
3660
+
3661
+ def _nt_lcalnum
3662
+ start_index = index
3663
+ if node_cache[:lcalnum].has_key?(index)
3664
+ cached = node_cache[:lcalnum][index]
3665
+ if cached
3666
+ node_cache[:lcalnum][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3667
+ @index = cached.interval.end
3668
+ end
3669
+ return cached
3670
+ end
3671
+
3672
+ i0 = index
3673
+ r1 = _nt_lcalpha
3674
+ if r1
3675
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3676
+ r0 = r1
3677
+ else
3678
+ r2 = _nt_DIGIT
3679
+ if r2
3680
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3681
+ r0 = r2
3682
+ else
3683
+ @index = i0
3684
+ r0 = nil
3685
+ end
3686
+ end
3687
+
3688
+ node_cache[:lcalnum][start_index] = r0
3689
+
3690
+ r0
3691
+ end
3692
+
3693
+ def _nt_ALPHA
3694
+ start_index = index
3695
+ if node_cache[:ALPHA].has_key?(index)
3696
+ cached = node_cache[:ALPHA][index]
3697
+ if cached
3698
+ node_cache[:ALPHA][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3699
+ @index = cached.interval.end
3700
+ end
3701
+ return cached
3702
+ end
3703
+
3704
+ i0 = index
3705
+ if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
3706
+ r1 = true
3707
+ @index += 1
3708
+ else
3709
+ terminal_parse_failure('[A-Z]')
3710
+ r1 = nil
3711
+ end
3712
+ if r1
3713
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3714
+ r0 = r1
3715
+ else
3716
+ r2 = _nt_lcalpha
3717
+ if r2
3718
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3719
+ r0 = r2
3720
+ else
3721
+ @index = i0
3722
+ r0 = nil
3723
+ end
3724
+ end
3725
+
3726
+ node_cache[:ALPHA][start_index] = r0
3727
+
3728
+ r0
3729
+ end
3730
+
3731
+ end
3732
+
3733
+ class EDNGRAMMARParser < Treetop::Runtime::CompiledParser
3734
+ include EDNGRAMMAR
3735
+ end
3736
+