lrama 0.5.12 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yaml +20 -5
  3. data/Gemfile +1 -1
  4. data/NEWS.md +66 -0
  5. data/README.md +14 -3
  6. data/Steepfile +2 -0
  7. data/lib/lrama/command.rb +17 -3
  8. data/lib/lrama/context.rb +2 -22
  9. data/lib/lrama/grammar/binding.rb +24 -0
  10. data/lib/lrama/grammar/code/printer_code.rb +1 -1
  11. data/lib/lrama/grammar/code/rule_action.rb +2 -2
  12. data/lib/lrama/grammar/code.rb +19 -7
  13. data/lib/lrama/grammar/parameterizing_rule/resolver.rb +39 -0
  14. data/lib/lrama/grammar/parameterizing_rule/rhs.rb +15 -0
  15. data/lib/lrama/grammar/parameterizing_rule/rule.rb +16 -0
  16. data/lib/lrama/grammar/parameterizing_rule.rb +3 -0
  17. data/lib/lrama/grammar/percent_code.rb +3 -3
  18. data/lib/lrama/grammar/rule_builder.rb +69 -31
  19. data/lib/lrama/grammar/type.rb +13 -1
  20. data/lib/lrama/grammar.rb +15 -43
  21. data/lib/lrama/lexer/grammar_file.rb +21 -0
  22. data/lib/lrama/lexer/location.rb +77 -2
  23. data/lib/lrama/lexer/token/instantiate_rule.rb +23 -0
  24. data/lib/lrama/lexer/token/user_code.rb +10 -10
  25. data/lib/lrama/lexer/token.rb +6 -1
  26. data/lib/lrama/lexer.rb +23 -18
  27. data/lib/lrama/output.rb +2 -2
  28. data/lib/lrama/parser.rb +641 -458
  29. data/lib/lrama/states_reporter.rb +1 -1
  30. data/lib/lrama/version.rb +1 -1
  31. data/parser.y +97 -32
  32. data/sig/lrama/grammar/binding.rbs +16 -0
  33. data/sig/lrama/grammar/code/printer_code.rbs +1 -1
  34. data/sig/lrama/grammar/code.rbs +5 -5
  35. data/sig/lrama/grammar/parameterizing_rule/resolver.rbs +21 -0
  36. data/sig/lrama/grammar/parameterizing_rule/rhs.rbs +13 -0
  37. data/sig/lrama/grammar/parameterizing_rule/rule.rbs +14 -0
  38. data/sig/lrama/grammar/parameterizing_rule.rbs +6 -0
  39. data/sig/lrama/grammar/parameterizing_rules/builder/base.rbs +2 -2
  40. data/sig/lrama/grammar/parameterizing_rules/builder.rbs +1 -1
  41. data/sig/lrama/grammar/percent_code.rbs +3 -3
  42. data/sig/lrama/grammar/rule_builder.rbs +9 -8
  43. data/sig/lrama/lexer/grammar_file.rbs +15 -0
  44. data/sig/lrama/lexer/location.rbs +13 -1
  45. data/sig/lrama/lexer/token/instantiate_rule.rbs +14 -0
  46. data/sig/lrama/lexer/token.rbs +1 -0
  47. metadata +17 -5
  48. data/lib/lrama/lexer/token/parameterizing.rb +0 -34
  49. data/sig/lrama/lexer/token/parameterizing.rbs +0 -17
data/lib/lrama/parser.rb CHANGED
@@ -658,13 +658,12 @@ end
658
658
  module Lrama
659
659
  class Parser < Racc::Parser
660
660
 
661
- module_eval(<<'...end parser.y/module_eval...', 'parser.y', 420)
661
+ module_eval(<<'...end parser.y/module_eval...', 'parser.y', 500)
662
662
 
663
663
  include Lrama::Report::Duration
664
664
 
665
665
  def initialize(text, path, debug = false)
666
- @text = text
667
- @path = path
666
+ @grammar_file = Lrama::Lexer::GrammarFile.new(path, text)
668
667
  @yydebug = debug
669
668
  @rule_counter = Lrama::Grammar::Counter.new(0)
670
669
  @midrule_action_counter = Lrama::Grammar::Counter.new(1)
@@ -672,7 +671,7 @@ end
672
671
 
673
672
  def parse
674
673
  report_duration(:parse) do
675
- @lexer = Lrama::Lexer.new(@text)
674
+ @lexer = Lrama::Lexer.new(@grammar_file)
676
675
  @grammar = Lrama::Grammar.new(@rule_counter)
677
676
  @precedence_number = 0
678
677
  reset_precs
@@ -689,40 +688,26 @@ end
689
688
 
690
689
  def on_error(error_token_id, error_value, value_stack)
691
690
  if error_value.is_a?(Lrama::Lexer::Token)
692
- line = error_value.first_line
693
- first_column = error_value.first_column
694
- last_column = error_value.last_column
691
+ location = error_value.location
695
692
  value = "'#{error_value.s_value}'"
696
693
  else
697
- line = @lexer.line
698
- first_column = @lexer.head_column
699
- last_column = @lexer.column
694
+ location = @lexer.location
700
695
  value = error_value.inspect
701
696
  end
702
697
 
703
- raise ParseError, <<~ERROR
704
- #{@path}:#{line}:#{first_column}: parse error on value #{value} (#{token_to_str(error_token_id) || '?'})
705
- #{@text.split("\n")[line - 1]}
706
- #{carrets(first_column, last_column)}
707
- ERROR
698
+ error_message = "parse error on value #{value} (#{token_to_str(error_token_id) || '?'})"
699
+
700
+ raise_parse_error(error_message, location)
708
701
  end
709
702
 
710
703
  def on_action_error(error_message, error_value)
711
704
  if error_value.is_a?(Lrama::Lexer::Token)
712
- line = error_value.first_line
713
- first_column = error_value.first_column
714
- last_column = error_value.last_column
705
+ location = error_value.location
715
706
  else
716
- line = @lexer.line
717
- first_column = @lexer.head_column
718
- last_column = @lexer.column
707
+ location = @lexer.location
719
708
  end
720
709
 
721
- raise ParseError, <<~ERROR
722
- #{@path}:#{line}: #{error_message}
723
- #{@text.split("\n")[line - 1]}
724
- #{carrets(first_column, last_column)}
725
- ERROR
710
+ raise_parse_error(error_message, location)
726
711
  end
727
712
 
728
713
  private
@@ -742,268 +727,309 @@ def end_c_declaration
742
727
  @lexer.end_symbol = nil
743
728
  end
744
729
 
745
- def carrets(first_column, last_column)
746
- ' ' * (first_column + 1) + '^' * (last_column - first_column)
730
+ def raise_parse_error(error_message, location)
731
+ raise ParseError, location.generate_error_message(error_message)
747
732
  end
748
733
  ...end parser.y/module_eval...
749
734
  ##### State transition tables begin ###
750
735
 
751
736
  racc_action_table = [
752
- 82, 42, 83, 137, 42, 65, 137, 38, 65, 136,
753
- 42, 6, 41, 7, 42, 56, 41, 139, 65, 61,
754
- 139, 135, 42, 42, 41, 41, 20, 22, 23, 24,
755
- 25, 26, 27, 28, 29, 30, 140, 38, 3, 140,
756
- 84, 42, 77, 41, 8, 42, 68, 41, 172, 42,
757
- 68, 41, 32, 173, 68, 39, 20, 22, 23, 24,
758
- 25, 26, 27, 28, 29, 30, 9, 42, 45, 41,
759
- 12, 13, 14, 15, 16, 17, 45, 45, 18, 19,
760
- 20, 22, 23, 24, 25, 26, 27, 28, 29, 30,
761
- 42, 48, 41, 151, 49, 68, 152, 153, 154, 42,
762
- 42, 41, 41, 65, 163, 42, 42, 41, 41, 65,
763
- 163, 42, 42, 41, 41, 65, 163, 42, 42, 41,
764
- 41, 65, 163, 42, 42, 41, 41, 65, 163, 42,
765
- 42, 41, 41, 65, 163, 42, 42, 41, 41, 65,
766
- 65, 42, 42, 41, 41, 65, 65, 42, 42, 41,
767
- 41, 65, 65, 42, 42, 41, 41, 65, 65, 42,
768
- 42, 41, 41, 50, 51, 52, 53, 74, 78, 80,
769
- 85, 85, 85, 87, 93, 97, 98, 101, 101, 101,
770
- 101, 106, 107, 109, 111, 112, 113, 114, 115, 118,
771
- 121, 122, 125, 126, 127, 129, 142, 144, 145, 146,
772
- 147, 148, 125, 80, 158, 159, 167, 170, 167, 177,
773
- 80 ]
737
+ 85, 44, 86, 145, 144, 67, 44, 44, 145, 188,
738
+ 67, 67, 44, 6, 188, 7, 67, 147, 199, 44,
739
+ 143, 43, 147, 189, 58, 163, 164, 165, 189, 3,
740
+ 44, 40, 43, 8, 67, 63, 34, 44, 148, 43,
741
+ 41, 87, 40, 148, 190, 47, 44, 80, 43, 190,
742
+ 21, 23, 24, 25, 26, 27, 28, 29, 30, 31,
743
+ 47, 21, 23, 24, 25, 26, 27, 28, 29, 30,
744
+ 31, 9, 44, 47, 43, 13, 14, 15, 16, 17,
745
+ 18, 50, 51, 19, 20, 21, 23, 24, 25, 26,
746
+ 27, 28, 29, 30, 31, 32, 44, 44, 43, 43,
747
+ 52, 70, 70, 44, 44, 43, 43, 53, 70, 70,
748
+ 44, 44, 43, 43, 67, 173, 44, 44, 43, 43,
749
+ 67, 173, 44, 44, 43, 43, 67, 173, 44, 44,
750
+ 43, 43, 67, 173, 44, 44, 43, 43, 67, 173,
751
+ 44, 44, 43, 43, 67, 173, 44, 44, 43, 43,
752
+ 67, 67, 44, 44, 43, 43, 67, 67, 44, 44,
753
+ 43, 43, 67, 67, 44, 44, 179, 43, 67, 67,
754
+ 44, 44, 179, 43, 67, 67, 44, 44, 179, 43,
755
+ 67, 163, 164, 165, 83, 44, 141, 43, 142, 192,
756
+ 54, 193, 163, 164, 165, 208, 210, 193, 193, 55,
757
+ 76, 77, 81, 83, 88, 88, 88, 90, 96, 100,
758
+ 101, 104, 104, 104, 104, 107, 110, 111, 113, 115,
759
+ 116, 117, 118, 119, 122, 126, 127, 128, 131, 132,
760
+ 133, 135, 150, 152, 153, 154, 155, 156, 157, 158,
761
+ 131, 160, 168, 169, 178, 183, 184, 186, 191, 178,
762
+ 83, 183, 205, 207, 83, 212, 83 ]
774
763
 
