457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
|
# File 'lib/siren/json.rb', line 457
def _nt_string
start_index = index
if node_cache[:string].has_key?(index)
cached = node_cache[:string][index]
@index = cached.interval.end if cached
return cached
end
i0, s0 = index, []
if input.index('"', index) == index
r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('"')
r1 = nil
end
s0 << r1
if r1
s2, i2 = [], index
loop do
i3 = index
i4, s4 = index, []
if input.index('\\', index) == index
r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('\\')
r5 = nil
end
s4 << r5
if r5
i6 = index
if input.index('"', index) == index
r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('"')
r7 = nil
end
if r7
r6 = r7
else
if input.index('\\', index) == index
r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('\\')
r8 = nil
end
if r8
r6 = r8
else
if input.index('/', index) == index
r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('/')
r9 = nil
end
if r9
r6 = r9
else
if input.index('b', index) == index
r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('b')
r10 = nil
end
if r10
r6 = r10
else
if input.index('f', index) == index
r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('f')
r11 = nil
end
if r11
r6 = r11
else
if input.index('n', index) == index
r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('n')
r12 = nil
end
if r12
r6 = r12
else
if input.index('r', index) == index
r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('r')
r13 = nil
end
if r13
r6 = r13
else
if input.index('t', index) == index
r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('t')
r14 = nil
end
if r14
r6 = r14
else
i15, s15 = index, []
if input.index('u', index) == index
r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('u')
r16 = nil
end
s15 << r16
if r16
r17 = _nt_hex
s15 << r17
if r17
r18 = _nt_hex
s15 << r18
if r18
r19 = _nt_hex
s15 << r19
if r19
r20 = _nt_hex
s15 << r20
end
end
end
end
if s15.last
r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
r15.extend(String0)
else
self.index = i15
r15 = nil
end
if r15
r6 = r15
else
self.index = i6
r6 = nil
end
end
end
end
end
end
end
end
end
s4 << r6
end
if s4.last
r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
r4.extend(String1)
else
self.index = i4
r4 = nil
end
if r4
r3 = r4
else
if input.index(Regexp.new('[^\\"\\\\]'), index) == index
r21 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
r21 = nil
end
if r21
r3 = r21
else
self.index = i3
r3 = nil
end
end
if r3
s2 << r3
else
break
end
end
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
s0 << r2
if r2
if input.index('"', index) == index
r22 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('"')
r22 = nil
end
s0 << r22
end
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(String2)
r0.extend(String3)
else
self.index = i0
r0 = nil
end
node_cache[:string][start_index] = r0
return r0
end
|