lrama 0.6.10 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/gh-pages.yml +46 -0
  3. data/.github/workflows/test.yaml +40 -8
  4. data/.gitignore +1 -0
  5. data/.rdoc_options +2 -0
  6. data/Gemfile +4 -2
  7. data/NEWS.md +125 -30
  8. data/README.md +44 -15
  9. data/Rakefile +13 -1
  10. data/Steepfile +5 -0
  11. data/doc/Index.md +58 -0
  12. data/doc/development/compressed_state_table/main.md +635 -0
  13. data/doc/development/compressed_state_table/parse.output +174 -0
  14. data/doc/development/compressed_state_table/parse.y +22 -0
  15. data/doc/development/compressed_state_table/parser.rb +282 -0
  16. data/lib/lrama/bitmap.rb +4 -1
  17. data/lib/lrama/command.rb +2 -1
  18. data/lib/lrama/context.rb +3 -3
  19. data/lib/lrama/counterexamples/derivation.rb +6 -5
  20. data/lib/lrama/counterexamples/example.rb +7 -4
  21. data/lib/lrama/counterexamples/path.rb +4 -0
  22. data/lib/lrama/counterexamples.rb +19 -9
  23. data/lib/lrama/digraph.rb +30 -0
  24. data/lib/lrama/grammar/binding.rb +47 -15
  25. data/lib/lrama/grammar/parameterizing_rule/rhs.rb +1 -1
  26. data/lib/lrama/grammar/rule.rb +8 -0
  27. data/lib/lrama/grammar/rule_builder.rb +4 -16
  28. data/lib/lrama/grammar/symbols/resolver.rb +4 -0
  29. data/lib/lrama/grammar.rb +10 -5
  30. data/lib/lrama/lexer/grammar_file.rb +8 -1
  31. data/lib/lrama/lexer/location.rb +17 -1
  32. data/lib/lrama/lexer/token/char.rb +1 -0
  33. data/lib/lrama/lexer/token/ident.rb +1 -0
  34. data/lib/lrama/lexer/token/instantiate_rule.rb +6 -1
  35. data/lib/lrama/lexer/token/tag.rb +3 -1
  36. data/lib/lrama/lexer/token/user_code.rb +6 -2
  37. data/lib/lrama/lexer/token.rb +14 -2
  38. data/lib/lrama/lexer.rb +5 -5
  39. data/lib/lrama/logger.rb +4 -0
  40. data/lib/lrama/option_parser.rb +10 -8
  41. data/lib/lrama/options.rb +2 -1
  42. data/lib/lrama/parser.rb +529 -490
  43. data/lib/lrama/state/reduce.rb +2 -3
  44. data/lib/lrama/state.rb +288 -1
  45. data/lib/lrama/states/item.rb +8 -0
  46. data/lib/lrama/states.rb +69 -2
  47. data/lib/lrama/trace_reporter.rb +17 -2
  48. data/lib/lrama/version.rb +1 -1
  49. data/lrama.gemspec +1 -1
  50. data/parser.y +42 -30
  51. data/rbs_collection.lock.yaml +10 -2
  52. data/sig/generated/lrama/bitmap.rbs +11 -0
  53. data/sig/generated/lrama/digraph.rbs +39 -0
  54. data/sig/generated/lrama/grammar/binding.rbs +34 -0
  55. data/sig/generated/lrama/lexer/grammar_file.rbs +28 -0
  56. data/sig/generated/lrama/lexer/location.rbs +52 -0
  57. data/sig/{lrama → generated/lrama}/lexer/token/char.rbs +2 -0
  58. data/sig/{lrama → generated/lrama}/lexer/token/ident.rbs +2 -0
  59. data/sig/{lrama → generated/lrama}/lexer/token/instantiate_rule.rbs +8 -0
  60. data/sig/{lrama → generated/lrama}/lexer/token/tag.rbs +3 -0
  61. data/sig/{lrama → generated/lrama}/lexer/token/user_code.rbs +6 -1
  62. data/sig/{lrama → generated/lrama}/lexer/token.rbs +26 -3
  63. data/sig/generated/lrama/logger.rbs +14 -0
  64. data/sig/generated/lrama/trace_reporter.rbs +25 -0
  65. data/sig/lrama/counterexamples/derivation.rbs +33 -0
  66. data/sig/lrama/counterexamples/example.rbs +45 -0
  67. data/sig/lrama/counterexamples/path.rbs +21 -0
  68. data/sig/lrama/counterexamples/production_path.rbs +11 -0
  69. data/sig/lrama/counterexamples/start_path.rbs +13 -0
  70. data/sig/lrama/counterexamples/state_item.rbs +10 -0
  71. data/sig/lrama/counterexamples/transition_path.rbs +11 -0
  72. data/sig/lrama/counterexamples/triple.rbs +20 -0
  73. data/sig/lrama/counterexamples.rbs +29 -0
  74. data/sig/lrama/grammar/rule_builder.rbs +0 -1
  75. data/sig/lrama/grammar/symbol.rbs +1 -1
  76. data/sig/lrama/grammar/symbols/resolver.rbs +3 -3
  77. data/sig/lrama/grammar.rbs +13 -0
  78. data/sig/lrama/options.rbs +1 -0
  79. data/sig/lrama/state/reduce_reduce_conflict.rbs +2 -2
  80. data/sig/lrama/state.rbs +79 -0
  81. data/sig/lrama/states.rbs +101 -0
  82. metadata +34 -14
  83. data/sig/lrama/bitmap.rbs +0 -7
  84. data/sig/lrama/digraph.rbs +0 -23
  85. data/sig/lrama/grammar/binding.rbs +0 -19
  86. data/sig/lrama/lexer/grammar_file.rbs +0 -17
  87. data/sig/lrama/lexer/location.rbs +0 -26
data/lib/lrama/parser.rb CHANGED
@@ -654,21 +654,22 @@ end
654
654
  module Lrama
655
655
  class Parser < Racc::Parser
656
656
 
657
- module_eval(<<'...end parser.y/module_eval...', 'parser.y', 417)
657
+ module_eval(<<'...end parser.y/module_eval...', 'parser.y', 428)
658
658
 
659
659
  include Lrama::Report::Duration
660
660
 
661
- def initialize(text, path, debug = false)
661
+ def initialize(text, path, debug = false, define = {})
662
662
  @grammar_file = Lrama::Lexer::GrammarFile.new(path, text)
663
663
  @yydebug = debug
664
664
  @rule_counter = Lrama::Grammar::Counter.new(0)
665
665
  @midrule_action_counter = Lrama::Grammar::Counter.new(1)
666
+ @define = define
666
667
  end
667
668
 
668
669
  def parse
669
670
  report_duration(:parse) do
670
671
  @lexer = Lrama::Lexer.new(@grammar_file)
671
- @grammar = Lrama::Grammar.new(@rule_counter)
672
+ @grammar = Lrama::Grammar.new(@rule_counter, @define)
672
673
  @precedence_number = 0
673
674
  reset_precs
674
675
  do_parse
@@ -728,297 +729,306 @@ end
728
729
  ##### State transition tables begin ###
729
730
 
730
731
  racc_action_table = [
731
- 94, 48, 95, 166, 48, 77, 172, 48, 77, 166,
732
- 48, 77, 172, 48, 77, 47, 6, 85, 69, 48,
733
- 48, 47, 47, 77, 74, 81, 48, 48, 47, 47,
734
- 40, 81, 81, 48, 41, 47, 92, 48, 81, 47,
735
- 44, 77, 103, 168, 169, 45, 175, 169, 96, 168,
736
- 169, 52, 175, 169, 86, 20, 24, 25, 26, 27,
737
- 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
738
- 38, 92, 48, 4, 47, 5, 77, 103, 48, 48,
739
- 47, 47, 77, 103, 116, 48, 4, 47, 5, 77,
740
- 20, 24, 25, 26, 27, 28, 29, 30, 31, 32,
741
- 33, 34, 35, 36, 37, 38, 11, 12, 13, 14,
742
- 15, 16, 17, 18, 19, 52, 20, 24, 25, 26,
743
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
744
- 37, 38, 11, 12, 13, 14, 15, 16, 17, 18,
745
- 19, 43, 20, 24, 25, 26, 27, 28, 29, 30,
746
- 31, 32, 33, 34, 35, 36, 37, 38, 48, 48,
747
- 47, 47, 77, 103, 48, 48, 47, 47, 77, 77,
748
- 48, 48, 47, 47, 77, 77, 48, 48, 196, 196,
749
- 77, 77, 48, 48, 47, 196, 77, 77, 148, 170,
750
- 52, 149, 149, 180, 181, 182, 131, 180, 181, 182,
751
- 131, 203, 208, 215, 204, 204, 204, 48, 48, 47,
752
- 47, 48, 48, 47, 47, 48, 48, 47, 47, 180,
753
- 181, 182, 119, 120, 55, 52, 52, 52, 52, 52,
754
- 61, 62, 63, 64, 65, 87, 52, 52, 106, 109,
755
- 111, 118, 125, 126, 128, 131, 132, 77, 140, 141,
756
- 142, 143, 145, 146, 153, 140, 155, 153, 159, 160,
757
- 161, 163, 164, 171, 176, 153, 183, 131, 187, 153,
758
- 189, 131, 153, 198, 153, 131, 161, 164, 205, 164,
759
- 161, 161, 213, 131, 161 ]
732
+ 89, 49, 90, 167, 49, 101, 173, 49, 101, 167,
733
+ 49, 101, 173, 6, 101, 80, 49, 49, 48, 48,
734
+ 41, 76, 76, 49, 49, 48, 48, 42, 76, 76,
735
+ 49, 49, 48, 48, 101, 96, 113, 49, 87, 48,
736
+ 150, 101, 96, 151, 45, 171, 169, 170, 151, 176,
737
+ 170, 91, 169, 170, 81, 176, 170, 20, 24, 25,
738
+ 26, 27, 28, 29, 30, 31, 87, 32, 33, 34,
739
+ 35, 36, 37, 38, 39, 49, 4, 48, 5, 101,
740
+ 96, 181, 182, 183, 128, 20, 24, 25, 26, 27,
741
+ 28, 29, 30, 31, 46, 32, 33, 34, 35, 36,
742
+ 37, 38, 39, 11, 12, 13, 14, 15, 16, 17,
743
+ 18, 19, 53, 20, 24, 25, 26, 27, 28, 29,
744
+ 30, 31, 53, 32, 33, 34, 35, 36, 37, 38,
745
+ 39, 11, 12, 13, 14, 15, 16, 17, 18, 19,
746
+ 44, 20, 24, 25, 26, 27, 28, 29, 30, 31,
747
+ 53, 32, 33, 34, 35, 36, 37, 38, 39, 49,
748
+ 4, 48, 5, 101, 96, 49, 49, 48, 48, 101,
749
+ 101, 49, 49, 48, 48, 101, 101, 49, 49, 48,
750
+ 197, 101, 101, 49, 49, 197, 48, 101, 101, 49,
751
+ 49, 197, 48, 101, 181, 182, 183, 128, 204, 210,
752
+ 217, 205, 205, 205, 49, 49, 48, 48, 49, 49,
753
+ 48, 48, 49, 49, 48, 48, 181, 182, 183, 116,
754
+ 117, 56, 53, 53, 53, 53, 53, 62, 63, 64,
755
+ 65, 66, 68, 68, 68, 82, 53, 53, 104, 108,
756
+ 108, 115, 122, 123, 125, 128, 129, 133, 139, 140,
757
+ 141, 142, 144, 145, 101, 154, 139, 157, 154, 161,
758
+ 162, 68, 164, 165, 172, 177, 154, 184, 128, 188,
759
+ 154, 190, 128, 154, 199, 154, 128, 68, 165, 206,
760
+ 165, 68, 68, 215, 128, 68 ]
760
761
 