775
764
  racc_action_check = [
776
- 40, 124, 40, 124, 149, 124, 149, 9, 149, 123,
777
- 25, 2, 25, 2, 26, 25, 26, 124, 26, 26,
778
- 149, 123, 13, 55, 13, 55, 9, 9, 9, 9,
779
- 9, 9, 9, 9, 9, 9, 124, 33, 1, 149,
780
- 40, 27, 33, 27, 3, 28, 27, 28, 168, 29,
781
- 28, 29, 7, 168, 29, 12, 33, 33, 33, 33,
782
- 33, 33, 33, 33, 33, 33, 4, 56, 14, 56,
783
- 4, 4, 4, 4, 4, 4, 15, 16, 4, 4,
784
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
785
- 30, 17, 30, 137, 18, 30, 137, 137, 137, 146,
786
- 67, 146, 67, 146, 146, 147, 68, 147, 68, 147,
787
- 147, 148, 93, 148, 93, 148, 148, 160, 95, 160,
788
- 95, 160, 160, 164, 101, 164, 101, 164, 164, 165,
789
- 103, 165, 103, 165, 165, 60, 61, 60, 61, 60,
790
- 61, 98, 100, 98, 100, 98, 100, 119, 140, 119,
791
- 140, 119, 140, 151, 173, 151, 173, 151, 173, 116,
792
- 120, 116, 120, 20, 22, 23, 24, 31, 36, 37,
793
- 44, 46, 47, 48, 54, 58, 59, 66, 71, 72,
794
- 73, 79, 80, 86, 88, 89, 90, 91, 92, 96,
795
- 104, 105, 106, 107, 108, 110, 128, 130, 131, 132,
796
- 133, 134, 135, 138, 141, 143, 150, 156, 172, 174,
797
- 177 ]
765
+ 42, 130, 42, 130, 129, 130, 159, 177, 159, 177,
766
+ 159, 177, 196, 2, 196, 2, 196, 130, 188, 26,
767
+ 129, 26, 159, 177, 26, 188, 188, 188, 196, 1,
768
+ 27, 9, 27, 3, 27, 27, 7, 14, 130, 14,
769
+ 13, 42, 35, 159, 177, 15, 57, 35, 57, 196,
770
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
771
+ 16, 35, 35, 35, 35, 35, 35, 35, 35, 35,
772
+ 35, 4, 58, 17, 58, 4, 4, 4, 4, 4,
773
+ 4, 18, 19, 4, 4, 4, 4, 4, 4, 4,
774
+ 4, 4, 4, 4, 4, 4, 28, 29, 28, 29,
775
+ 21, 28, 29, 30, 31, 30, 31, 23, 30, 31,
776
+ 154, 69, 154, 69, 154, 154, 155, 70, 155, 70,
777
+ 155, 155, 156, 96, 156, 96, 156, 156, 170, 98,
778
+ 170, 98, 170, 170, 174, 104, 174, 104, 174, 174,
779
+ 175, 106, 175, 106, 175, 175, 62, 63, 62, 63,
780
+ 62, 63, 101, 103, 101, 103, 101, 103, 123, 148,
781
+ 123, 148, 123, 148, 160, 190, 160, 190, 160, 190,
782
+ 191, 193, 191, 193, 191, 193, 199, 120, 199, 120,
783
+ 199, 146, 146, 146, 146, 124, 125, 124, 125, 180,
784
+ 24, 180, 181, 181, 181, 202, 206, 202, 206, 25,
785
+ 32, 33, 38, 39, 46, 48, 49, 50, 56, 60,
786
+ 61, 68, 73, 74, 75, 76, 82, 83, 89, 91,
787
+ 92, 93, 94, 95, 99, 107, 108, 109, 110, 111,
788
+ 112, 114, 134, 136, 137, 138, 139, 140, 141, 142,
789
+ 143, 145, 149, 151, 157, 162, 166, 176, 179, 186,
790
+ 187, 192, 195, 200, 205, 211, 212 ]
798
791
 
799
792
  racc_action_pointer = [
800
- nil, 38, 1, 44, 57, nil, nil, 45, nil, 3,
801
- nil, nil, 49, 19, 49, 57, 58, 86, 75, nil,
802
- 144, nil, 145, 146, 147, 7, 11, 38, 42, 46,
803
- 87, 165, nil, 33, nil, nil, 146, 126, nil, nil,
804
- -5, nil, nil, nil, 151, nil, 152, 153, 154, nil,
805
- nil, nil, nil, nil, 166, 20, 64, nil, 169, 168,
806
- 132, 133, nil, nil, nil, nil, 169, 97, 103, nil,
807
- nil, 170, 171, 172, nil, nil, nil, nil, nil, 148,
808
- 177, nil, nil, nil, nil, nil, 181, nil, 182, 183,
809
- 184, 185, 186, 109, nil, 115, 182, nil, 138, nil,
810
- 139, 121, nil, 127, 179, 189, 157, 149, 192, nil,
811
- 193, nil, nil, nil, nil, nil, 156, nil, nil, 144,
812
- 157, nil, nil, -13, -2, nil, nil, nil, 176, nil,
813
- 177, 178, 179, 180, 181, 167, nil, 57, 160, nil,
814
- 145, 184, nil, 185, nil, nil, 96, 102, 108, 1,
815
- 198, 150, nil, nil, nil, nil, 205, nil, nil, nil,
816
- 114, nil, nil, nil, 120, 126, nil, nil, 11, nil,
817
- nil, nil, 200, 151, 189, nil, nil, 167, nil ]
793
+ nil, 29, 3, 33, 62, nil, nil, 29, nil, 27,
794
+ nil, nil, nil, 34, 34, 26, 41, 54, 76, 63,
795
+ nil, 81, nil, 88, 171, 180, 16, 27, 93, 94,
796
+ 100, 101, 195, 199, nil, 38, nil, nil, 180, 159,
797
+ nil, nil, -5, nil, nil, nil, 185, nil, 186, 187,
798
+ 188, nil, nil, nil, nil, nil, 200, 43, 69, nil,
799
+ 203, 202, 143, 144, nil, nil, nil, nil, 203, 108,
800
+ 114, nil, nil, 204, 205, 206, 181, nil, nil, nil,
801
+ nil, nil, 180, 212, nil, nil, nil, nil, nil, 216,
802
+ nil, 217, 218, 219, 220, 221, 120, nil, 126, 217,
803
+ nil, 149, nil, 150, 132, nil, 138, 220, 215, 225,
804
+ 189, 184, 228, nil, 229, nil, nil, nil, nil, nil,
805
+ 174, nil, nil, 155, 182, 151, nil, nil, nil, -18,
806
+ -2, nil, nil, nil, 212, nil, 213, 214, 215, 216,
807
+ 217, 202, 234, 201, nil, 207, 140, nil, 156, 222,
808
+ nil, 223, nil, nil, 107, 113, 119, 205, nil, 3,
809
+ 161, nil, 237, nil, nil, nil, 244, nil, nil, nil,
810
+ 125, nil, nil, nil, 131, 137, 209, 4, nil, 214,
811
+ 154, 151, nil, nil, nil, nil, 210, 206, -16, nil,
812
+ 162, 167, 243, 168, nil, 232, 9, nil, nil, 173,
813
+ 251, nil, 160, nil, nil, 210, 161, nil, nil, nil,
814
+ nil, 235, 212, nil ]
818
815
 
819
816
  racc_action_default = [
820
- -2, -113, -8, -113, -113, -3, -4, -113, 179, -113,
821
- -9, -10, -113, -113, -113, -113, -113, -113, -113, -22,
822
- -113, -26, -113, -113, -113, -113, -113, -113, -113, -113,
823
- -113, -113, -7, -98, -73, -75, -113, -95, -97, -11,
824
- -102, -71, -72, -101, -13, -62, -14, -15, -113, -19,
825
- -23, -27, -30, -33, -36, -42, -113, -45, -48, -37,
826
- -52, -113, -55, -57, -58, -110, -38, -65, -113, -68,
827
- -70, -39, -40, -41, -5, -1, -74, -99, -76, -113,
828
- -113, -12, -103, -104, -105, -59, -113, -16, -113, -113,
829
- -113, -113, -113, -113, -46, -43, -50, -49, -113, -56,
830
- -53, -113, -69, -66, -113, -113, -81, -113, -113, -63,
831
- -113, -20, -24, -28, -31, -34, -44, -47, -51, -54,
832
- -67, -6, -100, -77, -78, -82, -96, -60, -113, -17,
833
- -113, -113, -113, -113, -113, -81, -80, -71, -95, -86,
834
- -113, -113, -64, -113, -21, -25, -113, -113, -113, -79,
835
- -111, -113, -90, -91, -92, -83, -113, -89, -61, -18,
836
- -29, -106, -108, -109, -32, -35, -84, -112, -113, -93,
837
- -87, -107, -111, -113, -113, -85, -94, -95, -88 ]
817
+ -2, -130, -8, -130, -130, -3, -4, -130, 214, -130,
818
+ -9, -10, -11, -130, -130, -130, -130, -130, -130, -130,
819
+ -23, -130, -27, -130, -130, -130, -130, -130, -130, -130,
820
+ -130, -130, -130, -130, -7, -115, -88, -90, -130, -112,
821
+ -114, -12, -119, -86, -87, -118, -14, -77, -15, -16,
822
+ -130, -20, -24, -28, -31, -34, -37, -43, -130, -46,
823
+ -63, -38, -67, -130, -70, -72, -73, -127, -39, -80,
824
+ -130, -83, -85, -40, -41, -42, -130, -5, -1, -89,
825
+ -116, -91, -130, -130, -13, -120, -121, -122, -74, -130,
826
+ -17, -130, -130, -130, -130, -130, -130, -47, -44, -65,
827
+ -64, -130, -71, -68, -130, -84, -81, -130, -130, -130,
828
+ -96, -130, -130, -78, -130, -21, -25, -29, -32, -35,
829
+ -45, -48, -66, -69, -82, -130, -50, -6, -117, -92,
830
+ -93, -97, -113, -75, -130, -18, -130, -130, -130, -130,
831
+ -130, -130, -130, -96, -95, -86, -112, -101, -130, -130,
832
+ -79, -130, -22, -26, -130, -130, -130, -54, -51, -94,
833
+ -130, -98, -128, -105, -106, -107, -130, -104, -76, -19,
834
+ -30, -123, -125, -126, -33, -36, -49, -52, -55, -86,
835
+ -130, -108, -99, -129, -102, -124, -54, -112, -86, -59,
836
+ -130, -130, -128, -130, -110, -130, -53, -56, -57, -130,
837
+ -130, -62, -130, -100, -109, -112, -130, -60, -111, -103,
838
+ -58, -130, -112, -61 ]
838
839
 
