aboutsummaryrefslogblamecommitdiffstats
path: root/vendor/github.com/naoina/toml/parse.peg.go
blob: fa377b19bd74aebb944d31ed063116d154bf3f92 (plain) (tree)
455
456
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
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
































                                                         
                        



































































                             
                    




















                               
                       



































































                            
                   



















































































































                                                                                                    
                              







































































































                                                                                                               
                                                      




















                                                             
                                       
                                  
                                                              
                                  
                                              
                                  
                                                                     
                                  
                                                                
                                  
                                                                         
                                  
                                      

                                       

                                       














































































































































































































































































































































































































































































































































































































































                                                                                                                                                                                                              

                                                                              
                                                                                          

                                                                        
                                                                  









                                                                                                                



                                                                                          

                                                                                    















                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                       

































































                                                                                                                                                                                                                                                                                                                
                                                                                                                                          
                                                                                         
                                                                                                                       
                                                                                                 







                                                                                                                                                          
                                                                                                         













                                                                                                                                                                          
                                                                                                                 





                                                                                                                                                  

                                                                                                                          



                                                                                                                                                   
                                                                                                         
                                                                                                 

                                                                                                                                
                                                                                         


                                                                                                                                         
                                                                                 
                                                                             

























                                                                                                                         
                                                                       
                                                 
                                                                               
                                                                                   
                                                                         

                                                         
                                                                                                                  
                                                                                        
                                                                                 
                                                                 

                                                                                                                          
                                                                                               






                                                                                                                         












                                                                                                                          
                                                                                       
                                                                                 

                                                                 

                                                                                   
                                                 
                                                                             




                                                                          
                                     




                                                                                       
                                                                                       










                                                                                                   

                                                                                               
                                                                         
                                                                                                                                  
                                                                                                          
                                                                                                 

                                                                                 
                                                                                                                                          
                                                                                         
                                                                                                                       
                                                                                                                      
                                                                                                                 

                                                                                                                                  
                                                                                                                 


                                                                                                                      
                                                                                                                 
                                                                                                 
                                                                                                                                       
                                                                                         


                                                                                                                                         
                                                                                 

                                                                                         
                                                                             
                                                                                                                                 
                                                                         
                                                                                                                  










                                                                                                   
                                                                                                 



                                                             
                                                                                       
                                                                 
                                                                                               




                                                                                                          
                                                                                                           




                                                                                                
                                                                                                                                  
                                                                                 
                                                                                                               
                                                                                                               
                                                                                                         

                                                                                         
                                                                                                                           
                                                                                         
                                                                                     
                                                                                         
                                                                                                                                                  
                                                                                                                        
                                                                                                                 

                                                                                                 
                                                                                                                                                          
                                                                                                                                   
                                                                                                                         
                                                                                                         


                                                                                                                                                         
                                                                                                 
                                                                                             
                                                                                                                        
                                                                                                                 

                                                                                                                            
                                                                                                                 

                                                                                                                        
                                                                                                                 

                                                                                                 
                                                                                                                                                          
                                                                                                                                   
                                                                                                                         
                                                                                                         


                                                                                                                                                         
                                                                                                 
                                                                                             
                                                                                                                        
                                                                                                                 

                                                                                                                       
                                                                                                                 

                                                                                                 
                                                                                                                                   
                                                                                                 


                                                                                                                                                 

                                                                                                                
                                                                                                         

                                                                                         
                                                                                                                                                  
                                                                                                                            
                                                                                                                 
                                                                                                 


                                                                                                                                                 
                                                                                         
                                                                                     
                                                                                                                
                                                                                                         

                                                                                         
                                                                                                                                                  
                                                                                                                           
                                                                                                                 
                                                                                                 


                                                                                                                                                 
                                                                                         

                                                                                                                         
                                                                                 


                                                                                                                                 
                                                                         
                                                                     






                                                                                                          
                                                                                                   
                                                                 
                                                                                             






                                                                                           
                                                                                       
                                                                 
                                                                                               
                                                                         
                                                                                                                                  
                                                                                                                  
                                                                                                 


                                                                                                                  
                                                                                                 


                                                                                                                  
                                                                                                 


                                                                                                                  
                                                                                                 

                                                                                          


                                                                                                                                 




















                                                                                                                  

                                                                                                     
                                                                 
                                                                                             






                                                                                           
                                                                                       
                                                                 
                                                                                               
                                                                         
                                                                                                                                  
                                                                                 
                                                                                                               
                                                                                                                           
                                                                                                         


                                                                                                                           
                                                                                                         


                                                                                                                           
                                                                                                         


                                                                                                  
                                                                                                                       
                                                                                                 

                                                                                                                               
                                                                                                         
                                                                                                                                                                  
                                                                                                                 
                                                                                                                                                                          
                                                                                                                                                           
                                                                                                                                         


                                                                                                                                                           
                                                                                                                                         


                                                                                                                                                           
                                                                                                                                         

                                                                                                                                  


                                                                                                                                                                         

                                                                                                                 
                                                                                                                                                                          
                                                                                                                         
                                                                                                                                                       
                                                                                                                                 
                                                                                                                                                                                          
                                                                                                                                                                           
                                                                                                                                                         

                                                                                                                                                  


                                                                                                                                                                                         
                                                                                                                                                                                                           
                                                                                                                                                         


                                                                                                                                                  

                                                                                                                                                                   
                                                                                                                         


                                                                                                                                                                         
                                                                                                                                                   
                                                                                                                                         

                                                                                                                         

                                                                                                                         
                                                                                                             
                                                                                                                                                                 
                                                                                                         
                                                                                                                                           
                                                                                                 
                                                                                                                             

                                                                                                                           
                                                                                                         


                                                                                                                           
                                                                                                         


                                                                                                                           
                                                                                                         


                                                                                                  
                                                                                                                           
                                                                                         
                                                                                                                             
                                                                                 


                                                                                                                                 
                                                                                 
                                                                                                               
                                                                                                                           
                                                                                                         


                                                                                                  

                                                                                                                       
                                                                                                 
                                                                                                                                                          
                                                                                                         
                                                                                                                                       



                                                                                                                                                                   
                                                                                                                                                 




                                                                                                                                                                                          
                                                                                                                                                 




                                                                                                                                                                                                   
                                                                                                                                                 





                                                                                                                                          
                                                                                                                                                 
                                                                                                         


                                                                                                                                                         
                                                                                                 
                                                                                                                             

                                                                                                                           
                                                                                                         


                                                                                                  
                                                                                                                           
                                                                                         
                                                                                                                           
                                                                                 


                                                                                                                                 
                                                                                 
                                                                                                               
                                                                                                                          
                                                                                                         


                                                                                                                          
                                                                                                         


                                                                                                                          
                                                                                                         


                                                                                                  

                                                                                                                       
                                                                                                 
                                                                                                                                                          
                                                                                                         
                                                                                                                                                                  
                                                                                                                 
                                                                                                                                               
                                                                                                                         
                                                                                                                                                                                  
                                                                                                                                                             
                                                                                                                                                 
                                                                                                                                 


                                                                                                                                                                                 
                                                                                                                                                           
                                                                                                                                                 

                                                                                                                                 

                                                                                                                                                     

                                                                                                                 
                                                                                                                                                   
                                                                                                                 


                                                                                                                                                                 
                                                                                                                                          
                                                                                                                                 

                                                                                                                                           
                                                                                                                                 

                                                                                                                                        
                                                                                                                                 

                                                                                                                 



                                                                                                                                                         
                                                                                                 
                                                                                                                                 

                                                                                                                          
                                                                                                         


                                                                                                                          
                                                                                                         


                                                                                                                          
                                                                                                         


                                                                                                  
                                                                                                                           
                                                                                         
                                                                                                                           
                                                                                 


                                                                                                                                 
                                                                                 
                                                                                                               
                                                                                         
                                                                                                                       



                                                                                                                                  
                                                                                             
                                                                                                 
                                                                                                                                                          
                                                                                                                                     
                                                                                                                         
                                                                                                         


                                                                                                                                                         




                                                                                                                                  
                                                                                                                             

                                                                                         
                                                                                                                           
                                                                                         
                                                                                                                         

                                                                                 

                                                                                                    
                                                                 
                                                                                             






                                                                                           
                                                                                       


                                                                                           
                                                                                             


























                                                                                                
                                                                                 
                             
                                                                          
                         


                                                                
                                 
                             
                                 
                                                                                          
                                         
                                                                       
                                                                      
                                                                 

                                                                                  
                                                                 


                                                                      
                                                                 
                                                 
                                                                                 
                                         

                                                                        
                                         


                                                                                         
                                 
                                                              

                                   

                                                                         

                                    
                                                         



                                                                          


                                                       
                                 



















                                                                                          
                                         
                                                                                                  
                                                                                  
                                                                 

                                                          


                                                                                                 
                                                                                  
                                                                 


                                                          



                                                                                         
                                 
                             
                                 
                                                               
                                         
                                                                                                  
                                                                                                          
                                                                 


                                                          
                                                                                                          
                                                                                 
                                                                         
                                                         


                                                                                                         
                                                                                          
                                                                         


                                                                                 
                                                                         

                                                         

                                             
                                                 
                                                                                                          
                                                         
                                                                                                                  
                                                                                         
                                                                                 
                                                                 


                                                                                                                 
                                                                                                  
                                                                                 


                                                                                         
                                                                                 

                                                                 



                                                                                                         
                                                 


                                                                                                 
                                                                         
                                                                 

                                                 

                                                                 
                                 
                                                             

                                   

                                                                         

                                    
                                                                          
                    
                                                                         
                    
                                                                     
                             
                                                                          
                         
                                                       
                                                                  
                                                 


                                                         
                                                 
                                 
                             
                                 
                                                                                          
                                         
                                                                                                  
                                                                         
                                                                 
                                                 


                                                                                                 
                                                                                  
                                                                 


                                                                         
                                                                 

                                                 



                                                                                         
                                 
                                                          

                                   

                                                                         

                                    
                                                                                         
                             
                                                                          
                         
                                                       
                                 
                                                                                          
                                                                          
                                                         

                                                  


                                                                                         
                                                                          
                                                         


                                                  
                             
                                 
                                                                                          
                                         
                                                                                                  
                                                                                  
                                                                 

                                                          


                                                                                                 
                                                                                  
                                                                 


                                                          



                                                                                         
                                 
                             
                                                         
                                                 
                                 
                             
                                 
                                                                                          
                                         
                                                                                                  
                                                                         
                                                                 
                                                 


                                                                                                 
                                                                                  
                                                                 


                                                                         
                                                                 

                                                 



                                                                                         
                                 
                                                         

                                   

                                                                         

                                    
                                                                                                    
                    
                                                                           
                    
                                                                  
                             
                                                                          
                         
                                                       
                                 
                                                                                          
                                         
                                                                       



                                                                                                                          
                                                                                 




                                                                                                                                                                                                                                                                                                                                                          
                                                                                 




                                                                                                                                   
                                                                                 





                                                                          
                                                                                    
                                         


                                                                                         
                                         
                                                                       
                                                                          
                                                                 




                                                                                                  
                                                                                 


                                                                                           
                                                                                 

                                                                                           
                                                                                 



                                                                                                  
                                                                                 


                                                                                           
                                                                                 



                                                                                                   
                                                                                 




                                                                                                  
                                                                                 




                                                                                                  
                                                                                 




                                                                                                  
                                                                                 




                                                                                                  
                                                                                 




                                                                                                  
                                                                                 




                                                                                                  
                                                                                 




                                                                                                  
                                                                                 





                                                                          
                                                                             

                                         

                                                               

                                   

                                                                         

                                    
                                                                                                                                                                                                                                  
                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                    
                                         
                             
                                                                          
                         
                                                       
                                                                   
                                                 

                                          
                                                            

                                   

                                                                         

                                    
                                                                                            
                    
                                                                                                       
                    
                                                                               
                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                    
                                                                                                        
                    
                                                                                          
                    
                                                                   
                    
                                                                                                                                                                                                           
                             
                                                                          
                         
                                                       



                                                                                                          
                                                                 




                                                                                                          
                                                                 




                                                                                                          
                                                                 





                                                          
                                                              

                                   

                                                                         

                                    
                                                                           
                             
                                                                          
                         
                                                       
                                                            
                                                 

                                                            
                                                 

                                                            
                                                 

                                                            
                                                 
                                 
                                                             

                                   

                                                                         

                                    
                                                                                 
                    
                                                    
                    
                                                 
                    
                                                
                    
                                                
                             
                                                                          
                         
                                                       
                                                             
                                                 
                                 
                                                              

                                   

                                                                         

                                    
                                                  
                             
                                                                          
                         
                                                       
                                                             
                                                 
                                 
                                                                

                                   

                                                                         

                                    
                                                  
                    
                                                      
                    
                                                                                 
                    
                                                              
                    
                                                                                               
                             
                                                                          
                         
                                                       
                                                            
                                                 

                                                                  
                                                 


                                                              
                                                 

                                                                  
                                                 


                                          
                                                               
                                                                     
                                                         
                                         
                                                                        

                                 
                                                                                          
                                         
                                                                       
                                                                                  
                                                                 


                                                                         
                                                                 
                                                 
                                             
                                                 
                                                                                                          
                                                                                 
                                                                         
                                                         


                                                                                                         
                                                 
                                                                                 
                                         


                                                                                         
                                 

                                                                 

                                   

                                                                         

                                    
                                                                                
                    
                                                                
                    
                                                                                 
                    
                                         
                             
                                                                          
                         
                                                       
                                                                                          
                                                 

                                          
                                                           

                                   

                                                                         

                                    
                                                     
                             
                                                                          
                         
                                                       
                                                         
                                                 

                                                         
                                                 
                                 
                                                               

                                   

                                                                         

                                    
                                                             
                    
                                                                             
                    
                                                                                                                                                    
                    
                                          
                             
                                                                          
                         
                                                       
                                                                  
                                                 

                                          
                                                              

                                   

                                                                         

                                    

                                                    
                    
                                                                      
                    
                                                                     
                    
                                                                     
                    
                                                         
                    
                                                                        
                    
                                                                        
                    
                                                               
                    
                                                                  
                    
                                                                
                    
                                                                  
                    
                                                                
                    
                                                                 
                    
                                                                           
                    
                                                                                
                    
                                                               
                    
                                                             
                    
                                                          
                    
                                                                                 
                    
                                                                 
                    
                                                                                        
                    
                                                                                   
                    
                                                                                            
                    
                                                         
                    
                                                          
                    
                                                          



                        