761
762
  racc_action_check = [
762
- 46, 151, 46, 151, 157, 151, 157, 177, 157, 177,
763
- 188, 177, 188, 32, 188, 32, 1, 38, 32, 33,
764
- 34, 33, 34, 33, 33, 34, 35, 36, 35, 36,
765
- 5, 35, 36, 37, 6, 37, 44, 58, 37, 58,
766
- 9, 58, 58, 151, 151, 11, 157, 157, 46, 177,
767
- 177, 13, 188, 188, 38, 44, 44, 44, 44, 44,
768
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
769
- 44, 88, 59, 0, 59, 0, 59, 59, 60, 79,
770
- 60, 79, 60, 60, 79, 72, 2, 72, 2, 72,
771
- 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
772
- 88, 88, 88, 88, 88, 88, 3, 3, 3, 3,
773
- 3, 3, 3, 3, 3, 14, 3, 3, 3, 3,
774
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
775
- 3, 3, 8, 8, 8, 8, 8, 8, 8, 8,
763
+ 47, 153, 47, 153, 159, 153, 159, 178, 159, 178,
764
+ 189, 178, 189, 1, 189, 39, 35, 36, 35, 36,
765
+ 5, 35, 36, 37, 38, 37, 38, 6, 37, 38,
766
+ 59, 74, 59, 74, 59, 59, 74, 60, 45, 60,
767
+ 138, 60, 60, 138, 9, 156, 153, 153, 156, 159,
768
+ 159, 47, 178, 178, 39, 189, 189, 45, 45, 45,
769
+ 45, 45, 45, 45, 45, 45, 83, 45, 45, 45,
770
+ 45, 45, 45, 45, 45, 61, 0, 61, 0, 61,
771
+ 61, 166, 166, 166, 166, 83, 83, 83, 83, 83,
772
+ 83, 83, 83, 83, 11, 83, 83, 83, 83, 83,
773
+ 83, 83, 83, 3, 3, 3, 3, 3, 3, 3,
774
+ 3, 3, 13, 3, 3, 3, 3, 3, 3, 3,
775
+ 3, 3, 14, 3, 3, 3, 3, 3, 3, 3,
776
+ 3, 8, 8, 8, 8, 8, 8, 8, 8, 8,
776
777
  8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
777
- 8, 8, 8, 8, 8, 8, 8, 8, 100, 12,
778
- 100, 12, 100, 100, 74, 111, 74, 111, 74, 111,
779
- 168, 175, 168, 175, 168, 175, 183, 189, 183, 189,
780
- 183, 189, 204, 205, 204, 205, 204, 205, 139, 154,
781
- 15, 139, 154, 165, 165, 165, 165, 173, 173, 173,
782
- 173, 195, 200, 212, 195, 200, 212, 67, 69, 67,
783
- 69, 81, 106, 81, 106, 114, 116, 114, 116, 197,
784
- 197, 197, 86, 86, 16, 17, 20, 24, 25, 26,
785
- 27, 28, 29, 30, 31, 39, 50, 55, 66, 70,
786
- 71, 85, 89, 90, 91, 92, 98, 110, 118, 119,
787
- 120, 121, 130, 131, 141, 142, 144, 145, 146, 147,
788
- 148, 149, 150, 156, 162, 164, 166, 167, 170, 171,
789
- 172, 174, 176, 186, 187, 191, 192, 194, 196, 199,
790
- 201, 203, 207, 208, 214 ]
778
+ 15, 8, 8, 8, 8, 8, 8, 8, 8, 97,
779
+ 2, 97, 2, 97, 97, 71, 108, 71, 108, 71,
780
+ 108, 109, 169, 109, 169, 109, 169, 176, 184, 176,
781
+ 184, 176, 184, 190, 205, 190, 205, 190, 205, 206,
782
+ 12, 206, 12, 206, 174, 174, 174, 174, 196, 201,
783
+ 214, 196, 201, 214, 69, 76, 69, 76, 104, 105,
784
+ 104, 105, 111, 113, 111, 113, 198, 198, 198, 81,
785
+ 81, 16, 17, 20, 24, 25, 26, 27, 28, 29,
786
+ 30, 31, 32, 33, 34, 40, 51, 56, 67, 70,
787
+ 72, 80, 84, 85, 86, 87, 93, 107, 115, 116,
788
+ 117, 118, 127, 128, 134, 140, 141, 143, 144, 145,
789
+ 146, 150, 151, 152, 158, 163, 165, 167, 168, 171,
790
+ 172, 173, 175, 177, 187, 188, 192, 193, 195, 197,
791
+ 200, 202, 204, 209, 210, 216 ]
791
792
 
792
793
  racc_action_pointer = [
793
- 63, 16, 76, 93, nil, 23, 34, nil, 119, 31,
794
- nil, 39, 156, 5, 69, 144, 219, 179, nil, nil,
795
- 180, nil, nil, nil, 181, 182, 183, 225, 226, 227,
796
- 228, 229, 10, 16, 17, 23, 24, 30, 12, 233,
797
- nil, nil, nil, nil, 32, nil, -5, nil, nil, nil,
798
- 190, nil, nil, nil, nil, 191, nil, nil, 34, 69,
799
- 75, nil, nil, nil, nil, nil, 230, 204, nil, 205,
800
- 233, 232, 82, nil, 161, nil, nil, nil, nil, 76,
801
- nil, 208, nil, nil, nil, 202, 218, nil, 67, 233,
802
- 221, 222, 194, nil, nil, nil, nil, nil, 244, nil,
803
- 155, nil, nil, nil, nil, nil, 209, nil, nil, nil,
804
- 240, 162, nil, nil, 212, nil, 213, nil, 243, 208,
805
- 211, 240, nil, nil, nil, nil, nil, nil, nil, nil,
806
- 211, 248, nil, nil, nil, nil, nil, nil, nil, 148,
807
- nil, 200, 250, nil, 254, 203, 206, 212, 252, 256,
808
- 218, -2, nil, nil, 149, nil, 219, 1, nil, nil,
809
- nil, nil, 223, nil, 211, 145, 227, 216, 167, nil,
810
- 227, 215, 231, 149, 220, 168, 218, 4, nil, nil,
811
- nil, nil, nil, 173, nil, nil, 271, 220, 7, 174,
812
- nil, 224, 268, nil, 233, 161, 239, 171, nil, 235,
813
- 162, 272, nil, 273, 179, 180, nil, 235, 232, nil,
814
- nil, nil, 163, nil, 276, nil, nil ]
794
+ 66, 13, 150, 90, nil, 13, 27, nil, 118, 35,
795
+ nil, 88, 187, 63, 73, 101, 216, 173, nil, nil,
796
+ 174, nil, nil, nil, 175, 176, 177, 222, 223, 224,
797
+ 225, 226, 224, 225, 226, 13, 14, 20, 21, 10,
798
+ 233, nil, nil, nil, nil, 34, nil, -5, nil, nil,
799
+ nil, 187, nil, nil, nil, nil, 188, nil, nil, 27,
800
+ 34, 72, nil, nil, nil, nil, nil, 230, nil, 201,
801
+ 231, 162, 232, nil, 28, nil, 202, nil, nil, nil,
802
+ 200, 215, nil, 62, 233, 221, 222, 191, nil, nil,
803
+ nil, nil, nil, 244, nil, nil, nil, 156, nil, nil,
804
+ nil, nil, nil, nil, 205, 206, nil, 241, 163, 168,
805
+ nil, 209, nil, 210, nil, 243, 206, 209, 240, nil,
806
+ nil, nil, nil, nil, nil, nil, nil, 209, 248, nil,
807
+ nil, nil, nil, nil, 247, nil, nil, nil, -2, nil,
808
+ 208, 251, nil, 255, 211, 204, 210, nil, nil, nil,
809
+ 253, 257, 217, -2, nil, nil, 3, nil, 218, 1,
810
+ nil, nil, nil, 222, nil, 219, 30, 226, 214, 169,
811
+ nil, 226, 223, 230, 143, 218, 174, 226, 4, nil,
812
+ nil, nil, nil, nil, 175, nil, nil, 272, 228, 7,
813
+ 180, nil, 222, 269, nil, 232, 156, 238, 165, nil,
814
+ 234, 157, 273, nil, 274, 181, 186, nil, nil, 233,
815
+ 230, nil, nil, nil, 158, nil, 277, nil, nil ]
815
816
 