839
840
  racc_goto_table = [
840
- 62, 79, 43, 60, 103, 55, 94, 102, 34, 166,
841
- 124, 44, 46, 47, 58, 1, 70, 70, 70, 70,
842
- 171, 160, 164, 165, 171, 171, 66, 71, 72, 73,
843
- 2, 175, 76, 4, 99, 62, 95, 120, 100, 149,
844
- 33, 75, 5, 102, 58, 58, 94, 31, 104, 10,
845
- 11, 40, 81, 110, 143, 88, 70, 70, 130, 89,
846
- 102, 131, 90, 132, 91, 133, 92, 94, 134, 54,
847
- 59, 96, 62, 116, 99, 119, 117, 108, 141, 86,
848
- 128, 123, 58, 150, 58, 168, 156, 174, 105, nil,
849
- 70, nil, 70, 99, nil, nil, nil, nil, 138, nil,
850
- nil, nil, 155, nil, nil, 58, nil, nil, nil, 70,
851
- nil, nil, nil, nil, 157, nil, nil, nil, nil, nil,
852
- nil, nil, nil, 138, nil, 169, nil, nil, nil, nil,
853
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
854
- nil, 178, nil, nil, nil, nil, nil, 176 ]
841
+ 82, 62, 57, 45, 97, 64, 105, 162, 182, 36,
842
+ 177, 1, 2, 180, 106, 60, 4, 72, 72, 72,
843
+ 72, 130, 185, 46, 48, 49, 185, 185, 68, 73,
844
+ 74, 75, 35, 78, 98, 79, 5, 103, 203, 196,
845
+ 102, 64, 194, 105, 202, 97, 60, 60, 124, 198,
846
+ 33, 108, 206, 10, 159, 170, 174, 175, 72, 72,
847
+ 11, 105, 12, 42, 84, 114, 151, 97, 91, 136,
848
+ 92, 137, 120, 93, 138, 123, 94, 139, 95, 64,
849
+ 140, 102, 56, 61, 99, 60, 121, 60, 125, 176,
850
+ 200, 211, 112, 72, 149, 72, 89, 134, 129, 166,
851
+ 195, 102, 109, nil, nil, nil, nil, 161, 146, 60,
852
+ nil, nil, nil, 72, nil, nil, nil, nil, nil, nil,
853
+ nil, nil, nil, nil, nil, nil, 167, nil, nil, nil,
854
+ nil, nil, nil, nil, nil, nil, nil, 146, 181, nil,
855
+ nil, nil, nil, nil, nil, nil, nil, nil, 197, nil,
856
+ nil, nil, nil, nil, nil, 187, nil, nil, nil, nil,
857
+ nil, nil, nil, nil, nil, nil, 209, nil, 201, 181,
858
+ nil, 204, nil, 213, 187, nil, nil, 181 ]
855
859
 
856
860
  racc_goto_check = [
857
- 37, 48, 33, 36, 43, 31, 32, 44, 45, 52,
858
- 50, 13, 13, 13, 33, 1, 33, 33, 33, 33,
859
- 57, 19, 19, 19, 57, 57, 30, 30, 30, 30,
860
- 2, 52, 45, 3, 37, 37, 31, 43, 36, 50,
861
- 4, 5, 6, 44, 33, 33, 32, 7, 8, 9,
862
- 10, 11, 12, 14, 15, 16, 33, 33, 17, 20,
863
- 44, 21, 22, 23, 24, 25, 26, 32, 27, 28,
864
- 29, 34, 37, 31, 37, 36, 35, 39, 40, 41,
865
- 42, 49, 33, 51, 33, 53, 54, 55, 56, nil,
866
- 33, nil, 33, 37, nil, nil, nil, nil, 37, nil,
867
- nil, nil, 48, nil, nil, 33, nil, nil, nil, 33,
868
- nil, nil, nil, nil, 37, nil, nil, nil, nil, nil,
869
- nil, nil, nil, 37, nil, 37, nil, nil, nil, nil,
870
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
871
- nil, 48, nil, nil, nil, nil, nil, 37 ]
861
+ 41, 46, 32, 34, 33, 40, 53, 42, 59, 54,
862
+ 39, 1, 2, 43, 52, 34, 3, 34, 34, 34,
863
+ 34, 58, 63, 14, 14, 14, 63, 63, 31, 31,
864
+ 31, 31, 4, 5, 32, 54, 6, 46, 59, 39,
865
+ 40, 40, 42, 53, 43, 33, 34, 34, 52, 42,
866
+ 7, 8, 43, 9, 58, 20, 20, 20, 34, 34,
867
+ 10, 53, 11, 12, 13, 15, 16, 33, 17, 18,
868
+ 21, 22, 32, 23, 24, 46, 25, 26, 27, 40,
869
+ 28, 40, 29, 30, 35, 34, 36, 34, 37, 38,
870
+ 44, 45, 48, 34, 49, 34, 50, 51, 57, 60,
871
+ 61, 40, 62, nil, nil, nil, nil, 41, 40, 34,
872
+ nil, nil, nil, 34, nil, nil, nil, nil, nil, nil,
873
+ nil, nil, nil, nil, nil, nil, 40, nil, nil, nil,
874
+ nil, nil, nil, nil, nil, nil, nil, 40, 40, nil,
875
+ nil, nil, nil, nil, nil, nil, nil, nil, 41, nil,
876
+ nil, nil, nil, nil, nil, 40, nil, nil, nil, nil,
877
+ nil, nil, nil, nil, nil, nil, 41, nil, 40, 40,
878
+ nil, 40, nil, 41, 40, nil, nil, 40 ]
872
879
 
873
880
  racc_goto_pointer = [
874
- nil, 15, 30, 31, 31, 8, 40, 41, -26, 45,
875
- 46, 38, 12, -3, -34, -75, 6, -53, nil, -125,
876
- 9, -51, 11, -50, 12, -49, 13, -47, 44, 44,
877
- -1, -20, -49, -11, 13, -20, -23, -26, nil, -8,
878
- -49, 34, -29, -64, -60, -1, nil, nil, -36, -25,
879
- -96, -54, -141, -66, -53, -83, 11, -140 ]
881
+ nil, 11, 12, 14, 23, -2, 34, 44, -26, 49,
882
+ 56, 58, 49, 22, 8, -25, -69, 17, -46, nil,
883
+ -99, 18, -45, 20, -43, 22, -41, 23, -39, 56,
884
+ 56, 0, -24, -53, -11, 24, -13, -19, -68, -147,
885
+ -22, -39, -139, -147, -99, -116, -26, nil, 4, -39,
886
+ 49, -16, -56, -63, 0, nil, nil, -12, -89, -154,
887
+ -48, -84, 22, -148 ]
880
888
 
881
889
  racc_goto_default = [
882
890
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
883
- 36, nil, nil, nil, nil, nil, nil, nil, 21, nil,
891
+ 38, nil, nil, nil, nil, nil, nil, nil, nil, 22,
884
892
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
885
- nil, nil, 57, 63, nil, nil, nil, 162, 64, nil,
886
- nil, nil, nil, 67, 69, nil, 35, 37, nil, nil,
887
- nil, nil, nil, nil, nil, nil, nil, 161 ]
893
+ nil, nil, nil, 59, 65, nil, nil, nil, nil, nil,
894
+ 172, nil, nil, nil, nil, nil, nil, 66, nil, nil,
895
+ nil, nil, 69, 71, nil, 37, 39, nil, nil, nil,
896
+ nil, nil, nil, 171 ]
888
897
 
