rfc3987 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3d0bfb235846f3920c548311b020f42e25723714e3d842654bd3dd94385c87f
4
- data.tar.gz: 67bd6ad7d19d4667dd182e312b1541ed88f2a401448b56ffe2885c6fe20093b2
3
+ metadata.gz: bddd63750c881ac9a90fccae566008b90ec81dda5ec062994fa0c6fe3baa2416
4
+ data.tar.gz: '0961c132e5eb41a75da3a07f88b2bfb50f789e66bc9fce17b012ecd6c9772e2f'
5
5
  SHA512:
6
- metadata.gz: 056d5ad8f21600604d00653c1c59b6b227432e011f8efb1092ab03c14d16296d841878b2a3a4322913b3faf1bf225821aa644ef6779737c3930930eaa21f2af3
7
- data.tar.gz: ca7dab0447fdbe4af07e50c4e9aaa2ae9a751973abd506cdf5c0d3421de7b77beb2546165ac61e74943e91714be1328afdfa624c660baeae4f18abf7060e33fa
6
+ metadata.gz: e892c24fe03402852eb25a1a162fac7b63e3098c6ab47f8442c2abbe67eb3f9e1b49acc2e12c93d0aecb3312433dc982b80d5c3ef4758ed32efed827df6c6620
7
+ data.tar.gz: 2d1845e319f45ff9ca582518468ffa8eef29454e086d80e70c3b43ac4027ab3c119201172a27a5aef6493933f28d7607a16e2c88bc6c30c55002c62768b12bc9
@@ -1,3625 +1,11 @@
1
1
  require 'treetop'
2
+ require 'rfc3987/validation'
2
3
  require 'rfc3987/version'
3
- require 'rfc3987/parser'
4
- # Autogenerated from a Treetop grammar. Edits may be lost.
5
-
6
4
 
7
5
  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
6
+ Parser = Treetop.load(File.expand_path('../../rfc3987.treetop', __FILE__))
751
7
 
752
- r0
8
+ def self.parser
9
+ Parser.new.extend(Validation)
753
10
  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
11
  end