lrama 0.5.8 → 0.5.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yaml +6 -1
  3. data/.gitignore +7 -4
  4. data/Gemfile +10 -6
  5. data/README.md +3 -3
  6. data/Rakefile +15 -7
  7. data/Steepfile +15 -1
  8. data/lib/lrama/command.rb +6 -1
  9. data/lib/lrama/context.rb +1 -3
  10. data/lib/lrama/counterexamples/path.rb +0 -46
  11. data/lib/lrama/counterexamples/production_path.rb +17 -0
  12. data/lib/lrama/counterexamples/start_path.rb +21 -0
  13. data/lib/lrama/counterexamples/transition_path.rb +17 -0
  14. data/lib/lrama/counterexamples.rb +3 -0
  15. data/lib/lrama/grammar/code/initial_action_code.rb +28 -0
  16. data/lib/lrama/grammar/code/no_reference_code.rb +24 -0
  17. data/lib/lrama/grammar/code/printer_code.rb +34 -0
  18. data/lib/lrama/grammar/code/rule_action.rb +62 -0
  19. data/lib/lrama/grammar/code.rb +9 -93
  20. data/lib/lrama/grammar/counter.rb +15 -0
  21. data/lib/lrama/grammar/error_token.rb +3 -3
  22. data/lib/lrama/grammar/parameterizing_rules/builder/base.rb +28 -0
  23. data/lib/lrama/grammar/parameterizing_rules/builder/list.rb +20 -0
  24. data/lib/lrama/grammar/parameterizing_rules/builder/nonempty_list.rb +20 -0
  25. data/lib/lrama/grammar/parameterizing_rules/builder/option.rb +20 -0
  26. data/lib/lrama/grammar/parameterizing_rules/builder/separated_list.rb +28 -0
  27. data/lib/lrama/grammar/parameterizing_rules/builder/separated_nonempty_list.rb +27 -0
  28. data/lib/lrama/grammar/parameterizing_rules/builder.rb +43 -0
  29. data/lib/lrama/grammar/percent_code.rb +12 -0
  30. data/lib/lrama/grammar/printer.rb +3 -3
  31. data/lib/lrama/grammar/reference.rb +7 -16
  32. data/lib/lrama/grammar/rule.rb +18 -2
  33. data/lib/lrama/grammar/rule_builder.rb +179 -0
  34. data/lib/lrama/grammar/symbol.rb +2 -2
  35. data/lib/lrama/grammar.rb +132 -302
  36. data/lib/lrama/lexer/location.rb +22 -0
  37. data/lib/lrama/lexer/token/char.rb +8 -0
  38. data/lib/lrama/lexer/token/ident.rb +8 -0
  39. data/lib/lrama/lexer/token/parameterizing.rb +34 -0
  40. data/lib/lrama/lexer/token/tag.rb +12 -0
  41. data/lib/lrama/lexer/token/user_code.rb +64 -0
  42. data/lib/lrama/lexer/token.rb +23 -63
  43. data/lib/lrama/lexer.rb +38 -37
  44. data/lib/lrama/option_parser.rb +2 -1
  45. data/lib/lrama/options.rb +2 -2
  46. data/lib/lrama/output.rb +11 -2
  47. data/lib/lrama/parser.rb +607 -488
  48. data/lib/lrama/report/profile.rb +1 -12
  49. data/lib/lrama/version.rb +1 -1
  50. data/parser.y +177 -96
  51. data/rbs_collection.lock.yaml +17 -1
  52. data/rbs_collection.yaml +1 -0
  53. data/sample/calc.y +3 -1
  54. data/sample/parse.y +5 -1
  55. data/sig/lrama/grammar/code/printer_code.rbs +15 -0
  56. data/sig/lrama/grammar/code.rbs +24 -0
  57. data/sig/lrama/grammar/counter.rbs +11 -0
  58. data/sig/lrama/grammar/parameterizing_rules/builder.rbs +10 -0
  59. data/sig/lrama/grammar/percent_code.rbs +10 -0
  60. data/sig/lrama/grammar/precedence.rbs +11 -0
  61. data/sig/lrama/grammar/printer.rbs +11 -0
  62. data/sig/lrama/grammar/reference.rbs +22 -0
  63. data/sig/lrama/grammar/rule.rbs +13 -0
  64. data/sig/lrama/grammar/rule_builder.rbs +41 -0
  65. data/sig/lrama/grammar.rbs +5 -0
  66. data/sig/lrama/lexer/location.rbs +14 -0
  67. data/sig/lrama/lexer/token/char.rbs +8 -0
  68. data/sig/lrama/lexer/token/ident.rbs +8 -0
  69. data/sig/lrama/lexer/token/parameterizing.rbs +15 -0
  70. data/sig/lrama/lexer/token/tag.rbs +9 -0
  71. data/sig/lrama/lexer/token/user_code.rbs +16 -0
  72. data/sig/lrama/lexer/token.rbs +22 -0
  73. data/sig/stdlib/strscan/string_scanner.rbs +5 -0
  74. data/template/bison/_yacc.h +2 -2
  75. data/template/bison/yacc.c +5 -2
  76. metadata +44 -4
  77. data/lib/lrama/lexer/token/type.rb +0 -8
  78. data/sig/lrama/lexer/token/type.rbs +0 -17
data/lib/lrama/parser.rb CHANGED
@@ -1,14 +1,13 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.7.1
4
- # from Racc grammar file "".
3
+ # This file is automatically generated by Racc 1.7.3
4
+ # from Racc grammar file "parser.y".
5
5
  #
6
6
 
7
7
  ###### racc/parser.rb begin
8
8
  unless $".find {|p| p.end_with?('/racc/parser.rb')}
9
9
  $".push "#{__dir__}/racc/parser.rb"
10
10
  self.class.module_eval(<<'...end racc/parser.rb/module_eval...', 'racc/parser.rb', 1)
11
- # frozen_string_literal: false
12
11
  #--
13
12
  # Copyright (c) 1999-2006 Minero Aoki
14
13
  #
@@ -22,20 +21,9 @@ self.class.module_eval(<<'...end racc/parser.rb/module_eval...', 'racc/parser.rb
22
21
 
23
22
  unless $".find {|p| p.end_with?('/racc/info.rb')}
24
23
  $".push "#{__dir__}/racc/info.rb"
25
- #--
26
- #
27
- #
28
- #
29
- # Copyright (c) 1999-2006 Minero Aoki
30
- #
31
- # This program is free software.
32
- # You can distribute/modify this program under the same terms of ruby.
33
- # see the file "COPYING".
34
- #
35
- #++
36
24
 
37
25
  module Racc
38
- VERSION = '1.7.1'
26
+ VERSION = '1.7.3'
39
27
  Version = VERSION
40
28
  Copyright = 'Copyright (c) 1999-2006 Minero Aoki'
41
29
  end
@@ -84,10 +72,12 @@ end
84
72
  # [-v, --verbose]
85
73
  # verbose mode. create +filename+.output file, like yacc's y.output file.
86
74
  # [-g, --debug]
87
- # add debug code to parser class. To display debuggin information,
75
+ # add debug code to parser class. To display debugging information,
88
76
  # use this '-g' option and set @yydebug true in parser class.
89
77
  # [-E, --embedded]
90
78
  # Output parser which doesn't need runtime files (racc/parser.rb).
79
+ # [-F, --frozen]
80
+ # Output parser which declares frozen_string_literals: true
91
81
  # [-C, --check-only]
92
82
  # Check syntax of racc grammar file and quit.
93
83
  # [-S, --output-status]
@@ -566,7 +556,7 @@ module Racc
566
556
  #
567
557
  # If this method returns, parsers enter "error recovering mode".
568
558
  def on_error(t, val, vstack)
569
- raise ParseError, sprintf("\nparse error on value %s (%s)",
559
+ raise ParseError, sprintf("parse error on value %s (%s)",
570
560
  val.inspect, token_to_str(t) || '?')
571
561
  end
572
562
 
@@ -668,25 +658,26 @@ end
668
658
  module Lrama
669
659
  class Parser < Racc::Parser
670
660
 
671
- module_eval(<<'...end parser.y/module_eval...', 'parser.y', 388)
661
+ module_eval(<<'...end parser.y/module_eval...', 'parser.y', 418)
672
662
 
673
663
  include Lrama::Report::Duration
674
664
 
675
- def initialize(text, path)
665
+ def initialize(text, path, debug = false)
676
666
  @text = text
677
667
  @path = path
668
+ @yydebug = debug
669
+ @rule_counter = Lrama::Grammar::Counter.new(0)
670
+ @midrule_action_counter = Lrama::Grammar::Counter.new(1)
678
671
  end
679
672
 
680
673
  def parse
681
674
  report_duration(:parse) do
682
675
  @lexer = Lrama::Lexer.new(@text)
683
- @grammar = Lrama::Grammar.new
676
+ @grammar = Lrama::Grammar.new(@rule_counter)
684
677
  @precedence_number = 0
678
+ reset_precs
685
679
  do_parse
686
- @grammar.extract_references
687
680
  @grammar.prepare
688
- @grammar.compute_nullable
689
- @grammar.compute_first_set
690
681
  @grammar.validate!
691
682
  @grammar
692
683
  end
@@ -697,253 +688,320 @@ def next_token
697
688
  end
698
689
 
699
690
  def on_error(error_token_id, error_value, value_stack)
700
- source = @text.split("\n")[error_value.line - 1]
691
+ 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
695
+ value = "'#{error_value.s_value}'"
696
+ else
697
+ line = @lexer.line
698
+ first_column = @lexer.head_column
699
+ last_column = @lexer.column
700
+ value = error_value.inspect
701
+ end
702
+
701
703
  raise ParseError, <<~ERROR
702
- #{@path}:#{@lexer.line}:#{@lexer.column}: parse error on value #{error_value.inspect} (#{token_to_str(error_token_id) || '?'})
703
- #{source}
704
- #{' ' * @lexer.column}^
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)}
705
707
  ERROR
706
708
  end