889
898
  racc_reduce_table = [
890
899
  0, 0, :racc_error,
891
- 5, 47, :_reduce_none,
892
- 0, 48, :_reduce_none,
893
- 2, 48, :_reduce_none,
894
- 0, 53, :_reduce_4,
895
- 0, 54, :_reduce_5,
896
- 5, 52, :_reduce_6,
897
- 2, 52, :_reduce_none,
898
- 0, 49, :_reduce_8,
900
+ 5, 48, :_reduce_none,
901
+ 0, 49, :_reduce_none,
899
902
  2, 49, :_reduce_none,
900
- 1, 55, :_reduce_none,
901
- 2, 55, :_reduce_11,
902
- 3, 55, :_reduce_none,
903
- 2, 55, :_reduce_none,
904
- 2, 55, :_reduce_14,
905
- 2, 55, :_reduce_15,
906
- 0, 60, :_reduce_16,
907
- 0, 61, :_reduce_17,
908
- 7, 55, :_reduce_18,
909
- 0, 62, :_reduce_19,
910
- 0, 63, :_reduce_20,
911
- 6, 55, :_reduce_21,
912
- 1, 55, :_reduce_none,
913
- 0, 66, :_reduce_23,
914
- 0, 67, :_reduce_24,
915
- 6, 56, :_reduce_25,
916
- 1, 56, :_reduce_none,
917
- 0, 68, :_reduce_27,
918
- 0, 69, :_reduce_28,
919
- 7, 56, :_reduce_none,
920
- 0, 70, :_reduce_30,
921
- 0, 71, :_reduce_31,
922
- 7, 56, :_reduce_32,
923
- 0, 72, :_reduce_33,
924
- 0, 73, :_reduce_34,
925
- 7, 56, :_reduce_35,
926
- 2, 64, :_reduce_none,
927
- 2, 64, :_reduce_37,
928
- 2, 64, :_reduce_38,
929
- 2, 64, :_reduce_39,
930
- 2, 64, :_reduce_40,
931
- 2, 64, :_reduce_41,
932
- 1, 74, :_reduce_42,
933
- 2, 74, :_reduce_43,
934
- 3, 74, :_reduce_44,
935
- 1, 77, :_reduce_45,
936
- 2, 77, :_reduce_46,
937
- 3, 78, :_reduce_47,
938
- 0, 80, :_reduce_none,
939
- 1, 80, :_reduce_none,
940
- 0, 81, :_reduce_none,
941
- 1, 81, :_reduce_none,
942
- 1, 75, :_reduce_52,
943
- 2, 75, :_reduce_53,
944
- 3, 75, :_reduce_54,
945
- 1, 82, :_reduce_55,
946
- 2, 82, :_reduce_56,
947
- 1, 83, :_reduce_none,
948
- 1, 83, :_reduce_none,
949
- 0, 85, :_reduce_59,
950
- 0, 86, :_reduce_60,
951
- 6, 59, :_reduce_61,
952
- 0, 87, :_reduce_62,
953
- 0, 88, :_reduce_63,
954
- 5, 59, :_reduce_64,
955
- 1, 76, :_reduce_65,
956
- 2, 76, :_reduce_66,
957
- 3, 76, :_reduce_67,
958
- 1, 89, :_reduce_68,
959
- 2, 89, :_reduce_69,
960
- 1, 90, :_reduce_none,
961
- 1, 79, :_reduce_71,
962
- 1, 79, :_reduce_72,
963
- 1, 50, :_reduce_none,
903
+ 0, 54, :_reduce_4,
904
+ 0, 55, :_reduce_5,
905
+ 5, 53, :_reduce_6,
906
+ 2, 53, :_reduce_none,
907
+ 0, 50, :_reduce_8,
964
908
  2, 50, :_reduce_none,
965
- 1, 91, :_reduce_none,
966
- 2, 91, :_reduce_none,
967
- 4, 92, :_reduce_77,
968
- 1, 95, :_reduce_78,
969
- 3, 95, :_reduce_79,
970
- 2, 95, :_reduce_none,
971
- 0, 96, :_reduce_81,
972
- 1, 96, :_reduce_82,
973
- 3, 96, :_reduce_83,
974
- 4, 96, :_reduce_84,
975
- 6, 96, :_reduce_85,
976
- 0, 100, :_reduce_86,
977
- 0, 101, :_reduce_87,
978
- 7, 96, :_reduce_88,
979
- 3, 96, :_reduce_89,
980
- 1, 97, :_reduce_none,
981
- 1, 97, :_reduce_none,
982
- 1, 97, :_reduce_none,
983
- 1, 99, :_reduce_93,
984
- 3, 99, :_reduce_94,
985
- 0, 94, :_reduce_none,
986
- 3, 94, :_reduce_96,
987
- 1, 93, :_reduce_none,
988
- 0, 51, :_reduce_none,
989
- 0, 102, :_reduce_99,
990
- 3, 51, :_reduce_100,
909
+ 1, 56, :_reduce_none,
910
+ 1, 56, :_reduce_none,
911
+ 2, 56, :_reduce_12,
912
+ 3, 56, :_reduce_none,
913
+ 2, 56, :_reduce_none,
914
+ 2, 56, :_reduce_15,
915
+ 2, 56, :_reduce_16,
916
+ 0, 62, :_reduce_17,
917
+ 0, 63, :_reduce_18,
918
+ 7, 56, :_reduce_19,
919
+ 0, 64, :_reduce_20,
920
+ 0, 65, :_reduce_21,
921
+ 6, 56, :_reduce_22,
922
+ 1, 56, :_reduce_none,
923
+ 0, 68, :_reduce_24,
924
+ 0, 69, :_reduce_25,
925
+ 6, 57, :_reduce_26,
991
926
  1, 57, :_reduce_none,
992
- 0, 58, :_reduce_none,
993
- 1, 58, :_reduce_none,
994
- 1, 58, :_reduce_none,
995
- 1, 58, :_reduce_none,
996
- 1, 65, :_reduce_106,
997
- 2, 65, :_reduce_107,
998
- 1, 103, :_reduce_none,
927
+ 0, 70, :_reduce_28,
928
+ 0, 71, :_reduce_29,
929
+ 7, 57, :_reduce_none,
930
+ 0, 72, :_reduce_31,
931
+ 0, 73, :_reduce_32,
932
+ 7, 57, :_reduce_33,
933
+ 0, 74, :_reduce_34,
934
+ 0, 75, :_reduce_35,
935
+ 7, 57, :_reduce_36,
936
+ 2, 66, :_reduce_none,
937
+ 2, 66, :_reduce_38,
938
+ 2, 66, :_reduce_39,
939
+ 2, 66, :_reduce_40,
940
+ 2, 66, :_reduce_41,
941
+ 2, 66, :_reduce_42,
942
+ 1, 76, :_reduce_43,
943
+ 2, 76, :_reduce_44,
944
+ 3, 76, :_reduce_45,
945
+ 1, 79, :_reduce_46,
946
+ 2, 79, :_reduce_47,
947
+ 3, 80, :_reduce_48,
948
+ 7, 58, :_reduce_49,
949
+ 1, 84, :_reduce_50,
950
+ 3, 84, :_reduce_51,
951
+ 1, 85, :_reduce_52,
952
+ 3, 85, :_reduce_53,
953
+ 0, 86, :_reduce_54,
954
+ 1, 86, :_reduce_55,
955
+ 3, 86, :_reduce_56,
956
+ 3, 86, :_reduce_57,
957
+ 5, 86, :_reduce_58,
958
+ 0, 91, :_reduce_59,
959
+ 0, 92, :_reduce_60,
960
+ 7, 86, :_reduce_61,
961
+ 3, 86, :_reduce_62,
962
+ 0, 82, :_reduce_none,
963
+ 1, 82, :_reduce_none,
964
+ 0, 83, :_reduce_none,
965
+ 1, 83, :_reduce_none,
966
+ 1, 77, :_reduce_67,
967
+ 2, 77, :_reduce_68,
968
+ 3, 77, :_reduce_69,
969
+ 1, 93, :_reduce_70,
970
+ 2, 93, :_reduce_71,
971
+ 1, 87, :_reduce_none,
972
+ 1, 87, :_reduce_none,
973
+ 0, 95, :_reduce_74,
974
+ 0, 96, :_reduce_75,
975
+ 6, 61, :_reduce_76,
976
+ 0, 97, :_reduce_77,
977
+ 0, 98, :_reduce_78,
978
+ 5, 61, :_reduce_79,
979
+ 1, 78, :_reduce_80,
980
+ 2, 78, :_reduce_81,
981
+ 3, 78, :_reduce_82,
982
+ 1, 99, :_reduce_83,
983
+ 2, 99, :_reduce_84,
984
+ 1, 100, :_reduce_none,
985
+ 1, 81, :_reduce_86,
986
+ 1, 81, :_reduce_87,
987
+ 1, 51, :_reduce_none,
988
+ 2, 51, :_reduce_none,
989
+ 1, 101, :_reduce_none,
990
+ 2, 101, :_reduce_none,
991
+ 4, 102, :_reduce_92,
992
+ 1, 104, :_reduce_93,
993
+ 3, 104, :_reduce_94,
994
+ 2, 104, :_reduce_none,
995
+ 0, 105, :_reduce_96,
996
+ 1, 105, :_reduce_97,
997
+ 3, 105, :_reduce_98,
998
+ 4, 105, :_reduce_99,
999
+ 6, 105, :_reduce_100,
1000
+ 0, 107, :_reduce_101,
1001
+ 0, 108, :_reduce_102,
1002
+ 7, 105, :_reduce_103,
1003
+ 3, 105, :_reduce_104,
1004
+ 1, 89, :_reduce_none,
1005
+ 1, 89, :_reduce_none,
1006
+ 1, 89, :_reduce_none,
1007
+ 1, 90, :_reduce_108,
1008
+ 3, 90, :_reduce_109,
1009
+ 2, 90, :_reduce_110,
1010
+ 4, 90, :_reduce_111,
1011
+ 0, 88, :_reduce_none,
1012
+ 3, 88, :_reduce_113,
999
1013
  1, 103, :_reduce_none,
1000
- 1, 84, :_reduce_110,
1001
- 0, 98, :_reduce_none,
1002
- 1, 98, :_reduce_none ]
1003
-
1004
- racc_reduce_n = 113
1005
-
1006
- racc_shift_n = 179
1014
+ 0, 52, :_reduce_none,
1015
+ 0, 109, :_reduce_116,
1016
+ 3, 52, :_reduce_117,
1017
+ 1, 59, :_reduce_none,
1018
+ 0, 60, :_reduce_none,
1019
+ 1, 60, :_reduce_none,
1020
+ 1, 60, :_reduce_none,
1021
+ 1, 60, :_reduce_none,
1022
+ 1, 67, :_reduce_123,
1023
+ 2, 67, :_reduce_124,
1024
+ 1, 110, :_reduce_none,
1025
+ 1, 110, :_reduce_none,
1026
+ 1, 94, :_reduce_127,
1027
+ 0, 106, :_reduce_none,
1028
+ 1, 106, :_reduce_none ]
1029
+
1030
+ racc_reduce_n = 130
1031
+
1032
+ racc_shift_n = 214
1007
1033
 
1008
1034
  racc_token_table = {
1009
1035
  false => 0,
@@ -1039,21 +1065,22 @@ racc_token_table = {
1039
1065
  "%right" => 30,
1040
1066
  "%precedence" => 31,
1041
1067
  "%nonassoc" => 32,
1042
- ":" => 33,
1043
- "|" => 34,
1044
- "%empty" => 35,
1045
- "(" => 36,
1046
- ")" => 37,
1047
- "%prec" => 38,
1048
- "?" => 39,
1049
- "+" => 40,
1050
- "*" => 41,
1051
- "," => 42,
1052
- "[" => 43,
1053
- "]" => 44,
1054
- "{...}" => 45 }
1055
-
1056
- racc_nt_base = 46
1068
+ "%rule" => 33,
1069
+ "(" => 34,
1070
+ ")" => 35,
1071
+ ":" => 36,
1072
+ "," => 37,
1073
+ "|" => 38,
1074
+ "%empty" => 39,
1075
+ "%prec" => 40,
1076
+ "?" => 41,
1077
+ "+" => 42,
1078
+ "*" => 43,
1079
+ "[" => 44,
1080
+ "]" => 45,
1081
+ "{...}" => 46 }
1082
+
1083
+ racc_nt_base = 47
1057
1084
 
1058
1085
  racc_use_result_var = true
1059
1086
 