816
817
  racc_action_default = [
817
- -1, -127, -1, -3, -10, -127, -127, -2, -3, -127,
818
- -16, -127, -127, -127, -127, -127, -127, -127, -24, -25,
819
- -127, -30, -31, -32, -127, -127, -127, -127, -127, -127,
820
- -127, -127, -127, -127, -127, -127, -127, -127, -127, -127,
821
- -13, 217, -4, -26, -127, -17, -118, -89, -90, -117,
822
- -14, -19, -81, -20, -21, -127, -23, -29, -127, -127,
823
- -127, -36, -37, -38, -39, -40, -41, -47, -49, -127,
824
- -52, -42, -74, -76, -127, -79, -80, -126, -43, -84,
825
- -86, -127, -44, -45, -46, -127, -127, -11, -5, -7,
826
- -91, -127, -64, -18, -119, -120, -121, -15, -127, -22,
827
- -27, -33, -122, -123, -34, -35, -127, -48, -50, -53,
828
- -72, -127, -75, -77, -84, -85, -127, -87, -127, -127,
829
- -127, -127, -6, -8, -9, -115, -92, -93, -94, -65,
830
- -127, -127, -82, -28, -51, -54, -73, -78, -88, -127,
831
- -60, -124, -127, -12, -127, -124, -127, -127, -55, -127,
832
- -58, -62, -66, -125, -127, -116, -95, -96, -98, -114,
833
- -83, -56, -127, -61, -124, -64, -89, -64, -127, -111,
834
- -127, -124, -89, -64, -64, -127, -124, -63, -67, -68,
835
- -104, -105, -106, -127, -70, -71, -127, -124, -97, -127,
836
- -99, -64, -55, -103, -57, -127, -89, -107, -112, -59,
837
- -127, -55, -102, -55, -127, -127, -109, -127, -64, -100,
838
- -69, -108, -127, -113, -55, -110, -101 ]
818
+ -1, -128, -1, -3, -10, -128, -128, -2, -3, -128,
819
+ -16, -128, -128, -128, -128, -128, -128, -128, -24, -25,
820
+ -128, -32, -33, -34, -128, -128, -128, -128, -128, -128,
821
+ -128, -128, -50, -50, -50, -128, -128, -128, -128, -128,
822
+ -128, -13, 219, -4, -26, -128, -17, -123, -93, -94,
823
+ -122, -14, -19, -85, -20, -21, -128, -23, -31, -128,
824
+ -128, -128, -38, -39, -40, -41, -42, -43, -51, -128,
825
+ -44, -128, -45, -46, -88, -90, -128, -47, -48, -49,
826
+ -128, -128, -11, -5, -7, -95, -128, -68, -18, -124,
827
+ -125, -126, -15, -128, -22, -27, -28, -29, -35, -83,
828
+ -84, -127, -36, -37, -128, -52, -54, -56, -128, -79,
829
+ -81, -88, -89, -128, -91, -128, -128, -128, -128, -6,
830
+ -8, -9, -120, -96, -97, -98, -69, -128, -128, -86,
831
+ -30, -55, -53, -57, -76, -82, -80, -92, -128, -62,
832
+ -66, -128, -12, -128, -66, -128, -128, -58, -77, -78,
833
+ -50, -128, -60, -64, -67, -70, -128, -121, -99, -100,
834
+ -102, -119, -87, -128, -63, -66, -68, -93, -68, -128,
835
+ -116, -128, -66, -93, -68, -68, -128, -66, -65, -71,
836
+ -72, -108, -109, -110, -128, -74, -75, -128, -66, -101,
837
+ -128, -103, -68, -50, -107, -59, -128, -93, -111, -117,
838
+ -61, -128, -50, -106, -50, -128, -128, -112, -113, -128,
839
+ -68, -104, -73, -114, -128, -118, -50, -115, -105 ]
839
840
 
840
841
  racc_goto_table = [
841
- 102, 102, 102, 49, 130, 73, 68, 89, 162, 91,
842
- 150, 139, 101, 104, 105, 1, 9, 174, 51, 53,
843
- 54, 42, 115, 70, 117, 79, 79, 79, 79, 56,
844
- 123, 3, 57, 7, 124, 154, 58, 59, 60, 179,
845
- 158, 107, 102, 108, 112, 194, 113, 191, 174, 157,
846
- 39, 122, 202, 91, 133, 97, 199, 115, 70, 138,
847
- 70, 209, 195, 210, 121, 46, 158, 99, 200, 93,
848
- 114, 206, 114, 66, 216, 188, 71, 178, 135, 184,
849
- 134, 110, 177, 137, 212, 190, 192, 78, 82, 83,
850
- 84, 136, 98, 165, 147, 127, 156, 70, 186, 173,
851
- 207, 144, nil, 201, nil, 114, nil, 114, nil, nil,
852
- 185, nil, nil, nil, nil, nil, nil, 193, nil, 165,
853
- 214, nil, nil, nil, nil, 197, nil, nil, nil, nil,
854
- 173, 197, nil, nil, nil, nil, nil, nil, nil, nil,
855
- nil, nil, nil, nil, nil, nil, 211, 197 ]
842
+ 69, 109, 50, 152, 57, 127, 84, 58, 112, 160,
843
+ 114, 59, 60, 61, 86, 52, 54, 55, 98, 102,
844
+ 103, 159, 106, 110, 175, 74, 74, 74, 74, 138,
845
+ 9, 1, 3, 180, 7, 43, 120, 160, 109, 109,
846
+ 195, 192, 121, 94, 119, 112, 40, 137, 118, 189,
847
+ 47, 200, 86, 92, 175, 156, 130, 131, 132, 107,
848
+ 135, 136, 88, 196, 111, 207, 111, 70, 72, 201,
849
+ 73, 77, 78, 79, 67, 147, 134, 178, 148, 149,
850
+ 93, 146, 124, 166, 179, 214, 185, 158, 208, 174,
851
+ 187, 209, 191, 193, 107, 107, 143, nil, nil, 186,
852
+ nil, 111, nil, 111, nil, nil, 194, nil, 166, nil,
853
+ 202, nil, nil, nil, 198, nil, nil, nil, 163, 174,
854
+ 198, nil, nil, nil, nil, nil, nil, nil, 216, nil,
855
+ nil, nil, nil, nil, nil, 213, 198, nil, nil, nil,
856
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
857
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
858
+ nil, 203, nil, nil, nil, nil, nil, nil, nil, nil,
859
+ 211, nil, 212, nil, nil, nil, nil, nil, nil, nil,
860
+ nil, nil, nil, nil, 218 ]
856
861
 
857
862
  racc_goto_check = [
858
- 35, 35, 35, 27, 40, 42, 26, 8, 32, 12,
859
- 31, 30, 21, 21, 21, 1, 7, 39, 16, 16,
860
- 16, 7, 45, 27, 45, 27, 27, 27, 27, 15,
861
- 5, 6, 15, 6, 9, 30, 15, 15, 15, 37,
862
- 34, 26, 35, 26, 42, 31, 42, 37, 39, 49,
863
- 10, 8, 32, 12, 21, 16, 31, 45, 27, 45,
864
- 27, 32, 38, 32, 11, 13, 34, 15, 38, 14,
865
- 27, 37, 27, 22, 32, 49, 23, 40, 28, 40,
866
- 26, 29, 33, 42, 38, 40, 40, 24, 24, 24,
867
- 24, 41, 43, 35, 44, 47, 48, 27, 50, 35,
868
- 51, 52, nil, 40, nil, 27, nil, 27, nil, nil,
869
- 35, nil, nil, nil, nil, nil, nil, 35, nil, 35,
870
- 40, nil, nil, nil, nil, 35, nil, nil, nil, nil,
871
- 35, 35, nil, nil, nil, nil, nil, nil, nil, nil,
872
- nil, nil, nil, nil, nil, nil, 35, 35 ]
863
+ 27, 20, 29, 33, 15, 40, 8, 15, 46, 39,
864
+ 46, 15, 15, 15, 12, 16, 16, 16, 22, 22,
865
+ 22, 50, 28, 43, 38, 29, 29, 29, 29, 32,
866
+ 7, 1, 6, 36, 6, 7, 5, 39, 20, 20,
867
+ 33, 36, 9, 15, 8, 46, 10, 46, 11, 50,
868
+ 13, 33, 12, 16, 38, 32, 22, 28, 28, 29,
869
+ 43, 43, 14, 37, 29, 36, 29, 24, 24, 37,
870
+ 25, 25, 25, 25, 23, 30, 31, 34, 41, 42,
871
+ 44, 45, 48, 20, 40, 37, 40, 49, 51, 20,
872
+ 52, 53, 40, 40, 29, 29, 54, nil, nil, 20,
873
+ nil, 29, nil, 29, nil, nil, 20, nil, 20, nil,
874
+ 40, nil, nil, nil, 20, nil, nil, nil, 27, 20,
875
+ 20, nil, nil, nil, nil, nil, nil, nil, 40, nil,
876
+ nil, nil, nil, nil, nil, 20, 20, nil, nil, nil,
877
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
878
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
879
+ nil, 27, nil, nil, nil, nil, nil, nil, nil, nil,
880
+ 27, nil, 27, nil, nil, nil, nil, nil, nil, nil,
881
+ nil, nil, nil, nil, 27 ]
873
882
 
874
883
  racc_goto_pointer = [
875
- nil, 15, nil, nil, nil, -59, 31, 13, -37, -55,
876
- 46, -23, -35, 53, 23, 12, 5, nil, nil, nil,
877
- nil, -46, 41, 43, 53, nil, -26, -9, -32, 11,
878
- -107, -131, -140, -82, -105, -58, nil, -126, -121, -140,
879
- -88, -19, -28, 40, -38, -57, nil, 5, -49, -96,
880
- -71, -98, -24 ]
884
+ nil, 31, nil, nil, nil, -48, 32, 27, -39, -42,
885
+ 42, -34, -31, 38, 15, -13, 2, nil, nil, nil,
886
+ -70, nil, -41, 42, 34, 35, nil, -32, -47, -10,
887
+ -59, -31, -86, -137, -88, nil, -133, -121, -135, -135,
888
+ -82, -56, -55, -48, 27, -48, -66, nil, -3, -57,
889
+ -123, -110, -80, -108, -26 ]
881
890
 
882
891
  racc_goto_default = [
883
- nil, nil, 2, 8, 88, nil, nil, nil, nil, nil,
884
- nil, nil, 10, nil, nil, 50, nil, 21, 22, 23,
885
- 100, nil, nil, nil, nil, 67, nil, 75, nil, nil,
886
- nil, nil, nil, 151, 152, 72, 129, nil, nil, 167,
887
- nil, 76, nil, nil, nil, 80, 90, nil, nil, nil,
888
- nil, nil, nil ]
892
+ nil, nil, 2, 8, 83, nil, nil, nil, nil, nil,
893
+ nil, nil, 10, nil, nil, 51, nil, 21, 22, 23,
894
+ 95, 97, nil, nil, nil, nil, 105, 71, nil, 99,
895
+ nil, nil, nil, nil, 153, 126, nil, nil, 168, 155,
896
+ nil, 100, nil, nil, nil, nil, 75, 85, nil, nil,
897
+ nil, nil, nil, nil, nil ]
889
898
 