709
+
710
+ def on_action_error(error_message, error_value)
711
+ 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
715
+ else
716
+ line = @lexer.line
717
+ first_column = @lexer.head_column
718
+ last_column = @lexer.column
719
+ end
720
+
721
+ raise ParseError, <<~ERROR
722
+ #{@path}:#{line}: #{error_message}
723
+ #{@text.split("\n")[line - 1]}
724
+ #{carrets(first_column, last_column)}
725
+ ERROR
726
+ end
727
+
728
+ private
729
+
730
+ def reset_precs
731
+ @prec_seen = false
732
+ @code_after_prec = false
733
+ end
734
+
735
+ def begin_c_declaration(end_symbol)
736
+ @lexer.status = :c_declaration
737
+ @lexer.end_symbol = end_symbol
738
+ end
739
+
740
+ def end_c_declaration
741
+ @lexer.status = :initial
742
+ @lexer.end_symbol = nil
743
+ end
744
+
745
+ def carrets(first_column, last_column)
746
+ ' ' * (first_column + 1) + '^' * (last_column - first_column)
747
+ end
707
748
  ...end parser.y/module_eval...
708
749
  ##### State transition tables begin ###
709
750
 
710
751
  racc_action_table = [
711
- 82, 132, 83, 42, 42, 41, 41, 65, 65, 42,
712
- 42, 41, 41, 131, 56, 68, 3, 8, 38, 134,
713
- 134, 42, 42, 41, 41, 65, 61, 68, 38, 6,
714
- 32, 7, 84, 77, 135, 135, 20, 22, 23, 24,
715
- 25, 26, 27, 28, 29, 30, 20, 22, 23, 24,
716
- 25, 26, 27, 28, 29, 30, 9, 39, 44, 14,
717
- 12, 13, 15, 16, 17, 18, 46, 46, 19, 20,
718
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 42,
719
- 42, 41, 41, 46, 68, 68, 42, 42, 41, 41,
720
- 65, 153, 42, 42, 41, 41, 65, 153, 42, 42,
721
- 41, 41, 65, 153, 42, 42, 41, 41, 65, 153,
722
- 42, 42, 41, 41, 65, 153, 42, 42, 41, 41,
723
- 65, 153, 42, 42, 41, 41, 65, 65, 42, 42,
724
- 41, 41, 65, 65, 42, 42, 41, 41, 65, 65,
725
- 42, 42, 41, 41, 42, 42, 41, 41, 42, 42,
726
- 41, 41, 42, 42, 41, 41, 49, 50, 51, 52,
727
- 53, 74, 78, 80, 85, 85, 85, 92, 96, 97,
728
- 105, 106, 108, 109, 110, 111, 112, 113, 116, 118,
729
- 119, 122, 123, 124, 138, 139, 140, 141, 142, 143,
730
- 122, 80, 148, 149, 156, 160, 161, 80, 80 ]
752
+ 84, 43, 85, 139, 39, 67, 43, 138, 139, 153,
753
+ 67, 171, 172, 154, 155, 156, 43, 141, 42, 137,
754
+ 3, 58, 141, 21, 23, 24, 25, 26, 27, 28,
755
+ 29, 30, 31, 39, 6, 8, 7, 142, 79, 43,
756
+ 86, 42, 142, 67, 63, 43, 43, 42, 42, 33,
757
+ 70, 70, 21, 23, 24, 25, 26, 27, 28, 29,
758
+ 30, 31, 9, 40, 45, 14, 12, 13, 15, 16,
759
+ 17, 18, 47, 47, 19, 20, 21, 23, 24, 25,
760
+ 26, 27, 28, 29, 30, 31, 43, 43, 42, 42,
761
+ 47, 70, 70, 43, 43, 42, 42, 67, 165, 43,
762
+ 43, 42, 42, 67, 165, 43, 43, 42, 42, 67,
763
+ 165, 43, 43, 42, 42, 67, 165, 43, 43, 42,
764
+ 42, 67, 165, 43, 43, 42, 42, 67, 165, 43,
765
+ 43, 42, 42, 67, 67, 43, 43, 42, 42, 67,
766
+ 67, 43, 43, 42, 42, 67, 67, 43, 43, 42,
767
+ 42, 67, 67, 43, 43, 42, 42, 43, 43, 42,
768
+ 42, 43, 50, 42, 51, 52, 53, 54, 55, 76,
769
+ 80, 82, 87, 87, 87, 89, 95, 99, 100, 103,
770
+ 103, 103, 103, 108, 109, 111, 113, 114, 115, 116,
771
+ 117, 120, 123, 124, 127, 128, 129, 131, 144, 146,
772
+ 147, 148, 149, 150, 127, 82, 160, 161, 169, 175,
773
+ 176, 82 ]
731
774
 
732
775
  racc_action_check = [
733
- 40, 120, 40, 121, 144, 121, 144, 121, 144, 25,
734
- 27, 25, 27, 120, 25, 27, 1, 3, 9, 121,
735
- 144, 26, 28, 26, 28, 26, 26, 28, 33, 2,
736
- 7, 2, 40, 33, 121, 144, 9, 9, 9, 9,
737
- 9, 9, 9, 9, 9, 9, 33, 33, 33, 33,
738
- 33, 33, 33, 33, 33, 33, 4, 12, 14, 4,
739
- 4, 4, 4, 4, 4, 4, 15, 16, 4, 4,
740
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 29,
741
- 30, 29, 30, 17, 29, 30, 141, 13, 141, 13,
742
- 141, 141, 142, 55, 142, 55, 142, 142, 143, 56,
743
- 143, 56, 143, 143, 150, 66, 150, 66, 150, 150,
744
- 154, 67, 154, 67, 154, 154, 155, 68, 155, 68,
745
- 155, 155, 60, 61, 60, 61, 60, 61, 97, 99,
746
- 97, 99, 97, 99, 117, 135, 117, 135, 117, 135,
747
- 71, 72, 71, 72, 73, 92, 73, 92, 94, 100,
748
- 94, 100, 102, 114, 102, 114, 18, 20, 22, 23,
749
- 24, 31, 36, 37, 45, 47, 48, 54, 58, 59,
750
- 79, 80, 86, 87, 88, 89, 90, 91, 95, 103,
751
- 104, 105, 106, 107, 125, 126, 127, 128, 129, 130,
752
- 131, 133, 136, 137, 146, 157, 159, 160, 161 ]
776
+ 41, 126, 41, 126, 9, 126, 151, 125, 151, 139,
777
+ 151, 168, 168, 139, 139, 139, 26, 126, 26, 125,
778
+ 1, 26, 151, 9, 9, 9, 9, 9, 9, 9,
779
+ 9, 9, 9, 34, 2, 3, 2, 126, 34, 27,
780
+ 41, 27, 151, 27, 27, 28, 29, 28, 29, 7,
781
+ 28, 29, 34, 34, 34, 34, 34, 34, 34, 34,
782
+ 34, 34, 4, 12, 14, 4, 4, 4, 4, 4,
783
+ 4, 4, 15, 16, 4, 4, 4, 4, 4, 4,
784
+ 4, 4, 4, 4, 4, 4, 30, 31, 30, 31,
785
+ 17, 30, 31, 148, 13, 148, 13, 148, 148, 149,
786
+ 57, 149, 57, 149, 149, 150, 58, 150, 58, 150,
787
+ 150, 162, 69, 162, 69, 162, 162, 166, 70, 166,
788
+ 70, 166, 166, 167, 95, 167, 95, 167, 167, 62,
789
+ 63, 62, 63, 62, 63, 100, 102, 100, 102, 100,
790
+ 102, 121, 142, 121, 142, 121, 142, 153, 172, 153,
791
+ 172, 153, 172, 97, 103, 97, 103, 105, 118, 105,
792
+ 118, 122, 18, 122, 19, 21, 23, 24, 25, 32,
793
+ 37, 38, 46, 48, 49, 50, 56, 60, 61, 68,
794
+ 73, 74, 75, 81, 82, 88, 90, 91, 92, 93,
795
+ 94, 98, 106, 107, 108, 109, 110, 112, 130, 132,
796
+ 133, 134, 135, 136, 137, 140, 143, 145, 158, 173,
797
+ 174, 175 ]
753
798
 
754
799
  racc_action_pointer = [
755
- nil, 16, 19, 17, 47, nil, nil, 23, nil, 14,
756
- nil, nil, 51, 84, 51, 47, 48, 64, 137, nil,
757
- 138, nil, 139, 140, 141, 6, 18, 7, 19, 76,
758
- 77, 159, nil, 24, nil, nil, 141, 128, nil, nil,
759
- -5, nil, nil, nil, nil, 145, nil, 146, 147, nil,
760
- nil, nil, nil, nil, 159, 90, 96, nil, 162, 161,
761
- 119, 120, nil, nil, nil, nil, 102, 108, 114, nil,
762
- nil, 137, 138, 141, nil, nil, nil, nil, nil, 138,
763
- 166, nil, nil, nil, nil, nil, 170, 171, 172, 173,
764
- 174, 175, 142, nil, 145, 171, nil, 125, nil, 126,
765
- 146, nil, 149, 168, 178, 162, 146, 181, nil, nil,
766
- nil, nil, nil, nil, 150, nil, nil, 131, nil, nil,
767
- -20, 0, nil, nil, nil, 164, 165, 166, 167, 168,
768
- 169, 171, nil, 156, nil, 132, 190, 173, nil, nil,
769
- nil, 83, 89, 95, 1, nil, 192, nil, nil, nil,
770
- 101, nil, nil, nil, 107, 113, nil, 175, nil, 176,
771
- 162, 163, nil, nil ]
800
+ nil, 20, 24, 35, 53, nil, nil, 42, nil, 0,
801
+ nil, nil, 57, 91, 57, 53, 54, 71, 157, 145,
802
+ nil, 146, nil, 147, 148, 149, 13, 36, 42, 43,
803
+ 83, 84, 167, nil, 29, nil, nil, 148, 128, nil,
804
+ nil, -5, nil, nil, nil, nil, 153, nil, 154, 155,
805
+ 156, nil, nil, nil, nil, nil, 168, 97, 103, nil,
806
+ 171, 170, 126, 127, nil, nil, nil, nil, 171, 109,
807
+ 115, nil, nil, 172, 173, 174, nil, nil, nil, nil,
808
+ nil, 150, 179, nil, nil, nil, nil, nil, 183, nil,
809
+ 184, 185, 186, 187, 188, 121, nil, 150, 184, nil,
810
+ 132, nil, 133, 151, nil, 154, 181, 191, 159, 151,
811
+ 194, nil, 195, nil, nil, nil, nil, nil, 155, nil,
812
+ nil, 138, 158, nil, nil, -15, -2, nil, nil, nil,
813
+ 178, nil, 179, 180, 181, 182, 183, 169, nil, -27,
814
+ 162, nil, 139, 186, nil, 187, nil, nil, 90, 96,
815
+ 102, 3, nil, 144, nil, nil, nil, nil, 206, nil,
816
+ nil, nil, 108, nil, nil, nil, 114, 120, -26, nil,
817
+ nil, nil, 145, 189, 173, 168, nil, nil ]
772
818
 