@@ -1108,16 +1135,17 @@ Racc_token_to_s_table = [
1108
1135
  "\"%right\"",
1109
1136
  "\"%precedence\"",
1110
1137
  "\"%nonassoc\"",
1138
+ "\"%rule\"",
1139
+ "\"(\"",
1140
+ "\")\"",
1111
1141
  "\":\"",
1142
+ "\",\"",
1112
1143
  "\"|\"",
1113
1144
  "\"%empty\"",
1114
- "\"(\"",
1115
- "\")\"",
1116
1145
  "\"%prec\"",
1117
1146
  "\"?\"",
1118
1147
  "\"+\"",
1119
1148
  "\"*\"",
1120
- "\",\"",
1121
1149
  "\"[\"",
1122
1150
  "\"]\"",
1123
1151
  "\"{...}\"",
@@ -1132,6 +1160,7 @@ Racc_token_to_s_table = [
1132
1160
  "@2",
1133
1161
  "bison_declaration",
1134
1162
  "grammar_declaration",
1163
+ "rule_declaration",
1135
1164
  "variable",
1136
1165
  "value",
1137
1166
  "params",
@@ -1157,27 +1186,32 @@ Racc_token_to_s_table = [
1157
1186
  "id",
1158
1187
  "int_opt",
1159
1188
  "alias",
1160
- "symbol_declaration_list",
1189
+ "rule_args",
1190
+ "rule_rhs_list",
1191
+ "rule_rhs",
1161
1192
  "symbol",
1162
- "string_as_id",
1193
+ "named_ref_opt",
1194
+ "parameterizing_suffix",
1195
+ "parameterizing_args",
1163
1196
  "@15",
1164
1197
  "@16",
1198
+ "symbol_declaration_list",
1199
+ "string_as_id",
1165
1200
  "@17",
1166
1201
  "@18",
1202
+ "@19",
1203
+ "@20",
1167
1204
  "token_declaration_list_for_precedence",
1168
1205
  "token_declaration_for_precedence",
1169
1206
  "rules_or_grammar_declaration",
1170
1207
  "rules",
1171
1208
  "id_colon",
1172
- "named_ref_opt",
1173
1209
  "rhs_list",
1174
1210
  "rhs",
1175
- "parameterizing_suffix",
1176
1211
  "tag_opt",
1177
- "parameterizing_args",
1178
- "@19",
1179
- "@20",
1180
1212
  "@21",
1213
+ "@22",
1214
+ "@23",
1181
1215
  "generic_symlist_item" ]
1182
1216
  Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
1183
1217
 
@@ -1231,19 +1265,21 @@ module_eval(<<'.,.,', 'parser.y', 27)
1231
1265
 
1232
1266
  # reduce 10 omitted
1233
1267
 
1234
- module_eval(<<'.,.,', 'parser.y', 31)
1235
- def _reduce_11(val, _values, result)
1268
+ # reduce 11 omitted
1269
+
1270
+ module_eval(<<'.,.,', 'parser.y', 32)
1271
+ def _reduce_12(val, _values, result)
1236
1272
  @grammar.expect = val[1]
1237
1273
  result
1238
1274
  end
1239
1275
  .,.,
1240
1276
 
1241
- # reduce 12 omitted
1242
-
1243
1277
  # reduce 13 omitted
1244
1278
 
1245
- module_eval(<<'.,.,', 'parser.y', 36)
1246
- def _reduce_14(val, _values, result)
1279
+ # reduce 14 omitted
1280
+
1281
+ module_eval(<<'.,.,', 'parser.y', 37)
1282
+ def _reduce_15(val, _values, result)
1247
1283
  val[1].each {|token|
1248
1284
  @grammar.lex_param = Grammar::Code::NoReferenceCode.new(type: :lex_param, token_code: token).token_code.s_value
1249
1285
  }
@@ -1252,8 +1288,8 @@ module_eval(<<'.,.,', 'parser.y', 36)
1252
1288
  end
1253
1289
  .,.,
1254
1290
 
1255
- module_eval(<<'.,.,', 'parser.y', 42)
1256
- def _reduce_15(val, _values, result)
1291
+ module_eval(<<'.,.,', 'parser.y', 43)
1292
+ def _reduce_16(val, _values, result)
1257
1293
  val[1].each {|token|
1258
1294
  @grammar.parse_param = Grammar::Code::NoReferenceCode.new(type: :parse_param, token_code: token).token_code.s_value
1259
1295
  }
@@ -1262,74 +1298,74 @@ module_eval(<<'.,.,', 'parser.y', 42)
1262
1298
  end
1263
1299
  .,.,
1264
1300
 
1265
- module_eval(<<'.,.,', 'parser.y', 48)
1266
- def _reduce_16(val, _values, result)
1301
+ module_eval(<<'.,.,', 'parser.y', 49)
1302
+ def _reduce_17(val, _values, result)
1267
1303
  begin_c_declaration("}")
1268
1304
 
1269
1305
  result
1270
1306
  end
1271
1307
  .,.,
1272
1308
 
1273
- module_eval(<<'.,.,', 'parser.y', 52)
1274
- def _reduce_17(val, _values, result)
1309
+ module_eval(<<'.,.,', 'parser.y', 53)
1310
+ def _reduce_18(val, _values, result)
1275
1311
  end_c_declaration
1276
1312
 
1277
1313
  result
1278
1314
  end
1279
1315
  .,.,
1280
1316
 
1281
- module_eval(<<'.,.,', 'parser.y', 56)
1282
- def _reduce_18(val, _values, result)
1317
+ module_eval(<<'.,.,', 'parser.y', 57)
1318
+ def _reduce_19(val, _values, result)
1283
1319
  @grammar.add_percent_code(id: val[1], code: val[4])
1284
1320
 
1285
1321
  result
1286
1322
  end
1287
1323
  .,.,
1288
1324
 
1289
- module_eval(<<'.,.,', 'parser.y', 60)
1290
- def _reduce_19(val, _values, result)
1325
+ module_eval(<<'.,.,', 'parser.y', 61)
1326
+ def _reduce_20(val, _values, result)
1291
1327
  begin_c_declaration("}")
1292
1328
 
1293
1329
  result
1294
1330
  end
1295
1331
  .,.,
1296
1332
 
1297
- module_eval(<<'.,.,', 'parser.y', 64)
1298
- def _reduce_20(val, _values, result)
1333
+ module_eval(<<'.,.,', 'parser.y', 65)
1334
+ def _reduce_21(val, _values, result)
1299
1335
  end_c_declaration
1300
1336
 
1301
1337
  result
1302
1338
  end
1303
1339
  .,.,
1304
1340
 
1305
- module_eval(<<'.,.,', 'parser.y', 68)
1306
- def _reduce_21(val, _values, result)
1341
+ module_eval(<<'.,.,', 'parser.y', 69)
1342
+ def _reduce_22(val, _values, result)
1307
1343
  @grammar.initial_action = Grammar::Code::InitialActionCode.new(type: :initial_action, token_code: val[3])
1308
1344
 
1309
1345
  result
1310
1346
  end
1311
1347
  .,.,
1312
1348
 
1313
- # reduce 22 omitted
1349
+ # reduce 23 omitted
1314
1350
 
1315
- module_eval(<<'.,.,', 'parser.y', 74)
1316
- def _reduce_23(val, _values, result)
1351
+ module_eval(<<'.,.,', 'parser.y', 75)
1352
+ def _reduce_24(val, _values, result)
1317
1353
  begin_c_declaration("}")
1318
1354
 
1319
1355
  result
1320
1356
  end
1321
1357
  .,.,
1322
1358
 
1323
- module_eval(<<'.,.,', 'parser.y', 78)
1324
- def _reduce_24(val, _values, result)
1359
+ module_eval(<<'.,.,', 'parser.y', 79)
1360
+ def _reduce_25(val, _values, result)
1325
1361
  end_c_declaration
1326
1362
 
1327
1363
  result
1328
1364
  end
1329
1365
  .,.,
1330
1366
 
1331
- module_eval(<<'.,.,', 'parser.y', 82)
1332
- def _reduce_25(val, _values, result)
1367
+ module_eval(<<'.,.,', 'parser.y', 83)
1368
+ def _reduce_26(val, _values, result)
1333
1369
  @grammar.set_union(
1334
1370
  Grammar::Code::NoReferenceCode.new(type: :union, token_code: val[3]),
1335
1371
  val[3].line
@@ -1339,44 +1375,44 @@ module_eval(<<'.,.,', 'parser.y', 82)
1339
1375
  end
1340
1376
  .,.,
1341
1377
 
1342
- # reduce 26 omitted
1378
+ # reduce 27 omitted
1343
1379
 
1344
- module_eval(<<'.,.,', 'parser.y', 90)
1345
- def _reduce_27(val, _values, result)
1380
+ module_eval(<<'.,.,', 'parser.y', 91)
1381
+ def _reduce_28(val, _values, result)
1346
1382
  begin_c_declaration("}")
1347
1383
 
1348
1384
  result
1349
1385
  end
1350
1386
  .,.,
1351
1387
 
1352
- module_eval(<<'.,.,', 'parser.y', 94)
1353
- def _reduce_28(val, _values, result)
1388
+ module_eval(<<'.,.,', 'parser.y', 95)
1389
+ def _reduce_29(val, _values, result)
1354
1390
  end_c_declaration
1355
1391
 
1356
1392
  result
1357
1393
  end
1358
1394
  .,.,
1359
1395
 
1360
- # reduce 29 omitted
1396
+ # reduce 30 omitted
1361
1397
 
1362
- module_eval(<<'.,.,', 'parser.y', 99)
1363
- def _reduce_30(val, _values, result)
1398
+ module_eval(<<'.,.,', 'parser.y', 100)
1399
+ def _reduce_31(val, _values, result)
1364
1400
  begin_c_declaration("}")
1365
1401
 
1366
1402
  result
1367
1403
  end
1368
1404
  .,.,
1369
1405
 
1370
- module_eval(<<'.,.,', 'parser.y', 103)
1371
- def _reduce_31(val, _values, result)
1406
+ module_eval(<<'.,.,', 'parser.y', 104)
1407
+ def _reduce_32(val, _values, result)
1372
1408
  end_c_declaration
1373
1409
 
1374
1410
  result
1375
1411
  end
1376
1412
  .,.,
1377
1413
 
1378
- module_eval(<<'.,.,', 'parser.y', 107)
1379
- def _reduce_32(val, _values, result)
1414
+ module_eval(<<'.,.,', 'parser.y', 108)
1415
+ def _reduce_33(val, _values, result)
1380
1416
  @grammar.add_printer(
1381
1417
  ident_or_tags: val[6],
1382
1418
  token_code: val[3],
@@ -1387,24 +1423,24 @@ module_eval(<<'.,.,', 'parser.y', 107)
1387
1423
  end
1388
1424
  .,.,
1389
1425
 
1390
- module_eval(<<'.,.,', 'parser.y', 115)
1391
- def _reduce_33(val, _values, result)
1426
+ module_eval(<<'.,.,', 'parser.y', 116)
1427
+ def _reduce_34(val, _values, result)
1392
1428
  begin_c_declaration("}")
1393
1429
 
1394
1430
  result
1395
1431
  end
1396
1432
  .,.,
1397
1433
 
1398
- module_eval(<<'.,.,', 'parser.y', 119)
1399
- def _reduce_34(val, _values, result)
1434
+ module_eval(<<'.,.,', 'parser.y', 120)
1435
+ def _reduce_35(val, _values, result)
1400
1436
  end_c_declaration
1401
1437
 
1402
1438
  result
1403
1439
  end
1404
1440
  .,.,
1405
1441
 
1406
- module_eval(<<'.,.,', 'parser.y', 123)
1407
- def _reduce_35(val, _values, result)
1442
+ module_eval(<<'.,.,', 'parser.y', 124)
1443
+ def _reduce_36(val, _values, result)
1408
1444
  @grammar.add_error_token(
1409
1445
  ident_or_tags: val[6],
1410
1446
  token_code: val[3],
@@ -1415,10 +1451,10 @@ module_eval(<<'.,.,', 'parser.y', 123)
1415
1451
  end
1416
1452
  .,.,
1417
1453
 
1418
- # reduce 36 omitted
1454
+ # reduce 37 omitted
1419
1455
 
1420
- module_eval(<<'.,.,', 'parser.y', 133)
1421
- def _reduce_37(val, _values, result)
1456
+ module_eval(<<'.,.,', 'parser.y', 134)
1457
+ def _reduce_38(val, _values, result)
1422
1458
  val[1].each {|hash|
1423
1459
  hash[:tokens].each {|id|
1424
1460
  @grammar.add_type(id: id, tag: hash[:tag])
@@ -1429,8 +1465,8 @@ module_eval(<<'.,.,', 'parser.y', 133)
1429
1465
  end
1430
1466
  .,.,
1431
1467
 
1432
- module_eval(<<'.,.,', 'parser.y', 141)
1433
- def _reduce_38(val, _values, result)
1468
+ module_eval(<<'.,.,', 'parser.y', 142)
1469
+ def _reduce_39(val, _values, result)
1434
1470
  val[1].each {|hash|
1435
1471
  hash[:tokens].each {|id|
1436
1472
  sym = @grammar.add_term(id: id)
@@ -1443,8 +1479,8 @@ module_eval(<<'.,.,', 'parser.y', 141)
1443
1479
  end
1444
1480
  .,.,
1445
1481
 
1446
- module_eval(<<'.,.,', 'parser.y', 151)
1447
- def _reduce_39(val, _values, result)
1482
+ module_eval(<<'.,.,', 'parser.y', 152)
1483
+ def _reduce_40(val, _values, result)
1448
1484
  val[1].each {|hash|
1449
1485
  hash[:tokens].each {|id|
1450
1486
  sym = @grammar.add_term(id: id)
@@ -1457,8 +1493,8 @@ module_eval(<<'.,.,', 'parser.y', 151)
1457
1493
  end
1458
1494
  .,.,
1459
1495
 
1460
- module_eval(<<'.,.,', 'parser.y', 161)
1461
- def _reduce_40(val, _values, result)
1496
+ module_eval(<<'.,.,', 'parser.y', 162)
1497
+ def _reduce_41(val, _values, result)
1462
1498
  val[1].each {|hash|
1463
1499
  hash[:tokens].each {|id|
1464
1500
  sym = @grammar.add_term(id: id)
@@ -1471,8 +1507,8 @@ module_eval(<<'.,.,', 'parser.y', 161)
1471
1507
  end
1472
1508
  .,.,
1473
1509
 
1474
- module_eval(<<'.,.,', 'parser.y', 171)
1475
- def _reduce_41(val, _values, result)
1510
+ module_eval(<<'.,.,', 'parser.y', 172)
1511
+ def _reduce_42(val, _values, result)
1476
1512
  val[1].each {|hash|
1477
1513
  hash[:tokens].each {|id|
1478
1514
  sym = @grammar.add_term(id: id)
@@ -1485,8 +1521,8 @@ module_eval(<<'.,.,', 'parser.y', 171)
1485
1521
  end
1486
1522
  .,.,
1487
1523
 
1488
- module_eval(<<'.,.,', 'parser.y', 182)
1489
- def _reduce_42(val, _values, result)
1524
+ module_eval(<<'.,.,', 'parser.y', 183)
1525
+ def _reduce_43(val, _values, result)
1490
1526
  val[0].each {|token_declaration|
1491
1527
  @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: nil, replace: true)
1492
1528
  }
@@ -1495,8 +1531,8 @@ module_eval(<<'.,.,', 'parser.y', 182)
1495
1531
  end
1496
1532
  .,.,
1497
1533
 
1498
- module_eval(<<'.,.,', 'parser.y', 188)
1499
- def _reduce_43(val, _values, result)
1534
+ module_eval(<<'.,.,', 'parser.y', 189)
1535
+ def _reduce_44(val, _values, result)
1500
1536
  val[1].each {|token_declaration|
1501
1537
  @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[0], replace: true)
1502
1538
  }
@@ -1505,8 +1541,8 @@ module_eval(<<'.,.,', 'parser.y', 188)
1505
1541
  end
1506
1542
  .,.,
1507
1543
 
1508
- module_eval(<<'.,.,', 'parser.y', 194)
1509
- def _reduce_44(val, _values, result)
1544
+ module_eval(<<'.,.,', 'parser.y', 195)
1545
+ def _reduce_45(val, _values, result)
1510
1546
  val[2].each {|token_declaration|
1511
1547
  @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[1], replace: true)
1512
1548
  }
@@ -1515,86 +1551,131 @@ module_eval(<<'.,.,', 'parser.y', 194)
1515
1551
  end
1516
1552
  .,.,
1517
1553
 
1518
- module_eval(<<'.,.,', 'parser.y', 199)
1519
- def _reduce_45(val, _values, result)
1554
+ module_eval(<<'.,.,', 'parser.y', 200)
1555
+ def _reduce_46(val, _values, result)
1520
1556
  result = [val[0]]
1521
1557
  result
1522
1558
  end
1523
1559
  .,.,
1524
1560
 
1525
- module_eval(<<'.,.,', 'parser.y', 200)
1526
- def _reduce_46(val, _values, result)
1561
+ module_eval(<<'.,.,', 'parser.y', 201)
1562
+ def _reduce_47(val, _values, result)
1527
1563
  result = val[0].append(val[1])
1528
1564
  result
1529
1565
  end
1530
1566
  .,.,
1531
1567
 
1532
- module_eval(<<'.,.,', 'parser.y', 202)
1533
- def _reduce_47(val, _values, result)
1568
+ module_eval(<<'.,.,', 'parser.y', 203)
1569
+ def _reduce_48(val, _values, result)
1534
1570
  result = val
1535
1571
  result
1536
1572
  end
1537
1573
  .,.,
1538
1574
 
1539
- # reduce 48 omitted
1575
+ module_eval(<<'.,.,', 'parser.y', 207)
1576
+ def _reduce_49(val, _values, result)
1577
+ rule = Grammar::ParameterizingRule::Rule.new(val[1].s_value, val[3], val[6])
1578
+ @grammar.add_parameterizing_rule(rule)
1540
1579
 
1541
- # reduce 49 omitted
1542
-
1543
- # reduce 50 omitted
1580
+ result
1581
+ end
1582
+ .,.,
1544
1583
 
1545
- # reduce 51 omitted
1584
+ module_eval(<<'.,.,', 'parser.y', 211)
1585
+ def _reduce_50(val, _values, result)
1586
+ result = [val[0]]
1587
+ result
1588
+ end
1589
+ .,.,
1546
1590
 
1547
1591
  module_eval(<<'.,.,', 'parser.y', 212)
1592
+ def _reduce_51(val, _values, result)
1593
+ result = val[0].append(val[2])
1594
+ result
1595
+ end
1596
+ .,.,
1597
+
1598
+ module_eval(<<'.,.,', 'parser.y', 216)
1548
1599
  def _reduce_52(val, _values, result)
1549
- result = [{tag: nil, tokens: val[0]}]
1600
+ builder = val[0]
1601
+ result = [builder]
1550
1602
 
1551
1603
  result
1552
1604
  end
1553
1605
  .,.,
1554
1606
 
1555
- module_eval(<<'.,.,', 'parser.y', 216)
1607
+ module_eval(<<'.,.,', 'parser.y', 221)
1556
1608
  def _reduce_53(val, _values, result)
1557
- result = [{tag: val[0], tokens: val[1]}]
1609
+ builder = val[2]
1610
+ result = val[0].append(builder)
1558
1611
 
1559
1612
  result
1560
1613
  end
1561
1614
  .,.,
1562
1615
 
1563
- module_eval(<<'.,.,', 'parser.y', 220)
1616
+ module_eval(<<'.,.,', 'parser.y', 227)
1564
1617
  def _reduce_54(val, _values, result)
1565
- result = val[0].append({tag: val[1], tokens: val[2]})
1618
+ reset_precs
1619
+ result = Grammar::ParameterizingRule::Rhs.new
1566
1620
 
1567
1621
  result
1568
1622
  end
1569
1623
  .,.,
1570
1624
 
1571
- module_eval(<<'.,.,', 'parser.y', 223)
1625
+ module_eval(<<'.,.,', 'parser.y', 232)
1572
1626
  def _reduce_55(val, _values, result)
1573
- result = [val[0]]
1627
+ reset_precs
1628
+ result = Grammar::ParameterizingRule::Rhs.new
1629
+
1574
1630
  result
1575
1631
  end
1576
1632
  .,.,
1577
1633
 
1578
- module_eval(<<'.,.,', 'parser.y', 224)
1634
+ module_eval(<<'.,.,', 'parser.y', 237)
1579
1635
  def _reduce_56(val, _values, result)
1580
- result = val[0].append(val[1])
1636
+ token = val[1]
1637
+ token.alias_name = val[2]
1638
+ builder = val[0]
1639
+ builder.symbols << token
1640
+ result = builder
1641
+
1581
1642
  result
1582
1643
  end
1583
1644
  .,.,
1584
1645
 
1585
- # reduce 57 omitted
1646
+ module_eval(<<'.,.,', 'parser.y', 245)
1647
+ def _reduce_57(val, _values, result)
1648
+ builder = val[0]
1649
+ builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]])
1650
+ result = builder
1586
1651
 
1587
- # reduce 58 omitted
1652
+ result
1653
+ end
1654
+ .,.,
1655
+
1656
+ module_eval(<<'.,.,', 'parser.y', 251)
1657
+ def _reduce_58(val, _values, result)
1658
+ builder = val[0]
1659
+ builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3])
1660
+ result = builder
1661
+
1662
+ result
1663
+ end
1664
+ .,.,
1588
1665
 
1589
- module_eval(<<'.,.,', 'parser.y', 231)
1666
+ module_eval(<<'.,.,', 'parser.y', 257)
1590
1667
  def _reduce_59(val, _values, result)
1591
- begin_c_declaration("}")
1668
+ if @prec_seen
1669
+ on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec
1670
+ @code_after_prec = true
1671
+ end
1672
+ begin_c_declaration("}")
1592
1673
 
1593
1674
  result
1594
1675
  end
1595
1676
  .,.,
1596
1677
 
1597
- module_eval(<<'.,.,', 'parser.y', 235)
1678
+ module_eval(<<'.,.,', 'parser.y', 265)
1598
1679
  def _reduce_60(val, _values, result)
1599
1680
  end_c_declaration
1600
1681
 
@@ -1602,102 +1683,192 @@ module_eval(<<'.,.,', 'parser.y', 235)
1602
1683
  end
1603
1684
  .,.,
1604
1685
 
1605
- module_eval(<<'.,.,', 'parser.y', 239)
1686
+ module_eval(<<'.,.,', 'parser.y', 269)
1606
1687
  def _reduce_61(val, _values, result)
1607
- result = val[0].append(val[3])
1688
+ user_code = val[3]
1689
+ user_code.alias_name = val[6]
1690
+ builder = val[0]
1691
+ builder.user_code = user_code
1692
+ result = builder
1608
1693
 
1609
1694
  result
1610
1695
  end
1611
1696
  .,.,
1612
1697
 
1613
- module_eval(<<'.,.,', 'parser.y', 243)
1698
+ module_eval(<<'.,.,', 'parser.y', 277)
1614
1699
  def _reduce_62(val, _values, result)
1700
+ sym = @grammar.find_symbol_by_id!(val[2])
1701
+ @prec_seen = true
1702
+ builder = val[0]
1703
+ builder.precedence_sym = sym
1704
+ result = builder
1705
+
1706
+ result
1707
+ end
1708
+ .,.,
1709
+
1710
+ # reduce 63 omitted
1711
+
1712
+ # reduce 64 omitted
1713
+
1714
+ # reduce 65 omitted
1715
+
1716
+ # reduce 66 omitted
1717
+
1718
+ module_eval(<<'.,.,', 'parser.y', 292)
1719
+ def _reduce_67(val, _values, result)
1720
+ result = [{tag: nil, tokens: val[0]}]
1721
+
1722
+ result
1723
+ end
1724
+ .,.,
1725
+
1726
+ module_eval(<<'.,.,', 'parser.y', 296)
1727
+ def _reduce_68(val, _values, result)
1728
+ result = [{tag: val[0], tokens: val[1]}]
1729
+
1730
+ result
1731
+ end
1732
+ .,.,
1733
+
1734
+ module_eval(<<'.,.,', 'parser.y', 300)
1735
+ def _reduce_69(val, _values, result)
1736
+ result = val[0].append({tag: val[1], tokens: val[2]})
1737
+
1738
+ result
1739
+ end
1740
+ .,.,
1741
+
1742
+ module_eval(<<'.,.,', 'parser.y', 303)
1743
+ def _reduce_70(val, _values, result)
1744
+ result = [val[0]]
1745
+ result
1746
+ end
1747
+ .,.,
1748
+
1749
+ module_eval(<<'.,.,', 'parser.y', 304)
1750
+ def _reduce_71(val, _values, result)
1751
+ result = val[0].append(val[1])
1752
+ result
1753
+ end
1754
+ .,.,
1755
+
1756
+ # reduce 72 omitted
1757
+
1758
+ # reduce 73 omitted
1759
+
1760
+ module_eval(<<'.,.,', 'parser.y', 311)
1761
+ def _reduce_74(val, _values, result)
1615
1762
  begin_c_declaration("}")
1616
1763
 
1617
1764
  result
1618
1765
  end
1619
1766
  .,.,
1620
1767
 
1621
- module_eval(<<'.,.,', 'parser.y', 247)
1622
- def _reduce_63(val, _values, result)
1768
+ module_eval(<<'.,.,', 'parser.y', 315)
1769
+ def _reduce_75(val, _values, result)
1623
1770
  end_c_declaration
1624
1771
 
1625
1772
  result
1626
1773
  end
1627
1774
  .,.,
1628
1775
 
1629
- module_eval(<<'.,.,', 'parser.y', 251)
1630
- def _reduce_64(val, _values, result)
1776
+ module_eval(<<'.,.,', 'parser.y', 319)
1777
+ def _reduce_76(val, _values, result)
1778
+ result = val[0].append(val[3])
1779
+
1780
+ result
1781
+ end
1782
+ .,.,
1783
+
1784
+ module_eval(<<'.,.,', 'parser.y', 323)
1785
+ def _reduce_77(val, _values, result)
1786
+ begin_c_declaration("}")
1787
+
1788
+ result
1789
+ end
1790
+ .,.,
1791
+
1792
+ module_eval(<<'.,.,', 'parser.y', 327)
1793
+ def _reduce_78(val, _values, result)
1794
+ end_c_declaration
1795
+
1796
+ result
1797
+ end
1798
+ .,.,
1799
+
1800
+ module_eval(<<'.,.,', 'parser.y', 331)
1801
+ def _reduce_79(val, _values, result)
1631
1802
  result = [val[2]]
1632
1803
 
1633
1804
  result
1634
1805
  end
1635
1806
  .,.,
1636
1807
 
1637
- module_eval(<<'.,.,', 'parser.y', 256)
1638
- def _reduce_65(val, _values, result)
1808
+ module_eval(<<'.,.,', 'parser.y', 336)
1809
+ def _reduce_80(val, _values, result)
1639
1810
  result = [{tag: nil, tokens: val[0]}]
1640
1811
 
1641
1812
  result
1642
1813
  end
1643
1814
  .,.,
1644
1815
 
1645
- module_eval(<<'.,.,', 'parser.y', 260)
1646
- def _reduce_66(val, _values, result)
1816
+ module_eval(<<'.,.,', 'parser.y', 340)
1817
+ def _reduce_81(val, _values, result)
1647
1818
  result = [{tag: val[0], tokens: val[1]}]
1648
1819
 
1649
1820
  result
1650
1821
  end
1651
1822
  .,.,
1652
1823
 
1653
- module_eval(<<'.,.,', 'parser.y', 264)
1654
- def _reduce_67(val, _values, result)
1824
+ module_eval(<<'.,.,', 'parser.y', 344)
1825
+ def _reduce_82(val, _values, result)
1655
1826
  result = val[0].append({tag: val[1], tokens: val[2]})
1656
1827
 
1657
1828
  result
1658
1829
  end
1659
1830
  .,.,
1660
1831
 
1661
- module_eval(<<'.,.,', 'parser.y', 267)
1662
- def _reduce_68(val, _values, result)
1832
+ module_eval(<<'.,.,', 'parser.y', 347)
1833
+ def _reduce_83(val, _values, result)
1663
1834
  result = [val[0]]
1664
1835
  result
1665
1836
  end
1666
1837
  .,.,
1667
1838
 
1668
- module_eval(<<'.,.,', 'parser.y', 268)
1669
- def _reduce_69(val, _values, result)
1839
+ module_eval(<<'.,.,', 'parser.y', 348)
1840
+ def _reduce_84(val, _values, result)
1670
1841
  result = val[0].append(val[1])
1671
1842
  result
1672
1843
  end
1673
1844
  .,.,
1674
1845
 
1675
- # reduce 70 omitted
1846
+ # reduce 85 omitted
1676
1847
 
1677
- module_eval(<<'.,.,', 'parser.y', 272)
1678
- def _reduce_71(val, _values, result)
1848
+ module_eval(<<'.,.,', 'parser.y', 352)
1849
+ def _reduce_86(val, _values, result)
1679
1850
  on_action_error("ident after %prec", val[0]) if @prec_seen
1680
1851
  result
1681
1852
  end
1682
1853
  .,.,
1683
1854
 
1684
- module_eval(<<'.,.,', 'parser.y', 273)
1685
- def _reduce_72(val, _values, result)
1855
+ module_eval(<<'.,.,', 'parser.y', 353)
1856
+ def _reduce_87(val, _values, result)
1686
1857
  on_action_error("char after %prec", val[0]) if @prec_seen
1687
1858
  result
1688
1859
  end
1689
1860
  .,.,
1690
1861
 
1691
- # reduce 73 omitted
1862
+ # reduce 88 omitted
1692
1863
 
1693
- # reduce 74 omitted
1864
+ # reduce 89 omitted
1694
1865
 
1695
- # reduce 75 omitted
1866
+ # reduce 90 omitted
1696
1867
 
1697
- # reduce 76 omitted
1868
+ # reduce 91 omitted
1698
1869
 
1699
- module_eval(<<'.,.,', 'parser.y', 283)
1700
- def _reduce_77(val, _values, result)
1870
+ module_eval(<<'.,.,', 'parser.y', 363)
1871
+ def _reduce_92(val, _values, result)
1701
1872
  lhs = val[0]
1702
1873
  lhs.alias_name = val[1]
1703
1874
  val[3].each do |builder|
@@ -1710,8 +1881,8 @@ module_eval(<<'.,.,', 'parser.y', 283)
1710
1881
  end
1711
1882
  .,.,
1712
1883
 
1713
- module_eval(<<'.,.,', 'parser.y', 294)
1714
- def _reduce_78(val, _values, result)
1884
+ module_eval(<<'.,.,', 'parser.y', 374)
1885
+ def _reduce_93(val, _values, result)
1715
1886
  builder = val[0]
1716
1887
  if !builder.line
1717
1888
  builder.line = @lexer.line - 1
@@ -1722,8 +1893,8 @@ module_eval(<<'.,.,', 'parser.y', 294)
1722
1893
  end
1723
1894
  .,.,
1724
1895
 
1725
- module_eval(<<'.,.,', 'parser.y', 302)
1726
- def _reduce_79(val, _values, result)
1896
+ module_eval(<<'.,.,', 'parser.y', 382)
1897
+ def _reduce_94(val, _values, result)
1727
1898
  builder = val[2]
1728
1899
  if !builder.line
1729
1900
  builder.line = @lexer.line - 1
@@ -1734,10 +1905,10 @@ module_eval(<<'.,.,', 'parser.y', 302)
1734
1905
  end
1735
1906
  .,.,
1736
1907
 
1737
- # reduce 80 omitted
1908
+ # reduce 95 omitted
1738
1909
 
1739
- module_eval(<<'.,.,', 'parser.y', 312)
1740
- def _reduce_81(val, _values, result)
1910
+ module_eval(<<'.,.,', 'parser.y', 392)
1911
+ def _reduce_96(val, _values, result)
1741
1912
  reset_precs
1742
1913
  result = Grammar::RuleBuilder.new(@rule_counter, @midrule_action_counter)
1743
1914
 
@@ -1745,8 +1916,8 @@ module_eval(<<'.,.,', 'parser.y', 312)
1745
1916
  end
1746
1917
  .,.,
1747
1918
 
1748
- module_eval(<<'.,.,', 'parser.y', 317)
1749
- def _reduce_82(val, _values, result)
1919
+ module_eval(<<'.,.,', 'parser.y', 397)
1920
+ def _reduce_97(val, _values, result)
1750
1921
  reset_precs
1751
1922
  result = Grammar::RuleBuilder.new(@rule_counter, @midrule_action_counter)
1752
1923
 
@@ -1754,8 +1925,8 @@ module_eval(<<'.,.,', 'parser.y', 317)
1754
1925
  end
1755
1926
  .,.,
1756
1927
 
1757
- module_eval(<<'.,.,', 'parser.y', 322)
1758
- def _reduce_83(val, _values, result)
1928
+ module_eval(<<'.,.,', 'parser.y', 402)
1929
+ def _reduce_98(val, _values, result)
1759
1930
  token = val[1]
1760
1931
  token.alias_name = val[2]
1761
1932
  builder = val[0]
@@ -1766,12 +1937,11 @@ module_eval(<<'.,.,', 'parser.y', 322)
1766
1937
  end
1767
1938
  .,.,
1768
1939
 
1769
- module_eval(<<'.,.,', 'parser.y', 330)
1770
- def _reduce_84(val, _values, result)
1771
- token = Lrama::Lexer::Token::Parameterizing.new(s_value: val[2], location: @lexer.location, args: [val[1]])
1940
+ module_eval(<<'.,.,', 'parser.y', 410)
1941
+ def _reduce_99(val, _values, result)
1942
+ token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]], lhs_tag: val[3])
1772
1943
  builder = val[0]
1773
1944
  builder.add_rhs(token)
1774
- builder.lhs_tag = val[3]
1775
1945
  builder.line = val[1].first_line
1776
1946
  result = builder
1777
1947
 
@@ -1779,12 +1949,11 @@ module_eval(<<'.,.,', 'parser.y', 330)
1779
1949
  end
1780
1950
  .,.,
1781
1951
 
1782
- module_eval(<<'.,.,', 'parser.y', 339)
1783
- def _reduce_85(val, _values, result)
1784
- token = Lrama::Lexer::Token::Parameterizing.new(s_value: val[1].s_value, location: @lexer.location, args: val[3])
1952
+ module_eval(<<'.,.,', 'parser.y', 418)
1953
+ def _reduce_100(val, _values, result)
1954
+ token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5])
1785
1955
  builder = val[0]
1786
1956
  builder.add_rhs(token)
1787
- builder.lhs_tag = val[5]
1788
1957
  builder.line = val[1].first_line
1789
1958
  result = builder
1790
1959
 
@@ -1792,8 +1961,8 @@ module_eval(<<'.,.,', 'parser.y', 339)
1792
1961
  end
1793
1962
  .,.,
1794
1963
 
1795
- module_eval(<<'.,.,', 'parser.y', 348)
1796
- def _reduce_86(val, _values, result)
1964
+ module_eval(<<'.,.,', 'parser.y', 426)
1965
+ def _reduce_101(val, _values, result)
1797
1966
  if @prec_seen
1798
1967
  on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec
1799
1968
  @code_after_prec = true
@@ -1804,16 +1973,16 @@ module_eval(<<'.,.,', 'parser.y', 348)
1804
1973
  end
1805
1974
  .,.,
1806
1975
 
1807
- module_eval(<<'.,.,', 'parser.y', 356)
1808
- def _reduce_87(val, _values, result)
1976
+ module_eval(<<'.,.,', 'parser.y', 434)
1977
+ def _reduce_102(val, _values, result)
1809
1978
  end_c_declaration
1810
1979
 
1811
1980
  result
1812
1981
  end
1813
1982
  .,.,
1814
1983
 
1815
- module_eval(<<'.,.,', 'parser.y', 360)
1816
- def _reduce_88(val, _values, result)
1984
+ module_eval(<<'.,.,', 'parser.y', 438)
1985
+ def _reduce_103(val, _values, result)
1817
1986
  user_code = val[3]
1818
1987
  user_code.alias_name = val[6]
1819
1988
  builder = val[0]
@@ -1824,8 +1993,8 @@ module_eval(<<'.,.,', 'parser.y', 360)
1824
1993
  end
1825
1994
  .,.,
1826
1995
 
1827
- module_eval(<<'.,.,', 'parser.y', 368)
1828
- def _reduce_89(val, _values, result)
1996
+ module_eval(<<'.,.,', 'parser.y', 446)
1997
+ def _reduce_104(val, _values, result)
1829
1998
  sym = @grammar.find_symbol_by_id!(val[2])
1830
1999
  @prec_seen = true
1831
2000
  builder = val[0]
@@ -1836,41 +2005,55 @@ module_eval(<<'.,.,', 'parser.y', 368)
1836
2005
  end
1837
2006
  .,.,
1838
2007
 
1839
- # reduce 90 omitted
2008
+ # reduce 105 omitted
1840
2009
 
1841
- # reduce 91 omitted
2010
+ # reduce 106 omitted
1842
2011
 
1843
- # reduce 92 omitted
2012
+ # reduce 107 omitted
1844
2013
 
1845
- module_eval(<<'.,.,', 'parser.y', 379)
1846
- def _reduce_93(val, _values, result)
2014
+ module_eval(<<'.,.,', 'parser.y', 457)
2015
+ def _reduce_108(val, _values, result)
1847
2016
  result = [val[0]]
1848
2017
  result
1849
2018
  end
1850
2019
  .,.,
1851
2020
 
1852
- module_eval(<<'.,.,', 'parser.y', 380)
1853
- def _reduce_94(val, _values, result)
2021
+ module_eval(<<'.,.,', 'parser.y', 458)
2022
+ def _reduce_109(val, _values, result)
1854
2023
  result = val[0].append(val[2])
1855
2024
  result
1856
2025
  end
1857
2026
  .,.,
1858
2027
 
1859
- # reduce 95 omitted
2028
+ module_eval(<<'.,.,', 'parser.y', 459)
2029
+ def _reduce_110(val, _values, result)
2030
+ result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[0])]
2031
+ result
2032
+ end
2033
+ .,.,
1860
2034
 