890
899
  racc_reduce_table = [
891
900
  0, 0, :racc_error,
892
- 0, 61, :_reduce_1,
893
- 2, 61, :_reduce_2,
894
- 0, 62, :_reduce_3,
895
- 2, 62, :_reduce_4,
896
- 1, 63, :_reduce_5,
897
- 2, 63, :_reduce_6,
898
- 0, 64, :_reduce_none,
899
- 1, 64, :_reduce_none,
900
- 5, 56, :_reduce_none,
901
- 0, 65, :_reduce_10,
902
- 0, 66, :_reduce_11,
903
- 5, 57, :_reduce_12,
904
- 2, 57, :_reduce_none,
905
- 1, 71, :_reduce_14,
906
- 2, 71, :_reduce_15,
907
- 1, 58, :_reduce_none,
908
- 2, 58, :_reduce_17,
909
- 3, 58, :_reduce_none,
910
- 2, 58, :_reduce_none,
911
- 2, 58, :_reduce_20,
912
- 2, 58, :_reduce_21,
913
- 3, 58, :_reduce_22,
914
- 2, 58, :_reduce_23,
915
- 1, 58, :_reduce_24,
916
- 1, 58, :_reduce_25,
917
- 2, 58, :_reduce_none,
918
- 1, 76, :_reduce_27,
919
- 2, 76, :_reduce_28,
920
- 2, 67, :_reduce_29,
921
- 1, 67, :_reduce_none,
922
- 1, 67, :_reduce_none,
923
- 1, 67, :_reduce_none,
924
- 3, 67, :_reduce_33,
925
- 3, 67, :_reduce_34,
926
- 3, 67, :_reduce_35,
927
- 2, 67, :_reduce_36,
928
- 2, 67, :_reduce_37,
929
- 2, 67, :_reduce_38,
930
- 2, 67, :_reduce_39,
931
- 2, 67, :_reduce_40,
932
- 2, 72, :_reduce_none,
933
- 2, 72, :_reduce_42,
934
- 2, 72, :_reduce_43,
935
- 2, 72, :_reduce_44,
936
- 2, 72, :_reduce_45,
937
- 2, 72, :_reduce_46,
938
- 1, 81, :_reduce_47,
939
- 2, 81, :_reduce_48,
940
- 1, 77, :_reduce_49,
941
- 2, 77, :_reduce_50,
942
- 3, 77, :_reduce_51,
943
- 0, 84, :_reduce_none,
944
- 1, 84, :_reduce_none,
945
- 3, 80, :_reduce_54,
946
- 0, 87, :_reduce_none,
947
- 1, 87, :_reduce_none,
948
- 8, 73, :_reduce_57,
949
- 5, 74, :_reduce_58,
950
- 8, 74, :_reduce_59,
951
- 1, 85, :_reduce_60,
952
- 3, 85, :_reduce_61,
953
- 1, 86, :_reduce_62,
954
- 3, 86, :_reduce_63,
955
- 0, 95, :_reduce_none,
956
- 1, 95, :_reduce_none,
957
- 1, 88, :_reduce_66,
958
- 3, 88, :_reduce_67,
959
- 3, 88, :_reduce_68,
960
- 6, 88, :_reduce_69,
961
- 3, 88, :_reduce_70,
962
- 3, 88, :_reduce_71,
963
- 0, 83, :_reduce_none,
964
- 1, 83, :_reduce_73,
965
- 1, 97, :_reduce_74,
966
- 2, 97, :_reduce_75,
967
- 1, 78, :_reduce_76,
968
- 2, 78, :_reduce_77,
969
- 3, 78, :_reduce_78,
970
- 1, 90, :_reduce_none,
971
- 1, 90, :_reduce_none,
972
- 0, 98, :_reduce_81,
973
- 0, 99, :_reduce_82,
974
- 5, 70, :_reduce_83,
975
- 1, 100, :_reduce_84,
976
- 2, 100, :_reduce_85,
977
- 1, 79, :_reduce_86,
978
- 2, 79, :_reduce_87,
979
- 3, 79, :_reduce_88,
980
- 1, 82, :_reduce_89,
981
- 1, 82, :_reduce_90,
982
- 0, 102, :_reduce_none,
983
- 1, 102, :_reduce_none,
984
- 2, 59, :_reduce_none,
901
+ 0, 63, :_reduce_1,
902
+ 2, 63, :_reduce_2,
903
+ 0, 64, :_reduce_3,
904
+ 2, 64, :_reduce_4,
905
+ 1, 65, :_reduce_5,
906
+ 2, 65, :_reduce_6,
907
+ 0, 66, :_reduce_none,
908
+ 1, 66, :_reduce_none,
909
+ 5, 58, :_reduce_none,
910
+ 0, 67, :_reduce_10,
911
+ 0, 68, :_reduce_11,
912
+ 5, 59, :_reduce_12,
985
913
  2, 59, :_reduce_none,
986
- 4, 101, :_reduce_95,
987
- 1, 103, :_reduce_96,
988
- 3, 103, :_reduce_97,
989
- 1, 104, :_reduce_98,
990
- 3, 104, :_reduce_99,
991
- 5, 104, :_reduce_100,
992
- 7, 104, :_reduce_101,
993
- 4, 104, :_reduce_102,
994
- 3, 104, :_reduce_103,
995
- 1, 92, :_reduce_104,
996
- 1, 92, :_reduce_105,
997
- 1, 92, :_reduce_106,
998
- 1, 93, :_reduce_107,
999
- 3, 93, :_reduce_108,
1000
- 2, 93, :_reduce_109,
1001
- 4, 93, :_reduce_110,
1002
- 0, 105, :_reduce_111,
1003
- 0, 106, :_reduce_112,
1004
- 5, 94, :_reduce_113,
1005
- 3, 91, :_reduce_114,
1006
- 0, 107, :_reduce_115,
1007
- 3, 60, :_reduce_116,
1008
- 1, 68, :_reduce_none,
1009
- 0, 69, :_reduce_none,
914
+ 1, 73, :_reduce_14,
915
+ 2, 73, :_reduce_15,
916
+ 1, 60, :_reduce_none,
917
+ 2, 60, :_reduce_17,
918
+ 3, 60, :_reduce_18,
919
+ 2, 60, :_reduce_none,
920
+ 2, 60, :_reduce_20,
921
+ 2, 60, :_reduce_21,
922
+ 3, 60, :_reduce_22,
923
+ 2, 60, :_reduce_23,
924
+ 1, 60, :_reduce_24,
925
+ 1, 60, :_reduce_25,
926
+ 2, 60, :_reduce_none,
927
+ 1, 78, :_reduce_27,
928
+ 1, 78, :_reduce_28,
929
+ 1, 79, :_reduce_29,
930
+ 2, 79, :_reduce_30,
931
+ 2, 69, :_reduce_31,
1010
932
  1, 69, :_reduce_none,
1011
933
  1, 69, :_reduce_none,
1012
934
  1, 69, :_reduce_none,
1013
- 1, 75, :_reduce_none,
1014
- 1, 75, :_reduce_none,
1015
- 0, 89, :_reduce_none,
1016
- 1, 89, :_reduce_none,
1017
- 1, 96, :_reduce_126 ]
1018
-
1019
- racc_reduce_n = 127
1020
-
1021
- racc_shift_n = 217
935
+ 3, 69, :_reduce_35,
936
+ 3, 69, :_reduce_36,
937
+ 3, 69, :_reduce_37,
938
+ 2, 69, :_reduce_38,
939
+ 2, 69, :_reduce_39,
940
+ 2, 69, :_reduce_40,
941
+ 2, 69, :_reduce_41,
942
+ 2, 69, :_reduce_42,
943
+ 2, 74, :_reduce_none,
944
+ 2, 74, :_reduce_44,
945
+ 2, 74, :_reduce_45,
946
+ 2, 74, :_reduce_46,
947
+ 2, 74, :_reduce_47,
948
+ 2, 74, :_reduce_48,
949
+ 2, 74, :_reduce_49,
950
+ 0, 84, :_reduce_none,
951
+ 1, 84, :_reduce_none,
952
+ 1, 85, :_reduce_52,
953
+ 2, 85, :_reduce_53,
954
+ 2, 80, :_reduce_54,
955
+ 3, 80, :_reduce_55,
956
+ 0, 88, :_reduce_none,
957
+ 1, 88, :_reduce_none,
958
+ 3, 83, :_reduce_58,
959
+ 8, 75, :_reduce_59,
960
+ 5, 76, :_reduce_60,
961
+ 8, 76, :_reduce_61,
962
+ 1, 89, :_reduce_62,
963
+ 3, 89, :_reduce_63,
964
+ 1, 90, :_reduce_64,
965
+ 3, 90, :_reduce_65,
966
+ 0, 96, :_reduce_none,
967
+ 1, 96, :_reduce_none,
968
+ 0, 97, :_reduce_none,
969
+ 1, 97, :_reduce_none,
970
+ 1, 91, :_reduce_70,
971
+ 3, 91, :_reduce_71,
972
+ 3, 91, :_reduce_72,
973
+ 6, 91, :_reduce_73,
974
+ 3, 91, :_reduce_74,
975
+ 3, 91, :_reduce_75,
976
+ 0, 99, :_reduce_none,
977
+ 1, 99, :_reduce_none,
978
+ 1, 87, :_reduce_78,
979
+ 1, 100, :_reduce_79,
980
+ 2, 100, :_reduce_80,
981
+ 2, 81, :_reduce_81,
982
+ 3, 81, :_reduce_82,
983
+ 1, 77, :_reduce_none,
984
+ 1, 77, :_reduce_none,
985
+ 0, 101, :_reduce_85,
986
+ 0, 102, :_reduce_86,
987
+ 5, 72, :_reduce_87,
988
+ 1, 103, :_reduce_88,
989
+ 2, 103, :_reduce_89,
990
+ 1, 82, :_reduce_90,
991
+ 2, 82, :_reduce_91,
992
+ 3, 82, :_reduce_92,
993
+ 1, 86, :_reduce_93,
994
+ 1, 86, :_reduce_94,
995
+ 0, 105, :_reduce_none,
996
+ 1, 105, :_reduce_none,
997
+ 2, 61, :_reduce_none,
998
+ 2, 61, :_reduce_none,
999
+ 4, 104, :_reduce_99,
1000
+ 1, 106, :_reduce_100,
1001
+ 3, 106, :_reduce_101,
1002
+ 1, 107, :_reduce_102,
1003
+ 3, 107, :_reduce_103,
1004
+ 5, 107, :_reduce_104,
1005
+ 7, 107, :_reduce_105,
1006
+ 4, 107, :_reduce_106,
1007
+ 3, 107, :_reduce_107,
1008
+ 1, 93, :_reduce_108,
1009
+ 1, 93, :_reduce_109,
1010
+ 1, 93, :_reduce_110,
1011
+ 0, 108, :_reduce_none,
1012
+ 1, 108, :_reduce_none,
1013
+ 2, 94, :_reduce_113,
1014
+ 3, 94, :_reduce_114,
1015
+ 4, 94, :_reduce_115,
1016
+ 0, 109, :_reduce_116,
1017
+ 0, 110, :_reduce_117,
1018
+ 5, 95, :_reduce_118,
1019
+ 3, 92, :_reduce_119,
1020
+ 0, 111, :_reduce_120,
1021
+ 3, 62, :_reduce_121,
1022
+ 1, 70, :_reduce_none,
1023
+ 0, 71, :_reduce_none,
1024
+ 1, 71, :_reduce_none,
1025
+ 1, 71, :_reduce_none,
1026
+ 1, 71, :_reduce_none,
1027
+ 1, 98, :_reduce_127 ]
1028
+
1029
+ racc_reduce_n = 128
1030
+
1031
+ racc_shift_n = 219
1022
1032
 