773
819
  racc_action_default = [
774
- -2, -104, -8, -104, -104, -3, -4, -104, 164, -104,
775
- -9, -10, -104, -104, -104, -104, -104, -104, -104, -20,
776
- -104, -24, -104, -104, -104, -104, -104, -104, -104, -104,
777
- -104, -104, -7, -91, -71, -73, -104, -88, -90, -11,
778
- -95, -69, -70, -94, -13, -14, -60, -15, -16, -17,
779
- -21, -25, -28, -31, -34, -40, -104, -43, -46, -35,
780
- -50, -104, -53, -55, -56, -103, -36, -63, -104, -66,
781
- -68, -37, -38, -39, -5, -1, -72, -92, -74, -104,
782
- -104, -12, -96, -97, -98, -57, -104, -104, -104, -104,
783
- -104, -104, -104, -44, -41, -48, -47, -104, -54, -51,
784
- -65, -67, -64, -104, -104, -79, -104, -104, -61, -18,
785
- -22, -26, -29, -32, -42, -45, -49, -52, -6, -93,
786
- -75, -76, -84, -89, -58, -104, -104, -104, -104, -104,
787
- -104, -79, -78, -88, -81, -104, -104, -104, -62, -19,
788
- -23, -104, -104, -104, -77, -80, -104, -87, -85, -59,
789
- -27, -99, -101, -102, -30, -33, -82, -104, -100, -104,
790
- -88, -88, -86, -83 ]
820
+ -2, -111, -8, -111, -111, -3, -4, -111, 178, -111,
821
+ -9, -10, -111, -111, -111, -111, -111, -111, -111, -111,
822
+ -23, -111, -27, -111, -111, -111, -111, -111, -111, -111,
823
+ -111, -111, -111, -7, -98, -74, -76, -111, -95, -97,
824
+ -11, -102, -72, -73, -101, -13, -14, -63, -15, -16,
825
+ -111, -20, -24, -28, -31, -34, -37, -43, -111, -46,
826
+ -49, -38, -53, -111, -56, -58, -59, -110, -39, -66,
827
+ -111, -69, -71, -40, -41, -42, -5, -1, -75, -99,
828
+ -77, -111, -111, -12, -103, -104, -105, -60, -111, -17,
829
+ -111, -111, -111, -111, -111, -111, -47, -44, -51, -50,
830
+ -111, -57, -54, -111, -70, -67, -111, -111, -82, -111,
831
+ -111, -64, -111, -21, -25, -29, -32, -35, -45, -48,
832
+ -52, -55, -68, -6, -100, -78, -79, -83, -96, -61,
833
+ -111, -18, -111, -111, -111, -111, -111, -82, -81, -72,
834
+ -95, -88, -111, -111, -65, -111, -22, -26, -111, -111,
835
+ -111, -80, -85, -111, -92, -93, -94, -84, -111, -91,
836
+ -62, -19, -30, -106, -108, -109, -33, -36, -111, -89,
837
+ -107, -86, -111, -111, -111, -95, -87, -90 ]
791
838
 
792
839
  racc_goto_table = [
793
- 79, 43, 62, 60, 55, 121, 93, 101, 34, 66,
794
- 71, 72, 73, 58, 1, 70, 70, 70, 70, 100,
795
- 2, 102, 4, 158, 100, 100, 100, 158, 158, 33,
796
- 75, 144, 76, 5, 31, 94, 98, 62, 99, 103,
797
- 101, 10, 101, 58, 58, 93, 45, 47, 48, 150,
798
- 154, 155, 11, 40, 70, 70, 70, 81, 87, 70,
799
- 70, 70, 126, 88, 127, 93, 89, 128, 90, 129,
800
- 91, 114, 130, 62, 117, 98, 54, 59, 95, 115,
801
- 58, 107, 58, 137, 86, 125, 120, 146, 70, 159,
802
- 70, 136, 157, 98, 104, nil, 145, 133, nil, nil,
803
- nil, nil, 58, nil, nil, nil, nil, nil, nil, nil,
804
- nil, 147, nil, nil, nil, nil, nil, nil, nil, nil,
805
- 133, nil, nil, 162, 163 ]
840
+ 64, 81, 57, 44, 62, 96, 105, 35, 104, 126,
841
+ 170, 46, 48, 49, 170, 170, 60, 1, 72, 72,
842
+ 72, 72, 68, 73, 74, 75, 162, 166, 167, 2,
843
+ 4, 34, 78, 77, 97, 101, 64, 5, 151, 122,
844
+ 102, 32, 106, 10, 104, 96, 11, 60, 60, 41,
845
+ 83, 112, 145, 90, 132, 91, 133, 92, 134, 72,
846
+ 72, 104, 93, 135, 94, 136, 96, 56, 61, 98,
847
+ 119, 118, 110, 64, 143, 101, 88, 121, 130, 125,
848
+ 152, 158, 173, 107, nil, 60, nil, 60, nil, nil,
849
+ nil, nil, nil, 72, 101, 72, nil, nil, nil, 140,
850
+ nil, nil, nil, 157, nil, nil, nil, nil, 60, nil,
851
+ nil, nil, 72, nil, nil, 159, nil, nil, nil, nil,
852
+ nil, nil, nil, nil, 140, nil, 168, nil, nil, nil,
853
+ nil, nil, nil, nil, nil, nil, nil, nil, 177, nil,
854
+ nil, nil, nil, nil, nil, 174 ]
806
855
 
807
856
  racc_goto_check = [
808
- 46, 31, 35, 34, 29, 48, 30, 42, 43, 28,
809
- 28, 28, 28, 31, 1, 31, 31, 31, 31, 41,
810
- 2, 41, 3, 54, 41, 41, 41, 54, 54, 4,
811
- 5, 48, 43, 6, 7, 29, 35, 35, 34, 8,
812
- 42, 9, 42, 31, 31, 30, 13, 13, 13, 17,
813
- 17, 17, 10, 11, 31, 31, 31, 12, 14, 31,
814
- 31, 31, 15, 18, 19, 30, 20, 21, 22, 23,
815
- 24, 29, 25, 35, 34, 35, 26, 27, 32, 33,
816
- 31, 37, 31, 38, 39, 40, 47, 49, 31, 50,
817
- 31, 51, 52, 35, 53, nil, 46, 35, nil, nil,
818
- nil, nil, 31, nil, nil, nil, nil, nil, nil, nil,
819
- nil, 35, nil, nil, nil, nil, nil, nil, nil, nil,
820
- 35, nil, nil, 46, 46 ]
857
+ 37, 48, 31, 33, 36, 32, 43, 45, 44, 50,
858
+ 55, 13, 13, 13, 55, 55, 33, 1, 33, 33,
859
+ 33, 33, 30, 30, 30, 30, 19, 19, 19, 2,
860
+ 3, 4, 45, 5, 31, 37, 37, 6, 50, 43,
861
+ 36, 7, 8, 9, 44, 32, 10, 33, 33, 11,
862
+ 12, 14, 15, 16, 17, 20, 21, 22, 23, 33,
863
+ 33, 44, 24, 25, 26, 27, 32, 28, 29, 34,
864
+ 35, 31, 39, 37, 40, 37, 41, 36, 42, 49,
865
+ 51, 52, 53, 54, nil, 33, nil, 33, nil, nil,
866
+ nil, nil, nil, 33, 37, 33, nil, nil, nil, 37,
867
+ nil, nil, nil, 48, nil, nil, nil, nil, 33, nil,
868
+ nil, nil, 33, nil, nil, 37, nil, nil, nil, nil,
869
+ nil, nil, nil, nil, 37, nil, 37, nil, nil, nil,
870
+ nil, nil, nil, nil, nil, nil, nil, nil, 48, nil,
871
+ nil, nil, nil, nil, nil, 37 ]
821
872
 
822
873
  racc_goto_pointer = [
823
- nil, 14, 20, 20, 20, -3, 31, 28, -35, 37,
824
- 48, 40, 17, 31, 9, -47, nil, -92, 13, -46,
825
- 15, -44, 16, -43, 17, -41, 51, 51, -18, -21,
826
- -49, -12, 20, -16, -23, -24, nil, -4, -41, 38,
827
- -23, -47, -60, -1, nil, nil, -37, -19, -100, -47,
828
- -67, -31, -56, 17, -127 ]
874
+ nil, 17, 29, 28, 22, -1, 35, 35, -34, 39,
875
+ 42, 36, 9, -4, -38, -79, 2, -59, nil, -122,
876
+ 3, -58, 4, -57, 8, -53, 9, -52, 41, 41,
877
+ -6, -24, -52, -10, 9, -28, -23, -27, nil, -15,
878
+ -55, 29, -33, -64, -61, -2, nil, nil, -37, -29,
879
+ -99, -59, -60, -87, 4, -152 ]
829
880
 
830
881
  racc_goto_default = [
831
882
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
832
- 36, nil, nil, nil, nil, nil, 21, nil, nil, nil,
883
+ 37, nil, nil, nil, nil, nil, nil, nil, 22, nil,
833
884
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
834
- 57, 63, nil, nil, nil, 152, 64, nil, nil, nil,
835
- nil, 67, 69, nil, 35, 37, nil, nil, nil, nil,
836
- nil, nil, nil, nil, 151 ]
885
+ nil, nil, 59, 65, nil, nil, nil, 164, 66, nil,
886
+ nil, nil, nil, 69, 71, nil, 36, 38, nil, nil,
887
+ nil, nil, nil, nil, nil, 163 ]
837
888
 