package toml

import (
    "fmt"
    "math"
    "sort"
    "strconv"
)

const endSymbol rune = 1114112

/* The rule types inferred from the grammar are below. */
type pegRule uint8

const (
    ruleUnknown pegRule = iota
    ruleTOML
    ruleExpression
    rulenewline
    rulews
    rulewsnl
    rulecomment
    rulekeyval
    rulekey
    rulebareKey
    rulequotedKey
    ruleval
    ruletable
    rulestdTable
    rulearrayTable
    ruleinlineTable
    ruleinlineTableKeyValues
    ruletableKey
    ruletableKeyComp
    ruletableKeySep
    ruleinlineTableValSep
    ruleinteger
    ruleint
    rulefloat
    rulefrac
    ruleexp
    rulestring
    rulebasicString
    rulebasicChar
    ruleescaped
    rulebasicUnescaped
    ruleescape
    rulemlBasicString
    rulemlBasicBody
    ruleliteralString
    ruleliteralChar
    rulemlLiteralString
    rulemlLiteralBody
    rulemlLiteralChar
    rulehexdigit
    rulehexQuad
    ruleboolean
    ruledateFullYear
    ruledateMonth
    ruledateMDay
    ruletimeHour
    ruletimeMinute
    ruletimeSecond
    ruletimeSecfrac
    ruletimeNumoffset
    ruletimeOffset
    rulepartialTime
    rulefullDate
    rulefullTime
    ruledatetime
    ruledigit
    ruledigitDual
    ruledigitQuad
    rulearray
    rulearrayValues
    rulearraySep
    ruleAction0
    rulePegText
    ruleAction1
    ruleAction2
    ruleAction3
    ruleAction4
    ruleAction5
    ruleAction6
    ruleAction7
    ruleAction8
    ruleAction9
    ruleAction10
    ruleAction11
    ruleAction12
    ruleAction13
    ruleAction14
    ruleAction15
    ruleAction16
    ruleAction17
    ruleAction18
    ruleAction19
    ruleAction20
    ruleAction21
    ruleAction22
    ruleAction23
    ruleAction24
    ruleAction25
)

var rul3s = [...]string{
    "Unknown",
    "TOML",
    "Expression",
    "newline",
    "ws",
    "wsnl",
    "comment",
    "keyval",
    "key",
    "bareKey",
    "quotedKey",
    "val",
    "table",
    "stdTable",
    "arrayTable",
    "inlineTable",
    "inlineTableKeyValues",
    "tableKey",
    "tableKeyComp",
    "tableKeySep",
    "inlineTableValSep",
    "integer",
    "int",
    "float",
    "frac",
    "exp",
    "string",
    "basicString",
    "basicChar",
    "escaped",
    "basicUnescaped",
    "escape",
    "mlBasicString",
    "mlBasicBody",
    "literalString",
    "literalChar",
    "mlLiteralString",
    "mlLiteralBody",
    "mlLiteralChar",
    "hexdigit",
    "hexQuad",
    "boolean",
    "dateFullYear",
    "dateMonth",
    "dateMDay",
    "timeHour",
    "timeMinute",
    "timeSecond",
    "timeSecfrac",
    "timeNumoffset",
    "timeOffset",
    "partialTime",
    "fullDate",
    "fullTime",
    "datetime",
    "digit",
    "digitDual",
    "digitQuad",
    "array",
    "arrayValues",
    "arraySep",
    "Action0",
    "PegText",
    "Action1",
    "Action2",
    "Action3",
    "Action4",
    "Action5",
    "Action6",
    "Action7",
    "Action8",
    "Action9",
    "Action10",
    "Action11",
    "Action12",
    "Action13",
    "Action14",
    "Action15",
    "Action16",
    "Action17",
    "Action18",
    "Action19",
    "Action20",
    "Action21",
    "Action22",
    "Action23",
    "Action24",
    "Action25",
}

type token32 struct {
    pegRule
    begin, end uint32
}

func (t *token32) String() string {
    return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
}

type node32 struct {
    token32
    up, next *node32
}

func (node *node32) print(pretty bool, buffer string) {
    var print func(node *node32, depth int)
    print = func(node *node32, depth int) {
        for node != nil {
            for c := 0; c < depth; c++ {
                fmt.Printf(" ")
            }
            rule := rul3s[node.pegRule]
            quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
            if !pretty {
                fmt.Printf("%v %v\n", rule, quote)
            } else {
                fmt.Printf("\x1B[34m%v\x1B[m %v\n", rule, quote)
            }
            if node.up != nil {
                print(node.up, depth+1)
            }
            node = node.next
        }
    }
    print(node, 0)
}

func (node *node32) Print(buffer string) {
    node.print(false, buffer)
}

func (node *node32) PrettyPrint(buffer string) {
    node.print(true, buffer)
}

type tokens32 struct {
    tree []token32
}

func (t *tokens32) Trim(length uint32) {
    t.tree = t.tree[:length]
}

func (t *tokens32) Print() {
    for _, token := range t.tree {
        fmt.Println(token.String())
    }
}

func (t *tokens32) AST() *node32 {
    type element struct {
        node *node32
        down *element
    }
    tokens := t.Tokens()
    var stack *element
    for _, token := range tokens {
        if token.begin == token.end {
            continue
        }
        node := &node32{token32: token}
        for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
            stack.node.next = node.up
            node.up = stack.node
            stack = stack.down
        }
        stack = &element{node: node, down: stack}
    }
    if stack != nil {
        return stack.node
    }
    return nil
}

func (t *tokens32) PrintSyntaxTree(buffer string) {
    t.AST().Print(buffer)
}

func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
    t.AST().PrettyPrint(buffer)
}

func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
    if tree := t.tree; int(index) >= len(tree) {
        expanded := make([]token32, 2*len(tree))
        copy(expanded, tree)
        t.tree = expanded
    }
    t.tree[index] = token32{
        pegRule: rule,
        begin:   begin,
        end:     end,
    }
}

func (t *tokens32) Tokens() []token32 {
    return t.tree
}

type tomlParser struct {
    toml

    Buffer string
    buffer []rune
    rules  [88]func() bool
    parse  func(rule ...int) error
    reset  func()
    Pretty bool
    tokens32
}