1023
1033
  racc_token_table = {
1024
1034
  false => 0,
@@ -1053,31 +1063,33 @@ racc_token_table = {
1053
1063
  "%after-reduce" => 29,
1054
1064
  "%after-shift-error-token" => 30,
1055
1065
  "%after-pop-stack" => 31,
1056
- "%token" => 32,
1057
- "%type" => 33,
1058
- "%left" => 34,
1059
- "%right" => 35,
1060
- "%precedence" => 36,
1061
- "%nonassoc" => 37,
1062
- "%rule" => 38,
1063
- "(" => 39,
1064
- ")" => 40,
1065
- ":" => 41,
1066
- "%inline" => 42,
1067
- "," => 43,
1068
- "|" => 44,
1069
- "%prec" => 45,
1070
- "{" => 46,
1071
- "}" => 47,
1072
- "?" => 48,
1073
- "+" => 49,
1074
- "*" => 50,
1075
- "[" => 51,
1076
- "]" => 52,
1077
- "{...}" => 53,
1078
- "%empty" => 54 }
1079
-
1080
- racc_nt_base = 55
1066
+ "-temp-group" => 32,
1067
+ "%token" => 33,
1068
+ "%type" => 34,
1069
+ "%nterm" => 35,
1070
+ "%left" => 36,
1071
+ "%right" => 37,
1072
+ "%precedence" => 38,
1073
+ "%nonassoc" => 39,
1074
+ "%rule" => 40,
1075
+ "(" => 41,
1076
+ ")" => 42,
1077
+ ":" => 43,
1078
+ "%inline" => 44,
1079
+ "," => 45,
1080
+ "|" => 46,
1081
+ "%empty" => 47,
1082
+ "%prec" => 48,
1083
+ "{" => 49,
1084
+ "}" => 50,
1085
+ "?" => 51,
1086
+ "+" => 52,
1087
+ "*" => 53,
1088
+ "[" => 54,
1089
+ "]" => 55,
1090
+ "{...}" => 56 }
1091
+
1092
+ racc_nt_base = 57
1081
1093
 
1082
1094
  racc_use_result_var = true
1083
1095
 