838
889
  racc_reduce_table = [
839
890
  0, 0, :racc_error,
840
- 5, 39, :_reduce_none,
841
- 0, 40, :_reduce_none,
842
- 2, 40, :_reduce_none,
843
- 0, 45, :_reduce_4,
844
- 0, 46, :_reduce_5,
845
- 5, 44, :_reduce_6,
846
- 2, 44, :_reduce_none,
847
- 0, 41, :_reduce_8,
848
- 2, 41, :_reduce_none,
849
- 1, 47, :_reduce_none,
850
- 2, 47, :_reduce_11,
851
- 3, 47, :_reduce_none,
852
- 2, 47, :_reduce_none,
853
- 2, 47, :_reduce_none,
854
- 2, 47, :_reduce_15,
855
- 2, 47, :_reduce_16,
856
- 0, 52, :_reduce_17,
857
- 0, 53, :_reduce_18,
858
- 6, 47, :_reduce_19,
859
- 1, 47, :_reduce_none,
860
- 0, 56, :_reduce_21,
861
- 0, 57, :_reduce_22,
862
- 6, 48, :_reduce_23,
863
- 1, 48, :_reduce_none,
864
- 0, 58, :_reduce_25,
865
- 0, 59, :_reduce_26,
866
- 7, 48, :_reduce_none,
867
- 0, 60, :_reduce_28,
868
- 0, 61, :_reduce_29,
869
- 7, 48, :_reduce_30,
870
- 0, 62, :_reduce_31,
871
- 0, 63, :_reduce_32,
872
- 7, 48, :_reduce_33,
873
- 2, 54, :_reduce_none,
874
- 2, 54, :_reduce_35,
875
- 2, 54, :_reduce_36,
876
- 2, 54, :_reduce_37,
877
- 2, 54, :_reduce_38,
878
- 2, 54, :_reduce_39,
879
- 1, 64, :_reduce_40,
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,
899
+ 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_none,
905
+ 2, 55, :_reduce_15,
906
+ 2, 55, :_reduce_16,
907
+ 0, 60, :_reduce_17,
908
+ 0, 61, :_reduce_18,
909
+ 7, 55, :_reduce_19,
910
+ 0, 62, :_reduce_20,
911
+ 0, 63, :_reduce_21,
912
+ 6, 55, :_reduce_22,
913
+ 1, 55, :_reduce_none,
914
+ 0, 66, :_reduce_24,
915
+ 0, 67, :_reduce_25,
916
+ 6, 56, :_reduce_26,
917
+ 1, 56, :_reduce_none,
918
+ 0, 68, :_reduce_28,
919
+ 0, 69, :_reduce_29,
920
+ 7, 56, :_reduce_none,
921
+ 0, 70, :_reduce_31,
922
+ 0, 71, :_reduce_32,
923
+ 7, 56, :_reduce_33,
924
+ 0, 72, :_reduce_34,
925
+ 0, 73, :_reduce_35,
926
+ 7, 56, :_reduce_36,
927
+ 2, 64, :_reduce_none,
928
+ 2, 64, :_reduce_38,
929
+ 2, 64, :_reduce_39,
930
+ 2, 64, :_reduce_40,
880
931
  2, 64, :_reduce_41,
881
- 3, 64, :_reduce_42,
882
- 1, 67, :_reduce_43,
883
- 2, 67, :_reduce_44,
884
- 3, 68, :_reduce_45,
885
- 0, 70, :_reduce_none,
886
- 1, 70, :_reduce_none,
887
- 0, 71, :_reduce_none,
888
- 1, 71, :_reduce_none,
889
- 1, 65, :_reduce_50,
890
- 2, 65, :_reduce_51,
891
- 3, 65, :_reduce_52,
892
- 1, 72, :_reduce_53,
893
- 2, 72, :_reduce_54,
894
- 1, 73, :_reduce_none,
895
- 1, 73, :_reduce_none,
896
- 0, 75, :_reduce_57,
897
- 0, 76, :_reduce_58,
898
- 6, 51, :_reduce_59,
899
- 0, 77, :_reduce_60,
900
- 0, 78, :_reduce_61,
901
- 5, 51, :_reduce_62,
902
- 1, 66, :_reduce_63,
903
- 2, 66, :_reduce_64,
904
- 2, 66, :_reduce_65,
905
- 1, 79, :_reduce_66,
906
- 2, 79, :_reduce_67,
932
+ 2, 64, :_reduce_42,
933
+ 1, 74, :_reduce_43,
934
+ 2, 74, :_reduce_44,
935
+ 3, 74, :_reduce_45,
936
+ 1, 77, :_reduce_46,
937
+ 2, 77, :_reduce_47,
938
+ 3, 78, :_reduce_48,
939
+ 0, 80, :_reduce_none,
907
940
  1, 80, :_reduce_none,
908
- 1, 69, :_reduce_69,
909
- 1, 69, :_reduce_70,
910
- 1, 42, :_reduce_none,
911
- 2, 42, :_reduce_none,
941
+ 0, 81, :_reduce_none,
912
942
  1, 81, :_reduce_none,
913
- 2, 81, :_reduce_none,
914
- 4, 82, :_reduce_75,
915
- 1, 85, :_reduce_76,
916
- 3, 85, :_reduce_77,
917
- 2, 85, :_reduce_none,
918
- 0, 86, :_reduce_79,
919
- 3, 86, :_reduce_80,
920
- 0, 87, :_reduce_81,
921
- 0, 88, :_reduce_82,
922
- 7, 86, :_reduce_83,
923
- 0, 89, :_reduce_84,
924
- 0, 90, :_reduce_85,
925
- 6, 86, :_reduce_86,
926
- 3, 86, :_reduce_87,
927
- 0, 84, :_reduce_none,
928
- 3, 84, :_reduce_89,
943
+ 1, 75, :_reduce_53,
944
+ 2, 75, :_reduce_54,
945
+ 3, 75, :_reduce_55,
946
+ 1, 82, :_reduce_56,
947
+ 2, 82, :_reduce_57,
929
948
  1, 83, :_reduce_none,
930
- 0, 43, :_reduce_none,
931
- 0, 91, :_reduce_92,
932
- 3, 43, :_reduce_93,
933
- 1, 49, :_reduce_none,
934
- 0, 50, :_reduce_none,
935
- 1, 50, :_reduce_none,
936
- 1, 50, :_reduce_none,
949
+ 1, 83, :_reduce_none,
950
+ 0, 85, :_reduce_60,
951
+ 0, 86, :_reduce_61,
952
+ 6, 59, :_reduce_62,
953
+ 0, 87, :_reduce_63,
954
+ 0, 88, :_reduce_64,
955
+ 5, 59, :_reduce_65,
956
+ 1, 76, :_reduce_66,
957
+ 2, 76, :_reduce_67,
958
+ 3, 76, :_reduce_68,
959
+ 1, 89, :_reduce_69,
960
+ 2, 89, :_reduce_70,
961
+ 1, 90, :_reduce_none,
962
+ 1, 79, :_reduce_72,
963
+ 1, 79, :_reduce_73,
937
964
  1, 50, :_reduce_none,
938
- 1, 55, :_reduce_99,
939
- 2, 55, :_reduce_100,
940
- 1, 92, :_reduce_none,
941
- 1, 92, :_reduce_none,
942
- 1, 74, :_reduce_103 ]
943
-
944
- racc_reduce_n = 104
945
-
946
- racc_shift_n = 164
965
+ 2, 50, :_reduce_none,
966
+ 1, 91, :_reduce_none,
967
+ 2, 91, :_reduce_none,
968
+ 4, 92, :_reduce_78,
969
+ 1, 95, :_reduce_79,
970
+ 3, 95, :_reduce_80,
971
+ 2, 95, :_reduce_none,
972
+ 0, 96, :_reduce_82,
973
+ 1, 96, :_reduce_83,
974
+ 3, 96, :_reduce_84,
975
+ 3, 96, :_reduce_85,
976
+ 5, 96, :_reduce_86,
977
+ 7, 96, :_reduce_87,
978
+ 0, 98, :_reduce_88,
979
+ 0, 99, :_reduce_89,
980
+ 7, 96, :_reduce_90,
981
+ 3, 96, :_reduce_91,
982
+ 1, 97, :_reduce_none,
983
+ 1, 97, :_reduce_none,
984
+ 1, 97, :_reduce_none,
985
+ 0, 94, :_reduce_none,
986
+ 3, 94, :_reduce_96,
987
+ 1, 93, :_reduce_none,
988
+ 0, 51, :_reduce_none,
989
+ 0, 100, :_reduce_99,
990
+ 3, 51, :_reduce_100,
991
+ 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, 101, :_reduce_none,
999
+ 1, 101, :_reduce_none,
1000
+ 1, 84, :_reduce_110 ]
1001
+
1002
+ racc_reduce_n = 111
1003
+
1004
+ racc_shift_n = 178
947
1005
 
948
1006
  racc_token_table = {
949
1007
  false => 0,
@@ -964,28 +1022,36 @@ racc_token_table = {
964
1022
  "%param" => 15,
965
1023
  "%lex-param" => 16,
966
1024
  "%parse-param" => 17,
967
- "%initial-action" => 18,
1025
+ "%code" => 18,
968
1026
  "{" => 19,
969
1027
  "}" => 20,
970
- ";" => 21,
971
- "%union" => 22,
972
- "%destructor" => 23,
973
- "%printer" => 24,
974
- "%error-token" => 25,
975
- "%token" => 26,
976
- "%type" => 27,
977
- "%left" => 28,
978
- "%right" => 29,
979
- "%precedence" => 30,
980
- "%nonassoc" => 31,
981
- ":" => 32,
982
- "|" => 33,
983
- "%prec" => 34,
984
- "[" => 35,
985
- "]" => 36,
986
- "{...}" => 37 }
987
-
988
- racc_nt_base = 38
1028
+ "%initial-action" => 21,
1029
+ ";" => 22,
1030
+ "%union" => 23,
1031
+ "%destructor" => 24,
1032
+ "%printer" => 25,
1033
+ "%error-token" => 26,
1034
+ "%token" => 27,
1035
+ "%type" => 28,
1036
+ "%left" => 29,
1037
+ "%right" => 30,
1038
+ "%precedence" => 31,
1039
+ "%nonassoc" => 32,
1040
+ ":" => 33,
1041
+ "|" => 34,
1042
+ "%empty" => 35,
1043
+ "(" => 36,
1044
+ ")" => 37,
1045
+ "," => 38,
1046
+ "%prec" => 39,
1047
+ "?" => 40,
1048
+ "+" => 41,
1049
+ "*" => 42,
1050
+ "[" => 43,
1051
+ "]" => 44,
1052
+ "{...}" => 45 }
1053
+
1054
+ racc_nt_base = 46
989
1055
 
