rfc3987 0.1.0

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