1861
- module_eval(<<'.,.,', 'parser.y', 383)
1862
- def _reduce_96(val, _values, result)
2035
+ module_eval(<<'.,.,', 'parser.y', 460)
2036
+ def _reduce_111(val, _values, result)
2037
+ result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[0].s_value, location: @lexer.location, args: val[2])]
2038
+ result
2039
+ end
2040
+ .,.,
2041
+
2042
+ # reduce 112 omitted
2043
+
2044
+ module_eval(<<'.,.,', 'parser.y', 463)
2045
+ def _reduce_113(val, _values, result)
1863
2046
  result = val[1].s_value
1864
2047
  result
1865
2048
  end
1866
2049
  .,.,
1867
2050
 
1868
- # reduce 97 omitted
2051
+ # reduce 114 omitted
1869
2052
 
1870
- # reduce 98 omitted
2053
+ # reduce 115 omitted
1871
2054
 
1872
- module_eval(<<'.,.,', 'parser.y', 390)
1873
- def _reduce_99(val, _values, result)
2055
+ module_eval(<<'.,.,', 'parser.y', 470)
2056
+ def _reduce_116(val, _values, result)
1874
2057
  begin_c_declaration('\Z')
1875
2058
  @grammar.epilogue_first_lineno = @lexer.line + 1