990
1056
  racc_use_result_var = true
991
1057
 
@@ -1025,9 +1091,10 @@ Racc_token_to_s_table = [
1025
1091
  "\"%param\"",
1026
1092
  "\"%lex-param\"",
1027
1093
  "\"%parse-param\"",
1028
- "\"%initial-action\"",
1094
+ "\"%code\"",
1029
1095
  "\"{\"",
1030
1096
  "\"}\"",
1097
+ "\"%initial-action\"",
1031
1098
  "\";\"",
1032
1099
  "\"%union\"",
1033
1100
  "\"%destructor\"",
@@ -1041,7 +1108,14 @@ Racc_token_to_s_table = [
1041
1108
  "\"%nonassoc\"",
1042
1109
  "\":\"",
1043
1110
  "\"|\"",
1111
+ "\"%empty\"",
1112
+ "\"(\"",
1113
+ "\")\"",
1114
+ "\",\"",
1044
1115
  "\"%prec\"",
1116
+ "\"?\"",
1117
+ "\"+\"",
1118
+ "\"*\"",
1045
1119
  "\"[\"",
1046
1120
  "\"]\"",
1047
1121
  "\"{...}\"",
@@ -1061,16 +1135,18 @@ Racc_token_to_s_table = [
1061
1135
  "params",
1062
1136
  "@3",
1063
1137
  "@4",
1064
- "symbol_declaration",
1065
- "generic_symlist",
1066
1138
  "@5",
1067
1139
  "@6",
1140
+ "symbol_declaration",
1141
+ "generic_symlist",
1068
1142
  "@7",
1069
1143
  "@8",
1070
1144
  "@9",
1071
1145
  "@10",
1072
1146
  "@11",
1073
1147
  "@12",
1148
+ "@13",
1149
+ "@14",
1074
1150
  "token_declarations",
1075
1151
  "symbol_declarations",
1076
1152
  "token_declarations_for_precedence",
@@ -1082,10 +1158,10 @@ Racc_token_to_s_table = [
1082
1158
  "symbol_declaration_list",
1083
1159
  "symbol",
1084
1160
  "string_as_id",
1085
- "@13",
1086
- "@14",
1087
1161
  "@15",
1088
1162
  "@16",
1163
+ "@17",
1164
+ "@18",
1089
1165
  "token_declaration_list_for_precedence",
1090
1166
  "token_declaration_for_precedence",
1091
1167
  "rules_or_grammar_declaration",
@@ -1094,15 +1170,14 @@ Racc_token_to_s_table = [
1094
1170
  "named_ref_opt",
1095
1171
  "rhs_list",
1096
1172
  "rhs",
1097
- "@17",
1098
- "@18",
1173
+ "parameterizing_suffix",
1099
1174
  "@19",
1100
1175
  "@20",
1101
1176
  "@21",
1102
1177
  "generic_symlist_item" ]
1103
1178
  Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
1104
1179
 
1105
- Racc_debug_parser = false
1180
+ Racc_debug_parser = true
1106
1181
 
1107
1182
  ##### State transition tables end #####
1108
1183
 
@@ -1114,26 +1189,24 @@ Racc_debug_parser = false
1114
1189
 
1115
1190
  # reduce 3 omitted
1116
1191
 
1117
- module_eval(<<'.,.,', 'parser.y', 10)
1192
+ module_eval(<<'.,.,', 'parser.y', 14)
1118
1193
  def _reduce_4(val, _values, result)
1119
- @lexer.status = :c_declaration
1120
- @lexer.end_symbol = '%}'
1194
+ begin_c_declaration("%}")
1121
1195
  @grammar.prologue_first_lineno = @lexer.line
1122
1196
 
1123
1197
  result
1124
1198
  end
1125
1199
  .,.,
1126
1200
 
1127
- module_eval(<<'.,.,', 'parser.y', 16)
1201
+ module_eval(<<'.,.,', 'parser.y', 19)
1128
1202
  def _reduce_5(val, _values, result)
1129
- @lexer.status = :initial
1130
- @lexer.end_symbol = nil
1203
+ end_c_declaration
1131
1204
 
1132
1205
  result
1133
1206
  end
1134
1207
  .,.,
1135
1208
 
1136
- module_eval(<<'.,.,', 'parser.y', 21)
1209
+ module_eval(<<'.,.,', 'parser.y', 23)
1137
1210
  def _reduce_6(val, _values, result)
1138
1211
  @grammar.prologue = val[2].s_value
1139
1212
 
@@ -1143,7 +1216,7 @@ module_eval(<<'.,.,', 'parser.y', 21)
1143
1216
 
1144
1217
  # reduce 7 omitted
1145
1218
 
1146
- module_eval(<<'.,.,', 'parser.y', 25)
1219
+ module_eval(<<'.,.,', 'parser.y', 27)
1147
1220
  def _reduce_8(val, _values, result)
1148
1221
  result = ""
1149
1222
  result
@@ -1154,7 +1227,7 @@ module_eval(<<'.,.,', 'parser.y', 25)
1154
1227
 
1155
1228
  # reduce 10 omitted
1156
1229
 
1157
- module_eval(<<'.,.,', 'parser.y', 29)
1230
+ module_eval(<<'.,.,', 'parser.y', 31)
1158
1231
  def _reduce_11(val, _values, result)
1159
1232
  @grammar.expect = val[1]
1160
1233
  result
@@ -1167,22 +1240,20 @@ module_eval(<<'.,.,', 'parser.y', 29)
1167
1240
 
1168
1241
  # reduce 14 omitted
1169
1242
 
1170
- module_eval(<<'.,.,', 'parser.y', 35)
1243
+ module_eval(<<'.,.,', 'parser.y', 37)
1171
1244
  def _reduce_15(val, _values, result)
1172
1245
  val[1].each {|token|
1173
- token.references = []
1174
- @grammar.lex_param = @grammar.build_code(:lex_param, token).token_code.s_value
1246
+ @grammar.lex_param = Grammar::Code::NoReferenceCode.new(type: :lex_param, token_code: token).token_code.s_value
1175
1247
  }
1176
1248
 
1177
1249
  result
1178
1250
  end
1179
1251
  .,.,
1180
1252
 
1181
- module_eval(<<'.,.,', 'parser.y', 42)
1253
+ module_eval(<<'.,.,', 'parser.y', 43)
1182
1254
  def _reduce_16(val, _values, result)
1183
1255
  val[1].each {|token|
1184
- token.references = []
1185
- @grammar.parse_param = @grammar.build_code(:parse_param, token).token_code.s_value
1256
+ @grammar.parse_param = Grammar::Code::NoReferenceCode.new(type: :parse_param, token_code: token).token_code.s_value
1186
1257
  }
1187
1258
 
1188
1259
  result
@@ -1191,73 +1262,76 @@ module_eval(<<'.,.,', 'parser.y', 42)
1191
1262
 
1192
1263
  module_eval(<<'.,.,', 'parser.y', 49)
1193
1264
  def _reduce_17(val, _values, result)
1194
- @lexer.status = :c_declaration
1195
- @lexer.end_symbol = '}'
1265
+ begin_c_declaration("}")
1196
1266
 
1197
1267
  result
1198
1268
  end
1199
1269
  .,.,
1200
1270
 
1201
- module_eval(<<'.,.,', 'parser.y', 54)
1271
+ module_eval(<<'.,.,', 'parser.y', 53)
1202
1272
  def _reduce_18(val, _values, result)
1203
- @lexer.status = :initial
1204
- @lexer.end_symbol = nil
1273
+ end_c_declaration
1205
1274
 
1206
1275
  result
1207
1276
  end
1208
1277
  .,.,
1209
1278
 
1210
- module_eval(<<'.,.,', 'parser.y', 59)
1279
+ module_eval(<<'.,.,', 'parser.y', 57)
1211
1280
  def _reduce_19(val, _values, result)
1212
- @grammar.initial_action = @grammar.build_code(:initial_action, val[3])
1281
+ @grammar.add_percent_code(id: val[1], code: val[4])
1213
1282
 
1214
1283
  result
1215
1284
  end
1216
1285
  .,.,
1217
1286
 
1218
- # reduce 20 omitted
1287
+ module_eval(<<'.,.,', 'parser.y', 61)
1288
+ def _reduce_20(val, _values, result)
1289
+ begin_c_declaration("}")
1290
+
1291
+ result
1292
+ end
1293
+ .,.,
1219
1294
 
1220
1295
  module_eval(<<'.,.,', 'parser.y', 65)
1221
1296
  def _reduce_21(val, _values, result)
1222
- @lexer.status = :c_declaration
1223
- @lexer.end_symbol = '}'
1297
+ end_c_declaration
1224
1298
 
1225
1299
  result
1226
1300
  end
1227
1301
  .,.,
1228
1302
 
1229
- module_eval(<<'.,.,', 'parser.y', 70)
1303
+ module_eval(<<'.,.,', 'parser.y', 69)
1230
1304
  def _reduce_22(val, _values, result)
1231
- @lexer.status = :initial
1232
- @lexer.end_symbol = nil
1305
+ @grammar.initial_action = Grammar::Code::InitialActionCode.new(type: :initial_action, token_code: val[3])
1233
1306
 
1234
1307
  result
1235
1308
  end
1236
1309
  .,.,
1237
1310
 
1311
+ # reduce 23 omitted
1312
+
1238
1313
  module_eval(<<'.,.,', 'parser.y', 75)
1239
- def _reduce_23(val, _values, result)
1240
- @grammar.set_union(@grammar.build_code(:union, val[3]), val[3].line)
1314
+ def _reduce_24(val, _values, result)
1315
+ begin_c_declaration("}")
1241
1316
 
1242
1317
  result
1243
1318
  end
1244
1319
  .,.,
1245
1320
 
1246
- # reduce 24 omitted
1247
-
1248
- module_eval(<<'.,.,', 'parser.y', 80)
1321
+ module_eval(<<'.,.,', 'parser.y', 79)
1249
1322
  def _reduce_25(val, _values, result)
1250
- @lexer.status = :c_declaration
1251
- @lexer.end_symbol = '}'
1323
+ end_c_declaration
1252
1324
 
1253
1325
  result
1254
1326
  end
1255
1327
  .,.,
1256
1328
 
1257
- module_eval(<<'.,.,', 'parser.y', 85)
1329
+ module_eval(<<'.,.,', 'parser.y', 83)
1258
1330
  def _reduce_26(val, _values, result)
1259
- @lexer.status = :initial
1260
- @lexer.end_symbol = nil
1331
+ @grammar.set_union(
1332
+ Grammar::Code::NoReferenceCode.new(type: :union, token_code: val[3]),
1333
+ val[3].line
1334
+ )
1261
1335
 
1262
1336
  result
1263
1337
  end
@@ -1267,60 +1341,82 @@ module_eval(<<'.,.,', 'parser.y', 85)
1267
1341
 
1268
1342
  module_eval(<<'.,.,', 'parser.y', 91)
1269
1343
  def _reduce_28(val, _values, result)
1270
- @lexer.status = :c_declaration
1271
- @lexer.end_symbol = '}'
1344
+ begin_c_declaration("}")
1272
1345
 
1273
1346
  result
1274
1347
  end
1275
1348
  .,.,
1276
1349
 
1277
- module_eval(<<'.,.,', 'parser.y', 96)
1350
+ module_eval(<<'.,.,', 'parser.y', 95)
1278
1351
  def _reduce_29(val, _values, result)
1279
- @lexer.status = :initial
1280
- @lexer.end_symbol = nil
1352
+ end_c_declaration
1281
1353
 
1282
1354
  result
1283
1355
  end
1284
1356
  .,.,
1285
1357
 
1286
- module_eval(<<'.,.,', 'parser.y', 101)
1287
- def _reduce_30(val, _values, result)
1288
- @grammar.add_printer(ident_or_tags: val[6], code: @grammar.build_code(:printer, val[3]), lineno: val[3].line)
1358
+ # reduce 30 omitted
1289
1359
 
1290
- result
1291
- end
1292
- .,.,
1293
-
1294
- module_eval(<<'.,.,', 'parser.y', 105)
1360
+ module_eval(<<'.,.,', 'parser.y', 100)
1295
1361
  def _reduce_31(val, _values, result)
1296
- @lexer.status = :c_declaration
1297
- @lexer.end_symbol = '}'
1362
+ begin_c_declaration("}")
1298
1363
 
1299
1364
  result
1300
1365
  end
1301
1366
  .,.,
1302
1367
 
1303
- module_eval(<<'.,.,', 'parser.y', 110)
1368
+ module_eval(<<'.,.,', 'parser.y', 104)
1304
1369
  def _reduce_32(val, _values, result)
1305
- @lexer.status = :initial
1306
- @lexer.end_symbol = nil
1370
+ end_c_declaration
1307
1371
 
1308
1372
  result
1309
1373
  end
1310
1374
  .,.,
1311
1375
 
1312
- module_eval(<<'.,.,', 'parser.y', 115)
1376
+ module_eval(<<'.,.,', 'parser.y', 108)
1313
1377
  def _reduce_33(val, _values, result)
1314
- @grammar.add_error_token(ident_or_tags: val[6], code: @grammar.build_code(:error_token, val[3]), lineno: val[3].line)
1378
+ @grammar.add_printer(
1379
+ ident_or_tags: val[6],
1380
+ token_code: val[3],
1381
+ lineno: val[3].line
1382
+ )
1315
1383
 
1316
1384
  result
1317
1385
  end
1318
1386
  .,.,
1319
1387
 
1320
- # reduce 34 omitted
1388
+ module_eval(<<'.,.,', 'parser.y', 116)
1389
+ def _reduce_34(val, _values, result)
1390
+ begin_c_declaration("}")
1321
1391
 
1322
- module_eval(<<'.,.,', 'parser.y', 121)
1392
+ result
1393
+ end
1394
+ .,.,
1395
+
1396
+ module_eval(<<'.,.,', 'parser.y', 120)
1323
1397
  def _reduce_35(val, _values, result)
1398
+ end_c_declaration
1399
+
1400
+ result
1401
+ end
1402
+ .,.,
1403
+
1404
+ module_eval(<<'.,.,', 'parser.y', 124)
1405
+ def _reduce_36(val, _values, result)
1406
+ @grammar.add_error_token(
1407
+ ident_or_tags: val[6],
1408
+ token_code: val[3],
1409
+ lineno: val[3].line
1410
+ )
1411
+
1412
+ result
1413
+ end
1414
+ .,.,
1415
+
1416
+ # reduce 37 omitted
1417
+
1418
+ module_eval(<<'.,.,', 'parser.y', 134)
1419
+ def _reduce_38(val, _values, result)
1324
1420
  val[1].each {|hash|
1325
1421
  hash[:tokens].each {|id|
1326
1422
  @grammar.add_type(id: id, tag: hash[:tag])
@@ -1331,8 +1427,8 @@ module_eval(<<'.,.,', 'parser.y', 121)
1331
1427
  end
1332
1428
  .,.,
1333
1429
 
1334
- module_eval(<<'.,.,', 'parser.y', 129)
1335
- def _reduce_36(val, _values, result)
1430
+ module_eval(<<'.,.,', 'parser.y', 142)
1431
+ def _reduce_39(val, _values, result)
1336
1432
  val[1].each {|hash|
1337
1433
  hash[:tokens].each {|id|
1338
1434
  sym = @grammar.add_term(id: id)
@@ -1345,8 +1441,8 @@ module_eval(<<'.,.,', 'parser.y', 129)
1345
1441
  end
1346
1442
  .,.,
1347
1443
 
1348
- module_eval(<<'.,.,', 'parser.y', 139)
1349
- def _reduce_37(val, _values, result)
1444
+ module_eval(<<'.,.,', 'parser.y', 152)
1445
+ def _reduce_40(val, _values, result)
1350
1446
  val[1].each {|hash|
1351
1447
  hash[:tokens].each {|id|
1352
1448
  sym = @grammar.add_term(id: id)
@@ -1359,8 +1455,8 @@ module_eval(<<'.,.,', 'parser.y', 139)
1359
1455
  end
1360
1456
  .,.,
1361
1457
 
1362
- module_eval(<<'.,.,', 'parser.y', 149)
1363
- def _reduce_38(val, _values, result)
1458
+ module_eval(<<'.,.,', 'parser.y', 162)
1459
+ def _reduce_41(val, _values, result)
1364
1460
  val[1].each {|hash|
1365
1461
  hash[:tokens].each {|id|
1366
1462
  sym = @grammar.add_term(id: id)
@@ -1373,8 +1469,8 @@ module_eval(<<'.,.,', 'parser.y', 149)
1373
1469
  end
1374
1470
  .,.,
1375
1471
 
1376
- module_eval(<<'.,.,', 'parser.y', 159)
1377
- def _reduce_39(val, _values, result)
1472
+ module_eval(<<'.,.,', 'parser.y', 172)
1473
+ def _reduce_42(val, _values, result)
1378
1474
  val[1].each {|hash|
1379
1475
  hash[:tokens].each {|id|
1380
1476
  sym = @grammar.add_term(id: id)
@@ -1387,8 +1483,8 @@ module_eval(<<'.,.,', 'parser.y', 159)
1387
1483
  end
1388
1484
  .,.,
1389
1485
 
1390
- module_eval(<<'.,.,', 'parser.y', 170)
1391
- def _reduce_40(val, _values, result)
1486
+ module_eval(<<'.,.,', 'parser.y', 183)
1487
+ def _reduce_43(val, _values, result)
1392
1488
  val[0].each {|token_declaration|
1393
1489
  @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: nil, replace: true)
1394
1490
  }
@@ -1397,8 +1493,8 @@ module_eval(<<'.,.,', 'parser.y', 170)
1397
1493
  end
1398
1494
  .,.,
1399
1495
 
1400
- module_eval(<<'.,.,', 'parser.y', 176)
1401
- def _reduce_41(val, _values, result)
1496
+ module_eval(<<'.,.,', 'parser.y', 189)
1497
+ def _reduce_44(val, _values, result)
1402
1498
  val[1].each {|token_declaration|
1403
1499
  @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[0], replace: true)
1404
1500
  }
@@ -1407,8 +1503,8 @@ module_eval(<<'.,.,', 'parser.y', 176)
1407
1503
  end
1408
1504
  .,.,
1409
1505
 
1410
- module_eval(<<'.,.,', 'parser.y', 182)
1411
- def _reduce_42(val, _values, result)
1506
+ module_eval(<<'.,.,', 'parser.y', 195)
1507
+ def _reduce_45(val, _values, result)
1412
1508
  val[2].each {|token_declaration|
1413
1509
  @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[1], replace: true)
1414
1510
  }
@@ -1417,379 +1513,402 @@ module_eval(<<'.,.,', 'parser.y', 182)
1417
1513
  end
1418
1514
  .,.,
1419
1515
 
1420
- module_eval(<<'.,.,', 'parser.y', 187)
1421
- def _reduce_43(val, _values, result)
1516
+ module_eval(<<'.,.,', 'parser.y', 200)
1517
+ def _reduce_46(val, _values, result)
1422
1518
  result = [val[0]]
1423
1519
  result
1424
1520
  end
1425
1521
  .,.,
1426
1522
 
1427
- module_eval(<<'.,.,', 'parser.y', 188)
1428
- def _reduce_44(val, _values, result)
1523
+ module_eval(<<'.,.,', 'parser.y', 201)
1524
+ def _reduce_47(val, _values, result)
1429
1525
  result = val[0].append(val[1])
1430
1526
  result
1431
1527
  end
1432
1528
  .,.,
1433
1529
 
1434
- module_eval(<<'.,.,', 'parser.y', 190)
1435
- def _reduce_45(val, _values, result)
1530
+ module_eval(<<'.,.,', 'parser.y', 203)
1531
+ def _reduce_48(val, _values, result)
1436
1532
  result = val
1437
1533
  result
1438
1534
  end
1439
1535
  .,.,
1440
1536
 
1441
- # reduce 46 omitted
1537
+ # reduce 49 omitted
1442
1538
 
1443
- # reduce 47 omitted
1539
+ # reduce 50 omitted
1444
1540
 
1445
- # reduce 48 omitted
1541
+ # reduce 51 omitted
1446
1542
 
1447
- # reduce 49 omitted
1543
+ # reduce 52 omitted
1448
1544
 
1449
- module_eval(<<'.,.,', 'parser.y', 200)
1450
- def _reduce_50(val, _values, result)
1545
+ module_eval(<<'.,.,', 'parser.y', 213)
1546
+ def _reduce_53(val, _values, result)
1451
1547
  result = [{tag: nil, tokens: val[0]}]
1452
1548
 
1453
1549
  result
1454
1550
  end
1455
1551
  .,.,
1456
1552
 
1457
- module_eval(<<'.,.,', 'parser.y', 204)
1458
- def _reduce_51(val, _values, result)
1553
+ module_eval(<<'.,.,', 'parser.y', 217)
1554
+ def _reduce_54(val, _values, result)
1459
1555
  result = [{tag: val[0], tokens: val[1]}]
1460
1556
 
1461
1557
  result
1462
1558
  end
1463
1559
  .,.,
1464
1560
 
1465
- module_eval(<<'.,.,', 'parser.y', 208)
1466
- def _reduce_52(val, _values, result)
1561
+ module_eval(<<'.,.,', 'parser.y', 221)
1562
+ def _reduce_55(val, _values, result)
1467
1563
  result = val[0].append({tag: val[1], tokens: val[2]})
1468
1564
 
1469
1565
  result
1470
1566
  end
1471
1567
  .,.,
1472
1568
 
1473
- module_eval(<<'.,.,', 'parser.y', 211)
1474
- def _reduce_53(val, _values, result)
1569
+ module_eval(<<'.,.,', 'parser.y', 224)
1570
+ def _reduce_56(val, _values, result)
1475
1571
  result = [val[0]]
1476
1572
  result
1477
1573
  end
1478
1574
  .,.,
1479
1575
 
1480
- module_eval(<<'.,.,', 'parser.y', 212)
1481
- def _reduce_54(val, _values, result)
1576
+ module_eval(<<'.,.,', 'parser.y', 225)
1577
+ def _reduce_57(val, _values, result)
1482
1578
  result = val[0].append(val[1])
1483
1579
  result
1484
1580
  end
1485
1581
  .,.,
1486
1582
 
1487
- # reduce 55 omitted
1583
+ # reduce 58 omitted
1488
1584
 
1489
- # reduce 56 omitted
1585
+ # reduce 59 omitted
1490
1586
 
1491
- module_eval(<<'.,.,', 'parser.y', 219)
1492
- def _reduce_57(val, _values, result)
1493
- @lexer.status = :c_declaration
1494
- @lexer.end_symbol = '}'
1587
+ module_eval(<<'.,.,', 'parser.y', 232)
1588
+ def _reduce_60(val, _values, result)
1589
+ begin_c_declaration("}")
1495
1590
 
1496
1591
  result
1497
1592
  end
1498
1593
  .,.,
1499
1594
 
1500
- module_eval(<<'.,.,', 'parser.y', 224)
1501
- def _reduce_58(val, _values, result)
1502
- @lexer.status = :initial
1503
- @lexer.end_symbol = nil
1595
+ module_eval(<<'.,.,', 'parser.y', 236)
1596
+ def _reduce_61(val, _values, result)
1597
+ end_c_declaration
1504
1598
 
1505
1599
  result
1506
1600
  end
1507
1601
  .,.,
1508
1602
 
1509
- module_eval(<<'.,.,', 'parser.y', 229)
1510
- def _reduce_59(val, _values, result)
1603
+ module_eval(<<'.,.,', 'parser.y', 240)
1604
+ def _reduce_62(val, _values, result)
1511
1605
  result = val[0].append(val[3])
1512
1606
 
1513
1607
  result
1514
1608
  end
1515
1609
  .,.,
1516
1610
 
1517
- module_eval(<<'.,.,', 'parser.y', 233)
1518
- def _reduce_60(val, _values, result)
1519
- @lexer.status = :c_declaration
1520
- @lexer.end_symbol = '}'
1611
+ module_eval(<<'.,.,', 'parser.y', 244)
1612
+ def _reduce_63(val, _values, result)
1613
+ begin_c_declaration("}")
1521
1614
 
1522
1615
  result
1523
1616
  end
1524
1617
  .,.,
1525
1618
 
1526
- module_eval(<<'.,.,', 'parser.y', 238)
1527
- def _reduce_61(val, _values, result)
1528
- @lexer.status = :initial
1529
- @lexer.end_symbol = nil
1619
+ module_eval(<<'.,.,', 'parser.y', 248)
1620
+ def _reduce_64(val, _values, result)
1621
+ end_c_declaration
1530
1622
 
1531
1623
  result
1532
1624
  end
1533
1625
  .,.,
1534
1626
 
1535
- module_eval(<<'.,.,', 'parser.y', 243)
1536
- def _reduce_62(val, _values, result)
1627
+ module_eval(<<'.,.,', 'parser.y', 252)
1628
+ def _reduce_65(val, _values, result)
1537
1629
  result = [val[2]]
1538
1630
 
1539
1631
  result
1540
1632
  end
1541
1633
  .,.,
1542
1634
 
1543
- module_eval(<<'.,.,', 'parser.y', 248)
1544
- def _reduce_63(val, _values, result)
1635
+ module_eval(<<'.,.,', 'parser.y', 257)
1636
+ def _reduce_66(val, _values, result)
1545
1637
  result = [{tag: nil, tokens: val[0]}]
1546
1638
 
1547
1639
  result
1548
1640
  end
1549
1641
  .,.,
1550
1642
 
1551
- module_eval(<<'.,.,', 'parser.y', 252)
1552
- def _reduce_64(val, _values, result)
1643
+ module_eval(<<'.,.,', 'parser.y', 261)
1644
+ def _reduce_67(val, _values, result)
1553
1645
  result = [{tag: val[0], tokens: val[1]}]
1554
1646
 
1555
1647
  result
1556
1648
  end
1557
1649
  .,.,
1558
1650
 
1559
- module_eval(<<'.,.,', 'parser.y', 256)
1560
- def _reduce_65(val, _values, result)
1561
- result = val[0].append({tag: nil, tokens: val[1]})
1651
+ module_eval(<<'.,.,', 'parser.y', 265)
1652
+ def _reduce_68(val, _values, result)
1653
+ result = val[0].append({tag: val[1], tokens: val[2]})
1562
1654
 
1563
1655
  result
1564
1656
  end
1565
1657
  .,.,
1566
1658
 
1567
- module_eval(<<'.,.,', 'parser.y', 259)
1568
- def _reduce_66(val, _values, result)
1659
+ module_eval(<<'.,.,', 'parser.y', 268)
1660
+ def _reduce_69(val, _values, result)
1569
1661
  result = [val[0]]
1570
1662
  result
1571
1663
  end
1572
1664
  .,.,
1573
1665
 
1574
- module_eval(<<'.,.,', 'parser.y', 260)
1575
- def _reduce_67(val, _values, result)
1666
+ module_eval(<<'.,.,', 'parser.y', 269)
1667
+ def _reduce_70(val, _values, result)
1576
1668
  result = val[0].append(val[1])
1577
1669
  result
1578
1670
  end
1579
1671
  .,.,
1580
1672
 
1581
- # reduce 68 omitted
1673
+ # reduce 71 omitted
1582
1674
 
1583
- module_eval(<<'.,.,', 'parser.y', 264)
1584
- def _reduce_69(val, _values, result)
1585
- raise "Ident after %prec" if @prec_seen
1675
+ module_eval(<<'.,.,', 'parser.y', 273)
1676
+ def _reduce_72(val, _values, result)
1677
+ on_action_error("ident after %prec", val[0]) if @prec_seen
1586
1678
  result
1587
1679
  end
1588
1680
  .,.,
1589
1681
 
1590
- module_eval(<<'.,.,', 'parser.y', 265)
1591
- def _reduce_70(val, _values, result)
1592
- raise "Char after %prec" if @prec_seen
1682
+ module_eval(<<'.,.,', 'parser.y', 274)
1683
+ def _reduce_73(val, _values, result)
1684
+ on_action_error("char after %prec", val[0]) if @prec_seen
1593
1685
  result
1594
1686
  end
1595
1687
  .,.,
1596
1688
 
1597
- # reduce 71 omitted
1689
+ # reduce 74 omitted
1598
1690
 
1599
- # reduce 72 omitted
1691
+ # reduce 75 omitted
1600
1692
 
1601
- # reduce 73 omitted
1693
+ # reduce 76 omitted
1602
1694
 
1603
- # reduce 74 omitted
1695
+ # reduce 77 omitted
1604
1696
 
1605
- module_eval(<<'.,.,', 'parser.y', 275)
1606
- def _reduce_75(val, _values, result)
1697
+ module_eval(<<'.,.,', 'parser.y', 284)
1698
+ def _reduce_78(val, _values, result)
1607
1699
  lhs = val[0]
1608
- lhs.alias = val[1]
1609
- val[3].each {|hash|
1610
- @grammar.add_rule(lhs: lhs, rhs: hash[:rhs], lineno: hash[:lineno])
1611
- }
1700
+ lhs.alias_name = val[1]
1701
+ val[3].each do |builder|
1702
+ builder.lhs = lhs
1703
+ builder.complete_input
1704
+ @grammar.add_rule_builder(builder)
1705
+ end
1612
1706
 
1613
1707
  result
1614
1708
  end
1615
1709
  .,.,
1616
1710
 
1617
- module_eval(<<'.,.,', 'parser.y', 284)
1618
- def _reduce_76(val, _values, result)
1619
- result = [{rhs: val[0], lineno: val[0].first&.line || @lexer.line - 1}]
1711
+ module_eval(<<'.,.,', 'parser.y', 295)
1712
+ def _reduce_79(val, _values, result)
1713
+ builder = val[0]
1714
+ if !builder.line
1715
+ builder.line = @lexer.line - 1
1716
+ end
1717
+ result = [builder]
1620
1718
 
1621
1719
  result
1622
1720
  end
1623
1721
  .,.,
1624
1722
 
1625
- module_eval(<<'.,.,', 'parser.y', 288)
1626
- def _reduce_77(val, _values, result)
1627
- result = val[0].append({rhs: val[2], lineno: val[2].first&.line || @lexer.line - 1})
1723
+ module_eval(<<'.,.,', 'parser.y', 303)
1724
+ def _reduce_80(val, _values, result)
1725
+ builder = val[2]
1726
+ if !builder.line
1727
+ builder.line = @lexer.line - 1
1728
+ end
1729
+ result = val[0].append(builder)
1628
1730
 
1629
1731
  result
1630
1732
  end
1631
1733
  .,.,
1632
1734
 
1633
- # reduce 78 omitted
1735
+ # reduce 81 omitted
1634
1736
 
1635
- module_eval(<<'.,.,', 'parser.y', 294)
1636
- def _reduce_79(val, _values, result)
1637
- result = []
1638
- @prec_seen = false
1639
- @code_after_prec = false
1737
+ module_eval(<<'.,.,', 'parser.y', 313)
1738
+ def _reduce_82(val, _values, result)
1739
+ reset_precs
1740
+ result = Grammar::RuleBuilder.new(@rule_counter, @midrule_action_counter)
1640
1741
 
1641
1742
  result
1642
1743
  end
1643
1744
  .,.,
1644
1745
 
1645
- module_eval(<<'.,.,', 'parser.y', 300)
1646
- def _reduce_80(val, _values, result)
1746
+ module_eval(<<'.,.,', 'parser.y', 318)
1747
+ def _reduce_83(val, _values, result)
1748
+ reset_precs
1749
+ result = Grammar::RuleBuilder.new(@rule_counter, @midrule_action_counter)
1750
+
1751
+ result
1752
+ end
1753
+ .,.,
1754
+
1755
+ module_eval(<<'.,.,', 'parser.y', 323)
1756
+ def _reduce_84(val, _values, result)
1647
1757
  token = val[1]
1648
- token.alias = val[2]
1649
- result = val[0].append(token)
1758
+ token.alias_name = val[2]
1759
+ builder = val[0]
1760
+ builder.add_rhs(token)
1761
+ result = builder
1650
1762
 
1651
1763
  result
1652
1764
  end
1653
1765
  .,.,
1654
1766
 
1655
- module_eval(<<'.,.,', 'parser.y', 306)
1656
- def _reduce_81(val, _values, result)
1657
- if @prec_seen
1658
- raise "Multiple User_code after %prec" if @code_after_prec
1659
- @code_after_prec = true
1660
- end
1661
- @lexer.status = :c_declaration
1662
- @lexer.end_symbol = '}'
1767
+ module_eval(<<'.,.,', 'parser.y', 331)
1768
+ def _reduce_85(val, _values, result)
1769
+ token = Lrama::Lexer::Token::Parameterizing.new(s_value: val[2], location: @lexer.location, args: [val[1]])
1770
+ builder = val[0]
1771
+ builder.add_rhs(token)
1772
+ result = builder
1663
1773
 
1664
1774
  result
1665
1775
  end
1666
1776
  .,.,
1667
1777
 
1668
- module_eval(<<'.,.,', 'parser.y', 315)
1669
- def _reduce_82(val, _values, result)
1670
- @lexer.status = :initial
1671
- @lexer.end_symbol = nil
1778
+ module_eval(<<'.,.,', 'parser.y', 338)
1779
+ def _reduce_86(val, _values, result)
1780
+ token = Lrama::Lexer::Token::Parameterizing.new(s_value: val[1].s_value, location: @lexer.location, args: [val[3]])
1781
+ builder = val[0]
1782
+ builder.add_rhs(token)
1783
+ result = builder
1672
1784
 
1673
1785
  result
1674
1786
  end
1675
1787
  .,.,
1676
1788
 
1677
- module_eval(<<'.,.,', 'parser.y', 320)
1678
- def _reduce_83(val, _values, result)
1679
- token = val[3]
1680
- token.alias = val[6]
1681
- result = val[0].append(token)
1789
+ module_eval(<<'.,.,', 'parser.y', 345)
1790
+ def _reduce_87(val, _values, result)
1791
+ token = Lrama::Lexer::Token::Parameterizing.new(s_value: val[1].s_value, location: @lexer.location, args: [val[3], val[5]])
1792
+ builder = val[0]
1793
+ builder.add_rhs(token)
1794
+ result = builder
1682
1795
 
1683
1796
  result
1684
1797
  end
1685
1798
  .,.,
1686
1799
 
1687
- module_eval(<<'.,.,', 'parser.y', 326)
1688
- def _reduce_84(val, _values, result)
1800
+ module_eval(<<'.,.,', 'parser.y', 352)
1801
+ def _reduce_88(val, _values, result)
1689
1802
  if @prec_seen
1690
- raise "Multiple User_code after %prec" if @code_after_prec
1803
+ on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec
1691
1804
  @code_after_prec = true
1692
1805
  end
1693
- @lexer.status = :c_declaration
1694
- @lexer.end_symbol = '}'
1806
+ begin_c_declaration("}")
1695
1807
 
1696
1808
  result
1697
1809
  end
1698
1810
  .,.,
1699
1811
 
1700
- module_eval(<<'.,.,', 'parser.y', 335)
1701
- def _reduce_85(val, _values, result)
1702
- @lexer.status = :initial
1703
- @lexer.end_symbol = nil
1812
+ module_eval(<<'.,.,', 'parser.y', 360)
1813
+ def _reduce_89(val, _values, result)
1814
+ end_c_declaration
1704
1815
 
1705
1816
  result
1706
1817
  end
1707
1818
  .,.,
1708
1819
 
1709
- module_eval(<<'.,.,', 'parser.y', 340)
1710
- def _reduce_86(val, _values, result)
1711
- token = val[2]
1712
- token.alias = val[5]
1713
- result = [token]
1820
+ module_eval(<<'.,.,', 'parser.y', 364)
1821
+ def _reduce_90(val, _values, result)
1822
+ token = val[3]
1823
+ token.alias_name = val[6]
1824
+ builder = val[0]
1825
+ builder.user_code = token
1826
+ result = builder
1714
1827
 
1715
1828
  result
1716
1829
  end
1717
1830
  .,.,
1718
1831
 
1719
- module_eval(<<'.,.,', 'parser.y', 346)
1720
- def _reduce_87(val, _values, result)
1832
+ module_eval(<<'.,.,', 'parser.y', 372)
1833
+ def _reduce_91(val, _values, result)
1721
1834
  sym = @grammar.find_symbol_by_id!(val[2])
1722
- result = val[0].append(sym)
1723
1835
  @prec_seen = true
1836
+ builder = val[0]
1837
+ builder.precedence_sym = sym
1838
+ result = builder
1724
1839
 
1725
1840
  result
1726
1841
  end
1727
1842
  .,.,
1728
1843
 
1729
- # reduce 88 omitted
1844
+ # reduce 92 omitted
1730
1845
 
1731
- module_eval(<<'.,.,', 'parser.y', 352)
1732
- def _reduce_89(val, _values, result)
1846
+ # reduce 93 omitted
1847
+
1848
+ # reduce 94 omitted
1849
+
1850
+ # reduce 95 omitted
1851
+
1852
+ module_eval(<<'.,.,', 'parser.y', 384)
1853
+ def _reduce_96(val, _values, result)
1733
1854
  result = val[1].s_value
1734
1855
  result
1735
1856
  end
1736
1857
  .,.,
1737
1858
 
1738
- # reduce 90 omitted
1859
+ # reduce 97 omitted
1739
1860
 
1740
- # reduce 91 omitted
1861
+ # reduce 98 omitted
1741
1862
 
1742
- module_eval(<<'.,.,', 'parser.y', 359)
1743
- def _reduce_92(val, _values, result)
1744
- @lexer.status = :c_declaration
1745
- @lexer.end_symbol = '\Z'
1863
+ module_eval(<<'.,.,', 'parser.y', 391)
1864
+ def _reduce_99(val, _values, result)
1865
+ begin_c_declaration('\Z')
1746
1866
  @grammar.epilogue_first_lineno = @lexer.line + 1
1747
1867
 
1748
1868
  result
1749
1869
  end
1750
1870
  .,.,
1751
1871
 
1752
- module_eval(<<'.,.,', 'parser.y', 365)
1753
- def _reduce_93(val, _values, result)
1754
- @lexer.status = :initial
1755
- @lexer.end_symbol = nil
1872
+ module_eval(<<'.,.,', 'parser.y', 396)
1873
+ def _reduce_100(val, _values, result)
1874
+ end_c_declaration
1756
1875
  @grammar.epilogue = val[2].s_value
1757
1876
 
1758
1877
  result
1759
1878
  end
1760
1879
  .,.,
1761
1880
 
1762
- # reduce 94 omitted
1881
+ # reduce 101 omitted
1763
1882
 
1764
- # reduce 95 omitted
1883
+ # reduce 102 omitted
1765
1884
 
1766
- # reduce 96 omitted
1885
+ # reduce 103 omitted
1767
1886
 
1768
- # reduce 97 omitted
1887
+ # reduce 104 omitted
1769
1888
 
1770
- # reduce 98 omitted
1889
+ # reduce 105 omitted
1771
1890
 
1772
- module_eval(<<'.,.,', 'parser.y', 377)
1773
- def _reduce_99(val, _values, result)
1891
+ module_eval(<<'.,.,', 'parser.y', 407)
1892
+ def _reduce_106(val, _values, result)
1774
1893
  result = [val[0]]
1775
1894
  result
1776
1895
  end
1777
1896
  .,.,
1778
1897
 
1779
- module_eval(<<'.,.,', 'parser.y', 378)
1780
- def _reduce_100(val, _values, result)
1898
+ module_eval(<<'.,.,', 'parser.y', 408)
1899
+ def _reduce_107(val, _values, result)
1781
1900
  result = val[0].append(val[1])
1782
1901
  result
1783
1902
  end
1784
1903
  .,.,
1785
1904
 
1786
- # reduce 101 omitted
1905
+ # reduce 108 omitted
1787
1906
 
1788
- # reduce 102 omitted
1907
+ # reduce 109 omitted
1789
1908
 
1790
- module_eval(<<'.,.,', 'parser.y', 383)
1791
- def _reduce_103(val, _values, result)
1792
- result = Lrama::Lexer::Token.new(type: Lrama::Lexer::Token::Ident, s_value: val[0])
1909
+ module_eval(<<'.,.,', 'parser.y', 413)
1910
+ def _reduce_110(val, _values, result)
1911
+ result = Lrama::Lexer::Token::Ident.new(s_value: val[0])
1793
1912
  result
1794
1913
  end
1795
1914
  .,.,