func (p *tomlParser) Parse(rule ...int) error {
    return p.parse(rule...)
}

func (p *tomlParser) Reset() {
    p.reset()
}

type textPosition struct {
    line, symbol int
}

type textPositionMap map[int]textPosition

func translatePositions(buffer []rune, positions []int) textPositionMap {
    length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
    sort.Ints(positions)

search:
    for i, c := range buffer {
        if c == '\n' {
            line, symbol = line+1, 0
        } else {
            symbol++
        }
        if i == positions[j] {
            translations[positions[j]] = textPosition{line, symbol}
            for j++; j < length; j++ {
                if i != positions[j] {
                    continue search
                }
            }
            break search
        }
    }

    return translations
}

type parseError struct {
    p   *tomlParser
    max token32
}

func (e *parseError) Error() string {
    tokens, error := []token32{e.max}, "\n"
    positions, p := make([]int, 2*len(tokens)), 0
    for _, token := range tokens {
        positions[p], p = int(token.begin), p+1
        positions[p], p = int(token.end), p+1
    }
    translations := translatePositions(e.p.buffer, positions)
    format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
    if e.p.Pretty {
        format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
    }
    for _, token := range tokens {
        begin, end := int(token.begin), int(token.end)
        error += fmt.Sprintf(format,
            rul3s[token.pegRule],
            translations[begin].line, translations[begin].symbol,
            translations[end].line, translations[end].symbol,
            strconv.Quote(string(e.p.buffer[begin:end])))
    }

    return error
}

func (p *tomlParser) PrintSyntaxTree() {
    if p.Pretty {
        p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
    } else {
        p.tokens32.PrintSyntaxTree(p.Buffer)
    }
}

func (p *tomlParser) Execute() {
    buffer, _buffer, text, begin, end := p.Buffer, p.buffer, "", 0, 0
    for _, token := range p.Tokens() {
        switch token.pegRule {

        case rulePegText:
            begin, end = int(token.begin), int(token.end)
            text = string(_buffer[begin:end])

        case ruleAction0:
            _ = buffer
        case ruleAction1:
            p.SetTableString(begin, end)
        case ruleAction2:
            p.AddLineCount(end - begin)
        case ruleAction3:
            p.AddLineCount(end - begin)
        case ruleAction4:
            p.AddKeyValue()
        case ruleAction5:
            p.SetKey(p.buffer, begin, end)
        case ruleAction6:
            p.SetKey(p.buffer, begin, end)
        case ruleAction7:
            p.SetTime(begin, end)
        case ruleAction8:
            p.SetFloat64(begin, end)
        case ruleAction9:
            p.SetInt64(begin, end)
        case ruleAction10:
            p.SetString(begin, end)
        case ruleAction11:
            p.SetBool(begin, end)
        case ruleAction12:
            p.SetArray(begin, end)
        case ruleAction13:
            p.SetTable(p.buffer, begin, end)
        case ruleAction14:
            p.SetArrayTable(p.buffer, begin, end)
        case ruleAction15:
            p.StartInlineTable()
        case ruleAction16:
            p.EndInlineTable()
        case ruleAction17:
            p.AddTableKey()
        case ruleAction18:
            p.SetBasicString(p.buffer, begin, end)
        case ruleAction19:
            p.SetMultilineString()
        case ruleAction20:
            p.AddMultilineBasicBody(p.buffer, begin, end)
        case ruleAction21:
            p.SetLiteralString(p.buffer, begin, end)
        case ruleAction22:
            p.SetMultilineLiteralString(p.buffer, begin, end)
        case ruleAction23:
            p.StartArray()
        case ruleAction24:
            p.AddArrayVal()
        case ruleAction25:
            p.AddArrayVal()

        }
    }
    _, _, _, _, _ = buffer, _buffer, text, begin, end
}