1876
2059
 
@@ -1878,8 +2061,8 @@ module_eval(<<'.,.,', 'parser.y', 390)
1878
2061
  end
1879
2062
  .,.,
1880
2063
 
1881
- module_eval(<<'.,.,', 'parser.y', 395)
1882
- def _reduce_100(val, _values, result)
2064
+ module_eval(<<'.,.,', 'parser.y', 475)
2065
+ def _reduce_117(val, _values, result)
1883
2066
  end_c_declaration
1884
2067
  @grammar.epilogue = val[2].s_value
1885
2068
 
@@ -1887,44 +2070,44 @@ module_eval(<<'.,.,', 'parser.y', 395)
1887
2070
  end
1888
2071
  .,.,
1889
2072
 
1890
- # reduce 101 omitted
2073
+ # reduce 118 omitted
1891
2074
 
1892
- # reduce 102 omitted
2075
+ # reduce 119 omitted
1893
2076
 
1894
- # reduce 103 omitted
2077
+ # reduce 120 omitted
1895
2078
 
1896
- # reduce 104 omitted
2079
+ # reduce 121 omitted
1897
2080
 
1898
- # reduce 105 omitted
2081
+ # reduce 122 omitted
1899
2082
 
1900
- module_eval(<<'.,.,', 'parser.y', 406)
1901
- def _reduce_106(val, _values, result)
2083
+ module_eval(<<'.,.,', 'parser.y', 486)
2084
+ def _reduce_123(val, _values, result)
1902
2085
  result = [val[0]]