@@ -1131,8 +1143,10 @@ Racc_token_to_s_table = [
1131
1143
  "\"%after-reduce\"",
1132
1144
  "\"%after-shift-error-token\"",
1133
1145
  "\"%after-pop-stack\"",
1146
+ "\"-temp-group\"",
1134
1147
  "\"%token\"",
1135
1148
  "\"%type\"",
1149
+ "\"%nterm\"",
1136
1150
  "\"%left\"",
1137
1151
  "\"%right\"",
1138
1152
  "\"%precedence\"",
@@ -1144,6 +1158,7 @@ Racc_token_to_s_table = [
1144
1158
  "\"%inline\"",
1145
1159
  "\",\"",
1146
1160
  "\"|\"",
1161
+ "\"%empty\"",
1147
1162
  "\"%prec\"",
1148
1163
  "\"{\"",
1149
1164
  "\"}\"",
@@ -1153,7 +1168,6 @@ Racc_token_to_s_table = [
1153
1168
  "\"[\"",
1154
1169
  "\"]\"",
1155
1170
  "\"{...}\"",
1156
- "\"%empty\"",
1157
1171
  "$start",
1158
1172
  "input",
1159
1173
  "prologue_declaration",
@@ -1174,28 +1188,29 @@ Racc_token_to_s_table = [
1174
1188
  "symbol_declaration",
1175
1189
  "rule_declaration",
1176
1190
  "inline_declaration",
1177
- "generic_symbol",
1178
- "\"-many1@generic_symbol\"",
1191
+ "symbol",
1192
+ "\"-group@symbol|TAG\"",
1193
+ "\"-many1@-group@symbol|TAG\"",
1179
1194
  "token_declarations",
1180
1195
  "symbol_declarations",
1181
1196
  "token_declarations_for_precedence",
1182
1197
  "token_declaration",
1198
+ "\"-option@TAG\"",
1183
1199
  "\"-many1@token_declaration\"",
1184
1200
  "id",
1185
1201
  "alias",
1186
1202
  "\"-option@INTEGER\"",
1187
1203
  "rule_args",
1188
1204
  "rule_rhs_list",
1189
- "\"-option@TAG\"",
1190
1205
  "rule_rhs",
1191
- "empty",
1192
- "symbol",
1193
1206
  "named_ref",
1194
1207
  "parameterizing_suffix",
1195
1208
  "parameterizing_args",
1196
1209
  "midrule_action",
1210
+ "\"-option@%empty\"",
1197
1211
  "\"-option@named_ref\"",
1198
1212
  "string_as_id",
1213
+ "\"-option@string_as_id\"",
1199
1214
  "\"-many1@symbol\"",
1200
1215
  "@3",
1201
1216
  "@4",
@@ -1204,6 +1219,7 @@ Racc_token_to_s_table = [
1204
1219
  "\"-option@;\"",
1205
1220
  "rhs_list",
1206
1221
  "rhs",
1222
+ "\"-option@parameterizing_suffix\"",
1207
1223
  "@5",
1208
1224
  "@6",
1209
1225
  "@7" ]
@@ -1313,7 +1329,12 @@ module_eval(<<'.,.,', 'parser.y', 26)
1313
1329
  end
1314
1330
  .,.,
1315
1331
 
1316
- # reduce 18 omitted
1332
+ module_eval(<<'.,.,', 'parser.y', 27)
1333
+ def _reduce_18(val, _values, result)
1334
+ @grammar.define[val[1].s_value] = val[2]&.s_value
1335
+ result
1336
+ end
1337
+ .,.,
1317
1338
 
1318
1339
  # reduce 19 omitted
1319
1340
 
@@ -1371,20 +1392,34 @@ module_eval(<<'.,.,', 'parser.y', 50)
1371
1392
 
1372
1393
  module_eval(<<'.,.,', 'parser.y', 109)
1373
1394
  def _reduce_27(val, _values, result)
1374
- result = val[1] ? val[1].unshift(val[0]) : val
1395
+ result = val
1375
1396
  result
1376
1397
  end
1377
1398
  .,.,
1378
1399
 
1379
1400
  module_eval(<<'.,.,', 'parser.y', 109)
1380
1401
  def _reduce_28(val, _values, result)
1402
+ result = val
1403
+ result
1404
+ end
1405
+ .,.,
1406
+
1407
+ module_eval(<<'.,.,', 'parser.y', 109)
1408
+ def _reduce_29(val, _values, result)
1409
+ result = val[1] ? val[1].unshift(val[0]) : val
1410
+ result
1411
+ end
1412
+ .,.,
1413
+
1414
+ module_eval(<<'.,.,', 'parser.y', 109)
1415
+ def _reduce_30(val, _values, result)
1381
1416
  result = val[1] ? val[1].unshift(val[0]) : val
1382
1417
  result
1383
1418
  end
1384
1419
  .,.,
1385
1420
 
1386
1421
  module_eval(<<'.,.,', 'parser.y', 55)
1387
- def _reduce_29(val, _values, result)
1422
+ def _reduce_31(val, _values, result)
1388
1423
  @grammar.set_union(
1389
1424
  Grammar::Code::NoReferenceCode.new(type: :union, token_code: val[1]),
1390
1425
  val[1].line
@@ -1394,16 +1429,16 @@ module_eval(<<'.,.,', 'parser.y', 55)
1394
1429
  end
1395
1430
  .,.,
1396
1431
 
1397
- # reduce 30 omitted
1432
+ # reduce 32 omitted
1398
1433
 
1399
- # reduce 31 omitted
1434
+ # reduce 33 omitted
1400
1435
 
1401
- # reduce 32 omitted
1436
+ # reduce 34 omitted
1402
1437
 
1403
1438
  module_eval(<<'.,.,', 'parser.y', 65)
1404
- def _reduce_33(val, _values, result)
1439
+ def _reduce_35(val, _values, result)
1405
1440
  @grammar.add_destructor(
1406
- ident_or_tags: val[2],
1441
+ ident_or_tags: val[2].flatten,
1407
1442
  token_code: val[1],
1408
1443
  lineno: val[1].line
1409
1444
  )
@@ -1413,9 +1448,9 @@ module_eval(<<'.,.,', 'parser.y', 65)
1413
1448
  .,.,
1414
1449
 
1415
1450
  module_eval(<<'.,.,', 'parser.y', 73)
1416
- def _reduce_34(val, _values, result)
1451
+ def _reduce_36(val, _values, result)
1417
1452
  @grammar.add_printer(
1418
- ident_or_tags: val[2],
1453
+ ident_or_tags: val[2].flatten,
1419
1454
  token_code: val[1],
1420
1455
  lineno: val[1].line
1421
1456
  )
@@ -1425,9 +1460,9 @@ module_eval(<<'.,.,', 'parser.y', 73)
1425
1460
  .,.,
1426
1461
 
1427
1462
  module_eval(<<'.,.,', 'parser.y', 81)
1428
- def _reduce_35(val, _values, result)
1463
+ def _reduce_37(val, _values, result)
1429
1464
  @grammar.add_error_token(
1430
- ident_or_tags: val[2],
1465
+ ident_or_tags: val[2].flatten,
1431
1466
  token_code: val[1],
1432
1467
  lineno: val[1].line
1433
1468
  )
@@ -1437,7 +1472,7 @@ module_eval(<<'.,.,', 'parser.y', 81)
1437
1472
  .,.,
1438
1473
 
1439
1474
  module_eval(<<'.,.,', 'parser.y', 89)
1440
- def _reduce_36(val, _values, result)
1475
+ def _reduce_38(val, _values, result)
1441
1476
  @grammar.after_shift = val[1]
1442
1477
 
1443
1478
  result
@@ -1445,7 +1480,7 @@ module_eval(<<'.,.,', 'parser.y', 89)
1445
1480
  .,.,
1446
1481
 
1447
1482
  module_eval(<<'.,.,', 'parser.y', 93)
1448
- def _reduce_37(val, _values, result)
1483
+ def _reduce_39(val, _values, result)
1449
1484
  @grammar.before_reduce = val[1]
1450
1485
 
1451
1486
  result
@@ -1453,7 +1488,7 @@ module_eval(<<'.,.,', 'parser.y', 93)
1453
1488
  .,.,
1454
1489
 
1455
1490
  module_eval(<<'.,.,', 'parser.y', 97)
1456
- def _reduce_38(val, _values, result)
1491
+ def _reduce_40(val, _values, result)
1457
1492
  @grammar.after_reduce = val[1]
1458
1493
 
1459
1494
  result
@@ -1461,7 +1496,7 @@ module_eval(<<'.,.,', 'parser.y', 97)
1461
1496
  .,.,
1462
1497
 
1463
1498
  module_eval(<<'.,.,', 'parser.y', 101)
1464
- def _reduce_39(val, _values, result)
1499
+ def _reduce_41(val, _values, result)
1465
1500
  @grammar.after_shift_error_token = val[1]
1466
1501
 
1467
1502
  result
@@ -1469,17 +1504,17 @@ module_eval(<<'.,.,', 'parser.y', 101)
1469
1504
  .,.,
1470
1505
 
1471
1506
  module_eval(<<'.,.,', 'parser.y', 105)
1472
- def _reduce_40(val, _values, result)
1507
+ def _reduce_42(val, _values, result)
1473
1508
  @grammar.after_pop_stack = val[1]
1474
1509
 
1475
1510
  result
1476
1511
  end
1477
1512
  .,.,
1478
1513
 
1479
- # reduce 41 omitted
1514
+ # reduce 43 omitted
1480
1515
 
1481
1516
  module_eval(<<'.,.,', 'parser.y', 111)
1482
- def _reduce_42(val, _values, result)
1517
+ def _reduce_44(val, _values, result)
1483
1518
  val[1].each {|hash|
1484
1519
  hash[:tokens].each {|id|
1485
1520
  @grammar.add_type(id: id, tag: hash[:tag])
@@ -1491,7 +1526,23 @@ module_eval(<<'.,.,', 'parser.y', 111)
1491
1526
  .,.,
1492
1527
 
1493
1528
  module_eval(<<'.,.,', 'parser.y', 119)
1494
- def _reduce_43(val, _values, result)
1529
+ def _reduce_45(val, _values, result)
1530
+ val[1].each {|hash|
1531
+ hash[:tokens].each {|id|
1532
+ if @grammar.find_term_by_s_value(id.s_value)
1533
+ on_action_error("symbol #{id.s_value} redeclared as a nonterminal", id)
1534
+ else
1535
+ @grammar.add_type(id: id, tag: hash[:tag])
1536
+ end
1537
+ }
1538
+ }
1539
+
1540
+ result
1541
+ end
1542
+ .,.,
1543
+
1544
+ module_eval(<<'.,.,', 'parser.y', 131)
1545
+ def _reduce_46(val, _values, result)
1495
1546
  val[1].each {|hash|
1496
1547
  hash[:tokens].each {|id|
1497
1548
  sym = @grammar.add_term(id: id)
@@ -1504,8 +1555,8 @@ module_eval(<<'.,.,', 'parser.y', 119)
1504
1555
  end
1505
1556
  .,.,
1506
1557
 
1507
- module_eval(<<'.,.,', 'parser.y', 129)
1508
- def _reduce_44(val, _values, result)
1558
+ module_eval(<<'.,.,', 'parser.y', 141)
1559
+ def _reduce_47(val, _values, result)
1509
1560
  val[1].each {|hash|
1510
1561
  hash[:tokens].each {|id|
1511
1562
  sym = @grammar.add_term(id: id)
@@ -1518,8 +1569,8 @@ module_eval(<<'.,.,', 'parser.y', 129)
1518
1569
  end
1519
1570
  .,.,
1520
1571
 
1521
- module_eval(<<'.,.,', 'parser.y', 139)
1522
- def _reduce_45(val, _values, result)
1572
+ module_eval(<<'.,.,', 'parser.y', 151)
1573
+ def _reduce_48(val, _values, result)
1523
1574
  val[1].each {|hash|
1524
1575
  hash[:tokens].each {|id|
1525
1576
  sym = @grammar.add_term(id: id)
@@ -1532,8 +1583,8 @@ module_eval(<<'.,.,', 'parser.y', 139)
1532
1583
  end
1533
1584
  .,.,
1534
1585
 
1535
- module_eval(<<'.,.,', 'parser.y', 149)
1536
- def _reduce_46(val, _values, result)
1586
+ module_eval(<<'.,.,', 'parser.y', 161)
1587
+ def _reduce_49(val, _values, result)
1537
1588
  val[1].each {|hash|
1538
1589
  hash[:tokens].each {|id|
1539
1590
  sym = @grammar.add_term(id: id)
@@ -1546,32 +1597,26 @@ module_eval(<<'.,.,', 'parser.y', 149)
1546
1597
  end
1547
1598
  .,.,
1548
1599
 
1549
- module_eval(<<'.,.,', 'parser.y', 178)
1550
- def _reduce_47(val, _values, result)
1551
- result = val[1] ? val[1].unshift(val[0]) : val
1552
- result
1553
- end
1554
- .,.,
1600
+ # reduce 50 omitted
1555
1601
 
1556
- module_eval(<<'.,.,', 'parser.y', 178)
1557
- def _reduce_48(val, _values, result)
1602
+ # reduce 51 omitted
1603
+
1604
+ module_eval(<<'.,.,', 'parser.y', 184)
1605
+ def _reduce_52(val, _values, result)
1558
1606
  result = val[1] ? val[1].unshift(val[0]) : val
1559
1607
  result
1560
1608
  end
1561
1609
  .,.,
1562
1610
 
1563
- module_eval(<<'.,.,', 'parser.y', 160)
1564
- def _reduce_49(val, _values, result)
1565
- val[0].each {|token_declaration|
1566
- @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: nil, replace: true)
1567
- }
1568
-
1611
+ module_eval(<<'.,.,', 'parser.y', 184)
1612
+ def _reduce_53(val, _values, result)
1613
+ result = val[1] ? val[1].unshift(val[0]) : val
1569
1614
  result
1570
1615
  end
1571
1616
  .,.,
1572
1617
 
1573
- module_eval(<<'.,.,', 'parser.y', 166)
1574
- def _reduce_50(val, _values, result)
1618
+ module_eval(<<'.,.,', 'parser.y', 172)
1619
+ def _reduce_54(val, _values, result)
1575
1620
  val[1].each {|token_declaration|
1576
1621
  @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[0], replace: true)
1577
1622
  }
@@ -1580,8 +1625,8 @@ module_eval(<<'.,.,', 'parser.y', 166)
1580
1625
  end
1581
1626
  .,.,
1582
1627
 
1583
- module_eval(<<'.,.,', 'parser.y', 172)
1584
- def _reduce_51(val, _values, result)
1628
+ module_eval(<<'.,.,', 'parser.y', 178)
1629
+ def _reduce_55(val, _values, result)
1585
1630
  val[2].each {|token_declaration|
1586
1631
  @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[1], replace: true)
1587
1632
  }
@@ -1590,23 +1635,19 @@ module_eval(<<'.,.,', 'parser.y', 172)
1590
1635
  end
1591
1636
  .,.,
1592
1637
 
1593
- # reduce 52 omitted
1638
+ # reduce 56 omitted
1594
1639
 
1595
- # reduce 53 omitted
1640
+ # reduce 57 omitted
1596
1641
 
1597
- module_eval(<<'.,.,', 'parser.y', 177)
1598
- def _reduce_54(val, _values, result)
1642
+ module_eval(<<'.,.,', 'parser.y', 183)
1643
+ def _reduce_58(val, _values, result)
1599
1644
  result = val
1600
1645
  result
1601
1646
  end
1602
1647
  .,.,
1603
1648
 
1604
- # reduce 55 omitted
1605
-
1606
- # reduce 56 omitted
1607
-
1608
- module_eval(<<'.,.,', 'parser.y', 181)
1609
- def _reduce_57(val, _values, result)
1649
+ module_eval(<<'.,.,', 'parser.y', 187)
1650
+ def _reduce_59(val, _values, result)
1610
1651
  rule = Grammar::ParameterizingRule::Rule.new(val[1].s_value, val[3], val[7], tag: val[5])
1611
1652
  @grammar.add_parameterizing_rule(rule)
1612
1653
 
@@ -1614,8 +1655,8 @@ module_eval(<<'.,.,', 'parser.y', 181)
1614
1655
  end
1615
1656
  .,.,
1616
1657
 
1617
- module_eval(<<'.,.,', 'parser.y', 187)
1618
- def _reduce_58(val, _values, result)
1658
+ module_eval(<<'.,.,', 'parser.y', 193)
1659
+ def _reduce_60(val, _values, result)
1619
1660
  rule = Grammar::ParameterizingRule::Rule.new(val[2].s_value, [], val[4], is_inline: true)
1620
1661
  @grammar.add_parameterizing_rule(rule)
1621
1662
 
@@ -1623,8 +1664,8 @@ module_eval(<<'.,.,', 'parser.y', 187)
1623
1664
  end
1624
1665
  .,.,
1625
1666
 
1626
- module_eval(<<'.,.,', 'parser.y', 192)
1627
- def _reduce_59(val, _values, result)
1667
+ module_eval(<<'.,.,', 'parser.y', 198)
1668
+ def _reduce_61(val, _values, result)
1628
1669
  rule = Grammar::ParameterizingRule::Rule.new(val[2].s_value, val[4], val[7], is_inline: true)
1629
1670
  @grammar.add_parameterizing_rule(rule)
1630
1671
 
@@ -1632,22 +1673,22 @@ module_eval(<<'.,.,', 'parser.y', 192)
1632
1673
  end
1633
1674
  .,.,
1634
1675
 
1635
- module_eval(<<'.,.,', 'parser.y', 196)
1636
- def _reduce_60(val, _values, result)
1676
+ module_eval(<<'.,.,', 'parser.y', 202)
1677
+ def _reduce_62(val, _values, result)
1637
1678
  result = [val[0]]
1638
1679
  result
1639
1680
  end
1640
1681
  .,.,
1641
1682
 
1642
- module_eval(<<'.,.,', 'parser.y', 197)
1643
- def _reduce_61(val, _values, result)
1683
+ module_eval(<<'.,.,', 'parser.y', 203)
1684
+ def _reduce_63(val, _values, result)
1644
1685
  result = val[0].append(val[2])
1645
1686
  result
1646
1687
  end
1647
1688
  .,.,
1648
1689
 
1649
- module_eval(<<'.,.,', 'parser.y', 201)
1650
- def _reduce_62(val, _values, result)
1690
+ module_eval(<<'.,.,', 'parser.y', 207)
1691
+ def _reduce_64(val, _values, result)
1651
1692
  builder = val[0]
1652
1693
  result = [builder]
1653
1694
 
@@ -1655,8 +1696,8 @@ module_eval(<<'.,.,', 'parser.y', 201)
1655
1696
  end
1656
1697
  .,.,
1657
1698
 
1658
- module_eval(<<'.,.,', 'parser.y', 206)
1659
- def _reduce_63(val, _values, result)
1699
+ module_eval(<<'.,.,', 'parser.y', 212)
1700
+ def _reduce_65(val, _values, result)
1660
1701
  builder = val[2]
1661
1702
  result = val[0].append(builder)
1662
1703
 
@@ -1664,12 +1705,16 @@ module_eval(<<'.,.,', 'parser.y', 206)
1664
1705
  end
1665
1706
  .,.,
1666
1707
 
1667
- # reduce 64 omitted
1708
+ # reduce 66 omitted
1668
1709
 
1669
- # reduce 65 omitted
1710
+ # reduce 67 omitted
1670
1711
 
1671
- module_eval(<<'.,.,', 'parser.y', 212)
1672
- def _reduce_66(val, _values, result)
1712
+ # reduce 68 omitted
1713
+
1714
+ # reduce 69 omitted
1715
+
1716
+ module_eval(<<'.,.,', 'parser.y', 218)
1717
+ def _reduce_70(val, _values, result)
1673
1718
  reset_precs
1674
1719
  result = Grammar::ParameterizingRule::Rhs.new
1675
1720
 
@@ -1677,8 +1722,8 @@ module_eval(<<'.,.,', 'parser.y', 212)
1677
1722
  end
1678
1723
  .,.,
1679
1724
 
1680
- module_eval(<<'.,.,', 'parser.y', 217)
1681
- def _reduce_67(val, _values, result)
1725
+ module_eval(<<'.,.,', 'parser.y', 223)
1726
+ def _reduce_71(val, _values, result)
1682
1727
  token = val[1]
1683
1728
  token.alias_name = val[2]
1684
1729
  builder = val[0]
@@ -1689,8 +1734,8 @@ module_eval(<<'.,.,', 'parser.y', 217)
1689
1734
  end
1690
1735
  .,.,
1691
1736
 
1692
- module_eval(<<'.,.,', 'parser.y', 225)
1693
- def _reduce_68(val, _values, result)
1737
+ module_eval(<<'.,.,', 'parser.y', 231)
1738
+ def _reduce_72(val, _values, result)
1694
1739
  builder = val[0]
1695
1740
  builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]])
1696
1741
  result = builder
@@ -1699,8 +1744,8 @@ module_eval(<<'.,.,', 'parser.y', 225)
1699
1744
  end
1700
1745
  .,.,
1701
1746
 
1702
- module_eval(<<'.,.,', 'parser.y', 231)
1703
- def _reduce_69(val, _values, result)
1747
+ module_eval(<<'.,.,', 'parser.y', 237)
1748
+ def _reduce_73(val, _values, result)
1704
1749
  builder = val[0]
1705
1750
  builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5])
1706
1751
  result = builder
@@ -1709,8 +1754,8 @@ module_eval(<<'.,.,', 'parser.y', 231)
1709
1754
  end
1710
1755
  .,.,
1711
1756
 
1712
- module_eval(<<'.,.,', 'parser.y', 237)
1713
- def _reduce_70(val, _values, result)
1757
+ module_eval(<<'.,.,', 'parser.y', 243)
1758
+ def _reduce_74(val, _values, result)
1714
1759
  user_code = val[1]
1715
1760
  user_code.alias_name = val[2]
1716
1761
  builder = val[0]
@@ -1721,8 +1766,8 @@ module_eval(<<'.,.,', 'parser.y', 237)
1721
1766
  end
1722
1767
  .,.,
1723
1768
 
1724
- module_eval(<<'.,.,', 'parser.y', 245)
1725
- def _reduce_71(val, _values, result)
1769
+ module_eval(<<'.,.,', 'parser.y', 251)
1770
+ def _reduce_75(val, _values, result)
1726
1771
  sym = @grammar.find_symbol_by_id!(val[2])
1727
1772
  @prec_seen = true
1728
1773
  builder = val[0]
@@ -1733,137 +1778,137 @@ module_eval(<<'.,.,', 'parser.y', 245)
1733
1778
  end
1734
1779
  .,.,
1735
1780
 
1736
- # reduce 72 omitted
1781
+ # reduce 76 omitted
1737
1782
 
1738
- module_eval(<<'.,.,', 'parser.y', 253)
1739
- def _reduce_73(val, _values, result)
1740
- result = val[0].s_value
1783
+ # reduce 77 omitted
1784
+
1785
+ module_eval(<<'.,.,', 'parser.y', 258)
1786
+ def _reduce_78(val, _values, result)
1787
+ result = val[0].s_value if val[0]
1741
1788
  result
1742
1789
  end
1743
1790
  .,.,
1744
1791
 
1745
- module_eval(<<'.,.,', 'parser.y', 260)
1746
- def _reduce_74(val, _values, result)
1792
+ module_eval(<<'.,.,', 'parser.y', 271)
1793
+ def _reduce_79(val, _values, result)
1747
1794
  result = val[1] ? val[1].unshift(val[0]) : val
1748
1795
  result
1749
1796
  end
1750
1797
  .,.,
1751
1798
 
1752
- module_eval(<<'.,.,', 'parser.y', 260)
1753
- def _reduce_75(val, _values, result)
1799
+ module_eval(<<'.,.,', 'parser.y', 271)
1800
+ def _reduce_80(val, _values, result)
1754
1801
  result = val[1] ? val[1].unshift(val[0]) : val
1755
1802
  result
1756
1803
  end
1757
1804
  .,.,
1758
1805
 
1759
- module_eval(<<'.,.,', 'parser.y', 255)
1760
- def _reduce_76(val, _values, result)
1761
- result = [{tag: nil, tokens: val[0]}]
1762
- result
1763
- end
1764
- .,.,
1806
+ module_eval(<<'.,.,', 'parser.y', 262)
1807
+ def _reduce_81(val, _values, result)
1808
+ result = if val[0]
1809
+ [{tag: val[0], tokens: val[1]}]
1810
+ else
1811
+ [{tag: nil, tokens: val[1]}]
1812
+ end
1765
1813
 
1766
- module_eval(<<'.,.,', 'parser.y', 256)
1767
- def _reduce_77(val, _values, result)
1768
- result = [{tag: val[0], tokens: val[1]}]
1769
1814
  result
1770
1815
  end
1771
1816
  .,.,
1772
1817
 
1773
- module_eval(<<'.,.,', 'parser.y', 257)
1774
- def _reduce_78(val, _values, result)
1818
+ module_eval(<<'.,.,', 'parser.y', 268)
1819
+ def _reduce_82(val, _values, result)
1775
1820
  result = val[0].append({tag: val[1], tokens: val[2]})
1776
1821
  result
1777
1822
  end
1778
1823
  .,.,
1779
1824
 
1780
- # reduce 79 omitted
1825
+ # reduce 83 omitted
1781
1826
 
1782
- # reduce 80 omitted
1827
+ # reduce 84 omitted
1783
1828
 
1784
- module_eval(<<'.,.,', 'parser.y', 263)
1785
- def _reduce_81(val, _values, result)
1829
+ module_eval(<<'.,.,', 'parser.y', 274)
1830
+ def _reduce_85(val, _values, result)
1786
1831
  begin_c_declaration("}")
1787
1832
 
1788
1833
  result
1789
1834
  end
1790
1835
  .,.,
1791
1836
 
1792
- module_eval(<<'.,.,', 'parser.y', 267)
1793
- def _reduce_82(val, _values, result)
1837
+ module_eval(<<'.,.,', 'parser.y', 278)
1838
+ def _reduce_86(val, _values, result)
1794
1839
  end_c_declaration
1795
1840
 
1796
1841
  result
1797
1842
  end
1798
1843
  .,.,
1799
1844
 
1800
- module_eval(<<'.,.,', 'parser.y', 271)
1801
- def _reduce_83(val, _values, result)
1845
+ module_eval(<<'.,.,', 'parser.y', 282)
1846
+ def _reduce_87(val, _values, result)
1802
1847
  result = val[2]
1803
1848
 
1804
1849
  result
1805
1850
  end
1806
1851
  .,.,
1807
1852
 
1808
- module_eval(<<'.,.,', 'parser.y', 279)
1809
- def _reduce_84(val, _values, result)
1853
+ module_eval(<<'.,.,', 'parser.y', 290)
1854
+ def _reduce_88(val, _values, result)
1810
1855
  result = val[1] ? val[1].unshift(val[0]) : val
1811
1856
  result
1812
1857
  end
1813
1858
  .,.,
1814
1859
 
1815
- module_eval(<<'.,.,', 'parser.y', 279)
1816
- def _reduce_85(val, _values, result)
1860
+ module_eval(<<'.,.,', 'parser.y', 290)
1861
+ def _reduce_89(val, _values, result)
1817
1862
  result = val[1] ? val[1].unshift(val[0]) : val
1818
1863
  result
1819
1864
  end
1820
1865
  .,.,
1821
1866
 
1822
- module_eval(<<'.,.,', 'parser.y', 274)
1823
- def _reduce_86(val, _values, result)
1867
+ module_eval(<<'.,.,', 'parser.y', 285)
1868
+ def _reduce_90(val, _values, result)
1824
1869
  result = [{tag: nil, tokens: val[0]}]
1825
1870
  result
1826
1871
  end
1827
1872
  .,.,
1828
1873
 
1829
- module_eval(<<'.,.,', 'parser.y', 275)
1830
- def _reduce_87(val, _values, result)
1874
+ module_eval(<<'.,.,', 'parser.y', 286)
1875
+ def _reduce_91(val, _values, result)
1831
1876
  result = [{tag: val[0], tokens: val[1]}]
1832
1877
  result
1833
1878
  end
1834
1879
  .,.,
1835
1880
 
1836
- module_eval(<<'.,.,', 'parser.y', 276)
1837
- def _reduce_88(val, _values, result)
1881
+ module_eval(<<'.,.,', 'parser.y', 287)
1882
+ def _reduce_92(val, _values, result)
1838
1883
  result = val[0].append({tag: val[1], tokens: val[2]})
1839
1884
  result
1840
1885
  end
1841
1886
  .,.,
1842
1887
 
1843
- module_eval(<<'.,.,', 'parser.y', 278)
1844
- def _reduce_89(val, _values, result)
1888
+ module_eval(<<'.,.,', 'parser.y', 289)
1889
+ def _reduce_93(val, _values, result)
1845
1890
  on_action_error("ident after %prec", val[0]) if @prec_seen
1846
1891
  result
1847
1892
  end
1848
1893
  .,.,
1849
1894
 
1850
- module_eval(<<'.,.,', 'parser.y', 279)
1851
- def _reduce_90(val, _values, result)
1895
+ module_eval(<<'.,.,', 'parser.y', 290)
1896
+ def _reduce_94(val, _values, result)
1852
1897
  on_action_error("char after %prec", val[0]) if @prec_seen
1853
1898
  result
1854
1899
  end
1855
1900
  .,.,
1856
1901
 
1857
- # reduce 91 omitted
1902
+ # reduce 95 omitted
1858
1903
 
1859
- # reduce 92 omitted
1904
+ # reduce 96 omitted
1860
1905
 
1861
- # reduce 93 omitted
1906
+ # reduce 97 omitted
1862
1907
 
1863
- # reduce 94 omitted
1908
+ # reduce 98 omitted
1864
1909
 
1865
- module_eval(<<'.,.,', 'parser.y', 287)
1866
- def _reduce_95(val, _values, result)
1910
+ module_eval(<<'.,.,', 'parser.y', 298)
1911
+ def _reduce_99(val, _values, result)
1867
1912
  lhs = val[0]
1868
1913
  lhs.alias_name = val[1]
1869
1914
  val[3].each do |builder|
@@ -1876,8 +1921,8 @@ module_eval(<<'.,.,', 'parser.y', 287)
1876
1921
  end
1877
1922
  .,.,
1878
1923
 
1879
- module_eval(<<'.,.,', 'parser.y', 298)
1880
- def _reduce_96(val, _values, result)
1924
+ module_eval(<<'.,.,', 'parser.y', 309)
1925
+ def _reduce_100(val, _values, result)
1881
1926
  builder = val[0]
1882
1927
  if !builder.line
1883
1928
  builder.line = @lexer.line - 1
@@ -1888,8 +1933,8 @@ module_eval(<<'.,.,', 'parser.y', 298)
1888
1933
  end
1889
1934
  .,.,
1890
1935
 
1891
- module_eval(<<'.,.,', 'parser.y', 306)
1892
- def _reduce_97(val, _values, result)
1936
+ module_eval(<<'.,.,', 'parser.y', 317)
1937
+ def _reduce_101(val, _values, result)
1893
1938
  builder = val[2]
1894
1939
  if !builder.line
1895
1940
  builder.line = @lexer.line - 1
@@ -1900,8 +1945,8 @@ module_eval(<<'.,.,', 'parser.y', 306)
1900
1945
  end
1901
1946
  .,.,
1902
1947
 
1903
- module_eval(<<'.,.,', 'parser.y', 315)
1904
- def _reduce_98(val, _values, result)
1948
+ module_eval(<<'.,.,', 'parser.y', 326)
1949
+ def _reduce_102(val, _values, result)
1905
1950
  reset_precs
1906
1951
  result = @grammar.create_rule_builder(@rule_counter, @midrule_action_counter)
1907
1952
 
@@ -1909,8 +1954,8 @@ module_eval(<<'.,.,', 'parser.y', 315)
1909
1954
  end
1910
1955
  .,.,
1911
1956
 
1912
- module_eval(<<'.,.,', 'parser.y', 320)
1913
- def _reduce_99(val, _values, result)
1957
+ module_eval(<<'.,.,', 'parser.y', 331)
1958
+ def _reduce_103(val, _values, result)
1914
1959
  token = val[1]
1915
1960
  token.alias_name = val[2]
1916
1961
  builder = val[0]
@@ -1921,8 +1966,8 @@ module_eval(<<'.,.,', 'parser.y', 320)
1921
1966
  end
1922
1967
  .,.,
1923
1968
 
1924
- module_eval(<<'.,.,', 'parser.y', 328)
1925
- def _reduce_100(val, _values, result)
1969
+ module_eval(<<'.,.,', 'parser.y', 339)
1970
+ def _reduce_104(val, _values, result)
1926
1971
  token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], alias_name: val[3], location: @lexer.location, args: [val[1]], lhs_tag: val[4])
1927
1972
  builder = val[0]
1928
1973
  builder.add_rhs(token)
@@ -1933,8 +1978,8 @@ module_eval(<<'.,.,', 'parser.y', 328)
1933
1978
  end
1934
1979
  .,.,
1935
1980
 
1936
- module_eval(<<'.,.,', 'parser.y', 336)
1937
- def _reduce_101(val, _values, result)
1981
+ module_eval(<<'.,.,', 'parser.y', 347)
1982
+ def _reduce_105(val, _values, result)
1938
1983
  token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, alias_name: val[5], location: @lexer.location, args: val[3], lhs_tag: val[6])
1939
1984
  builder = val[0]
1940
1985
  builder.add_rhs(token)
@@ -1945,8 +1990,8 @@ module_eval(<<'.,.,', 'parser.y', 336)
1945
1990
  end
1946
1991
  .,.,
1947
1992
 
1948
- module_eval(<<'.,.,', 'parser.y', 344)
1949
- def _reduce_102(val, _values, result)
1993
+ module_eval(<<'.,.,', 'parser.y', 355)
1994
+ def _reduce_106(val, _values, result)
1950
1995
  user_code = val[1]
1951
1996
  user_code.alias_name = val[2]
1952
1997
  user_code.tag = val[3]
@@ -1958,8 +2003,8 @@ module_eval(<<'.,.,', 'parser.y', 344)
1958
2003
  end
1959
2004
  .,.,
1960
2005
 
1961
- module_eval(<<'.,.,', 'parser.y', 353)
1962
- def _reduce_103(val, _values, result)
2006
+ module_eval(<<'.,.,', 'parser.y', 364)
2007
+ def _reduce_107(val, _values, result)
1963
2008
  sym = @grammar.find_symbol_by_id!(val[2])
1964
2009
  @prec_seen = true
1965
2010
  builder = val[0]
@@ -1970,57 +2015,59 @@ module_eval(<<'.,.,', 'parser.y', 353)
1970
2015
  end
1971
2016
  .,.,
1972
2017
 
1973
- module_eval(<<'.,.,', 'parser.y', 360)
1974
- def _reduce_104(val, _values, result)
2018
+ module_eval(<<'.,.,', 'parser.y', 371)
2019
+ def _reduce_108(val, _values, result)
1975
2020
  result = "option"
1976
2021
  result
1977
2022
  end
1978
2023
  .,.,
1979
2024
 
1980
- module_eval(<<'.,.,', 'parser.y', 361)
1981
- def _reduce_105(val, _values, result)
2025
+ module_eval(<<'.,.,', 'parser.y', 372)
2026
+ def _reduce_109(val, _values, result)
1982
2027
  result = "nonempty_list"
1983
2028
  result
1984
2029
  end
1985
2030
  .,.,
1986
2031
 
1987
- module_eval(<<'.,.,', 'parser.y', 362)
1988
- def _reduce_106(val, _values, result)
2032
+ module_eval(<<'.,.,', 'parser.y', 373)
2033
+ def _reduce_110(val, _values, result)
1989
2034
  result = "list"
1990
2035
  result
1991
2036
  end
1992
2037
  .,.,
1993
2038
 
1994
- module_eval(<<'.,.,', 'parser.y', 364)
1995
- def _reduce_107(val, _values, result)
1996
- result = [val[0]]
1997
- result
1998
- end
1999
- .,.,
2039
+ # reduce 111 omitted
2040
+
2041
+ # reduce 112 omitted
2042
+
2043
+ module_eval(<<'.,.,', 'parser.y', 377)
2044
+ def _reduce_113(val, _values, result)
2045
+ result = if val[1]
2046
+ [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[0])]
2047
+ else
2048
+ [val[0]]
2049
+ end
2000
2050
 
2001
- module_eval(<<'.,.,', 'parser.y', 365)
2002
- def _reduce_108(val, _values, result)
2003
- result = val[0].append(val[2])
2004
2051
  result
2005
2052
  end
2006
2053
  .,.,
2007
2054
 
2008
- module_eval(<<'.,.,', 'parser.y', 366)
2009
- def _reduce_109(val, _values, result)
2010
- result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[0])]
2055
+ module_eval(<<'.,.,', 'parser.y', 383)
2056
+ def _reduce_114(val, _values, result)
2057
+ result = val[0].append(val[2])
2011
2058
  result
2012
2059
  end
2013
2060
  .,.,
2014
2061
 
2015
- module_eval(<<'.,.,', 'parser.y', 367)
2016
- def _reduce_110(val, _values, result)
2062
+ module_eval(<<'.,.,', 'parser.y', 384)
2063
+ def _reduce_115(val, _values, result)
2017
2064
  result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[0].s_value, location: @lexer.location, args: val[2])]