func (p *tomlParser) Init() {
    var (
        max                  token32
        position, tokenIndex uint32
        buffer               []rune
    )
    p.reset = func() {
        max = token32{}
        position, tokenIndex = 0, 0

        p.buffer = []rune(p.Buffer)
        if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
            p.buffer = append(p.buffer, endSymbol)
        }
        buffer = p.buffer
    }
    p.reset()

    _rules := p.rules
    tree := tokens32{tree: make([]token32, math.MaxInt16)}
    p.parse = func(rule ...int) error {
        r := 1
        if len(rule) > 0 {
            r = rule[0]
        }
        matches := p.rules[r]()
        p.tokens32 = tree
        if matches {
            p.Trim(tokenIndex)
            return nil
        }
        return &parseError{p, max}
    }

    add := func(rule pegRule, begin uint32) {
        tree.Add(rule, begin, position, tokenIndex)
        tokenIndex++
        if begin != position && position > max.end {
            max = token32{rule, begin, position}
        }
    }

    matchDot := func() bool {
        if buffer[position] != endSymbol {
            position++
            return true
        }
        return false
    }

    /*matchChar := func(c byte) bool {
        if buffer[position] == c {
            position++
            return true
        }
        return false
    }*/

    /*matchRange := func(lower byte, upper byte) bool {
        if c := buffer[position]; c >= lower && c <= upper {
            position++
            return true
        }
        return false
    }*/

    _rules = [...]func() bool{
        nil,
        /* 0 TOML <- <(Expression (newline Expression)* newline? !. Action0)> */
        func() bool {
            position0, tokenIndex0 := position, tokenIndex
            {
                position1 := position
                if !_rules[ruleExpression]() {
                    goto l0
                }
            l2:
                {
                    position3, tokenIndex3 := position, tokenIndex
                    if !_rules[rulenewline]() {
                        goto l3
                    }
                    if !_rules[ruleExpression]() {
                        goto l3
                    }
                    goto l2
                l3:
                    position, tokenIndex = position3, tokenIndex3
                }
                {
                    position4, tokenIndex4 := position, tokenIndex
                    if !_rules[rulenewline]() {
                        goto l4
                    }
                    goto l5
                l4:
                    position, tokenIndex = position4, tokenIndex4
                }
            l5:
                {
                    position6, tokenIndex6 := position, tokenIndex
                    if !matchDot() {
                        goto l6
                    }
                    goto l0
                l6:
                    position, tokenIndex = position6, tokenIndex6
                }
                {
                    add(ruleAction0, position)
                }
                add(ruleTOML, position1)
            }
            return true
        l0:
            position, tokenIndex = position0, tokenIndex0
            return false
        },
        /* 1 Expression <- <((<(ws table ws comment? (wsnl keyval ws comment?)*)> Action1) / (ws keyval ws comment?) / (ws comment?) / ws)> */
        func() bool {
            position8, tokenIndex8 := position, tokenIndex
            {
                position9 := position
                {
                    position10, tokenIndex10 := position, tokenIndex
                    {
                        position12 := position
                        if !_rules[rulews]() {
                            goto l11
                        }
                        {
                            position13 := position
                            {
                                position14, tokenIndex14 := position, tokenIndex
                                {
                                    position16 := position
                                    if buffer[position] != rune('[') {
                                        goto l15
                                    }
                                    position++
                                    if !_rules[rulews]() {
                                        goto l15
                                    }
                                    {
                                        position17 := position
                                        if !_rules[ruletableKey]() {
                                            goto l15
                                        }
                                        add(rulePegText, position17)
                                    }
                                    if !_rules[rulews]() {
                                        goto l15
                                    }
                                    if buffer[position] != rune(']') {
                                        goto l15
                                    }
                                    position++
                                    {
                                        add(ruleAction13, position)
                                    }
                                    add(rulestdTable, position16)
                                }
                                goto l14
                            l15:
                                position, tokenIndex = position14, tokenIndex14
                                {
                                    position19 := position
                                    if buffer[position] != rune('[') {
                                        goto l11
                                    }
                                    position++
                                    if buffer[position] != rune('[') {
                                        goto l11
                                    }
                                    position++
                                    if !_rules[rulews]() {
                                        goto l11
                                    }
                                    {
                                        position20 := position
                                        if !_rules[ruletableKey]() {
                                            goto l11
                                        }
                                        add(rulePegText, position20)
                                    }
                                    if !_rules[rulews]() {
                                        goto l11
                                    }
                                    if buffer[position] != rune(']') {
                                        goto l11
                                    }
                                    position++
                                    if buffer[position] != rune(']') {
                                        goto l11
                                    }
                                    position++
                                    {
                                        add(ruleAction14, position)
                                    }
                                    add(rulearrayTable, position19)
                                }
                            }
                        l14:
                            add(ruletable, position13)
                        }
                        if !_rules[rulews]() {
                            goto l11
                        }
                        {
                            position22, tokenIndex22 := position, tokenIndex
                            if !_rules[rulecomment]() {
                                goto l22
                            }
                            goto l23
                        l22:
                            position, tokenIndex = position22, tokenIndex22
                        }
                    l23:
                    l24:
                        {
                            position25, tokenIndex25 := position, tokenIndex
                            if !_rules[rulewsnl]() {
                                goto l25
                            }
                            if !_rules[rulekeyval]() {
                                goto l25
                            }
                            if !_rules[rulews]() {
                                goto l25
                            }
                            {
                                position26, tokenIndex26 := position, tokenIndex
                                if !_rules[rulecomment]() {
                                    goto l26
                                }
                                goto l27
                            l26:
                                position, tokenIndex = position26, tokenIndex26
                            }
                        l27:
                            goto l24
                        l25:
                            position, tokenIndex = position25, tokenIndex25
                        }
                        add(rulePegText, position12)
                    }
                    {
                        add(ruleAction1, position)
                    }
                    goto l10
                l11:
                    position, tokenIndex = position10, tokenIndex10
                    if !_rules[rulews]() {
                        goto l29
                    }
                    if !_rules[rulekeyval]() {
                        goto l29
                    }
                    if !_rules[rulews]() {
                        goto l29
                    }
                    {
                        position30, tokenIndex30 := position, tokenIndex
                        if !_rules[rulecomment]() {
                            goto l30
                        }
                        goto l31
                    l30:
                        position, tokenIndex = position30, tokenIndex30
                    }
                l31:
                    goto l10
                l29:
                    position, tokenIndex = position10, tokenIndex10
                    if !_rules[rulews]() {
                        goto l32
                    }
                    {
                        position33, tokenIndex33 := position, tokenIndex
                        if !_rules[rulecomment]() {
                            goto l33
                        }
                        goto l34
                    l33:
                        position, tokenIndex = position33, tokenIndex33
                    }
                l34:
                    goto l10
                l32:
                    position, tokenIndex = position10, tokenIndex10
                    if !_rules[rulews]() {
                        goto l8
                    }
                }
            l10:
                add(ruleExpression, position9)
            }
            return true
        l8:
            position, tokenIndex = position8, tokenIndex8
            return false
        },
        /* 2 newline <- <(<('\r' / '\n')+> Action2)> */
        func() bool {
            position35, tokenIndex35 := position, tokenIndex
            {
                position36 := position
                {
                    position37 := position
                    {
                        position40, tokenIndex40 := position, tokenIndex
                        if buffer[position] != rune('\r') {
                            goto l41
                        }
                        position++
                        goto l40
                    l41:
                        position, tokenIndex = position40, tokenIndex40
                        if buffer[position] != rune('\n') {
                            goto l35
                        }
                        position++
                    }
                l40:
                l38:
                    {
                        position39, tokenIndex39 := position, tokenIndex
                        {
                            position42, tokenIndex42 := position, tokenIndex
                            if buffer[position] != rune('\r') {
                                goto l43
                            }
                            position++
                            goto l42
                        l43:
                            position, tokenIndex = position42, tokenIndex42
                            if buffer[position] != rune('\n') {
                                goto l39
                            }
                            position++
                        }
                    l42:
                        goto l38
                    l39:
                        position, tokenIndex = position39, tokenIndex39
                    }
                    add(rulePegText, position37)
                }
                {
                    add(ruleAction2, position)
                }
                add(rulenewline, position36)
            }
            return true
        l35:
            position, tokenIndex = position35, tokenIndex35
            return false
        },
        /* 3 ws <- <(' ' / '\t')*> */
        func() bool {
            {
                position46 := position
            l47:
                {
                    position48, tokenIndex48 := position, tokenIndex
                    {
                        position49, tokenIndex49 := position, tokenIndex
                        if buffer[position] != rune(' ') {
                            goto l50
                        }
                        position++
                        goto l49
                    l50:
                        position, tokenIndex = position49, tokenIndex49
                        if buffer[position] != rune('\t') {
                            goto l48
                        }
                        position++
                    }
                l49:
                    goto l47
                l48:
                    position, tokenIndex = position48, tokenIndex48
                }
                add(rulews, position46)
            }
            return true
        },
        /* 4 wsnl <- <((&('\t') '\t') | (&(' ') ' ') | (&('\n' | '\r') (<('\r' / '\n')> Action3)))*> */
        func() bool {
            {
                position52 := position
            l53:
                {
                    position54, tokenIndex54 := position, tokenIndex
                    {
                        switch buffer[position] {
                        case '\t':
                            if buffer[position] != rune('\t') {
                                goto l54
                            }
                            position++
                            break
                        case ' ':
                            if buffer[position] != rune(' ') {
                                goto l54
                            }
                            position++
                            break
                        default:
                            {
                                position56 := position
                                {
                                    position57, tokenIndex57 := position, tokenIndex
                                    if buffer[position] != rune('\r') {
                                        goto l58
                                    }
                                    position++
                                    goto l57
                                l58:
                                    position, tokenIndex = position57, tokenIndex57
                                    if buffer[position] != rune('\n') {
                                        goto l54
                                    }
                                    position++
                                }
                            l57:
                                add(rulePegText, position56)
                            }
                            {
                                add(ruleAction3, position)
                            }
                            break
                        }
                    }

                    goto l53
                l54:
                    position, tokenIndex = position54, tokenIndex54
                }
                add(rulewsnl, position52)
            }
            return true
        },
        /* 5 comment <- <('#' <('\t' / [ -\U0010ffff])*>)> */
        func() bool {
            position60, tokenIndex60 := position, tokenIndex
            {
                position61 := position
                if buffer[position] != rune('#') {
                    goto l60
                }
                position++
                {
                    position62 := position
                l63:
                    {
                        position64, tokenIndex64 := position, tokenIndex
                        {
                            position65, tokenIndex65 := position, tokenIndex
                            if buffer[position] != rune('\t') {
                                goto l66
                            }
                            position++
                            goto l65
                        l66:
                            position, tokenIndex = position65, tokenIndex65
                            if c := buffer[position]; c < rune(' ') || c > rune('\U0010ffff') {
                                goto l64
                            }
                            position++
                        }
                    l65:
                        goto l63
                    l64:
                        position, tokenIndex = position64, tokenIndex64
                    }
                    add(rulePegText, position62)
                }
                add(rulecomment, position61)
            }
            return true
        l60:
            position, tokenIndex = position60, tokenIndex60
            return false
        },
        /* 6 keyval <- <(key ws '=' ws val Action4)> */
        func() bool {
            position67, tokenIndex67 := position, tokenIndex
            {
                position68 := position
                if !_rules[rulekey]() {
                    goto l67
                }
                if !_rules[rulews]() {
                    goto l67
                }
                if buffer[position] != rune('=') {
                    goto l67
                }
                position++
                if !_rules[rulews]() {
                    goto l67
                }
                if !_rules[ruleval]() {
                    goto l67
                }
                {
                    add(ruleAction4, position)
                }
                add(rulekeyval, position68)
            }
            return true
        l67:
            position, tokenIndex = position67, tokenIndex67
            return false
        },
        /* 7 key <- <(bareKey / quotedKey)> */
        func() bool {
            position70, tokenIndex70 := position, tokenIndex
            {
                position71 := position
                {
                    position72, tokenIndex72 := position, tokenIndex
                    {
                        position74 := position
                        {
                            position75 := position
                            {
                                switch buffer[position] {
                                case '_':
                                    if buffer[position] != rune('_') {
                                        goto l73
                                    }
                                    position++
                                    break
                                case '-':
                                    if buffer[position] != rune('-') {
                                        goto l73
                                    }
                                    position++
                                    break
                                case 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z':
                                    if c := buffer[position]; c < rune('a') || c > rune('z') {
                                        goto l73
                                    }
                                    position++
                                    break
                                case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
                                    if c := buffer[position]; c < rune('0') || c > rune('9') {
                                        goto l73
                                    }
                                    position++
                                    break
                                default:
                                    if c := buffer[position]; c < rune('A') || c > rune('Z') {
                                        goto l73
                                    }
                                    position++
                                    break
                                }
                            }

                        l76:
                            {
                                position77, tokenIndex77 := position, tokenIndex
                                {
                                    switch buffer[position] {
                                    case '_':
                                        if buffer[position] != rune('_') {
                                            goto l77
                                        }
                                        position++
                                        break
                                    case '-':
                                        if buffer[position] != rune('-') {
                                            goto l77
                                        }
                                        position++
                                        break
                                    case 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z':
                                        if c := buffer[position]; c < rune('a') || c > rune('z') {
                                            goto l77
                                        }
                                        position++
                                        break
                                    case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
                                        if c := buffer[position]; c < rune('0') || c > rune('9') {
                                            goto l77
                                        }
                                        position++
                                        break
                                    default:
                                        if c := buffer[position]; c < rune('A') || c > rune('Z') {
                                            goto l77
                                        }
                                        position++
                                        break
                                    }
                                }

                                goto l76
                            l77:
                                position, tokenIndex = position77, tokenIndex77
                            }
                            add(rulePegText, position75)
                        }
                        {
                            add(ruleAction5, position)
                        }
                        add(rulebareKey, position74)
                    }
                    goto l72
                l73:
                    position, tokenIndex = position72, tokenIndex72
                    {
                        position81 := position
                        {
                            position82 := position
                            if buffer[position] != rune('"') {
                                goto l70
                            }
                            position++
                        l83:
                            {
                                position84, tokenIndex84 := position, tokenIndex
                                if !_rules[rulebasicChar]() {
                                    goto l84
                                }
                                goto l83
                            l84:
                                position, tokenIndex = position84, tokenIndex84
                            }
                            if buffer[position] != rune('"') {
                                goto l70
                            }
                            position++
                            add(rulePegText, position82)
                        }
                        {
                            add(ruleAction6, position)
                        }
                        add(rulequotedKey, position81)
                    }
                }
            l72:
                add(rulekey, position71)
            }
            return true
        l70:
            position, tokenIndex = position70, tokenIndex70
            return false
        },
        /* 8 bareKey <- <(<((&('_') '_') | (&('-') '-') | (&('a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z') [a-z]) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') [0-9]) | (&('A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z') [A-Z]))+> Action5)> */
        nil,
        /* 9 quotedKey <- <(<('"' basicChar* '"')> Action6)> */
        nil,
        /* 10 val <- <((<datetime> Action7) / (<float> Action8) / ((&('{') inlineTable) | (&('[') (<array> Action12)) | (&('f' | 't') (<boolean> Action11)) | (&('"' | '\'') (<string> Action10)) | (&('+' | '-' | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') (<integer> Action9))))> */
        func() bool {
            position88, tokenIndex88 := position, tokenIndex
            {
                position89 := position
                {
                    position90, tokenIndex90 := position, tokenIndex
                    {
                        position92 := position
                        {
                            position93 := position
                            {
                                position94, tokenIndex94 := position, tokenIndex
                                {
                                    position96 := position
                                    {
                                        position97 := position
                                        {
                                            position98 := position
                                            if !_rules[ruledigitDual]() {
                                                goto l95
                                            }
                                            if !_rules[ruledigitDual]() {
                                                goto l95
                                            }
                                            add(ruledigitQuad, position98)
                                        }
                                        add(ruledateFullYear, position97)
                                    }
                                    if buffer[position] != rune('-') {
                                        goto l95
                                    }
                                    position++
                                    {
                                        position99 := position
                                        if !_rules[ruledigitDual]() {
                                            goto l95
                                        }
                                        add(ruledateMonth, position99)
                                    }
                                    if buffer[position] != rune('-') {
                                        goto l95
                                    }
                                    position++
                                    {
                                        position100 := position
                                        if !_rules[ruledigitDual]() {
                                            goto l95
                                        }
                                        add(ruledateMDay, position100)
                                    }
                                    add(rulefullDate, position96)
                                }
                                {
                                    position101, tokenIndex101 := position, tokenIndex
                                    if buffer[position] != rune('T') {
                                        goto l101
                                    }
                                    position++
                                    {
                                        position103 := position
                                        if !_rules[rulepartialTime]() {
                                            goto l101
                                        }
                                        {
                                            position104, tokenIndex104 := position, tokenIndex
                                            {
                                                position106 := position
                                                {
                                                    position107, tokenIndex107 := position, tokenIndex
                                                    if buffer[position] != rune('Z') {
                                                        goto l108
                                                    }
                                                    position++
                                                    goto l107
                                                l108:
                                                    position, tokenIndex = position107, tokenIndex107
                                                    {
                                                        position109 := position
                                                        {
                                                            position110, tokenIndex110 := position, tokenIndex
                                                            if buffer[position] != rune('-') {
                                                                goto l111
                                                            }
                                                            position++
                                                            goto l110
                                                        l111:
                                                            position, tokenIndex = position110, tokenIndex110
                                                            if buffer[position] != rune('+') {
                                                                goto l104
                                                            }
                                                            position++
                                                        }
                                                    l110:
                                                        if !_rules[ruletimeHour]() {
                                                            goto l104
                                                        }
                                                        if buffer[position] != rune(':') {
                                                            goto l104
                                                        }
                                                        position++
                                                        if !_rules[ruletimeMinute]() {
                                                            goto l104
                                                        }
                                                        add(ruletimeNumoffset, position109)
                                                    }
                                                }
                                            l107:
                                                add(ruletimeOffset, position106)
                                            }
                                            goto l105
                                        l104:
                                            position, tokenIndex = position104, tokenIndex104
                                        }
                                    l105:
                                        add(rulefullTime, position103)
                                    }
                                    goto l102
                                l101:
                                    position, tokenIndex = position101, tokenIndex101
                                }
                            l102:
                                goto l94
                            l95:
                                position, tokenIndex = position94, tokenIndex94
                                if !_rules[rulepartialTime]() {
                                    goto l91
                                }
                            }
                        l94:
                            add(ruledatetime, position93)
                        }
                        add(rulePegText, position92)
                    }
                    {
                        add(ruleAction7, position)
                    }
                    goto l90
                l91:
                    position, tokenIndex = position90, tokenIndex90
                    {
                        position114 := position
                        {
                            position115 := position
                            if !_rules[ruleinteger]() {
                                goto l113
                            }
                            {
                                position116, tokenIndex116 := position, tokenIndex
                                if !_rules[rulefrac]() {
                                    goto l117
                                }
                                {
                                    position118, tokenIndex118 := position, tokenIndex
                                    if !_rules[ruleexp]() {
                                        goto l118
                                    }
                                    goto l119
                                l118:
                                    position, tokenIndex = position118, tokenIndex118
                                }
                            l119:
                                goto l116
                            l117:
                                position, tokenIndex = position116, tokenIndex116
                                {
                                    position120, tokenIndex120 := position, tokenIndex
                                    if !_rules[rulefrac]() {
                                        goto l120
                                    }
                                    goto l121
                                l120:
                                    position, tokenIndex = position120, tokenIndex120
                                }
                            l121:
                                if !_rules[ruleexp]() {
                                    goto l113
                                }
                            }
                        l116:
                            add(rulefloat, position115)
                        }
                        add(rulePegText, position114)
                    }
                    {
                        add(ruleAction8, position)
                    }
                    goto l90
                l113:
                    position, tokenIndex = position90, tokenIndex90
                    {
                        switch buffer[position] {
                        case '{':
                            {
                                position124 := position
                                if buffer[position] != rune('{') {
                                    goto l88
                                }
                                position++
                                {
                                    add(ruleAction15, position)
                                }
                                if !_rules[rulews]() {
                                    goto l88
                                }
                                {
                                    position126 := position
                                l127:
                                    {
                                        position128, tokenIndex128 := position, tokenIndex
                                        if !_rules[rulekeyval]() {
                                            goto l128
                                        }
                                        {
                                            position129, tokenIndex129 := position, tokenIndex
                                            {
                                                position131 := position
                                                if !_rules[rulews]() {
                                                    goto l129
                                                }
                                                if buffer[position] != rune(',') {
                                                    goto l129
                                                }
                                                position++
                                                if !_rules[rulews]() {
                                                    goto l129
                                                }
                                                add(ruleinlineTableValSep, position131)
                                            }
                                            goto l130
                                        l129:
                                            position, tokenIndex = position129, tokenIndex129
                                        }
                                    l130:
                                        goto l127
                                    l128:
                                        position, tokenIndex = position128, tokenIndex128
                                    }
                                    add(ruleinlineTableKeyValues, position126)
                                }
                                if !_rules[rulews]() {
                                    goto l88
                                }
                                if buffer[position] != rune('}') {
                                    goto l88
                                }
                                position++
                                {
                                    add(ruleAction16, position)
                                }
                                add(ruleinlineTable, position124)
                            }
                            break
                        case '[':
                            {
                                position133 := position
                                {
                                    position134 := position
                                    if buffer[position] != rune('[') {
                                        goto l88
                                    }
                                    position++
                                    {
                                        add(ruleAction23, position)
                                    }
                                    if !_rules[rulewsnl]() {
                                        goto l88
                                    }
                                    {
                                        position136, tokenIndex136 := position, tokenIndex
                                        {
                                            position138 := position
                                            if !_rules[ruleval]() {
                                                goto l136
                                            }
                                            {
                                                add(ruleAction24, position)
                                            }
                                        l140:
                                            {
                                                position141, tokenIndex141 := position, tokenIndex
                                                if !_rules[rulewsnl]() {
                                                    goto l141
                                                }
                                                {
                                                    position142, tokenIndex142 := position, tokenIndex
                                                    if !_rules[rulecomment]() {
                                                        goto l142
                                                    }
                                                    goto l143
                                                l142:
                                                    position, tokenIndex = position142, tokenIndex142
                                                }
                                            l143:
                                                if !_rules[rulewsnl]() {
                                                    goto l141
                                                }
                                                if !_rules[rulearraySep]() {
                                                    goto l141
                                                }
                                                if !_rules[rulewsnl]() {
                                                    goto l141
                                                }
                                                {
                                                    position144, tokenIndex144 := position, tokenIndex
                                                    if !_rules[rulecomment]() {
                                                        goto l144
                                                    }
                                                    goto l145
                                                l144:
                                                    position, tokenIndex = position144, tokenIndex144
                                                }
                                            l145:
                                                if !_rules[rulewsnl]() {
                                                    goto l141
                                                }
                                                if !_rules[ruleval]() {
                                                    goto l141
                                                }
                                                {
                                                    add(ruleAction25, position)
                                                }
                                                goto l140
                                            l141:
                                                position, tokenIndex = position141, tokenIndex141
                                            }
                                            if !_rules[rulewsnl]() {
                                                goto l136
                                            }
                                            {
                                                position147, tokenIndex147 := position, tokenIndex
                                                if !_rules[rulearraySep]() {
                                                    goto l147
                                                }
                                                goto l148
                                            l147:
                                                position, tokenIndex = position147, tokenIndex147
                                            }
                                        l148:
                                            if !_rules[rulewsnl]() {
                                                goto l136
                                            }
                                            {
                                                position149, tokenIndex149 := position, tokenIndex
                                                if !_rules[rulecomment]() {
                                                    goto l149
                                                }
                                                goto l150
                                            l149:
                                                position, tokenIndex = position149, tokenIndex149
                                            }
                                        l150:
                                            add(rulearrayValues, position138)
                                        }
                                        goto l137
                                    l136:
                                        position, tokenIndex = position136, tokenIndex136
                                    }
                                l137:
                                    if !_rules[rulewsnl]() {
                                        goto l88
                                    }
                                    if buffer[position] != rune(']') {
                                        goto l88
                                    }
                                    position++
                                    add(rulearray, position134)
                                }
                                add(rulePegText, position133)
                            }
                            {
                                add(ruleAction12, position)
                            }
                            break
                        case 'f', 't':
                            {
                                position152 := position
                                {
                                    position153 := position
                                    {
                                        position154, tokenIndex154 := position, tokenIndex
                                        if buffer[position] != rune('t') {
                                            goto l155
                                        }
                                        position++
                                        if buffer[position] != rune('r') {
                                            goto l155
                                        }
                                        position++
                                        if buffer[position] != rune('u') {
                                            goto l155
                                        }
                                        position++
                                        if buffer[position] != rune('e') {
                                            goto l155
                                        }
                                        position++
                                        goto l154
                                    l155:
                                        position, tokenIndex = position154, tokenIndex154
                                        if buffer[position] != rune('f') {
                                            goto l88
                                        }
                                        position++
                                        if buffer[position] != rune('a') {
                                            goto l88
                                        }
                                        position++
                                        if buffer[position] != rune('l') {
                                            goto l88
                                        }
                                        position++
                                        if buffer[position] != rune('s') {
                                            goto l88
                                        }
                                        position++
                                        if buffer[position] != rune('e') {
                                            goto l88
                                        }
                                        position++
                                    }
                                l154:
                                    add(ruleboolean, position153)
                                }
                                add(rulePegText, position152)
                            }
                            {
                                add(ruleAction11, position)
                            }
                            break
                        case '"', '\'':
                            {
                                position157 := position
                                {
                                    position158 := position
                                    {
                                        position159, tokenIndex159 := position, tokenIndex
                                        {
                                            position161 := position
                                            if buffer[position] != rune('\'') {
                                                goto l160
                                            }
                                            position++
                                            if buffer[position] != rune('\'') {
                                                goto l160
                                            }
                                            position++
                                            if buffer[position] != rune('\'') {
                                                goto l160
                                            }
                                            position++
                                            {
                                                position162 := position
                                                {
                                                    position163 := position
                                                l164:
                                                    {
                                                        position165, tokenIndex165 := position, tokenIndex
                                                        {
                                                            position166, tokenIndex166 := position, tokenIndex
                                                            if buffer[position] != rune('\'') {
                                                                goto l166
                                                            }
                                                            position++
                                                            if buffer[position] != rune('\'') {
                                                                goto l166
                                                            }
                                                            position++
                                                            if buffer[position] != rune('\'') {
                                                                goto l166
                                                            }
                                                            position++
                                                            goto l165
                                                        l166:
                                                            position, tokenIndex = position166, tokenIndex166
                                                        }
                                                        {
                                                            position167, tokenIndex167 := position, tokenIndex
                                                            {
                                                                position169 := position
                                                                {
                                                                    position170, tokenIndex170 := position, tokenIndex
                                                                    if buffer[position] != rune('\t') {
                                                                        goto l171
                                                                    }
                                                                    position++
                                                                    goto l170
                                                                l171:
                                                                    position, tokenIndex = position170, tokenIndex170
                                                                    if c := buffer[position]; c < rune(' ') || c > rune('\U0010ffff') {
                                                                        goto l168
                                                                    }
                                                                    position++
                                                                }
                                                            l170:
                                                                add(rulemlLiteralChar, position169)
                                                            }
                                                            goto l167
                                                        l168:
                                                            position, tokenIndex = position167, tokenIndex167
                                                            if !_rules[rulenewline]() {
                                                                goto l165
                                                            }
                                                        }
                                                    l167:
                                                        goto l164
                                                    l165:
                                                        position, tokenIndex = position165, tokenIndex165
                                                    }
                                                    add(rulemlLiteralBody, position163)
                                                }
                                                add(rulePegText, position162)
                                            }
                                            if buffer[position] != rune('\'') {
                                                goto l160
                                            }
                                            position++
                                            if buffer[position] != rune('\'') {
                                                goto l160
                                            }
                                            position++
                                            if buffer[position] != rune('\'') {
                                                goto l160
                                            }
                                            position++
                                            {
                                                add(ruleAction22, position)
                                            }
                                            add(rulemlLiteralString, position161)
                                        }
                                        goto l159
                                    l160:
                                        position, tokenIndex = position159, tokenIndex159
                                        {
                                            position174 := position
                                            if buffer[position] != rune('\'') {
                                                goto l173
                                            }
                                            position++
                                            {
                                                position175 := position
                                            l176:
                                                {
                                                    position177, tokenIndex177 := position, tokenIndex
                                                    {
                                                        position178 := position
                                                        {
                                                            switch buffer[position] {
                                                            case '\t':
                                                                if buffer[position] != rune('\t') {
                                                                    goto l177
                                                                }
                                                                position++
                                                                break
                                                            case ' ', '!', '"', '#', '$', '%', '&':
                                                                if c := buffer[position]; c < rune(' ') || c > rune('&') {
                                                                    goto l177
                                                                }
                                                                position++
                                                                break
                                                            default:
                                                                if c := buffer[position]; c < rune('(') || c > rune('\U0010ffff') {
                                                                    goto l177
                                                                }
                                                                position++
                                                                break
                                                            }
                                                        }

                                                        add(ruleliteralChar, position178)
                                                    }
                                                    goto l176
                                                l177:
                                                    position, tokenIndex = position177, tokenIndex177
                                                }
                                                add(rulePegText, position175)
                                            }
                                            if buffer[position] != rune('\'') {
                                                goto l173
                                            }
                                            position++
                                            {
                                                add(ruleAction21, position)
                                            }
                                            add(ruleliteralString, position174)
                                        }
                                        goto l159
                                    l173:
                                        position, tokenIndex = position159, tokenIndex159
                                        {
                                            position182 := position
                                            if buffer[position] != rune('"') {
                                                goto l181
                                            }
                                            position++
                                            if buffer[position] != rune('"') {
                                                goto l181
                                            }
                                            position++
                                            if buffer[position] != rune('"') {
                                                goto l181
                                            }
                                            position++
                                            {
                                                position183 := position
                                            l184:
                                                {
                                                    position185, tokenIndex185 := position, tokenIndex
                                                    {
                                                        position186, tokenIndex186 := position, tokenIndex
                                                        {
                                                            position188 := position
                                                            {
                                                                position189, tokenIndex189 := position, tokenIndex
                                                                if !_rules[rulebasicChar]() {
                                                                    goto l190
                                                                }
                                                                goto l189
                                                            l190:
                                                                position, tokenIndex = position189, tokenIndex189
                                                                if !_rules[rulenewline]() {
                                                                    goto l187
                                                                }
                                                            }
                                                        l189:
                                                            add(rulePegText, position188)
                                                        }
                                                        {
                                                            add(ruleAction20, position)
                                                        }
                                                        goto l186
                                                    l187:
                                                        position, tokenIndex = position186, tokenIndex186
                                                        if !_rules[ruleescape]() {
                                                            goto l185
                                                        }
                                                        if !_rules[rulenewline]() {
                                                            goto l185
                                                        }
                                                        if !_rules[rulewsnl]() {
                                                            goto l185
                                                        }
                                                    }
                                                l186:
                                                    goto l184
                                                l185:
                                                    position, tokenIndex = position185, tokenIndex185
                                                }
                                                add(rulemlBasicBody, position183)
                                            }
                                            if buffer[position] != rune('"') {
                                                goto l181
                                            }
                                            position++
                                            if buffer[position] != rune('"') {
                                                goto l181
                                            }
                                            position++
                                            if buffer[position] != rune('"') {
                                                goto l181
                                            }
                                            position++
                                            {
                                                add(ruleAction19, position)
                                            }
                                            add(rulemlBasicString, position182)
                                        }
                                        goto l159
                                    l181:
                                        position, tokenIndex = position159, tokenIndex159
                                        {
                                            position193 := position
                                            {
                                                position194 := position
                                                if buffer[position] != rune('"') {
                                                    goto l88
                                                }
                                                position++
                                            l195:
                                                {
                                                    position196, tokenIndex196 := position, tokenIndex
                                                    if !_rules[rulebasicChar]() {
                                                        goto l196
                                                    }
                                                    goto l195
                                                l196:
                                                    position, tokenIndex = position196, tokenIndex196
                                                }
                                                if buffer[position] != rune('"') {
                                                    goto l88
                                                }
                                                position++
                                                add(rulePegText, position194)
                                            }
                                            {
                                                add(ruleAction18, position)
                                            }
                                            add(rulebasicString, position193)
                                        }
                                    }
                                l159:
                                    add(rulestring, position158)
                                }
                                add(rulePegText, position157)
                            }
                            {
                                add(ruleAction10, position)
                            }
                            break
                        default:
                            {
                                position199 := position
                                if !_rules[ruleinteger]() {
                                    goto l88
                                }
                                add(rulePegText, position199)
                            }
                            {
                                add(ruleAction9, position)
                            }
                            break
                        }
                    }

                }
            l90:
                add(ruleval, position89)
            }
            return true
        l88:
            position, tokenIndex = position88, tokenIndex88
            return false
        },
        /* 11 table <- <(stdTable / arrayTable)> */
        nil,
        /* 12 stdTable <- <('[' ws <tableKey> ws ']' Action13)> */
        nil,
        /* 13 arrayTable <- <('[' '[' ws <tableKey> ws (']' ']') Action14)> */
        nil,
        /* 14 inlineTable <- <('{' Action15 ws inlineTableKeyValues ws '}' Action16)> */
        nil,
        /* 15 inlineTableKeyValues <- <(keyval inlineTableValSep?)*> */
        nil,
        /* 16 tableKey <- <(tableKeyComp (tableKeySep tableKeyComp)*)> */
        func() bool {
            position206, tokenIndex206 := position, tokenIndex
            {
                position207 := position
                if !_rules[ruletableKeyComp]() {
                    goto l206
                }
            l208:
                {
                    position209, tokenIndex209 := position, tokenIndex
                    {
                        position210 := position
                        if !_rules[rulews]() {
                            goto l209
                        }
                        if buffer[position] != rune('.') {
                            goto l209
                        }
                        position++
                        if !_rules[rulews]() {
                            goto l209
                        }
                        add(ruletableKeySep, position210)
                    }
                    if !_rules[ruletableKeyComp]() {
                        goto l209
                    }
                    goto l208
                l209:
                    position, tokenIndex = position209, tokenIndex209
                }
                add(ruletableKey, position207)
            }
            return true
        l206:
            position, tokenIndex = position206, tokenIndex206
            return false
        },
        /* 17 tableKeyComp <- <(key Action17)> */
        func() bool {
            position211, tokenIndex211 := position, tokenIndex
            {
                position212 := position
                if !_rules[rulekey]() {
                    goto l211
                }
                {
                    add(ruleAction17, position)
                }
                add(ruletableKeyComp, position212)
            }
            return true
        l211:
            position, tokenIndex = position211, tokenIndex211
            return false
        },
        /* 18 tableKeySep <- <(ws '.' ws)> */
        nil,
        /* 19 inlineTableValSep <- <(ws ',' ws)> */
        nil,
        /* 20 integer <- <(('-' / '+')? int)> */
        func() bool {
            position216, tokenIndex216 := position, tokenIndex
            {
                position217 := position
                {
                    position218, tokenIndex218 := position, tokenIndex
                    {
                        position220, tokenIndex220 := position, tokenIndex
                        if buffer[position] != rune('-') {
                            goto l221
                        }
                        position++
                        goto l220
                    l221:
                        position, tokenIndex = position220, tokenIndex220
                        if buffer[position] != rune('+') {
                            goto l218
                        }
                        position++
                    }
                l220:
                    goto l219
                l218:
                    position, tokenIndex = position218, tokenIndex218
                }
            l219:
                {
                    position222 := position
                    {
                        position223, tokenIndex223 := position, tokenIndex
                        if c := buffer[position]; c < rune('1') || c > rune('9') {
                            goto l224
                        }
                        position++
                        {
                            position227, tokenIndex227 := position, tokenIndex
                            if !_rules[ruledigit]() {
                                goto l228
                            }
                            goto l227
                        l228:
                            position, tokenIndex = position227, tokenIndex227
                            if buffer[position] != rune('_') {
                                goto l224
                            }
                            position++
                            if !_rules[ruledigit]() {
                                goto l224
                            }
                        }
                    l227:
                    l225:
                        {
                            position226, tokenIndex226 := position, tokenIndex
                            {
                                position229, tokenIndex229 := position, tokenIndex
                                if !_rules[ruledigit]() {
                                    goto l230
                                }
                                goto l229
                            l230:
                                position, tokenIndex = position229, tokenIndex229
                                if buffer[position] != rune('_') {
                                    goto l226
                                }
                                position++
                                if !_rules[ruledigit]() {
                                    goto l226
                                }
                            }
                        l229:
                            goto l225
                        l226:
                            position, tokenIndex = position226, tokenIndex226
                        }
                        goto l223
                    l224:
                        position, tokenIndex = position223, tokenIndex223
                        if !_rules[ruledigit]() {
                            goto l216
                        }
                    }
                l223:
                    add(ruleint, position222)
                }
                add(ruleinteger, position217)
            }
            return true
        l216:
            position, tokenIndex = position216, tokenIndex216
            return false
        },
        /* 21 int <- <(([1-9] (digit / ('_' digit))+) / digit)> */
        nil,
        /* 22 float <- <(integer ((frac exp?) / (frac? exp)))> */
        nil,
        /* 23 frac <- <('.' digit (digit / ('_' digit))*)> */
        func() bool {
            position233, tokenIndex233 := position, tokenIndex
            {
                position234 := position
                if buffer[position] != rune('.') {
                    goto l233
                }
                position++
                if !_rules[ruledigit]() {
                    goto l233
                }
            l235:
                {
                    position236, tokenIndex236 := position, tokenIndex
                    {
                        position237, tokenIndex237 := position, tokenIndex
                        if !_rules[ruledigit]() {
                            goto l238
                        }
                        goto l237
                    l238:
                        position, tokenIndex = position237, tokenIndex237
                        if buffer[position] != rune('_') {
                            goto l236
                        }
                        position++
                        if !_rules[ruledigit]() {
                            goto l236
                        }
                    }
                l237:
                    goto l235
                l236:
                    position, tokenIndex = position236, tokenIndex236
                }
                add(rulefrac, position234)
            }
            return true
        l233:
            position, tokenIndex = position233, tokenIndex233
            return false
        },
        /* 24 exp <- <(('e' / 'E') ('-' / '+')? digit (digit / ('_' digit))*)> */
        func() bool {
            position239, tokenIndex239 := position, tokenIndex
            {
                position240 := position
                {
                    position241, tokenIndex241 := position, tokenIndex
                    if buffer[position] != rune('e') {
                        goto l242
                    }
                    position++
                    goto l241
                l242:
                    position, tokenIndex = position241, tokenIndex241
                    if buffer[position] != rune('E') {
                        goto l239
                    }
                    position++
                }
            l241:
                {
                    position243, tokenIndex243 := position, tokenIndex
                    {
                        position245, tokenIndex245 := position, tokenIndex
                        if buffer[position] != rune('-') {
                            goto l246
                        }
                        position++
                        goto l245
                    l246:
                        position, tokenIndex = position245, tokenIndex245
                        if buffer[position] != rune('+') {
                            goto l243
                        }
                        position++
                    }
                l245:
                    goto l244
                l243:
                    position, tokenIndex = position243, tokenIndex243
                }
            l244:
                if !_rules[ruledigit]() {
                    goto l239
                }
            l247:
                {
                    position248, tokenIndex248 := position, tokenIndex
                    {
                        position249, tokenIndex249 := position, tokenIndex
                        if !_rules[ruledigit]() {
                            goto l250
                        }
                        goto l249
                    l250:
                        position, tokenIndex = position249, tokenIndex249
                        if buffer[position] != rune('_') {
                            goto l248
                        }
                        position++
                        if !_rules[ruledigit]() {
                            goto l248
                        }
                    }
                l249:
                    goto l247
                l248:
                    position, tokenIndex = position248, tokenIndex248
                }
                add(ruleexp, position240)
            }
            return true
        l239:
            position, tokenIndex = position239, tokenIndex239
            return false
        },
        /* 25 string <- <(mlLiteralString / literalString / mlBasicString / basicString)> */
        nil,
        /* 26 basicString <- <(<('"' basicChar* '"')> Action18)> */
        nil,
        /* 27 basicChar <- <(basicUnescaped / escaped)> */
        func() bool {
            position253, tokenIndex253 := position, tokenIndex
            {
                position254 := position
                {
                    position255, tokenIndex255 := position, tokenIndex
                    {
                        position257 := position
                        {
                            switch buffer[position] {
                            case ' ', '!':
                                if c := buffer[position]; c < rune(' ') || c > rune('!') {
                                    goto l256
                                }
                                position++
                                break
                            case '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[':
                                if c := buffer[position]; c < rune('#') || c > rune('[') {
                                    goto l256
                                }
                                position++
                                break
                            default:
                                if c := buffer[position]; c < rune(']') || c > rune('\U0010ffff') {
                                    goto l256
                                }
                                position++
                                break
                            }
                        }

                        add(rulebasicUnescaped, position257)
                    }
                    goto l255
                l256:
                    position, tokenIndex = position255, tokenIndex255
                    {
                        position259 := position
                        if !_rules[ruleescape]() {
                            goto l253
                        }
                        {
                            switch buffer[position] {
                            case 'U':
                                if buffer[position] != rune('U') {
                                    goto l253
                                }
                                position++
                                if !_rules[rulehexQuad]() {
                                    goto l253
                                }
                                if !_rules[rulehexQuad]() {
                                    goto l253
                                }
                                break
                            case 'u':
                                if buffer[position] != rune('u') {
                                    goto l253
                                }
                                position++
                                if !_rules[rulehexQuad]() {
                                    goto l253
                                }
                                break
                            case '\\':
                                if buffer[position] != rune('\\') {
                                    goto l253
                                }
                                position++
                                break
                            case '/':
                                if buffer[position] != rune('/') {
                                    goto l253
                                }
                                position++
                                break
                            case '"':
                                if buffer[position] != rune('"') {
                                    goto l253
                                }
                                position++
                                break
                            case 'r':
                                if buffer[position] != rune('r') {
                                    goto l253
                                }
                                position++
                                break
                            case 'f':
                                if buffer[position] != rune('f') {
                                    goto l253
                                }
                                position++
                                break
                            case 'n':
                                if buffer[position] != rune('n') {
                                    goto l253
                                }
                                position++
                                break
                            case 't':
                                if buffer[position] != rune('t') {
                                    goto l253
                                }
                                position++
                                break
                            default:
                                if buffer[position] != rune('b') {
                                    goto l253
                                }
                                position++
                                break
                            }
                        }

                        add(ruleescaped, position259)
                    }
                }
            l255:
                add(rulebasicChar, position254)
            }
            return true
        l253:
            position, tokenIndex = position253, tokenIndex253
            return false
        },
        /* 28 escaped <- <(escape ((&('U') ('U' hexQuad hexQuad)) | (&('u') ('u' hexQuad)) | (&('\\') '\\') | (&('/') '/') | (&('"') '"') | (&('r') 'r') | (&('f') 'f') | (&('n') 'n') | (&('t') 't') | (&('b') 'b')))> */
        nil,
        /* 29 basicUnescaped <- <((&(' ' | '!') [ -!]) | (&('#' | '$' | '%' | '&' | '\'' | '(' | ')' | '*' | '+' | ',' | '-' | '.' | '/' | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | ':' | ';' | '<' | '=' | '>' | '?' | '@' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' | '[') [#-[]) | (&(']' | '^' | '_' | '`' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' | '{' | '|' | '}' | '~' | '\u007f' | '\u0080' | '\u0081' | '\u0082' | '\u0083' | '\u0084' | '\u0085' | '\u0086' | '\u0087' | '\u0088' | '\u0089' | '\u008a' | '\u008b' | '\u008c' | '\u008d' | '\u008e' | '\u008f' | '\u0090' | '\u0091' | '\u0092' | '\u0093' | '\u0094' | '\u0095' | '\u0096' | '\u0097' | '\u0098' | '\u0099' | '\u009a' | '\u009b' | '\u009c' | '\u009d' | '\u009e' | '\u009f' | '\u00a0' | '¡' | '¢' | '£' | '¤' | '¥' | '¦' | '§' | '¨' | '©' | 'ª' | '«' | '¬' | '\u00ad' | '®' | '¯' | '°' | '±' | '²' | '³' | '´' | 'µ' | '¶' | '·' | '¸' | '¹' | 'º' | '»' | '¼' | '½' | '¾' | '¿' | 'À' | 'Á' | 'Â' | 'Ã' | 'Ä' | 'Å' | 'Æ' | 'Ç' | 'È' | 'É' | 'Ê' | 'Ë' | 'Ì' | 'Í' | 'Î' | 'Ï' | 'Ð' | 'Ñ' | 'Ò' | 'Ó' | 'Ô' | 'Õ' | 'Ö' | '×' | 'Ø' | 'Ù' | 'Ú' | 'Û' | 'Ü' | 'Ý' | 'Þ' | 'ß' | 'à' | 'á' | 'â' | 'ã' | 'ä' | 'å' | 'æ' | 'ç' | 'è' | 'é' | 'ê' | 'ë' | 'ì' | 'í' | 'î' | 'ï' | 'ð' | 'ñ' | 'ò' | 'ó' | 'ô' | 'õ' | 'ö' | '÷' | 'ø' | 'ù' | 'ú' | 'û' | 'ü' | 'ý' | 'þ' | 'ÿ') []-\U0010ffff]))> */
        nil,
        /* 30 escape <- <'\\'> */
        func() bool {
            position263, tokenIndex263 := position, tokenIndex
            {
                position264 := position
                if buffer[position] != rune('\\') {
                    goto l263
                }
                position++
                add(ruleescape, position264)
            }
            return true
        l263:
            position, tokenIndex = position263, tokenIndex263
            return false
        },
        /* 31 mlBasicString <- <('"' '"' '"' mlBasicBody ('"' '"' '"') Action19)> */
        nil,
        /* 32 mlBasicBody <- <((<(basicChar / newline)> Action20) / (escape newline wsnl))*> */
        nil,
        /* 33 literalString <- <('\'' <literalChar*> '\'' Action21)> */
        nil,
        /* 34 literalChar <- <((&('\t') '\t') | (&(' ' | '!' | '"' | '#' | '$' | '%' | '&') [ -&]) | (&('(' | ')' | '*' | '+' | ',' | '-' | '.' | '/' | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | ':' | ';' | '<' | '=' | '>' | '?' | '@' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' | '[' | '\\' | ']' | '^' | '_' | '`' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' | '{' | '|' | '}' | '~' | '\u007f' | '\u0080' | '\u0081' | '\u0082' | '\u0083' | '\u0084' | '\u0085' | '\u0086' | '\u0087' | '\u0088' | '\u0089' | '\u008a' | '\u008b' | '\u008c' | '\u008d' | '\u008e' | '\u008f' | '\u0090' | '\u0091' | '\u0092' | '\u0093' | '\u0094' | '\u0095' | '\u0096' | '\u0097' | '\u0098' | '\u0099' | '\u009a' | '\u009b' | '\u009c' | '\u009d' | '\u009e' | '\u009f' | '\u00a0' | '¡' | '¢' | '£' | '¤' | '¥' | '¦' | '§' | '¨' | '©' | 'ª' | '«' | '¬' | '\u00ad' | '®' | '¯' | '°' | '±' | '²' | '³' | '´' | 'µ' | '¶' | '·' | '¸' | '¹' | 'º' | '»' | '¼' | '½' | '¾' | '¿' | 'À' | 'Á' | 'Â' | 'Ã' | 'Ä' | 'Å' | 'Æ' | 'Ç' | 'È' | 'É' | 'Ê' | 'Ë' | 'Ì' | 'Í' | 'Î' | 'Ï' | 'Ð' | 'Ñ' | 'Ò' | 'Ó' | 'Ô' | 'Õ' | 'Ö' | '×' | 'Ø' | 'Ù' | 'Ú' | 'Û' | 'Ü' | 'Ý' | 'Þ' | 'ß' | 'à' | 'á' | 'â' | 'ã' | 'ä' | 'å' | 'æ' | 'ç' | 'è' | 'é' | 'ê' | 'ë' | 'ì' | 'í' | 'î' | 'ï' | 'ð' | 'ñ' | 'ò' | 'ó' | 'ô' | 'õ' | 'ö' | '÷' | 'ø' | 'ù' | 'ú' | 'û' | 'ü' | 'ý' | 'þ' | 'ÿ') [(-\U0010ffff]))> */
        nil,
        /* 35 mlLiteralString <- <('\'' '\'' '\'' <mlLiteralBody> ('\'' '\'' '\'') Action22)> */
        nil,
        /* 36 mlLiteralBody <- <(!('\'' '\'' '\'') (mlLiteralChar / newline))*> */
        nil,
        /* 37 mlLiteralChar <- <('\t' / [ -\U0010ffff])> */
        nil,
        /* 38 hexdigit <- <((&('a' | 'b' | 'c' | 'd' | 'e' | 'f') [a-f]) | (&('A' | 'B' | 'C' | 'D' | 'E' | 'F') [A-F]) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') [0-9]))> */
        func() bool {
            position272, tokenIndex272 := position, tokenIndex
            {
                position273 := position
                {
                    switch buffer[position] {
                    case 'a', 'b', 'c', 'd', 'e', 'f':
                        if c := buffer[position]; c < rune('a') || c > rune('f') {
                            goto l272
                        }
                        position++
                        break
                    case 'A', 'B', 'C', 'D', 'E', 'F':
                        if c := buffer[position]; c < rune('A') || c > rune('F') {
                            goto l272
                        }
                        position++
                        break
                    default:
                        if c := buffer[position]; c < rune('0') || c > rune('9') {
                            goto l272
                        }
                        position++
                        break
                    }
                }

                add(rulehexdigit, position273)
            }
            return true
        l272:
            position, tokenIndex = position272, tokenIndex272
            return false
        },
        /* 39 hexQuad <- <(hexdigit hexdigit hexdigit hexdigit)> */
        func() bool {
            position275, tokenIndex275 := position, tokenIndex
            {
                position276 := position
                if !_rules[rulehexdigit]() {
                    goto l275
                }
                if !_rules[rulehexdigit]() {
                    goto l275
                }
                if !_rules[rulehexdigit]() {
                    goto l275
                }
                if !_rules[rulehexdigit]() {
                    goto l275
                }
                add(rulehexQuad, position276)
            }
            return true
        l275:
            position, tokenIndex = position275, tokenIndex275
            return false
        },
        /* 40 boolean <- <(('t' 'r' 'u' 'e') / ('f' 'a' 'l' 's' 'e'))> */
        nil,
        /* 41 dateFullYear <- <digitQuad> */
        nil,
        /* 42 dateMonth <- <digitDual> */
        nil,
        /* 43 dateMDay <- <digitDual> */
        nil,
        /* 44 timeHour <- <digitDual> */
        func() bool {
            position281, tokenIndex281 := position, tokenIndex
            {
                position282 := position
                if !_rules[ruledigitDual]() {
                    goto l281
                }
                add(ruletimeHour, position282)
            }
            return true
        l281:
            position, tokenIndex = position281, tokenIndex281
            return false
        },
        /* 45 timeMinute <- <digitDual> */
        func() bool {
            position283, tokenIndex283 := position, tokenIndex
            {
                position284 := position
                if !_rules[ruledigitDual]() {
                    goto l283
                }
                add(ruletimeMinute, position284)
            }
            return true
        l283:
            position, tokenIndex = position283, tokenIndex283
            return false
        },
        /* 46 timeSecond <- <digitDual> */
        nil,
        /* 47 timeSecfrac <- <('.' digit+)> */
        nil,
        /* 48 timeNumoffset <- <(('-' / '+') timeHour ':' timeMinute)> */
        nil,
        /* 49 timeOffset <- <('Z' / timeNumoffset)> */
        nil,
        /* 50 partialTime <- <(timeHour ':' timeMinute ':' timeSecond timeSecfrac?)> */
        func() bool {
            position289, tokenIndex289 := position, tokenIndex
            {
                position290 := position
                if !_rules[ruletimeHour]() {
                    goto l289
                }
                if buffer[position] != rune(':') {
                    goto l289
                }
                position++
                if !_rules[ruletimeMinute]() {
                    goto l289
                }
                if buffer[position] != rune(':') {
                    goto l289
                }
                position++
                {
                    position291 := position
                    if !_rules[ruledigitDual]() {
                        goto l289
                    }
                    add(ruletimeSecond, position291)
                }
                {
                    position292, tokenIndex292 := position, tokenIndex
                    {
                        position294 := position
                        if buffer[position] != rune('.') {
                            goto l292
                        }
                        position++
                        if !_rules[ruledigit]() {
                            goto l292
                        }
                    l295:
                        {
                            position296, tokenIndex296 := position, tokenIndex
                            if !_rules[ruledigit]() {
                                goto l296
                            }
                            goto l295
                        l296:
                            position, tokenIndex = position296, tokenIndex296
                        }
                        add(ruletimeSecfrac, position294)
                    }
                    goto l293
                l292:
                    position, tokenIndex = position292, tokenIndex292
                }
            l293:
                add(rulepartialTime, position290)
            }
            return true
        l289:
            position, tokenIndex = position289, tokenIndex289
            return false
        },
        /* 51 fullDate <- <(dateFullYear '-' dateMonth '-' dateMDay)> */
        nil,
        /* 52 fullTime <- <(partialTime timeOffset?)> */
        nil,
        /* 53 datetime <- <((fullDate ('T' fullTime)?) / partialTime)> */
        nil,
        /* 54 digit <- <[0-9]> */
        func() bool {
            position300, tokenIndex300 := position, tokenIndex
            {
                position301 := position
                if c := buffer[position]; c < rune('0') || c > rune('9') {
                    goto l300
                }
                position++
                add(ruledigit, position301)
            }
            return true
        l300:
            position, tokenIndex = position300, tokenIndex300
            return false
        },
        /* 55 digitDual <- <(digit digit)> */
        func() bool {
            position302, tokenIndex302 := position, tokenIndex
            {
                position303 := position
                if !_rules[ruledigit]() {
                    goto l302
                }
                if !_rules[ruledigit]() {
                    goto l302
                }
                add(ruledigitDual, position303)
            }
            return true
        l302:
            position, tokenIndex = position302, tokenIndex302
            return false
        },
        /* 56 digitQuad <- <(digitDual digitDual)> */
        nil,
        /* 57 array <- <('[' Action23 wsnl arrayValues? wsnl ']')> */
        nil,
        /* 58 arrayValues <- <(val Action24 (wsnl comment? wsnl arraySep wsnl comment? wsnl val Action25)* wsnl arraySep? wsnl comment?)> */
        nil,
        /* 59 arraySep <- <','> */
        func() bool {
            position307, tokenIndex307 := position, tokenIndex
            {
                position308 := position
                if buffer[position] != rune(',') {
                    goto l307
                }
                position++
                add(rulearraySep, position308)
            }
            return true
        l307:
            position, tokenIndex = position307, tokenIndex307
            return false
        },
        /* 61 Action0 <- <{ _ = buffer }> */
        nil,
        nil,
        /* 63 Action1 <- <{ p.SetTableString(begin, end) }> */
        nil,
        /* 64 Action2 <- <{ p.AddLineCount(end - begin) }> */
        nil,
        /* 65 Action3 <- <{ p.AddLineCount(end - begin) }> */
        nil,
        /* 66 Action4 <- <{ p.AddKeyValue() }> */
        nil,
        /* 67 Action5 <- <{ p.SetKey(p.buffer, begin, end) }> */
        nil,
        /* 68 Action6 <- <{ p.SetKey(p.buffer, begin, end) }> */
        nil,
        /* 69 Action7 <- <{ p.SetTime(begin, end) }> */
        nil,
        /* 70 Action8 <- <{ p.SetFloat64(begin, end) }> */
        nil,
        /* 71 Action9 <- <{ p.SetInt64(begin, end) }> */
        nil,
        /* 72 Action10 <- <{ p.SetString(begin, end) }> */
        nil,
        /* 73 Action11 <- <{ p.SetBool(begin, end) }> */
        nil,
        /* 74 Action12 <- <{ p.SetArray(begin, end) }> */
        nil,
        /* 75 Action13 <- <{ p.SetTable(p.buffer, begin, end) }> */
        nil,
        /* 76 Action14 <- <{ p.SetArrayTable(p.buffer, begin, end) }> */
        nil,
        /* 77 Action15 <- <{ p.StartInlineTable() }> */
        nil,
        /* 78 Action16 <- <{ p.EndInlineTable() }> */
        nil,
        /* 79 Action17 <- <{ p.AddTableKey() }> */
        nil,
        /* 80 Action18 <- <{ p.SetBasicString(p.buffer, begin, end) }> */
        nil,
        /* 81 Action19 <- <{ p.SetMultilineString() }> */
        nil,
        /* 82 Action20 <- <{ p.AddMultilineBasicBody(p.buffer, begin, end) }> */
        nil,
        /* 83 Action21 <- <{ p.SetLiteralString(p.buffer, begin, end) }> */
        nil,
        /* 84 Action22 <- <{ p.SetMultilineLiteralString(p.buffer, begin, end) }> */
        nil,
        /* 85 Action23 <- <{ p.StartArray() }> */
        nil,
        /* 86 Action24 <- <{ p.AddArrayVal() }> */
        nil,
        /* 87 Action25 <- <{ p.AddArrayVal() }> */
        nil,
    }
    p.rules = _rules
}