1903
2086
  result
1904
2087
  end
1905
2088
  .,.,
1906
2089
 
1907
- module_eval(<<'.,.,', 'parser.y', 407)
1908
- def _reduce_107(val, _values, result)
2090
+ module_eval(<<'.,.,', 'parser.y', 487)
2091
+ def _reduce_124(val, _values, result)
1909
2092
  result = val[0].append(val[1])
1910
2093
  result
1911
2094
  end
1912
2095
  .,.,
1913
2096
 
1914
- # reduce 108 omitted
2097
+ # reduce 125 omitted
1915
2098
 
1916
- # reduce 109 omitted
2099
+ # reduce 126 omitted
1917
2100
 
1918
- module_eval(<<'.,.,', 'parser.y', 412)
1919
- def _reduce_110(val, _values, result)
2101
+ module_eval(<<'.,.,', 'parser.y', 492)
2102
+ def _reduce_127(val, _values, result)
1920
2103
  result = Lrama::Lexer::Token::Ident.new(s_value: val[0])
1921
2104
  result
1922
2105
  end
1923
2106
  .,.,
1924
2107
 
1925
- # reduce 111 omitted
2108
+ # reduce 128 omitted
1926
2109
 
1927
- # reduce 112 omitted
2110
+ # reduce 129 omitted
1928
2111
 
1929
2112
  def _reduce_none(val, _values, result)
1930
2113
  val[0]