2018
2065
  result
2019
2066
  end
2020
2067
  .,.,
2021
2068
 
2022
- module_eval(<<'.,.,', 'parser.y', 371)
2023
- def _reduce_111(val, _values, result)
2069
+ module_eval(<<'.,.,', 'parser.y', 388)
2070
+ def _reduce_116(val, _values, result)
2024
2071
  if @prec_seen
2025
2072
  on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec
2026
2073
  @code_after_prec = true
@@ -2031,31 +2078,31 @@ module_eval(<<'.,.,', 'parser.y', 371)
2031
2078
  end
2032
2079
  .,.,
2033
2080
 
2034
- module_eval(<<'.,.,', 'parser.y', 379)
2035
- def _reduce_112(val, _values, result)
2081
+ module_eval(<<'.,.,', 'parser.y', 396)
2082
+ def _reduce_117(val, _values, result)
2036
2083
  end_c_declaration
2037
2084
 
2038
2085
  result
2039
2086
  end
2040
2087
  .,.,
2041
2088
 
2042
- module_eval(<<'.,.,', 'parser.y', 383)
2043
- def _reduce_113(val, _values, result)
2089
+ module_eval(<<'.,.,', 'parser.y', 400)
2090
+ def _reduce_118(val, _values, result)
2044
2091
  result = val[2]
2045
2092
 
2046
2093
  result
2047
2094
  end
2048
2095
  .,.,
2049
2096
 
2050
- module_eval(<<'.,.,', 'parser.y', 386)
2051
- def _reduce_114(val, _values, result)
2097
+ module_eval(<<'.,.,', 'parser.y', 403)
2098
+ def _reduce_119(val, _values, result)
2052
2099
  result = val[1].s_value
2053
2100
  result
2054
2101
  end
2055
2102
  .,.,
2056
2103
 
2057
- module_eval(<<'.,.,', 'parser.y', 390)
2058
- def _reduce_115(val, _values, result)
2104
+ module_eval(<<'.,.,', 'parser.y', 407)
2105
+ def _reduce_120(val, _values, result)
2059
2106
  begin_c_declaration('\Z')
2060
2107
  @grammar.epilogue_first_lineno = @lexer.line + 1
2061
2108
 
@@ -2063,8 +2110,8 @@ module_eval(<<'.,.,', 'parser.y', 390)
2063
2110
  end
2064
2111
  .,.,
2065
2112
 
2066
- module_eval(<<'.,.,', 'parser.y', 395)
2067
- def _reduce_116(val, _values, result)
2113
+ module_eval(<<'.,.,', 'parser.y', 412)
2114
+ def _reduce_121(val, _values, result)
2068
2115
  end_c_declaration
2069
2116
  @grammar.epilogue = val[2].s_value
2070
2117
 
@@ -2072,16 +2119,6 @@ module_eval(<<'.,.,', 'parser.y', 395)
2072
2119
  end
2073
2120
  .,.,
2074
2121
 
2075
- # reduce 117 omitted
2076
-
2077
- # reduce 118 omitted
2078
-
2079
- # reduce 119 omitted
2080
-
2081
- # reduce 120 omitted
2082
-
2083
- # reduce 121 omitted
2084
-
2085
2122
  # reduce 122 omitted
2086
2123
 
2087
2124
  # reduce 123 omitted
@@ -2090,8 +2127,10 @@ module_eval(<<'.,.,', 'parser.y', 395)
2090
2127
 
2091
2128
  # reduce 125 omitted
2092
2129
 
2093
- module_eval(<<'.,.,', 'parser.y', 412)
2094
- def _reduce_126(val, _values, result)
2130
+ # reduce 126 omitted
2131
+
2132
+ module_eval(<<'.,.,', 'parser.y', 423)
2133
+ def _reduce_127(val, _values, result)
2095
2134
  result = Lrama::Lexer::Token::Ident.new(s_value: val[0])
2096
2135
  result
2097
2136
  end