lrama 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.github/workflows/codespell.yaml +1 -1
  4. data/.github/workflows/gh-pages.yml +5 -6
  5. data/.github/workflows/test.yaml +25 -14
  6. data/Gemfile +4 -3
  7. data/NEWS.md +370 -35
  8. data/README.md +7 -88
  9. data/Rakefile +3 -2
  10. data/Steepfile +11 -5
  11. data/doc/Index.md +1 -1
  12. data/doc/development/compressed_state_table/parser.rb +2 -0
  13. data/doc/development/profiling.md +44 -0
  14. data/exe/lrama +1 -1
  15. data/lib/lrama/bitmap.rb +18 -5
  16. data/lib/lrama/command.rb +95 -43
  17. data/lib/lrama/context.rb +22 -24
  18. data/lib/lrama/counterexamples/derivation.rb +14 -4
  19. data/lib/lrama/counterexamples/example.rb +47 -22
  20. data/lib/lrama/counterexamples/node.rb +30 -0
  21. data/lib/lrama/counterexamples/path.rb +12 -14
  22. data/lib/lrama/counterexamples/state_item.rb +24 -1
  23. data/lib/lrama/counterexamples/triple.rb +27 -9
  24. data/lib/lrama/counterexamples.rb +216 -88
  25. data/lib/lrama/diagram.rb +77 -0
  26. data/lib/lrama/digraph.rb +28 -7
  27. data/lib/lrama/erb.rb +29 -0
  28. data/lib/lrama/grammar/auxiliary.rb +6 -1
  29. data/lib/lrama/grammar/binding.rb +37 -25
  30. data/lib/lrama/grammar/code/destructor_code.rb +11 -0
  31. data/lib/lrama/grammar/code/initial_action_code.rb +3 -0
  32. data/lib/lrama/grammar/code/no_reference_code.rb +3 -0
  33. data/lib/lrama/grammar/code/printer_code.rb +11 -0
  34. data/lib/lrama/grammar/code/rule_action.rb +17 -0
  35. data/lib/lrama/grammar/code.rb +16 -1
  36. data/lib/lrama/grammar/counter.rb +10 -0
  37. data/lib/lrama/grammar/destructor.rb +14 -1
  38. data/lib/lrama/grammar/error_token.rb +14 -1
  39. data/lib/lrama/grammar/inline/resolver.rb +80 -0
  40. data/lib/lrama/grammar/inline.rb +3 -0
  41. data/lib/lrama/grammar/{parameterizing_rule → parameterized}/resolver.rb +19 -8
  42. data/lib/lrama/grammar/{parameterizing_rule → parameterized}/rhs.rb +7 -2
  43. data/lib/lrama/grammar/parameterized/rule.rb +36 -0
  44. data/lib/lrama/grammar/parameterized.rb +5 -0
  45. data/lib/lrama/grammar/percent_code.rb +12 -1
  46. data/lib/lrama/grammar/precedence.rb +43 -1
  47. data/lib/lrama/grammar/printer.rb +9 -0
  48. data/lib/lrama/grammar/reference.rb +13 -0
  49. data/lib/lrama/grammar/rule.rb +61 -1
  50. data/lib/lrama/grammar/rule_builder.rb +84 -69
  51. data/lib/lrama/grammar/stdlib.y +68 -48
  52. data/lib/lrama/grammar/symbol.rb +63 -19
  53. data/lib/lrama/grammar/symbols/resolver.rb +64 -3
  54. data/lib/lrama/grammar/type.rb +13 -1
  55. data/lib/lrama/grammar/union.rb +12 -1
  56. data/lib/lrama/grammar.rb +231 -35
  57. data/lib/lrama/lexer/location.rb +25 -8
  58. data/lib/lrama/lexer/token/base.rb +73 -0
  59. data/lib/lrama/lexer/token/char.rb +15 -2
  60. data/lib/lrama/lexer/token/empty.rb +14 -0
  61. data/lib/lrama/lexer/token/ident.rb +2 -2
  62. data/lib/lrama/lexer/token/instantiate_rule.rb +4 -4
  63. data/lib/lrama/lexer/token/int.rb +14 -0
  64. data/lib/lrama/lexer/token/str.rb +11 -0
  65. data/lib/lrama/lexer/token/tag.rb +2 -2
  66. data/lib/lrama/lexer/token/token.rb +11 -0
  67. data/lib/lrama/lexer/token/user_code.rb +63 -37
  68. data/lib/lrama/lexer/token.rb +6 -56
  69. data/lib/lrama/lexer.rb +51 -23
  70. data/lib/lrama/logger.rb +12 -2
  71. data/lib/lrama/option_parser.rb +63 -9
  72. data/lib/lrama/options.rb +25 -7
  73. data/lib/lrama/output.rb +4 -11
  74. data/lib/lrama/parser.rb +854 -723
  75. data/lib/lrama/reporter/conflicts.rb +44 -0
  76. data/lib/lrama/reporter/grammar.rb +39 -0
  77. data/lib/lrama/reporter/precedences.rb +54 -0
  78. data/lib/lrama/reporter/profile/call_stack.rb +45 -0
  79. data/lib/lrama/reporter/profile/memory.rb +44 -0
  80. data/lib/lrama/reporter/profile.rb +4 -0
  81. data/lib/lrama/reporter/rules.rb +43 -0
  82. data/lib/lrama/reporter/states.rb +387 -0
  83. data/lib/lrama/reporter/terms.rb +44 -0
  84. data/lib/lrama/reporter.rb +39 -0
  85. data/lib/lrama/state/action/goto.rb +33 -0
  86. data/lib/lrama/state/action/reduce.rb +71 -0
  87. data/lib/lrama/state/action/shift.rb +39 -0
  88. data/lib/lrama/state/action.rb +5 -0
  89. data/lib/lrama/state/inadequacy_annotation.rb +140 -0
  90. data/lib/lrama/{states → state}/item.rb +33 -4
  91. data/lib/lrama/state/reduce_reduce_conflict.rb +14 -1
  92. data/lib/lrama/state/resolved_conflict.rb +38 -4
  93. data/lib/lrama/state/shift_reduce_conflict.rb +14 -1
  94. data/lib/lrama/state.rb +301 -200
  95. data/lib/lrama/states.rb +447 -175
  96. data/lib/lrama/tracer/actions.rb +22 -0
  97. data/lib/lrama/tracer/closure.rb +30 -0
  98. data/lib/lrama/tracer/duration.rb +38 -0
  99. data/lib/lrama/tracer/only_explicit_rules.rb +24 -0
  100. data/lib/lrama/tracer/rules.rb +23 -0
  101. data/lib/lrama/tracer/state.rb +33 -0
  102. data/lib/lrama/tracer.rb +51 -0
  103. data/lib/lrama/version.rb +2 -1
  104. data/lib/lrama/warnings/conflicts.rb +27 -0
  105. data/lib/lrama/warnings/implicit_empty.rb +29 -0
  106. data/lib/lrama/warnings/name_conflicts.rb +63 -0
  107. data/lib/lrama/warnings/redefined_rules.rb +23 -0
  108. data/lib/lrama/warnings/required.rb +23 -0
  109. data/lib/lrama/warnings/useless_precedence.rb +25 -0
  110. data/lib/lrama/warnings.rb +33 -0
  111. data/lib/lrama.rb +5 -5
  112. data/parser.y +495 -404
  113. data/rbs_collection.lock.yaml +27 -3
  114. data/rbs_collection.yaml +2 -0
  115. data/sig/generated/lrama/bitmap.rbs +12 -4
  116. data/sig/generated/lrama/counterexamples/derivation.rbs +36 -0
  117. data/sig/generated/lrama/counterexamples/example.rbs +58 -0
  118. data/sig/generated/lrama/counterexamples/node.rbs +18 -0
  119. data/sig/generated/lrama/counterexamples/path.rbs +23 -0
  120. data/sig/generated/lrama/counterexamples/state_item.rbs +19 -0
  121. data/sig/generated/lrama/counterexamples/triple.rbs +32 -0
  122. data/sig/generated/lrama/counterexamples.rbs +98 -0
  123. data/sig/generated/lrama/diagram.rbs +34 -0
  124. data/sig/generated/lrama/digraph.rbs +26 -6
  125. data/sig/generated/lrama/erb.rbs +14 -0
  126. data/sig/generated/lrama/grammar/auxiliary.rbs +16 -0
  127. data/sig/generated/lrama/grammar/binding.rbs +18 -12
  128. data/sig/generated/lrama/grammar/code/destructor_code.rbs +26 -0
  129. data/sig/{lrama → generated/lrama}/grammar/code/initial_action_code.rbs +6 -0
  130. data/sig/{lrama → generated/lrama}/grammar/code/no_reference_code.rbs +6 -0
  131. data/sig/generated/lrama/grammar/code/printer_code.rbs +26 -0
  132. data/sig/generated/lrama/grammar/code/rule_action.rbs +63 -0
  133. data/sig/generated/lrama/grammar/code.rbs +38 -0
  134. data/sig/{lrama → generated/lrama}/grammar/counter.rbs +4 -0
  135. data/sig/generated/lrama/grammar/destructor.rbs +19 -0
  136. data/sig/generated/lrama/grammar/error_token.rbs +19 -0
  137. data/sig/generated/lrama/grammar/inline/resolver.rbs +26 -0
  138. data/sig/generated/lrama/grammar/parameterized/resolver.rbs +42 -0
  139. data/sig/generated/lrama/grammar/parameterized/rhs.rbs +21 -0
  140. data/sig/generated/lrama/grammar/parameterized/rule.rbs +28 -0
  141. data/sig/{lrama → generated/lrama}/grammar/percent_code.rbs +8 -0
  142. data/sig/generated/lrama/grammar/precedence.rbs +45 -0
  143. data/sig/{lrama/grammar/error_token.rbs → generated/lrama/grammar/printer.rbs} +8 -3
  144. data/sig/generated/lrama/grammar/reference.rbs +31 -0
  145. data/sig/generated/lrama/grammar/rule.rbs +83 -0
  146. data/sig/generated/lrama/grammar/rule_builder.rbs +91 -0
  147. data/sig/generated/lrama/grammar/symbol.rbs +89 -0
  148. data/sig/generated/lrama/grammar/symbols/resolver.rbs +131 -0
  149. data/sig/generated/lrama/grammar/type.rbs +21 -0
  150. data/sig/generated/lrama/grammar/union.rbs +17 -0
  151. data/sig/generated/lrama/grammar.rbs +289 -0
  152. data/sig/generated/lrama/lexer/location.rbs +12 -3
  153. data/sig/generated/lrama/lexer/token/base.rbs +53 -0
  154. data/sig/generated/lrama/lexer/token/char.rbs +9 -2
  155. data/sig/generated/lrama/lexer/token/empty.rbs +11 -0
  156. data/sig/generated/lrama/lexer/token/ident.rbs +2 -2
  157. data/sig/generated/lrama/lexer/token/instantiate_rule.rbs +5 -5
  158. data/sig/generated/lrama/lexer/token/int.rbs +13 -0
  159. data/sig/generated/lrama/lexer/token/str.rbs +10 -0
  160. data/sig/generated/lrama/lexer/token/tag.rbs +2 -2
  161. data/sig/generated/lrama/lexer/token/token.rbs +10 -0
  162. data/sig/generated/lrama/lexer/token/user_code.rbs +2 -2
  163. data/sig/generated/lrama/lexer/token.rbs +1 -39
  164. data/sig/generated/lrama/lexer.rbs +54 -0
  165. data/sig/generated/lrama/logger.rbs +6 -0
  166. data/sig/generated/lrama/option_parser.rbs +52 -0
  167. data/sig/{lrama → generated/lrama}/options.rbs +27 -3
  168. data/sig/generated/lrama/reporter/conflicts.rbs +18 -0
  169. data/sig/generated/lrama/reporter/grammar.rbs +13 -0
  170. data/sig/generated/lrama/reporter/precedences.rbs +15 -0
  171. data/sig/generated/lrama/reporter/profile/call_stack.rbs +19 -0
  172. data/sig/generated/lrama/reporter/profile/memory.rbs +19 -0
  173. data/sig/generated/lrama/reporter/rules.rbs +13 -0
  174. data/sig/generated/lrama/reporter/states.rbs +69 -0
  175. data/sig/generated/lrama/reporter/terms.rbs +13 -0
  176. data/sig/generated/lrama/reporter.rbs +13 -0
  177. data/sig/generated/lrama/state/action/goto.rbs +28 -0
  178. data/sig/generated/lrama/state/action/reduce.rbs +49 -0
  179. data/sig/generated/lrama/state/action/shift.rbs +33 -0
  180. data/sig/generated/lrama/state/inadequacy_annotation.rbs +45 -0
  181. data/sig/generated/lrama/state/item.rbs +75 -0
  182. data/sig/generated/lrama/state/reduce_reduce_conflict.rbs +19 -0
  183. data/sig/generated/lrama/state/resolved_conflict.rbs +38 -0
  184. data/sig/generated/lrama/state/shift_reduce_conflict.rbs +19 -0
  185. data/sig/generated/lrama/state.rbs +231 -0
  186. data/sig/generated/lrama/states.rbs +215 -0
  187. data/sig/generated/lrama/tracer/actions.rbs +13 -0
  188. data/sig/generated/lrama/tracer/closure.rbs +13 -0
  189. data/sig/generated/lrama/tracer/duration.rbs +18 -0
  190. data/sig/generated/lrama/tracer/only_explicit_rules.rbs +13 -0
  191. data/sig/generated/lrama/tracer/rules.rbs +13 -0
  192. data/sig/generated/lrama/tracer/state.rbs +16 -0
  193. data/sig/generated/lrama/tracer.rbs +23 -0
  194. data/sig/generated/lrama/version.rbs +5 -0
  195. data/sig/generated/lrama/warnings/conflicts.rbs +13 -0
  196. data/sig/generated/lrama/warnings/implicit_empty.rbs +17 -0
  197. data/sig/generated/lrama/warnings/name_conflicts.rbs +31 -0
  198. data/sig/generated/lrama/warnings/redefined_rules.rbs +13 -0
  199. data/sig/generated/lrama/warnings/required.rbs +13 -0
  200. data/sig/generated/lrama/warnings/useless_precedence.rbs +13 -0
  201. data/sig/generated/lrama/warnings.rbs +11 -0
  202. data/sig/railroad_diagrams/railroad_diagrams.rbs +16 -0
  203. data/template/bison/_yacc.h +8 -0
  204. data/template/diagram/diagram.html +102 -0
  205. metadata +126 -66
  206. data/lib/lrama/counterexamples/production_path.rb +0 -19
  207. data/lib/lrama/counterexamples/start_path.rb +0 -23
  208. data/lib/lrama/counterexamples/transition_path.rb +0 -19
  209. data/lib/lrama/diagnostics.rb +0 -36
  210. data/lib/lrama/grammar/parameterizing_rule/rule.rb +0 -24
  211. data/lib/lrama/grammar/parameterizing_rule.rb +0 -5
  212. data/lib/lrama/grammar_validator.rb +0 -37
  213. data/lib/lrama/report/duration.rb +0 -27
  214. data/lib/lrama/report/profile.rb +0 -16
  215. data/lib/lrama/report.rb +0 -4
  216. data/lib/lrama/state/reduce.rb +0 -37
  217. data/lib/lrama/state/shift.rb +0 -15
  218. data/lib/lrama/states_reporter.rb +0 -362
  219. data/lib/lrama/trace_reporter.rb +0 -45
  220. data/sig/generated/lrama/trace_reporter.rbs +0 -25
  221. data/sig/lrama/counterexamples/derivation.rbs +0 -33
  222. data/sig/lrama/counterexamples/example.rbs +0 -45
  223. data/sig/lrama/counterexamples/path.rbs +0 -21
  224. data/sig/lrama/counterexamples/production_path.rbs +0 -11
  225. data/sig/lrama/counterexamples/start_path.rbs +0 -13
  226. data/sig/lrama/counterexamples/state_item.rbs +0 -10
  227. data/sig/lrama/counterexamples/transition_path.rbs +0 -11
  228. data/sig/lrama/counterexamples/triple.rbs +0 -20
  229. data/sig/lrama/counterexamples.rbs +0 -29
  230. data/sig/lrama/grammar/auxiliary.rbs +0 -10
  231. data/sig/lrama/grammar/code/destructor_code.rbs +0 -14
  232. data/sig/lrama/grammar/code/printer_code.rbs +0 -14
  233. data/sig/lrama/grammar/code/rule_action.rbs +0 -19
  234. data/sig/lrama/grammar/code.rbs +0 -24
  235. data/sig/lrama/grammar/destructor.rbs +0 -13
  236. data/sig/lrama/grammar/parameterizing_rule/resolver.rbs +0 -24
  237. data/sig/lrama/grammar/parameterizing_rule/rhs.rbs +0 -14
  238. data/sig/lrama/grammar/parameterizing_rule/rule.rbs +0 -16
  239. data/sig/lrama/grammar/parameterizing_rule.rbs +0 -6
  240. data/sig/lrama/grammar/precedence.rbs +0 -13
  241. data/sig/lrama/grammar/printer.rbs +0 -13
  242. data/sig/lrama/grammar/reference.rbs +0 -22
  243. data/sig/lrama/grammar/rule.rbs +0 -45
  244. data/sig/lrama/grammar/rule_builder.rbs +0 -47
  245. data/sig/lrama/grammar/symbol.rbs +0 -38
  246. data/sig/lrama/grammar/symbols/resolver.rbs +0 -60
  247. data/sig/lrama/grammar/type.rbs +0 -11
  248. data/sig/lrama/grammar/union.rbs +0 -12
  249. data/sig/lrama/grammar.rbs +0 -108
  250. data/sig/lrama/report/duration.rbs +0 -11
  251. data/sig/lrama/report/profile.rbs +0 -7
  252. data/sig/lrama/state/reduce.rbs +0 -20
  253. data/sig/lrama/state/reduce_reduce_conflict.rbs +0 -13
  254. data/sig/lrama/state/resolved_conflict.rbs +0 -14
  255. data/sig/lrama/state/shift.rbs +0 -14
  256. data/sig/lrama/state/shift_reduce_conflict.rbs +0 -13
  257. data/sig/lrama/state.rbs +0 -79
  258. data/sig/lrama/states/item.rbs +0 -30
  259. data/sig/lrama/states.rbs +0 -101
  260. data/sig/lrama/warning.rbs +0 -16
data/lib/lrama/parser.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # DO NOT MODIFY!!!!
3
4
  # This file is automatically generated by Racc 1.8.1
@@ -654,22 +655,25 @@ end
654
655
  module Lrama
655
656
  class Parser < Racc::Parser
656
657
 
657
- module_eval(<<'...end parser.y/module_eval...', 'parser.y', 428)
658
+ module_eval(<<'...end parser.y/module_eval...', 'parser.y', 504)
658
659
 
659
- include Lrama::Report::Duration
660
+ include Lrama::Tracer::Duration
660
661
 
661
- def initialize(text, path, debug = false, define = {})
662
+ def initialize(text, path, debug = false, locations = false, define = {})
663
+ @path = path
662
664
  @grammar_file = Lrama::Lexer::GrammarFile.new(path, text)
663
- @yydebug = debug
665
+ @yydebug = debug || define.key?('parse.trace')
664
666
  @rule_counter = Lrama::Grammar::Counter.new(0)
665
667
  @midrule_action_counter = Lrama::Grammar::Counter.new(1)
668
+ @locations = locations
666
669
  @define = define
667
670
  end
668
671
 
669
672
  def parse
670
- report_duration(:parse) do
673
+ message = "parse '#{File.basename(@path)}'"
674
+ report_duration(message) do
671
675
  @lexer = Lrama::Lexer.new(@grammar_file)
672
- @grammar = Lrama::Grammar.new(@rule_counter, @define)
676
+ @grammar = Lrama::Grammar.new(@rule_counter, @locations, @define)
673
677
  @precedence_number = 0
674
678
  reset_precs
675
679
  do_parse
@@ -682,7 +686,14 @@ def next_token
682
686
  end
683
687
 
684
688
  def on_error(error_token_id, error_value, value_stack)
685
- if error_value.is_a?(Lrama::Lexer::Token)
689
+ case error_value
690
+ when Lrama::Lexer::Token::Int
691
+ location = error_value.location
692
+ value = "#{error_value.s_value}"
693
+ when Lrama::Lexer::Token::Token
694
+ location = error_value.location
695
+ value = "\"#{error_value.s_value}\""
696
+ when Lrama::Lexer::Token::Base
686
697
  location = error_value.location
687
698
  value = "'#{error_value.s_value}'"
688
699
  else
@@ -696,7 +707,7 @@ def on_error(error_token_id, error_value, value_stack)
696
707
  end
697
708
 
698
709
  def on_action_error(error_message, error_value)
699
- if error_value.is_a?(Lrama::Lexer::Token)
710
+ if error_value.is_a?(Lrama::Lexer::Token::Base)
700
711
  location = error_value.location
701
712
  else
702
713
  location = @lexer.location
@@ -708,10 +719,15 @@ end
708
719
  private
709
720
 
710
721
  def reset_precs
711
- @prec_seen = false
722
+ @opening_prec_seen = false
723
+ @trailing_prec_seen = false
712
724
  @code_after_prec = false
713
725
  end
714
726
 
727
+ def prec_seen?
728
+ @opening_prec_seen || @trailing_prec_seen
729
+ end
730
+
715
731
  def begin_c_declaration(end_symbol)
716
732
  @lexer.status = :c_declaration
717
733
  @lexer.end_symbol = end_symbol
@@ -729,306 +745,322 @@ end
729
745
  ##### State transition tables begin ###
730
746
 
731
747
  racc_action_table = [
732
- 89, 49, 90, 167, 49, 101, 173, 49, 101, 167,
733
- 49, 101, 173, 6, 101, 80, 49, 49, 48, 48,
734
- 41, 76, 76, 49, 49, 48, 48, 42, 76, 76,
735
- 49, 49, 48, 48, 101, 96, 113, 49, 87, 48,
736
- 150, 101, 96, 151, 45, 171, 169, 170, 151, 176,
737
- 170, 91, 169, 170, 81, 176, 170, 20, 24, 25,
738
- 26, 27, 28, 29, 30, 31, 87, 32, 33, 34,
739
- 35, 36, 37, 38, 39, 49, 4, 48, 5, 101,
740
- 96, 181, 182, 183, 128, 20, 24, 25, 26, 27,
741
- 28, 29, 30, 31, 46, 32, 33, 34, 35, 36,
742
- 37, 38, 39, 11, 12, 13, 14, 15, 16, 17,
743
- 18, 19, 53, 20, 24, 25, 26, 27, 28, 29,
744
- 30, 31, 53, 32, 33, 34, 35, 36, 37, 38,
745
- 39, 11, 12, 13, 14, 15, 16, 17, 18, 19,
746
- 44, 20, 24, 25, 26, 27, 28, 29, 30, 31,
747
- 53, 32, 33, 34, 35, 36, 37, 38, 39, 49,
748
- 4, 48, 5, 101, 96, 49, 49, 48, 48, 101,
749
- 101, 49, 49, 48, 48, 101, 101, 49, 49, 48,
750
- 197, 101, 101, 49, 49, 197, 48, 101, 101, 49,
751
- 49, 197, 48, 101, 181, 182, 183, 128, 204, 210,
752
- 217, 205, 205, 205, 49, 49, 48, 48, 49, 49,
753
- 48, 48, 49, 49, 48, 48, 181, 182, 183, 116,
754
- 117, 56, 53, 53, 53, 53, 53, 62, 63, 64,
755
- 65, 66, 68, 68, 68, 82, 53, 53, 104, 108,
756
- 108, 115, 122, 123, 125, 128, 129, 133, 139, 140,
757
- 141, 142, 144, 145, 101, 154, 139, 157, 154, 161,
758
- 162, 68, 164, 165, 172, 177, 154, 184, 128, 188,
759
- 154, 190, 128, 154, 199, 154, 128, 68, 165, 206,
760
- 165, 68, 68, 215, 128, 68 ]
748
+ 98, 98, 99, 99, 87, 53, 53, 52, 178, 110,
749
+ 110, 97, 53, 53, 184, 178, 110, 110, 53, 181,
750
+ 184, 162, 110, 6, 163, 181, 181, 53, 53, 52,
751
+ 52, 181, 79, 79, 53, 53, 52, 52, 43, 79,
752
+ 79, 53, 4, 52, 5, 110, 88, 94, 182, 125,
753
+ 126, 163, 100, 100, 180, 193, 194, 195, 137, 185,
754
+ 188, 180, 4, 44, 5, 185, 188, 94, 24, 25,
755
+ 26, 27, 28, 29, 30, 31, 32, 46, 33, 34,
756
+ 35, 36, 37, 38, 39, 40, 41, 47, 24, 25,
757
+ 26, 27, 28, 29, 30, 31, 32, 47, 33, 34,
758
+ 35, 36, 37, 38, 39, 40, 41, 12, 13, 50,
759
+ 57, 14, 15, 16, 17, 18, 19, 20, 24, 25,
760
+ 26, 27, 28, 29, 30, 31, 32, 57, 33, 34,
761
+ 35, 36, 37, 38, 39, 40, 41, 12, 13, 57,
762
+ 60, 14, 15, 16, 17, 18, 19, 20, 24, 25,
763
+ 26, 27, 28, 29, 30, 31, 32, 57, 33, 34,
764
+ 35, 36, 37, 38, 39, 40, 41, 53, 53, 52,
765
+ 52, 110, 105, 53, 53, 52, 52, 110, 105, 53,
766
+ 53, 52, 52, 110, 105, 53, 53, 52, 52, 110,
767
+ 105, 53, 53, 52, 52, 110, 110, 53, 53, 52,
768
+ 209, 110, 110, 53, 53, 209, 52, 110, 110, 53,
769
+ 53, 209, 52, 110, 193, 194, 195, 137, 216, 222,
770
+ 229, 217, 217, 217, 53, 53, 52, 52, 193, 194,
771
+ 195, 57, 57, 57, 57, 66, 67, 68, 69, 70,
772
+ 72, 72, 72, 86, 89, 47, 57, 57, 113, 117,
773
+ 117, 79, 123, 124, 131, 47, 133, 137, 139, 143,
774
+ 149, 150, 151, 152, 133, 155, 156, 157, 110, 166,
775
+ 149, 169, 172, 173, 72, 175, 176, 183, 189, 166,
776
+ 196, 137, 200, 202, 137, 166, 211, 166, 137, 72,
777
+ 176, 218, 176, 72, 72, 227, 137, 72 ]
761
778
 
762
779
  racc_action_check = [
763
- 47, 153, 47, 153, 159, 153, 159, 178, 159, 178,
764
- 189, 178, 189, 1, 189, 39, 35, 36, 35, 36,
765
- 5, 35, 36, 37, 38, 37, 38, 6, 37, 38,
766
- 59, 74, 59, 74, 59, 59, 74, 60, 45, 60,
767
- 138, 60, 60, 138, 9, 156, 153, 153, 156, 159,
768
- 159, 47, 178, 178, 39, 189, 189, 45, 45, 45,
769
- 45, 45, 45, 45, 45, 45, 83, 45, 45, 45,
770
- 45, 45, 45, 45, 45, 61, 0, 61, 0, 61,
771
- 61, 166, 166, 166, 166, 83, 83, 83, 83, 83,
772
- 83, 83, 83, 83, 11, 83, 83, 83, 83, 83,
773
- 83, 83, 83, 3, 3, 3, 3, 3, 3, 3,
774
- 3, 3, 13, 3, 3, 3, 3, 3, 3, 3,
775
- 3, 3, 14, 3, 3, 3, 3, 3, 3, 3,
776
- 3, 8, 8, 8, 8, 8, 8, 8, 8, 8,
777
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
778
- 15, 8, 8, 8, 8, 8, 8, 8, 8, 97,
779
- 2, 97, 2, 97, 97, 71, 108, 71, 108, 71,
780
- 108, 109, 169, 109, 169, 109, 169, 176, 184, 176,
781
- 184, 176, 184, 190, 205, 190, 205, 190, 205, 206,
782
- 12, 206, 12, 206, 174, 174, 174, 174, 196, 201,
783
- 214, 196, 201, 214, 69, 76, 69, 76, 104, 105,
784
- 104, 105, 111, 113, 111, 113, 198, 198, 198, 81,
785
- 81, 16, 17, 20, 24, 25, 26, 27, 28, 29,
786
- 30, 31, 32, 33, 34, 40, 51, 56, 67, 70,
787
- 72, 80, 84, 85, 86, 87, 93, 107, 115, 116,
788
- 117, 118, 127, 128, 134, 140, 141, 143, 144, 145,
789
- 146, 150, 151, 152, 158, 163, 165, 167, 168, 171,
790
- 172, 173, 175, 177, 187, 188, 192, 193, 195, 197,
791
- 200, 202, 204, 209, 210, 216 ]
780
+ 51, 97, 51, 97, 41, 75, 165, 75, 165, 75,
781
+ 165, 51, 171, 190, 171, 190, 171, 190, 201, 165,
782
+ 201, 148, 201, 1, 148, 171, 190, 36, 37, 36,
783
+ 37, 201, 36, 37, 38, 39, 38, 39, 5, 38,
784
+ 39, 117, 0, 117, 0, 117, 41, 46, 168, 88,
785
+ 88, 168, 51, 97, 165, 177, 177, 177, 177, 171,
786
+ 171, 190, 2, 6, 2, 201, 201, 90, 46, 46,
787
+ 46, 46, 46, 46, 46, 46, 46, 9, 46, 46,
788
+ 46, 46, 46, 46, 46, 46, 46, 10, 90, 90,
789
+ 90, 90, 90, 90, 90, 90, 90, 11, 90, 90,
790
+ 90, 90, 90, 90, 90, 90, 90, 3, 3, 12,
791
+ 14, 3, 3, 3, 3, 3, 3, 3, 3, 3,
792
+ 3, 3, 3, 3, 3, 3, 3, 15, 3, 3,
793
+ 3, 3, 3, 3, 3, 3, 3, 8, 8, 16,
794
+ 17, 8, 8, 8, 8, 8, 8, 8, 8, 8,
795
+ 8, 8, 8, 8, 8, 8, 8, 18, 8, 8,
796
+ 8, 8, 8, 8, 8, 8, 8, 63, 13, 63,
797
+ 13, 63, 63, 64, 73, 64, 73, 64, 64, 65,
798
+ 78, 65, 78, 65, 65, 106, 79, 106, 79, 106,
799
+ 106, 118, 180, 118, 180, 118, 180, 188, 196, 188,
800
+ 196, 188, 196, 202, 217, 202, 217, 202, 217, 218,
801
+ 113, 218, 113, 218, 186, 186, 186, 186, 208, 213,
802
+ 226, 208, 213, 226, 114, 123, 114, 123, 210, 210,
803
+ 210, 24, 25, 26, 27, 28, 29, 30, 31, 32,
804
+ 33, 34, 35, 40, 42, 47, 55, 60, 71, 74,
805
+ 76, 80, 81, 87, 91, 92, 93, 94, 102, 116,
806
+ 124, 125, 126, 127, 133, 136, 137, 138, 144, 150,
807
+ 151, 153, 156, 158, 162, 163, 164, 170, 174, 176,
808
+ 178, 179, 182, 184, 187, 189, 199, 200, 204, 205,
809
+ 207, 209, 212, 214, 216, 221, 222, 228 ]
792
810
 
793
811
  racc_action_pointer = [
794
- 66, 13, 150, 90, nil, 13, 27, nil, 118, 35,
795
- nil, 88, 187, 63, 73, 101, 216, 173, nil, nil,
796
- 174, nil, nil, nil, 175, 176, 177, 222, 223, 224,
797
- 225, 226, 224, 225, 226, 13, 14, 20, 21, 10,
798
- 233, nil, nil, nil, nil, 34, nil, -5, nil, nil,
799
- nil, 187, nil, nil, nil, nil, 188, nil, nil, 27,
800
- 34, 72, nil, nil, nil, nil, nil, 230, nil, 201,
801
- 231, 162, 232, nil, 28, nil, 202, nil, nil, nil,
802
- 200, 215, nil, 62, 233, 221, 222, 191, nil, nil,
803
- nil, nil, nil, 244, nil, nil, nil, 156, nil, nil,
804
- nil, nil, nil, nil, 205, 206, nil, 241, 163, 168,
805
- nil, 209, nil, 210, nil, 243, 206, 209, 240, nil,
806
- nil, nil, nil, nil, nil, nil, nil, 209, 248, nil,
807
- nil, nil, nil, nil, 247, nil, nil, nil, -2, nil,
808
- 208, 251, nil, 255, 211, 204, 210, nil, nil, nil,
809
- 253, 257, 217, -2, nil, nil, 3, nil, 218, 1,
810
- nil, nil, nil, 222, nil, 219, 30, 226, 214, 169,
811
- nil, 226, 223, 230, 143, 218, 174, 226, 4, nil,
812
- nil, nil, nil, nil, 175, nil, nil, 272, 228, 7,
813
- 180, nil, 222, 269, nil, 232, 156, 238, 165, nil,
814
- 234, 157, 273, nil, 274, 181, 186, nil, nil, 233,
815
- 230, nil, nil, nil, 158, nil, 277, nil, nil ]
812
+ 32, 23, 52, 93, nil, 31, 63, nil, 123, 68,
813
+ 74, 84, 103, 165, 94, 111, 123, 135, 141, nil,
814
+ nil, nil, nil, nil, 215, 216, 217, 218, 230, 231,
815
+ 232, 233, 234, 232, 233, 234, 24, 25, 31, 32,
816
+ 238, -1, 242, nil, nil, nil, 43, 232, nil, nil,
817
+ nil, -5, nil, nil, nil, 230, nil, nil, nil, nil,
818
+ 231, nil, nil, 164, 170, 176, nil, nil, nil, nil,
819
+ nil, 240, nil, 171, 241, 2, 242, nil, 177, 183,
820
+ 243, 244, nil, nil, nil, nil, nil, 209, 45, nil,
821
+ 63, 245, 242, 243, 202, nil, nil, -4, nil, nil,
822
+ nil, nil, 256, nil, nil, nil, 182, nil, nil, nil,
823
+ nil, nil, nil, 207, 221, nil, 253, 38, 188, nil,
824
+ nil, nil, nil, 222, 255, 215, 218, 252, nil, nil,
825
+ nil, nil, nil, 251, nil, nil, 219, 261, 250, nil,
826
+ nil, nil, nil, nil, 261, nil, nil, nil, -24, nil,
827
+ 219, 265, nil, 269, nil, nil, 216, nil, 256, nil,
828
+ nil, nil, 266, 270, 227, 3, nil, nil, 3, nil,
829
+ 228, 9, nil, nil, 232, nil, 229, 3, 236, 226,
830
+ 189, nil, 236, nil, 239, nil, 162, 229, 194, 235,
831
+ 10, nil, nil, nil, nil, nil, 195, nil, nil, 284,
832
+ 237, 15, 200, nil, 233, 281, nil, 241, 173, 247,
833
+ 176, nil, 243, 174, 285, nil, 286, 201, 206, nil,
834
+ nil, 278, 241, nil, nil, nil, 175, nil, 289, nil,
835
+ nil ]
816
836
 
817
837
  racc_action_default = [
818
- -1, -128, -1, -3, -10, -128, -128, -2, -3, -128,
819
- -16, -128, -128, -128, -128, -128, -128, -128, -24, -25,
820
- -128, -32, -33, -34, -128, -128, -128, -128, -128, -128,
821
- -128, -128, -50, -50, -50, -128, -128, -128, -128, -128,
822
- -128, -13, 219, -4, -26, -128, -17, -123, -93, -94,
823
- -122, -14, -19, -85, -20, -21, -128, -23, -31, -128,
824
- -128, -128, -38, -39, -40, -41, -42, -43, -51, -128,
825
- -44, -128, -45, -46, -88, -90, -128, -47, -48, -49,
826
- -128, -128, -11, -5, -7, -95, -128, -68, -18, -124,
827
- -125, -126, -15, -128, -22, -27, -28, -29, -35, -83,
828
- -84, -127, -36, -37, -128, -52, -54, -56, -128, -79,
829
- -81, -88, -89, -128, -91, -128, -128, -128, -128, -6,
830
- -8, -9, -120, -96, -97, -98, -69, -128, -128, -86,
831
- -30, -55, -53, -57, -76, -82, -80, -92, -128, -62,
832
- -66, -128, -12, -128, -66, -128, -128, -58, -77, -78,
833
- -50, -128, -60, -64, -67, -70, -128, -121, -99, -100,
834
- -102, -119, -87, -128, -63, -66, -68, -93, -68, -128,
835
- -116, -128, -66, -93, -68, -68, -128, -66, -65, -71,
836
- -72, -108, -109, -110, -128, -74, -75, -128, -66, -101,
837
- -128, -103, -68, -50, -107, -59, -128, -93, -111, -117,
838
- -61, -128, -50, -106, -50, -128, -128, -112, -113, -128,
839
- -68, -104, -73, -114, -128, -118, -50, -115, -105 ]
838
+ -1, -136, -1, -3, -10, -136, -136, -2, -3, -136,
839
+ -14, -14, -136, -136, -136, -136, -136, -136, -136, -28,
840
+ -29, -34, -35, -36, -136, -136, -136, -136, -136, -136,
841
+ -136, -136, -136, -54, -54, -54, -136, -136, -136, -136,
842
+ -136, -136, -136, -13, 231, -4, -136, -14, -16, -17,
843
+ -20, -131, -100, -101, -130, -18, -23, -89, -24, -25,
844
+ -136, -27, -37, -136, -136, -136, -41, -42, -43, -44,
845
+ -45, -46, -55, -136, -47, -136, -48, -49, -92, -136,
846
+ -95, -97, -98, -50, -51, -52, -53, -136, -136, -11,
847
+ -5, -7, -14, -136, -72, -15, -21, -131, -132, -133,
848
+ -134, -19, -136, -26, -30, -31, -32, -38, -87, -88,
849
+ -135, -39, -40, -136, -56, -58, -60, -136, -83, -85,
850
+ -93, -94, -96, -136, -136, -136, -136, -136, -6, -8,
851
+ -9, -128, -104, -102, -105, -73, -136, -136, -136, -90,
852
+ -33, -59, -57, -61, -80, -86, -84, -99, -136, -66,
853
+ -70, -136, -12, -136, -103, -109, -136, -22, -136, -62,
854
+ -81, -82, -54, -136, -64, -68, -71, -74, -136, -129,
855
+ -106, -107, -127, -91, -136, -67, -70, -72, -100, -72,
856
+ -136, -124, -136, -109, -100, -110, -72, -72, -136, -70,
857
+ -69, -75, -76, -116, -117, -118, -136, -78, -79, -136,
858
+ -70, -108, -136, -111, -72, -54, -115, -63, -136, -100,
859
+ -119, -125, -65, -136, -54, -114, -54, -136, -136, -120,
860
+ -121, -136, -72, -112, -77, -122, -136, -126, -54, -123,
861
+ -113 ]
840
862
 
841
863
  racc_goto_table = [
842
- 69, 109, 50, 152, 57, 127, 84, 58, 112, 160,
843
- 114, 59, 60, 61, 86, 52, 54, 55, 98, 102,
844
- 103, 159, 106, 110, 175, 74, 74, 74, 74, 138,
845
- 9, 1, 3, 180, 7, 43, 120, 160, 109, 109,
846
- 195, 192, 121, 94, 119, 112, 40, 137, 118, 189,
847
- 47, 200, 86, 92, 175, 156, 130, 131, 132, 107,
848
- 135, 136, 88, 196, 111, 207, 111, 70, 72, 201,
849
- 73, 77, 78, 79, 67, 147, 134, 178, 148, 149,
850
- 93, 146, 124, 166, 179, 214, 185, 158, 208, 174,
851
- 187, 209, 191, 193, 107, 107, 143, nil, nil, 186,
852
- nil, 111, nil, 111, nil, nil, 194, nil, 166, nil,
853
- 202, nil, nil, nil, 198, nil, nil, nil, 163, 174,
854
- 198, nil, nil, nil, nil, nil, nil, nil, 216, nil,
855
- nil, nil, nil, nil, nil, 213, 198, nil, nil, nil,
864
+ 73, 118, 136, 54, 48, 49, 164, 96, 91, 120,
865
+ 121, 93, 187, 148, 107, 111, 112, 119, 134, 171,
866
+ 56, 58, 59, 3, 61, 7, 78, 78, 78, 78,
867
+ 62, 63, 64, 65, 115, 74, 76, 192, 1, 129,
868
+ 168, 95, 187, 118, 118, 207, 204, 201, 77, 83,
869
+ 84, 85, 128, 138, 147, 93, 212, 140, 154, 145,
870
+ 146, 101, 130, 116, 42, 127, 103, 208, 78, 78,
871
+ 219, 9, 51, 213, 141, 142, 45, 71, 159, 144,
872
+ 190, 160, 161, 102, 158, 191, 132, 197, 122, 226,
873
+ 170, 177, 220, 199, 203, 205, 221, 186, 153, nil,
874
+ nil, nil, nil, 116, 116, nil, 198, nil, nil, nil,
875
+ nil, nil, 214, 78, 206, nil, 177, nil, nil, nil,
876
+ nil, nil, 210, nil, nil, nil, nil, 186, 210, 174,
877
+ 228, nil, nil, nil, nil, nil, nil, nil, nil, nil,
878
+ nil, nil, nil, 225, 210, nil, nil, nil, nil, nil,
856
879
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
857
880
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
858
- nil, 203, nil, nil, nil, nil, nil, nil, nil, nil,
859
- 211, nil, 212, nil, nil, nil, nil, nil, nil, nil,
860
- nil, nil, nil, nil, 218 ]
881
+ nil, nil, 215, nil, nil, nil, nil, nil, nil, nil,
882
+ nil, 223, nil, 224, nil, nil, nil, nil, nil, nil,
883
+ nil, nil, nil, nil, nil, 230 ]
861
884
 
862
885
  racc_goto_check = [
863
- 27, 20, 29, 33, 15, 40, 8, 15, 46, 39,
864
- 46, 15, 15, 15, 12, 16, 16, 16, 22, 22,
865
- 22, 50, 28, 43, 38, 29, 29, 29, 29, 32,
866
- 7, 1, 6, 36, 6, 7, 5, 39, 20, 20,
867
- 33, 36, 9, 15, 8, 46, 10, 46, 11, 50,
868
- 13, 33, 12, 16, 38, 32, 22, 28, 28, 29,
869
- 43, 43, 14, 37, 29, 36, 29, 24, 24, 37,
870
- 25, 25, 25, 25, 23, 30, 31, 34, 41, 42,
871
- 44, 45, 48, 20, 40, 37, 40, 49, 51, 20,
872
- 52, 53, 40, 40, 29, 29, 54, nil, nil, 20,
873
- nil, 29, nil, 29, nil, nil, 20, nil, 20, nil,
874
- 40, nil, nil, nil, 20, nil, nil, nil, 27, 20,
875
- 20, nil, nil, nil, nil, nil, nil, nil, 40, nil,
876
- nil, nil, nil, nil, nil, 20, 20, nil, nil, nil,
886
+ 29, 22, 42, 31, 14, 14, 35, 16, 8, 48,
887
+ 48, 13, 40, 34, 24, 24, 24, 45, 52, 54,
888
+ 18, 18, 18, 6, 17, 6, 31, 31, 31, 31,
889
+ 17, 17, 17, 17, 30, 26, 26, 38, 1, 5,
890
+ 34, 14, 40, 22, 22, 35, 38, 54, 27, 27,
891
+ 27, 27, 8, 16, 48, 13, 35, 24, 52, 45,
892
+ 45, 18, 9, 31, 10, 11, 17, 39, 31, 31,
893
+ 38, 7, 15, 39, 30, 30, 7, 25, 32, 33,
894
+ 36, 43, 44, 46, 47, 42, 14, 42, 50, 39,
895
+ 53, 22, 55, 56, 42, 42, 57, 22, 58, nil,
896
+ nil, nil, nil, 31, 31, nil, 22, nil, nil, nil,
897
+ nil, nil, 42, 31, 22, nil, 22, nil, nil, nil,
898
+ nil, nil, 22, nil, nil, nil, nil, 22, 22, 29,
899
+ 42, nil, nil, nil, nil, nil, nil, nil, nil, nil,
900
+ nil, nil, nil, 22, 22, nil, nil, nil, nil, nil,
877
901
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
878
902
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
879
- nil, 27, nil, nil, nil, nil, nil, nil, nil, nil,
880
- 27, nil, 27, nil, nil, nil, nil, nil, nil, nil,
881
- nil, nil, nil, nil, 27 ]
903
+ nil, nil, 29, nil, nil, nil, nil, nil, nil, nil,
904
+ nil, 29, nil, 29, nil, nil, nil, nil, nil, nil,
905
+ nil, nil, nil, nil, nil, 29 ]
882
906
 
883
907
  racc_goto_pointer = [
884
- nil, 31, nil, nil, nil, -48, 32, 27, -39, -42,
885
- 42, -34, -31, 38, 15, -13, 2, nil, nil, nil,
886
- -70, nil, -41, 42, 34, 35, nil, -32, -47, -10,
887
- -59, -31, -86, -137, -88, nil, -133, -121, -135, -135,
888
- -82, -56, -55, -48, 27, -48, -66, nil, -3, -57,
889
- -123, -110, -80, -108, -26 ]
908
+ nil, 38, nil, nil, nil, -52, 23, 68, -38, -29,
909
+ 60, -24, nil, -35, -6, 59, -44, 6, 6, nil,
910
+ nil, nil, -74, nil, -49, 44, 1, 12, nil, -33,
911
+ -39, -10, -66, -37, -111, -144, -96, nil, -140, -129,
912
+ -159, nil, -92, -63, -62, -58, 26, -55, -69, nil,
913
+ 8, nil, -75, -65, -136, -118, -88, -115, -33 ]
890
914
 
891
915
  racc_goto_default = [
892
- nil, nil, 2, 8, 83, nil, nil, nil, nil, nil,
893
- nil, nil, 10, nil, nil, 51, nil, 21, 22, 23,
894
- 95, 97, nil, nil, nil, nil, 105, 71, nil, 99,
895
- nil, nil, nil, nil, 153, 126, nil, nil, 168, 155,
896
- nil, 100, nil, nil, nil, nil, 75, 85, nil, nil,
897
- nil, nil, nil, nil, nil ]
916
+ nil, nil, 2, 8, 90, nil, nil, nil, nil, nil,
917
+ nil, nil, 10, 11, nil, nil, nil, 55, nil, 21,
918
+ 22, 23, 104, 106, nil, nil, nil, nil, 114, 75,
919
+ nil, 108, nil, nil, nil, nil, 165, 135, nil, nil,
920
+ 179, 167, nil, 109, nil, nil, nil, nil, 81, 80,
921
+ 82, 92, nil, nil, nil, nil, nil, nil, nil ]
898
922
 
899
923
  racc_reduce_table = [
900
924
  0, 0, :racc_error,
901
- 0, 63, :_reduce_1,
902
- 2, 63, :_reduce_2,
903
- 0, 64, :_reduce_3,
904
- 2, 64, :_reduce_4,
905
- 1, 65, :_reduce_5,
906
- 2, 65, :_reduce_6,
907
- 0, 66, :_reduce_none,
908
- 1, 66, :_reduce_none,
909
- 5, 58, :_reduce_none,
910
- 0, 67, :_reduce_10,
911
- 0, 68, :_reduce_11,
912
- 5, 59, :_reduce_12,
913
- 2, 59, :_reduce_none,
914
- 1, 73, :_reduce_14,
915
- 2, 73, :_reduce_15,
916
- 1, 60, :_reduce_none,
917
- 2, 60, :_reduce_17,
918
- 3, 60, :_reduce_18,
919
- 2, 60, :_reduce_none,
920
- 2, 60, :_reduce_20,
921
- 2, 60, :_reduce_21,
922
- 3, 60, :_reduce_22,
923
- 2, 60, :_reduce_23,
924
- 1, 60, :_reduce_24,
925
- 1, 60, :_reduce_25,
926
- 2, 60, :_reduce_none,
927
- 1, 78, :_reduce_27,
928
- 1, 78, :_reduce_28,
929
- 1, 79, :_reduce_29,
930
- 2, 79, :_reduce_30,
931
- 2, 69, :_reduce_31,
932
- 1, 69, :_reduce_none,
933
- 1, 69, :_reduce_none,
934
- 1, 69, :_reduce_none,
935
- 3, 69, :_reduce_35,
936
- 3, 69, :_reduce_36,
937
- 3, 69, :_reduce_37,
938
- 2, 69, :_reduce_38,
939
- 2, 69, :_reduce_39,
940
- 2, 69, :_reduce_40,
941
- 2, 69, :_reduce_41,
942
- 2, 69, :_reduce_42,
943
- 2, 74, :_reduce_none,
944
- 2, 74, :_reduce_44,
945
- 2, 74, :_reduce_45,
946
- 2, 74, :_reduce_46,
947
- 2, 74, :_reduce_47,
948
- 2, 74, :_reduce_48,
949
- 2, 74, :_reduce_49,
950
- 0, 84, :_reduce_none,
951
- 1, 84, :_reduce_none,
952
- 1, 85, :_reduce_52,
953
- 2, 85, :_reduce_53,
954
- 2, 80, :_reduce_54,
955
- 3, 80, :_reduce_55,
956
- 0, 88, :_reduce_none,
957
- 1, 88, :_reduce_none,
958
- 3, 83, :_reduce_58,
959
- 8, 75, :_reduce_59,
960
- 5, 76, :_reduce_60,
961
- 8, 76, :_reduce_61,
962
- 1, 89, :_reduce_62,
963
- 3, 89, :_reduce_63,
964
- 1, 90, :_reduce_64,
965
- 3, 90, :_reduce_65,
966
- 0, 96, :_reduce_none,
967
- 1, 96, :_reduce_none,
968
- 0, 97, :_reduce_none,
969
- 1, 97, :_reduce_none,
970
- 1, 91, :_reduce_70,
971
- 3, 91, :_reduce_71,
972
- 3, 91, :_reduce_72,
973
- 6, 91, :_reduce_73,
974
- 3, 91, :_reduce_74,
975
- 3, 91, :_reduce_75,
976
- 0, 99, :_reduce_none,
977
- 1, 99, :_reduce_none,
978
- 1, 87, :_reduce_78,
979
- 1, 100, :_reduce_79,
980
- 2, 100, :_reduce_80,
981
- 2, 81, :_reduce_81,
982
- 3, 81, :_reduce_82,
983
- 1, 77, :_reduce_none,
984
- 1, 77, :_reduce_none,
985
- 0, 101, :_reduce_85,
986
- 0, 102, :_reduce_86,
987
- 5, 72, :_reduce_87,
988
- 1, 103, :_reduce_88,
989
- 2, 103, :_reduce_89,
990
- 1, 82, :_reduce_90,
991
- 2, 82, :_reduce_91,
992
- 3, 82, :_reduce_92,
993
- 1, 86, :_reduce_93,
994
- 1, 86, :_reduce_94,
995
- 0, 105, :_reduce_none,
996
- 1, 105, :_reduce_none,
925
+ 0, 64, :_reduce_1,
926
+ 2, 64, :_reduce_2,
927
+ 0, 65, :_reduce_3,
928
+ 2, 65, :_reduce_4,
929
+ 1, 66, :_reduce_5,
930
+ 2, 66, :_reduce_6,
931
+ 0, 67, :_reduce_none,
932
+ 1, 67, :_reduce_none,
933
+ 5, 59, :_reduce_none,
934
+ 0, 68, :_reduce_10,
935
+ 0, 69, :_reduce_11,
936
+ 5, 60, :_reduce_12,
937
+ 2, 60, :_reduce_13,
938
+ 0, 72, :_reduce_14,
939
+ 2, 72, :_reduce_15,
997
940
  2, 61, :_reduce_none,
998
941
  2, 61, :_reduce_none,
999
- 4, 104, :_reduce_99,
1000
- 1, 106, :_reduce_100,
1001
- 3, 106, :_reduce_101,
1002
- 1, 107, :_reduce_102,
1003
- 3, 107, :_reduce_103,
1004
- 5, 107, :_reduce_104,
1005
- 7, 107, :_reduce_105,
1006
- 4, 107, :_reduce_106,
1007
- 3, 107, :_reduce_107,
1008
- 1, 93, :_reduce_108,
1009
- 1, 93, :_reduce_109,
1010
- 1, 93, :_reduce_110,
1011
- 0, 108, :_reduce_none,
1012
- 1, 108, :_reduce_none,
1013
- 2, 94, :_reduce_113,
1014
- 3, 94, :_reduce_114,
1015
- 4, 94, :_reduce_115,
1016
- 0, 109, :_reduce_116,
1017
- 0, 110, :_reduce_117,
1018
- 5, 95, :_reduce_118,
1019
- 3, 92, :_reduce_119,
1020
- 0, 111, :_reduce_120,
1021
- 3, 62, :_reduce_121,
1022
- 1, 70, :_reduce_none,
1023
- 0, 71, :_reduce_none,
942
+ 1, 76, :_reduce_18,
943
+ 2, 76, :_reduce_19,
944
+ 2, 70, :_reduce_20,
945
+ 3, 70, :_reduce_21,
946
+ 5, 70, :_reduce_22,
947
+ 2, 70, :_reduce_none,
948
+ 2, 70, :_reduce_24,
949
+ 2, 70, :_reduce_25,
950
+ 3, 70, :_reduce_26,
951
+ 2, 70, :_reduce_27,
952
+ 1, 70, :_reduce_28,
953
+ 1, 70, :_reduce_29,
954
+ 1, 81, :_reduce_30,
955
+ 1, 81, :_reduce_31,
956
+ 1, 82, :_reduce_32,
957
+ 2, 82, :_reduce_33,
1024
958
  1, 71, :_reduce_none,
1025
959
  1, 71, :_reduce_none,
1026
960
  1, 71, :_reduce_none,
1027
- 1, 98, :_reduce_127 ]
1028
-
1029
- racc_reduce_n = 128
1030
-
1031
- racc_shift_n = 219
961
+ 2, 71, :_reduce_37,
962
+ 3, 71, :_reduce_38,
963
+ 3, 71, :_reduce_39,
964
+ 3, 71, :_reduce_40,
965
+ 2, 71, :_reduce_41,
966
+ 2, 71, :_reduce_42,
967
+ 2, 71, :_reduce_43,
968
+ 2, 71, :_reduce_44,
969
+ 2, 71, :_reduce_45,
970
+ 2, 77, :_reduce_none,
971
+ 2, 77, :_reduce_47,
972
+ 2, 77, :_reduce_48,
973
+ 2, 77, :_reduce_49,
974
+ 2, 77, :_reduce_50,
975
+ 2, 77, :_reduce_51,
976
+ 2, 77, :_reduce_52,
977
+ 2, 77, :_reduce_53,
978
+ 0, 87, :_reduce_none,
979
+ 1, 87, :_reduce_none,
980
+ 1, 88, :_reduce_56,
981
+ 2, 88, :_reduce_57,
982
+ 2, 83, :_reduce_58,
983
+ 3, 83, :_reduce_59,
984
+ 0, 91, :_reduce_none,
985
+ 1, 91, :_reduce_none,
986
+ 3, 86, :_reduce_62,
987
+ 8, 78, :_reduce_63,
988
+ 5, 79, :_reduce_64,
989
+ 8, 79, :_reduce_65,
990
+ 1, 92, :_reduce_66,
991
+ 3, 92, :_reduce_67,
992
+ 1, 93, :_reduce_68,
993
+ 3, 93, :_reduce_69,
994
+ 0, 99, :_reduce_none,
995
+ 1, 99, :_reduce_none,
996
+ 0, 100, :_reduce_none,
997
+ 1, 100, :_reduce_none,
998
+ 1, 94, :_reduce_74,
999
+ 3, 94, :_reduce_75,
1000
+ 3, 94, :_reduce_76,
1001
+ 6, 94, :_reduce_77,
1002
+ 3, 94, :_reduce_78,
1003
+ 3, 94, :_reduce_79,
1004
+ 0, 102, :_reduce_none,
1005
+ 1, 102, :_reduce_none,
1006
+ 1, 90, :_reduce_82,
1007
+ 1, 103, :_reduce_83,
1008
+ 2, 103, :_reduce_84,
1009
+ 2, 84, :_reduce_85,
1010
+ 3, 84, :_reduce_86,
1011
+ 1, 80, :_reduce_none,
1012
+ 1, 80, :_reduce_none,
1013
+ 0, 104, :_reduce_89,
1014
+ 0, 105, :_reduce_90,
1015
+ 5, 75, :_reduce_91,
1016
+ 1, 106, :_reduce_92,
1017
+ 2, 106, :_reduce_93,
1018
+ 2, 107, :_reduce_94,
1019
+ 1, 108, :_reduce_95,
1020
+ 2, 108, :_reduce_96,
1021
+ 1, 85, :_reduce_97,
1022
+ 1, 85, :_reduce_98,
1023
+ 3, 85, :_reduce_99,
1024
+ 1, 89, :_reduce_none,
1025
+ 1, 89, :_reduce_none,
1026
+ 1, 110, :_reduce_102,
1027
+ 2, 110, :_reduce_103,
1028
+ 2, 62, :_reduce_none,
1029
+ 2, 62, :_reduce_none,
1030
+ 4, 109, :_reduce_106,
1031
+ 1, 111, :_reduce_107,
1032
+ 3, 111, :_reduce_108,
1033
+ 0, 112, :_reduce_109,
1034
+ 2, 112, :_reduce_110,
1035
+ 3, 112, :_reduce_111,
1036
+ 5, 112, :_reduce_112,
1037
+ 7, 112, :_reduce_113,
1038
+ 4, 112, :_reduce_114,
1039
+ 3, 112, :_reduce_115,
1040
+ 1, 96, :_reduce_116,
1041
+ 1, 96, :_reduce_117,
1042
+ 1, 96, :_reduce_118,
1043
+ 0, 113, :_reduce_none,
1044
+ 1, 113, :_reduce_none,
1045
+ 2, 97, :_reduce_121,
1046
+ 3, 97, :_reduce_122,
1047
+ 4, 97, :_reduce_123,
1048
+ 0, 114, :_reduce_124,
1049
+ 0, 115, :_reduce_125,
1050
+ 5, 98, :_reduce_126,
1051
+ 3, 95, :_reduce_127,
1052
+ 0, 116, :_reduce_128,
1053
+ 3, 63, :_reduce_129,
1054
+ 1, 73, :_reduce_none,
1055
+ 0, 74, :_reduce_none,
1056
+ 1, 74, :_reduce_none,
1057
+ 1, 74, :_reduce_none,
1058
+ 1, 74, :_reduce_none,
1059
+ 1, 101, :_reduce_135 ]
1060
+
1061
+ racc_reduce_n = 136
1062
+
1063
+ racc_shift_n = 231
1032
1064
 
1033
1065
  racc_token_table = {
1034
1066
  false => 0,
@@ -1044,52 +1076,53 @@ racc_token_table = {
1044
1076
  "%{" => 10,
1045
1077
  "%}" => 11,
1046
1078
  "%require" => 12,
1047
- "%expect" => 13,
1048
- "%define" => 14,
1049
- "%param" => 15,
1050
- "%lex-param" => 16,
1051
- "%parse-param" => 17,
1052
- "%code" => 18,
1053
- "%initial-action" => 19,
1054
- "%no-stdlib" => 20,
1055
- "%locations" => 21,
1056
- ";" => 22,
1057
- "%union" => 23,
1058
- "%destructor" => 24,
1059
- "%printer" => 25,
1060
- "%error-token" => 26,
1061
- "%after-shift" => 27,
1062
- "%before-reduce" => 28,
1063
- "%after-reduce" => 29,
1064
- "%after-shift-error-token" => 30,
1065
- "%after-pop-stack" => 31,
1066
- "-temp-group" => 32,
1067
- "%token" => 33,
1068
- "%type" => 34,
1069
- "%nterm" => 35,
1070
- "%left" => 36,
1071
- "%right" => 37,
1072
- "%precedence" => 38,
1073
- "%nonassoc" => 39,
1074
- "%rule" => 40,
1075
- "(" => 41,
1076
- ")" => 42,
1077
- ":" => 43,
1078
- "%inline" => 44,
1079
- "," => 45,
1080
- "|" => 46,
1081
- "%empty" => 47,
1082
- "%prec" => 48,
1083
- "{" => 49,
1084
- "}" => 50,
1085
- "?" => 51,
1086
- "+" => 52,
1087
- "*" => 53,
1088
- "[" => 54,
1089
- "]" => 55,
1090
- "{...}" => 56 }
1091
-
1092
- racc_nt_base = 57
1079
+ ";" => 13,
1080
+ "%expect" => 14,
1081
+ "%define" => 15,
1082
+ "{" => 16,
1083
+ "}" => 17,
1084
+ "%param" => 18,
1085
+ "%lex-param" => 19,
1086
+ "%parse-param" => 20,
1087
+ "%code" => 21,
1088
+ "%initial-action" => 22,
1089
+ "%no-stdlib" => 23,
1090
+ "%locations" => 24,
1091
+ "%union" => 25,
1092
+ "%destructor" => 26,
1093
+ "%printer" => 27,
1094
+ "%error-token" => 28,
1095
+ "%after-shift" => 29,
1096
+ "%before-reduce" => 30,
1097
+ "%after-reduce" => 31,
1098
+ "%after-shift-error-token" => 32,
1099
+ "%after-pop-stack" => 33,
1100
+ "-temp-group" => 34,
1101
+ "%token" => 35,
1102
+ "%type" => 36,
1103
+ "%nterm" => 37,
1104
+ "%left" => 38,
1105
+ "%right" => 39,
1106
+ "%precedence" => 40,
1107
+ "%nonassoc" => 41,
1108
+ "%start" => 42,
1109
+ "%rule" => 43,
1110
+ "(" => 44,
1111
+ ")" => 45,
1112
+ ":" => 46,
1113
+ "%inline" => 47,
1114
+ "," => 48,
1115
+ "|" => 49,
1116
+ "%empty" => 50,
1117
+ "%prec" => 51,
1118
+ "?" => 52,
1119
+ "+" => 53,
1120
+ "*" => 54,
1121
+ "[" => 55,
1122
+ "]" => 56,
1123
+ "{...}" => 57 }
1124
+
1125
+ racc_nt_base = 58
1093
1126
 
1094
1127
  racc_use_result_var = true
1095
1128
 
@@ -1124,8 +1157,11 @@ Racc_token_to_s_table = [
1124
1157
  "\"%{\"",
1125
1158
  "\"%}\"",
1126
1159
  "\"%require\"",
1160
+ "\";\"",
1127
1161
  "\"%expect\"",
1128
1162
  "\"%define\"",
1163
+ "\"{\"",
1164
+ "\"}\"",
1129
1165
  "\"%param\"",
1130
1166
  "\"%lex-param\"",
1131
1167
  "\"%parse-param\"",
@@ -1133,7 +1169,6 @@ Racc_token_to_s_table = [
1133
1169
  "\"%initial-action\"",
1134
1170
  "\"%no-stdlib\"",
1135
1171
  "\"%locations\"",
1136
- "\";\"",
1137
1172
  "\"%union\"",
1138
1173
  "\"%destructor\"",
1139
1174
  "\"%printer\"",
@@ -1151,6 +1186,7 @@ Racc_token_to_s_table = [
1151
1186
  "\"%right\"",
1152
1187
  "\"%precedence\"",
1153
1188
  "\"%nonassoc\"",
1189
+ "\"%start\"",
1154
1190
  "\"%rule\"",
1155
1191
  "\"(\"",
1156
1192
  "\")\"",
@@ -1160,8 +1196,6 @@ Racc_token_to_s_table = [
1160
1196
  "\"|\"",
1161
1197
  "\"%empty\"",
1162
1198
  "\"%prec\"",
1163
- "\"{\"",
1164
- "\"}\"",
1165
1199
  "\"?\"",
1166
1200
  "\"+\"",
1167
1201
  "\"*\"",
@@ -1180,7 +1214,9 @@ Racc_token_to_s_table = [
1180
1214
  "\"-option@epilogue_declaration\"",
1181
1215
  "@1",
1182
1216
  "@2",
1217
+ "parser_option",
1183
1218
  "grammar_declaration",
1219
+ "\"-many@;\"",
1184
1220
  "variable",
1185
1221
  "value",
1186
1222
  "param",
@@ -1204,9 +1240,9 @@ Racc_token_to_s_table = [
1204
1240
  "rule_rhs_list",
1205
1241
  "rule_rhs",
1206
1242
  "named_ref",
1207
- "parameterizing_suffix",
1208
- "parameterizing_args",
1209
- "midrule_action",
1243
+ "parameterized_suffix",
1244
+ "parameterized_args",
1245
+ "action",
1210
1246
  "\"-option@%empty\"",
1211
1247
  "\"-option@named_ref\"",
1212
1248
  "string_as_id",
@@ -1215,11 +1251,13 @@ Racc_token_to_s_table = [
1215
1251
  "@3",
1216
1252
  "@4",
1217
1253
  "\"-many1@id\"",
1254
+ "\"-group@TAG-\\\"-many1@id\\\"\"",
1255
+ "\"-many1@-group@TAG-\\\"-many1@id\\\"\"",
1218
1256
  "rules",
1219
- "\"-option@;\"",
1257
+ "\"-many1@;\"",
1220
1258
  "rhs_list",
1221
1259
  "rhs",
1222
- "\"-option@parameterizing_suffix\"",
1260
+ "\"-option@parameterized_suffix\"",
1223
1261
  "@5",
1224
1262
  "@6",
1225
1263
  "@7" ]
@@ -1279,10 +1317,9 @@ module_eval(<<'.,.,', 'parser.y', 11)
1279
1317
 
1280
1318
  # reduce 9 omitted
1281
1319
 
1282
- module_eval(<<'.,.,', 'parser.y', 12)
1320
+ module_eval(<<'.,.,', 'parser.y', 13)
1283
1321
  def _reduce_10(val, _values, result)
1284
- begin_c_declaration("%}")
1285
- @grammar.prologue_first_lineno = @lexer.line
1322
+ begin_c_declaration("%}")
1286
1323
 
1287
1324
  result
1288
1325
  end
@@ -1290,7 +1327,7 @@ module_eval(<<'.,.,', 'parser.y', 12)
1290
1327
 
1291
1328
  module_eval(<<'.,.,', 'parser.y', 17)
1292
1329
  def _reduce_11(val, _values, result)
1293
- end_c_declaration
1330
+ end_c_declaration
1294
1331
 
1295
1332
  result
1296
1333
  end
@@ -1298,22 +1335,29 @@ module_eval(<<'.,.,', 'parser.y', 17)
1298
1335
 
1299
1336
  module_eval(<<'.,.,', 'parser.y', 21)
1300
1337
  def _reduce_12(val, _values, result)
1301
- @grammar.prologue = val[2].s_value
1338
+ @grammar.prologue_first_lineno = val[0].first_line
1339
+ @grammar.prologue = val[2].s_value
1302
1340
 
1303
1341
  result
1304
1342
  end
1305
1343
  .,.,
1306
1344
 
1307
- # reduce 13 omitted
1345
+ module_eval(<<'.,.,', 'parser.y', 26)
1346
+ def _reduce_13(val, _values, result)
1347
+ @grammar.required = true
1308
1348
 
1309
- module_eval(<<'.,.,', 'parser.y', 54)
1349
+ result
1350
+ end
1351
+ .,.,
1352
+
1353
+ module_eval(<<'.,.,', 'parser.y', 34)
1310
1354
  def _reduce_14(val, _values, result)
1311
1355
  result = val[1] ? val[1].unshift(val[0]) : val
1312
1356
  result
1313
1357
  end
1314
1358
  .,.,
1315
1359
 
1316
- module_eval(<<'.,.,', 'parser.y', 54)
1360
+ module_eval(<<'.,.,', 'parser.y', 34)
1317
1361
  def _reduce_15(val, _values, result)
1318
1362
  result = val[1] ? val[1].unshift(val[0]) : val
1319
1363
  result
@@ -1322,150 +1366,140 @@ module_eval(<<'.,.,', 'parser.y', 54)
1322
1366
 
1323
1367
  # reduce 16 omitted
1324
1368
 
1325
- module_eval(<<'.,.,', 'parser.y', 26)
1326
- def _reduce_17(val, _values, result)
1327
- @grammar.expect = val[1]
1369
+ # reduce 17 omitted
1370
+
1371
+ module_eval(<<'.,.,', 'parser.y', 77)
1372
+ def _reduce_18(val, _values, result)
1373
+ result = val[1] ? val[1].unshift(val[0]) : val
1328
1374
  result
1329
1375
  end
1330
1376
  .,.,
1331
1377
 
1332
- module_eval(<<'.,.,', 'parser.y', 27)
1333
- def _reduce_18(val, _values, result)
1334
- @grammar.define[val[1].s_value] = val[2]&.s_value
1378
+ module_eval(<<'.,.,', 'parser.y', 77)
1379
+ def _reduce_19(val, _values, result)
1380
+ result = val[1] ? val[1].unshift(val[0]) : val
1335
1381
  result
1336
1382
  end
1337
1383
  .,.,
1338
1384
 
1339
- # reduce 19 omitted
1340
-
1341
- module_eval(<<'.,.,', 'parser.y', 31)
1385
+ module_eval(<<'.,.,', 'parser.y', 36)
1342
1386
  def _reduce_20(val, _values, result)
1343
- val[1].each {|token|
1344
- @grammar.lex_param = Grammar::Code::NoReferenceCode.new(type: :lex_param, token_code: token).token_code.s_value
1345
- }
1387
+ @grammar.expect = val[1].s_value
1346
1388
 
1347
1389
  result
1348
1390
  end
1349
1391
  .,.,
1350
1392
 
1351
- module_eval(<<'.,.,', 'parser.y', 37)
1393
+ module_eval(<<'.,.,', 'parser.y', 40)
1352
1394
  def _reduce_21(val, _values, result)
1353
- val[1].each {|token|
1354
- @grammar.parse_param = Grammar::Code::NoReferenceCode.new(type: :parse_param, token_code: token).token_code.s_value
1355
- }
1395
+ @grammar.define[val[1].s_value] = val[2]&.s_value
1356
1396
 
1357
1397
  result
1358
1398
  end
1359
1399
  .,.,
1360
1400
 
1361
- module_eval(<<'.,.,', 'parser.y', 43)
1401
+ module_eval(<<'.,.,', 'parser.y', 44)
1362
1402
  def _reduce_22(val, _values, result)
1363
- @grammar.add_percent_code(id: val[1], code: val[2])
1403
+ @grammar.define[val[1].s_value] = val[3]&.s_value
1364
1404
 
1365
1405
  result
1366
1406
  end
1367
1407
  .,.,
1368
1408
 
1369
- module_eval(<<'.,.,', 'parser.y', 47)
1370
- def _reduce_23(val, _values, result)
1371
- @grammar.initial_action = Grammar::Code::InitialActionCode.new(type: :initial_action, token_code: val[1])
1372
-
1373
- result
1374
- end
1375
- .,.,
1409
+ # reduce 23 omitted
1376
1410
 
1377
1411
  module_eval(<<'.,.,', 'parser.y', 49)
1378
1412
  def _reduce_24(val, _values, result)
1379
- @grammar.no_stdlib = true
1413
+ val[1].each {|token|
1414
+ @grammar.lex_param = Grammar::Code::NoReferenceCode.new(type: :lex_param, token_code: token).token_code.s_value
1415
+ }
1416
+
1380
1417
  result
1381
1418
  end
1382
1419
  .,.,
1383
1420
 
1384
- module_eval(<<'.,.,', 'parser.y', 50)
1421
+ module_eval(<<'.,.,', 'parser.y', 55)
1385
1422
  def _reduce_25(val, _values, result)
1386
- @grammar.locations = true
1423
+ val[1].each {|token|
1424
+ @grammar.parse_param = Grammar::Code::NoReferenceCode.new(type: :parse_param, token_code: token).token_code.s_value
1425
+ }
1426
+
1387
1427
  result
1388
1428
  end
1389
1429
  .,.,
1390
1430
 
1391
- # reduce 26 omitted
1431
+ module_eval(<<'.,.,', 'parser.y', 61)
1432
+ def _reduce_26(val, _values, result)
1433
+ @grammar.add_percent_code(id: val[1], code: val[2])
1434
+
1435
+ result
1436
+ end
1437
+ .,.,
1392
1438
 
1393
- module_eval(<<'.,.,', 'parser.y', 109)
1439
+ module_eval(<<'.,.,', 'parser.y', 65)
1394
1440
  def _reduce_27(val, _values, result)
1395
- result = val
1441
+ @grammar.initial_action = Grammar::Code::InitialActionCode.new(type: :initial_action, token_code: val[1])
1442
+
1396
1443
  result
1397
1444
  end
1398
1445
  .,.,
1399
1446
 
1400
- module_eval(<<'.,.,', 'parser.y', 109)
1447
+ module_eval(<<'.,.,', 'parser.y', 69)
1401
1448
  def _reduce_28(val, _values, result)
1402
- result = val
1449
+ @grammar.no_stdlib = true
1450
+
1403
1451
  result
1404
1452
  end
1405
1453
  .,.,
1406
1454
 
1407
- module_eval(<<'.,.,', 'parser.y', 109)
1455
+ module_eval(<<'.,.,', 'parser.y', 73)
1408
1456
  def _reduce_29(val, _values, result)
1409
- result = val[1] ? val[1].unshift(val[0]) : val
1457
+ @grammar.locations = true
1458
+
1410
1459
  result
1411
1460
  end
1412
1461
  .,.,
1413
1462
 
1414
- module_eval(<<'.,.,', 'parser.y', 109)
1463
+ module_eval(<<'.,.,', 'parser.y', 133)
1415
1464
  def _reduce_30(val, _values, result)
1416
- result = val[1] ? val[1].unshift(val[0]) : val
1465
+ result = val
1417
1466
  result
1418
1467
  end
1419
1468
  .,.,
1420
1469
 
1421
- module_eval(<<'.,.,', 'parser.y', 55)
1470
+ module_eval(<<'.,.,', 'parser.y', 133)
1422
1471
  def _reduce_31(val, _values, result)
1423
- @grammar.set_union(
1424
- Grammar::Code::NoReferenceCode.new(type: :union, token_code: val[1]),
1425
- val[1].line
1426
- )
1427
-
1472
+ result = val
1428
1473
  result
1429
1474
  end
1430
1475
  .,.,
1431
1476
 
1432
- # reduce 32 omitted
1433
-
1434
- # reduce 33 omitted
1435
-
1436
- # reduce 34 omitted
1437
-
1438
- module_eval(<<'.,.,', 'parser.y', 65)
1439
- def _reduce_35(val, _values, result)
1440
- @grammar.add_destructor(
1441
- ident_or_tags: val[2].flatten,
1442
- token_code: val[1],
1443
- lineno: val[1].line
1444
- )
1445
-
1477
+ module_eval(<<'.,.,', 'parser.y', 133)
1478
+ def _reduce_32(val, _values, result)
1479
+ result = val[1] ? val[1].unshift(val[0]) : val
1446
1480
  result
1447
1481
  end
1448
1482
  .,.,
1449
1483
 
1450
- module_eval(<<'.,.,', 'parser.y', 73)
1451
- def _reduce_36(val, _values, result)
1452
- @grammar.add_printer(
1453
- ident_or_tags: val[2].flatten,
1454
- token_code: val[1],
1455
- lineno: val[1].line
1456
- )
1457
-
1484
+ module_eval(<<'.,.,', 'parser.y', 133)
1485
+ def _reduce_33(val, _values, result)
1486
+ result = val[1] ? val[1].unshift(val[0]) : val
1458
1487
  result
1459
1488
  end
1460
1489
  .,.,
1461
1490
 
1462
- module_eval(<<'.,.,', 'parser.y', 81)
1491
+ # reduce 34 omitted
1492
+
1493
+ # reduce 35 omitted
1494
+
1495
+ # reduce 36 omitted
1496
+
1497
+ module_eval(<<'.,.,', 'parser.y', 82)
1463
1498
  def _reduce_37(val, _values, result)
1464
- @grammar.add_error_token(
1465
- ident_or_tags: val[2].flatten,
1466
- token_code: val[1],
1467
- lineno: val[1].line
1468
- )
1499
+ @grammar.set_union(
1500
+ Grammar::Code::NoReferenceCode.new(type: :union, token_code: val[1]),
1501
+ val[1].line
1502
+ )
1469
1503
 
1470
1504
  result
1471
1505
  end
@@ -1473,665 +1507,762 @@ module_eval(<<'.,.,', 'parser.y', 81)
1473
1507
 
1474
1508
  module_eval(<<'.,.,', 'parser.y', 89)
1475
1509
  def _reduce_38(val, _values, result)
1476
- @grammar.after_shift = val[1]
1510
+ @grammar.add_destructor(
1511
+ ident_or_tags: val[2].flatten,
1512
+ token_code: val[1],
1513
+ lineno: val[1].line
1514
+ )
1477
1515
 
1478
1516
  result
1479
1517
  end
1480
1518
  .,.,
1481
1519
 
1482
- module_eval(<<'.,.,', 'parser.y', 93)
1520
+ module_eval(<<'.,.,', 'parser.y', 97)
1483
1521
  def _reduce_39(val, _values, result)
1484
- @grammar.before_reduce = val[1]
1522
+ @grammar.add_printer(
1523
+ ident_or_tags: val[2].flatten,
1524
+ token_code: val[1],
1525
+ lineno: val[1].line
1526
+ )
1485
1527
 
1486
1528
  result
1487
1529
  end
1488
1530
  .,.,
1489
1531
 
1490
- module_eval(<<'.,.,', 'parser.y', 97)
1532
+ module_eval(<<'.,.,', 'parser.y', 105)
1491
1533
  def _reduce_40(val, _values, result)
1492
- @grammar.after_reduce = val[1]
1534
+ @grammar.add_error_token(
1535
+ ident_or_tags: val[2].flatten,
1536
+ token_code: val[1],
1537
+ lineno: val[1].line
1538
+ )
1493
1539
 
1494
1540
  result
1495
1541
  end
1496
1542
  .,.,
1497
1543
 
1498
- module_eval(<<'.,.,', 'parser.y', 101)
1544
+ module_eval(<<'.,.,', 'parser.y', 113)
1499
1545
  def _reduce_41(val, _values, result)
1500
- @grammar.after_shift_error_token = val[1]
1546
+ @grammar.after_shift = val[1]
1501
1547
 
1502
1548
  result
1503
1549
  end
1504
1550
  .,.,
1505
1551
 
1506
- module_eval(<<'.,.,', 'parser.y', 105)
1552
+ module_eval(<<'.,.,', 'parser.y', 117)
1507
1553
  def _reduce_42(val, _values, result)
1508
- @grammar.after_pop_stack = val[1]
1554
+ @grammar.before_reduce = val[1]
1509
1555
 
1510
1556
  result
1511
1557
  end
1512
1558
  .,.,
1513
1559
 
1514
- # reduce 43 omitted
1515
-
1516
- module_eval(<<'.,.,', 'parser.y', 111)
1517
- def _reduce_44(val, _values, result)
1518
- val[1].each {|hash|
1519
- hash[:tokens].each {|id|
1520
- @grammar.add_type(id: id, tag: hash[:tag])
1521
- }
1522
- }
1560
+ module_eval(<<'.,.,', 'parser.y', 121)
1561
+ def _reduce_43(val, _values, result)
1562
+ @grammar.after_reduce = val[1]
1523
1563
 
1524
1564
  result
1525
1565
  end
1526
1566
  .,.,
1527
1567
 
1528
- module_eval(<<'.,.,', 'parser.y', 119)
1529
- def _reduce_45(val, _values, result)
1530
- val[1].each {|hash|
1531
- hash[:tokens].each {|id|
1532
- if @grammar.find_term_by_s_value(id.s_value)
1533
- on_action_error("symbol #{id.s_value} redeclared as a nonterminal", id)
1534
- else
1535
- @grammar.add_type(id: id, tag: hash[:tag])
1536
- end
1537
- }
1538
- }
1568
+ module_eval(<<'.,.,', 'parser.y', 125)
1569
+ def _reduce_44(val, _values, result)
1570
+ @grammar.after_shift_error_token = val[1]
1539
1571
 
1540
1572
  result
1541
1573
  end
1542
1574
  .,.,
1543
1575
 
1544
- module_eval(<<'.,.,', 'parser.y', 131)
1545
- def _reduce_46(val, _values, result)
1546
- val[1].each {|hash|
1547
- hash[:tokens].each {|id|
1548
- sym = @grammar.add_term(id: id)
1549
- @grammar.add_left(sym, @precedence_number)
1550
- }
1551
- }
1552
- @precedence_number += 1
1576
+ module_eval(<<'.,.,', 'parser.y', 129)
1577
+ def _reduce_45(val, _values, result)
1578
+ @grammar.after_pop_stack = val[1]
1553
1579
 
1554
1580
  result
1555
1581
  end
1556
1582
  .,.,
1557
1583
 
1558
- module_eval(<<'.,.,', 'parser.y', 141)
1584
+ # reduce 46 omitted
1585
+
1586
+ module_eval(<<'.,.,', 'parser.y', 136)
1559
1587
  def _reduce_47(val, _values, result)
1560
- val[1].each {|hash|
1561
- hash[:tokens].each {|id|
1562
- sym = @grammar.add_term(id: id)
1563
- @grammar.add_right(sym, @precedence_number)
1564
- }
1565
- }
1566
- @precedence_number += 1
1588
+ val[1].each {|hash|
1589
+ hash[:tokens].each {|id|
1590
+ @grammar.add_type(id: id, tag: hash[:tag])
1591
+ }
1592
+ }
1567
1593
 
1568
1594
  result
1569
1595
  end
1570
1596
  .,.,
1571
1597
 
1572
- module_eval(<<'.,.,', 'parser.y', 151)
1598
+ module_eval(<<'.,.,', 'parser.y', 144)
1573
1599
  def _reduce_48(val, _values, result)
1574
- val[1].each {|hash|
1575
- hash[:tokens].each {|id|
1576
- sym = @grammar.add_term(id: id)
1577
- @grammar.add_precedence(sym, @precedence_number)
1578
- }
1579
- }
1580
- @precedence_number += 1
1600
+ val[1].each {|hash|
1601
+ hash[:tokens].each {|id|
1602
+ if @grammar.find_term_by_s_value(id.s_value)
1603
+ on_action_error("symbol #{id.s_value} redeclared as a nonterminal", id)
1604
+ else
1605
+ @grammar.add_type(id: id, tag: hash[:tag])
1606
+ end
1607
+ }
1608
+ }
1581
1609
 
1582
1610
  result
1583
1611
  end
1584
1612
  .,.,
1585
1613
 
1586
- module_eval(<<'.,.,', 'parser.y', 161)
1614
+ module_eval(<<'.,.,', 'parser.y', 156)
1587
1615
  def _reduce_49(val, _values, result)
1588
- val[1].each {|hash|
1589
- hash[:tokens].each {|id|
1590
- sym = @grammar.add_term(id: id)
1591
- @grammar.add_nonassoc(sym, @precedence_number)
1592
- }
1593
- }
1594
- @precedence_number += 1
1616
+ val[1].each {|hash|
1617
+ hash[:tokens].each {|id|
1618
+ sym = @grammar.add_term(id: id, tag: hash[:tag])
1619
+ @grammar.add_left(sym, @precedence_number, id.s_value, id.first_line)
1620
+ }
1621
+ }
1622
+ @precedence_number += 1
1623
+
1624
+ result
1625
+ end
1626
+ .,.,
1627
+
1628
+ module_eval(<<'.,.,', 'parser.y', 166)
1629
+ def _reduce_50(val, _values, result)
1630
+ val[1].each {|hash|
1631
+ hash[:tokens].each {|id|
1632
+ sym = @grammar.add_term(id: id, tag: hash[:tag])
1633
+ @grammar.add_right(sym, @precedence_number, id.s_value, id.first_line)
1634
+ }
1635
+ }
1636
+ @precedence_number += 1
1595
1637
 
1596
1638
  result
1597
1639
  end
1598
1640
  .,.,
1599
1641
 
1600
- # reduce 50 omitted
1642
+ module_eval(<<'.,.,', 'parser.y', 176)
1643
+ def _reduce_51(val, _values, result)
1644
+ val[1].each {|hash|
1645
+ hash[:tokens].each {|id|
1646
+ sym = @grammar.add_term(id: id, tag: hash[:tag])
1647
+ @grammar.add_precedence(sym, @precedence_number, id.s_value, id.first_line)
1648
+ }
1649
+ }
1650
+ @precedence_number += 1
1601
1651
 
1602
- # reduce 51 omitted
1652
+ result
1653
+ end
1654
+ .,.,
1603
1655
 
1604
- module_eval(<<'.,.,', 'parser.y', 184)
1656
+ module_eval(<<'.,.,', 'parser.y', 186)
1605
1657
  def _reduce_52(val, _values, result)
1606
- result = val[1] ? val[1].unshift(val[0]) : val
1658
+ val[1].each {|hash|
1659
+ hash[:tokens].each {|id|
1660
+ sym = @grammar.add_term(id: id, tag: hash[:tag])
1661
+ @grammar.add_nonassoc(sym, @precedence_number, id.s_value, id.first_line)
1662
+ }
1663
+ }
1664
+ @precedence_number += 1
1665
+
1607
1666
  result
1608
1667
  end
1609
1668
  .,.,
1610
1669
 
1611
- module_eval(<<'.,.,', 'parser.y', 184)
1670
+ module_eval(<<'.,.,', 'parser.y', 196)
1612
1671
  def _reduce_53(val, _values, result)
1672
+ @grammar.set_start_nterm(val[1])
1673
+
1674
+ result
1675
+ end
1676
+ .,.,
1677
+
1678
+ # reduce 54 omitted
1679
+
1680
+ # reduce 55 omitted
1681
+
1682
+ module_eval(<<'.,.,', 'parser.y', 214)
1683
+ def _reduce_56(val, _values, result)
1684
+ result = val[1] ? val[1].unshift(val[0]) : val
1685
+ result
1686
+ end
1687
+ .,.,
1688
+
1689
+ module_eval(<<'.,.,', 'parser.y', 214)
1690
+ def _reduce_57(val, _values, result)
1613
1691
  result = val[1] ? val[1].unshift(val[0]) : val
1614
1692
  result
1615
1693
  end
1616
1694
  .,.,
1617
1695
 
1618
- module_eval(<<'.,.,', 'parser.y', 172)
1619
- def _reduce_54(val, _values, result)
1620
- val[1].each {|token_declaration|
1621
- @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[0], replace: true)
1622
- }
1696
+ module_eval(<<'.,.,', 'parser.y', 202)
1697
+ def _reduce_58(val, _values, result)
1698
+ val[1].each {|token_declaration|
1699
+ @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1]&.s_value, tag: val[0], replace: true)
1700
+ }
1623
1701
 
1624
1702
  result
1625
1703
  end
1626
1704
  .,.,
1627
1705
 
1628
- module_eval(<<'.,.,', 'parser.y', 178)
1629
- def _reduce_55(val, _values, result)
1630
- val[2].each {|token_declaration|
1631
- @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[1], replace: true)
1632
- }
1706
+ module_eval(<<'.,.,', 'parser.y', 208)
1707
+ def _reduce_59(val, _values, result)
1708
+ val[2].each {|token_declaration|
1709
+ @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1]&.s_value, tag: val[1], replace: true)
1710
+ }
1633
1711
 
1634
1712
  result
1635
1713
  end
1636
1714
  .,.,
1637
1715
 
1638
- # reduce 56 omitted
1716
+ # reduce 60 omitted
1639
1717
 
1640
- # reduce 57 omitted
1718
+ # reduce 61 omitted
1641
1719
 
1642
- module_eval(<<'.,.,', 'parser.y', 183)
1643
- def _reduce_58(val, _values, result)
1720
+ module_eval(<<'.,.,', 'parser.y', 213)
1721
+ def _reduce_62(val, _values, result)
1644
1722
  result = val
1645
1723
  result
1646
1724
  end
1647
1725
  .,.,
1648
1726
 
1649
- module_eval(<<'.,.,', 'parser.y', 187)
1650
- def _reduce_59(val, _values, result)
1651
- rule = Grammar::ParameterizingRule::Rule.new(val[1].s_value, val[3], val[7], tag: val[5])
1652
- @grammar.add_parameterizing_rule(rule)
1727
+ module_eval(<<'.,.,', 'parser.y', 218)
1728
+ def _reduce_63(val, _values, result)
1729
+ rule = Grammar::Parameterized::Rule.new(val[1].s_value, val[3], val[7], tag: val[5])
1730
+ @grammar.add_parameterized_rule(rule)
1653
1731
 
1654
1732
  result
1655
1733
  end
1656
1734
  .,.,
1657
1735
 
1658
- module_eval(<<'.,.,', 'parser.y', 193)
1659
- def _reduce_60(val, _values, result)
1660
- rule = Grammar::ParameterizingRule::Rule.new(val[2].s_value, [], val[4], is_inline: true)
1661
- @grammar.add_parameterizing_rule(rule)
1736
+ module_eval(<<'.,.,', 'parser.y', 225)
1737
+ def _reduce_64(val, _values, result)
1738
+ rule = Grammar::Parameterized::Rule.new(val[2].s_value, [], val[4], is_inline: true)
1739
+ @grammar.add_parameterized_rule(rule)
1662
1740
 
1663
1741
  result
1664
1742
  end
1665
1743
  .,.,
1666
1744
 
1667
- module_eval(<<'.,.,', 'parser.y', 198)
1668
- def _reduce_61(val, _values, result)
1669
- rule = Grammar::ParameterizingRule::Rule.new(val[2].s_value, val[4], val[7], is_inline: true)
1670
- @grammar.add_parameterizing_rule(rule)
1745
+ module_eval(<<'.,.,', 'parser.y', 230)
1746
+ def _reduce_65(val, _values, result)
1747
+ rule = Grammar::Parameterized::Rule.new(val[2].s_value, val[4], val[7], is_inline: true)
1748
+ @grammar.add_parameterized_rule(rule)
1671
1749
 
1672
1750
  result
1673
1751
  end
1674
1752
  .,.,
1675
1753
 
1676
- module_eval(<<'.,.,', 'parser.y', 202)
1677
- def _reduce_62(val, _values, result)
1754
+ module_eval(<<'.,.,', 'parser.y', 235)
1755
+ def _reduce_66(val, _values, result)
1678
1756
  result = [val[0]]
1679
1757
  result
1680
1758
  end
1681
1759
  .,.,
1682
1760
 
1683
- module_eval(<<'.,.,', 'parser.y', 203)
1684
- def _reduce_63(val, _values, result)
1761
+ module_eval(<<'.,.,', 'parser.y', 236)
1762
+ def _reduce_67(val, _values, result)
1685
1763
  result = val[0].append(val[2])
1686
1764
  result
1687
1765
  end
1688
1766
  .,.,
1689
1767
 
1690
- module_eval(<<'.,.,', 'parser.y', 207)
1691
- def _reduce_64(val, _values, result)
1692
- builder = val[0]
1693
- result = [builder]
1768
+ module_eval(<<'.,.,', 'parser.y', 241)
1769
+ def _reduce_68(val, _values, result)
1770
+ builder = val[0]
1771
+ result = [builder]
1694
1772
 
1695
1773
  result
1696
1774
  end
1697
1775
  .,.,
1698
1776
 
1699
- module_eval(<<'.,.,', 'parser.y', 212)
1700
- def _reduce_65(val, _values, result)
1701
- builder = val[2]
1702
- result = val[0].append(builder)
1777
+ module_eval(<<'.,.,', 'parser.y', 246)
1778
+ def _reduce_69(val, _values, result)
1779
+ builder = val[2]
1780
+ result = val[0].append(builder)
1703
1781
 
1704
1782
  result
1705
1783
  end
1706
1784
  .,.,
1707
1785
 
1708
- # reduce 66 omitted
1786
+ # reduce 70 omitted
1709
1787
 
1710
- # reduce 67 omitted
1788
+ # reduce 71 omitted
1711
1789
 
1712
- # reduce 68 omitted
1790
+ # reduce 72 omitted
1713
1791
 
1714
- # reduce 69 omitted
1792
+ # reduce 73 omitted
1715
1793
 
1716
- module_eval(<<'.,.,', 'parser.y', 218)
1717
- def _reduce_70(val, _values, result)
1718
- reset_precs
1719
- result = Grammar::ParameterizingRule::Rhs.new
1794
+ module_eval(<<'.,.,', 'parser.y', 253)
1795
+ def _reduce_74(val, _values, result)
1796
+ reset_precs
1797
+ result = Grammar::Parameterized::Rhs.new
1720
1798
 
1721
1799
  result
1722
1800
  end
1723
1801
  .,.,
1724
1802
 
1725
- module_eval(<<'.,.,', 'parser.y', 223)
1726
- def _reduce_71(val, _values, result)
1727
- token = val[1]
1728
- token.alias_name = val[2]
1729
- builder = val[0]
1730
- builder.symbols << token
1731
- result = builder
1803
+ module_eval(<<'.,.,', 'parser.y', 258)
1804
+ def _reduce_75(val, _values, result)
1805
+ on_action_error("intermediate %prec in a rule", val[1]) if @trailing_prec_seen
1806
+ token = val[1]
1807
+ token.alias_name = val[2]
1808
+ builder = val[0]
1809
+ builder.symbols << token
1810
+ result = builder
1732
1811
 
1733
1812
  result
1734
1813
  end
1735
1814
  .,.,
1736
1815
 
1737
- module_eval(<<'.,.,', 'parser.y', 231)
1738
- def _reduce_72(val, _values, result)
1739
- builder = val[0]
1740
- builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]])
1741
- result = builder
1816
+ module_eval(<<'.,.,', 'parser.y', 267)
1817
+ def _reduce_76(val, _values, result)
1818
+ on_action_error("intermediate %prec in a rule", val[1]) if @trailing_prec_seen
1819
+ builder = val[0]
1820
+ builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]])
1821
+ result = builder
1742
1822
 
1743
1823
  result
1744
1824
  end
1745
1825
  .,.,
1746
1826
 
1747
- module_eval(<<'.,.,', 'parser.y', 237)
1748
- def _reduce_73(val, _values, result)
1749
- builder = val[0]
1750
- builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5])
1751
- result = builder
1827
+ module_eval(<<'.,.,', 'parser.y', 274)
1828
+ def _reduce_77(val, _values, result)
1829
+ on_action_error("intermediate %prec in a rule", val[1]) if @trailing_prec_seen
1830
+ builder = val[0]
1831
+ builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5])
1832
+ result = builder
1752
1833
 
1753
1834
  result
1754
1835
  end
1755
1836
  .,.,
1756
1837
 
1757
- module_eval(<<'.,.,', 'parser.y', 243)
1758
- def _reduce_74(val, _values, result)
1759
- user_code = val[1]
1760
- user_code.alias_name = val[2]
1761
- builder = val[0]
1762
- builder.user_code = user_code
1763
- result = builder
1838
+ module_eval(<<'.,.,', 'parser.y', 281)
1839
+ def _reduce_78(val, _values, result)
1840
+ user_code = val[1]
1841
+ user_code.alias_name = val[2]
1842
+ builder = val[0]
1843
+ builder.user_code = user_code
1844
+ result = builder
1764
1845
 
1765
1846
  result
1766
1847
  end
1767
1848
  .,.,
1768
1849
 
1769
- module_eval(<<'.,.,', 'parser.y', 251)
1770
- def _reduce_75(val, _values, result)
1771
- sym = @grammar.find_symbol_by_id!(val[2])
1772
- @prec_seen = true
1773
- builder = val[0]
1774
- builder.precedence_sym = sym
1775
- result = builder
1850
+ module_eval(<<'.,.,', 'parser.y', 289)
1851
+ def _reduce_79(val, _values, result)
1852
+ on_action_error("multiple %prec in a rule", val[0]) if prec_seen?
1853
+ sym = @grammar.find_symbol_by_id!(val[2])
1854
+ if val[0].rhs.empty?
1855
+ @opening_prec_seen = true
1856
+ else
1857
+ @trailing_prec_seen = true
1858
+ end
1859
+ builder = val[0]
1860
+ builder.precedence_sym = sym
1861
+ result = builder
1776
1862
 
1777
1863
  result
1778
1864
  end
1779
1865
  .,.,
1780
1866
 
1781
- # reduce 76 omitted
1867
+ # reduce 80 omitted
1782
1868
 
1783
- # reduce 77 omitted
1869
+ # reduce 81 omitted
1784
1870
 
1785
- module_eval(<<'.,.,', 'parser.y', 258)
1786
- def _reduce_78(val, _values, result)
1871
+ module_eval(<<'.,.,', 'parser.y', 301)
1872
+ def _reduce_82(val, _values, result)
1787
1873
  result = val[0].s_value if val[0]
1788
1874
  result
1789
1875
  end
1790
1876
  .,.,
1791
1877
 
1792
- module_eval(<<'.,.,', 'parser.y', 271)
1793
- def _reduce_79(val, _values, result)
1878
+ module_eval(<<'.,.,', 'parser.y', 315)
1879
+ def _reduce_83(val, _values, result)
1794
1880
  result = val[1] ? val[1].unshift(val[0]) : val
1795
1881
  result
1796
1882
  end
1797
1883
  .,.,
1798
1884
 
1799
- module_eval(<<'.,.,', 'parser.y', 271)
1800
- def _reduce_80(val, _values, result)
1885
+ module_eval(<<'.,.,', 'parser.y', 315)
1886
+ def _reduce_84(val, _values, result)
1801
1887
  result = val[1] ? val[1].unshift(val[0]) : val
1802
1888
  result
1803
1889
  end
1804
1890
  .,.,
1805
1891
 
1806
- module_eval(<<'.,.,', 'parser.y', 262)
1807
- def _reduce_81(val, _values, result)
1808
- result = if val[0]
1809
- [{tag: val[0], tokens: val[1]}]
1810
- else
1811
- [{tag: nil, tokens: val[1]}]
1812
- end
1892
+ module_eval(<<'.,.,', 'parser.y', 306)
1893
+ def _reduce_85(val, _values, result)
1894
+ result = if val[0]
1895
+ [{tag: val[0], tokens: val[1]}]
1896
+ else
1897
+ [{tag: nil, tokens: val[1]}]
1898
+ end
1813
1899
 
1814
1900
  result
1815
1901
  end
1816
1902
  .,.,
1817
1903
 
1818
- module_eval(<<'.,.,', 'parser.y', 268)
1819
- def _reduce_82(val, _values, result)
1904
+ module_eval(<<'.,.,', 'parser.y', 312)
1905
+ def _reduce_86(val, _values, result)
1820
1906
  result = val[0].append({tag: val[1], tokens: val[2]})
1821
1907
  result
1822
1908
  end
1823
1909
  .,.,
1824
1910
 
1825
- # reduce 83 omitted
1911
+ # reduce 87 omitted
1826
1912
 
1827
- # reduce 84 omitted
1913
+ # reduce 88 omitted
1828
1914
 
1829
- module_eval(<<'.,.,', 'parser.y', 274)
1830
- def _reduce_85(val, _values, result)
1831
- begin_c_declaration("}")
1915
+ module_eval(<<'.,.,', 'parser.y', 321)
1916
+ def _reduce_89(val, _values, result)
1917
+ begin_c_declaration("}")
1832
1918
 
1833
1919
  result
1834
1920
  end
1835
1921
  .,.,
1836
1922
 
1837
- module_eval(<<'.,.,', 'parser.y', 278)
1838
- def _reduce_86(val, _values, result)
1839
- end_c_declaration
1923
+ module_eval(<<'.,.,', 'parser.y', 325)
1924
+ def _reduce_90(val, _values, result)
1925
+ end_c_declaration
1840
1926
 
1841
1927
  result
1842
1928
  end
1843
1929
  .,.,
1844
1930
 
1845
- module_eval(<<'.,.,', 'parser.y', 282)
1846
- def _reduce_87(val, _values, result)
1847
- result = val[2]
1931
+ module_eval(<<'.,.,', 'parser.y', 329)
1932
+ def _reduce_91(val, _values, result)
1933
+ result = val[2]
1848
1934
 
1849
1935
  result
1850
1936
  end
1851
1937
  .,.,
1852
1938
 
1853
- module_eval(<<'.,.,', 'parser.y', 290)
1854
- def _reduce_88(val, _values, result)
1939
+ module_eval(<<'.,.,', 'parser.y', 338)
1940
+ def _reduce_92(val, _values, result)
1855
1941
  result = val[1] ? val[1].unshift(val[0]) : val
1856
1942
  result
1857
1943
  end
1858
1944
  .,.,
1859
1945
 
1860
- module_eval(<<'.,.,', 'parser.y', 290)
1861
- def _reduce_89(val, _values, result)
1946
+ module_eval(<<'.,.,', 'parser.y', 338)
1947
+ def _reduce_93(val, _values, result)
1862
1948
  result = val[1] ? val[1].unshift(val[0]) : val
1863
1949
  result
1864
1950
  end
1865
1951
  .,.,
1866
1952
 
1867
- module_eval(<<'.,.,', 'parser.y', 285)
1868
- def _reduce_90(val, _values, result)
1953
+ module_eval(<<'.,.,', 'parser.y', 338)
1954
+ def _reduce_94(val, _values, result)
1955
+ result = val
1956
+ result
1957
+ end
1958
+ .,.,
1959
+
1960
+ module_eval(<<'.,.,', 'parser.y', 338)
1961
+ def _reduce_95(val, _values, result)
1962
+ result = val[1] ? val[1].unshift(val[0]) : val
1963
+ result
1964
+ end
1965
+ .,.,
1966
+
1967
+ module_eval(<<'.,.,', 'parser.y', 338)
1968
+ def _reduce_96(val, _values, result)
1969
+ result = val[1] ? val[1].unshift(val[0]) : val
1970
+ result
1971
+ end
1972
+ .,.,
1973
+
1974
+ module_eval(<<'.,.,', 'parser.y', 333)
1975
+ def _reduce_97(val, _values, result)
1869
1976
  result = [{tag: nil, tokens: val[0]}]
1870
1977
  result
1871
1978
  end
1872
1979
  .,.,
1873
1980
 
1874
- module_eval(<<'.,.,', 'parser.y', 286)
1875
- def _reduce_91(val, _values, result)
1876
- result = [{tag: val[0], tokens: val[1]}]
1981
+ module_eval(<<'.,.,', 'parser.y', 334)
1982
+ def _reduce_98(val, _values, result)
1983
+ result = val[0].map {|tag, ids| {tag: tag, tokens: ids} }
1877
1984
  result
1878
1985
  end
1879
1986
  .,.,
1880
1987
 
1881
- module_eval(<<'.,.,', 'parser.y', 287)
1882
- def _reduce_92(val, _values, result)
1883
- result = val[0].append({tag: val[1], tokens: val[2]})
1988
+ module_eval(<<'.,.,', 'parser.y', 335)
1989
+ def _reduce_99(val, _values, result)
1990
+ result = [{tag: nil, tokens: val[0]}, {tag: val[1], tokens: val[2]}]
1884
1991
  result
1885
1992
  end
1886
1993
  .,.,
1887
1994
 
1888
- module_eval(<<'.,.,', 'parser.y', 289)
1889
- def _reduce_93(val, _values, result)
1890
- on_action_error("ident after %prec", val[0]) if @prec_seen
1995
+ # reduce 100 omitted
1996
+
1997
+ # reduce 101 omitted
1998
+
1999
+ module_eval(<<'.,.,', 'parser.y', 346)
2000
+ def _reduce_102(val, _values, result)
2001
+ result = val[1] ? val[1].unshift(val[0]) : val
1891
2002
  result
1892
2003
  end
1893
2004
  .,.,
1894
2005
 
1895
- module_eval(<<'.,.,', 'parser.y', 290)
1896
- def _reduce_94(val, _values, result)
1897
- on_action_error("char after %prec", val[0]) if @prec_seen
2006
+ module_eval(<<'.,.,', 'parser.y', 346)
2007
+ def _reduce_103(val, _values, result)
2008
+ result = val[1] ? val[1].unshift(val[0]) : val
1898
2009
  result
1899
2010
  end
1900
2011
  .,.,
1901
2012
 
1902
- # reduce 95 omitted
2013
+ # reduce 104 omitted
1903
2014
 
1904
- # reduce 96 omitted
2015
+ # reduce 105 omitted
1905
2016
 
1906
- # reduce 97 omitted
2017
+ module_eval(<<'.,.,', 'parser.y', 348)
2018
+ def _reduce_106(val, _values, result)
2019
+ lhs = val[0]
2020
+ lhs.alias_name = val[1]
2021
+ val[3].each do |builder|
2022
+ builder.lhs = lhs
2023
+ builder.complete_input
2024
+ @grammar.add_rule_builder(builder)
2025
+ end
1907
2026
 
1908
- # reduce 98 omitted
2027
+ result
2028
+ end
2029
+ .,.,
1909
2030
 
1910
- module_eval(<<'.,.,', 'parser.y', 298)
1911
- def _reduce_99(val, _values, result)
1912
- lhs = val[0]
1913
- lhs.alias_name = val[1]
1914
- val[3].each do |builder|
1915
- builder.lhs = lhs
1916
- builder.complete_input
1917
- @grammar.add_rule_builder(builder)
1918
- end
2031
+ module_eval(<<'.,.,', 'parser.y', 360)
2032
+ def _reduce_107(val, _values, result)
2033
+ if val[0].rhs.count > 1
2034
+ empties = val[0].rhs.select { |sym| sym.is_a?(Lrama::Lexer::Token::Empty) }
2035
+ empties.each do |empty|
2036
+ on_action_error("%empty on non-empty rule", empty)
2037
+ end
2038
+ end
2039
+ builder = val[0]
2040
+ if !builder.line
2041
+ builder.line = @lexer.line - 1
2042
+ end
2043
+ result = [builder]
1919
2044
 
1920
2045
  result
1921
2046
  end
1922
2047
  .,.,
1923
2048
 
1924
- module_eval(<<'.,.,', 'parser.y', 309)
1925
- def _reduce_100(val, _values, result)
1926
- builder = val[0]
1927
- if !builder.line
1928
- builder.line = @lexer.line - 1
1929
- end
1930
- result = [builder]
2049
+ module_eval(<<'.,.,', 'parser.y', 374)
2050
+ def _reduce_108(val, _values, result)
2051
+ builder = val[2]
2052
+ if !builder.line
2053
+ builder.line = @lexer.line - 1
2054
+ end
2055
+ result = val[0].append(builder)
1931
2056
 
1932
2057
  result
1933
2058
  end
1934
2059
  .,.,
1935
2060
 
1936
- module_eval(<<'.,.,', 'parser.y', 317)
1937
- def _reduce_101(val, _values, result)
1938
- builder = val[2]
1939
- if !builder.line
1940
- builder.line = @lexer.line - 1
1941
- end
1942
- result = val[0].append(builder)
2061
+ module_eval(<<'.,.,', 'parser.y', 384)
2062
+ def _reduce_109(val, _values, result)
2063
+ reset_precs
2064
+ result = @grammar.create_rule_builder(@rule_counter, @midrule_action_counter)
1943
2065
 
1944
2066
  result
1945
2067
  end
1946
2068
  .,.,
1947
2069
 
1948
- module_eval(<<'.,.,', 'parser.y', 326)
1949
- def _reduce_102(val, _values, result)
1950
- reset_precs
1951
- result = @grammar.create_rule_builder(@rule_counter, @midrule_action_counter)
2070
+ module_eval(<<'.,.,', 'parser.y', 389)
2071
+ def _reduce_110(val, _values, result)
2072
+ builder = val[0]
2073
+ builder.add_rhs(Lrama::Lexer::Token::Empty.new(location: @lexer.location))
2074
+ result = builder
1952
2075
 
1953
2076
  result
1954
2077
  end
1955
2078
  .,.,
1956
2079
 
1957
- module_eval(<<'.,.,', 'parser.y', 331)
1958
- def _reduce_103(val, _values, result)
1959
- token = val[1]
1960
- token.alias_name = val[2]
1961
- builder = val[0]
1962
- builder.add_rhs(token)
1963
- result = builder
2080
+ module_eval(<<'.,.,', 'parser.y', 395)
2081
+ def _reduce_111(val, _values, result)
2082
+ on_action_error("intermediate %prec in a rule", val[1]) if @trailing_prec_seen
2083
+ token = val[1]
2084
+ token.alias_name = val[2]
2085
+ builder = val[0]
2086
+ builder.add_rhs(token)
2087
+ result = builder
1964
2088
 
1965
2089
  result
1966
2090
  end
1967
2091
  .,.,
1968
2092
 
1969
- module_eval(<<'.,.,', 'parser.y', 339)
1970
- def _reduce_104(val, _values, result)
1971
- token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], alias_name: val[3], location: @lexer.location, args: [val[1]], lhs_tag: val[4])
1972
- builder = val[0]
1973
- builder.add_rhs(token)
1974
- builder.line = val[1].first_line
1975
- result = builder
2093
+ module_eval(<<'.,.,', 'parser.y', 404)
2094
+ def _reduce_112(val, _values, result)
2095
+ on_action_error("intermediate %prec in a rule", val[1]) if @trailing_prec_seen
2096
+ token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], alias_name: val[3], location: @lexer.location, args: [val[1]], lhs_tag: val[4])
2097
+ builder = val[0]
2098
+ builder.add_rhs(token)
2099
+ builder.line = val[1].first_line
2100
+ result = builder
1976
2101
 
1977
2102
  result
1978
2103
  end
1979
2104
  .,.,
1980
2105
 
1981
- module_eval(<<'.,.,', 'parser.y', 347)
1982
- def _reduce_105(val, _values, result)
1983
- token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, alias_name: val[5], location: @lexer.location, args: val[3], lhs_tag: val[6])
1984
- builder = val[0]
1985
- builder.add_rhs(token)
1986
- builder.line = val[1].first_line
1987
- result = builder
2106
+ module_eval(<<'.,.,', 'parser.y', 413)
2107
+ def _reduce_113(val, _values, result)
2108
+ on_action_error("intermediate %prec in a rule", val[1]) if @trailing_prec_seen
2109
+ token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, alias_name: val[5], location: @lexer.location, args: val[3], lhs_tag: val[6])
2110
+ builder = val[0]
2111
+ builder.add_rhs(token)
2112
+ builder.line = val[1].first_line
2113
+ result = builder
1988
2114
 
1989
2115
  result
1990
2116
  end
1991
2117
  .,.,
1992
2118
 
1993
- module_eval(<<'.,.,', 'parser.y', 355)
1994
- def _reduce_106(val, _values, result)
1995
- user_code = val[1]
1996
- user_code.alias_name = val[2]
1997
- user_code.tag = val[3]
1998
- builder = val[0]
1999
- builder.user_code = user_code
2000
- result = builder
2119
+ module_eval(<<'.,.,', 'parser.y', 422)
2120
+ def _reduce_114(val, _values, result)
2121
+ user_code = val[1]
2122
+ user_code.alias_name = val[2]
2123
+ user_code.tag = val[3]
2124
+ builder = val[0]
2125
+ builder.user_code = user_code
2126
+ result = builder
2001
2127
 
2002
2128
  result
2003
2129
  end
2004
2130
  .,.,
2005
2131
 
2006
- module_eval(<<'.,.,', 'parser.y', 364)
2007
- def _reduce_107(val, _values, result)
2008
- sym = @grammar.find_symbol_by_id!(val[2])
2009
- @prec_seen = true
2010
- builder = val[0]
2011
- builder.precedence_sym = sym
2012
- result = builder
2132
+ module_eval(<<'.,.,', 'parser.y', 431)
2133
+ def _reduce_115(val, _values, result)
2134
+ on_action_error("multiple %prec in a rule", val[0]) if prec_seen?
2135
+ sym = @grammar.find_symbol_by_id!(val[2])
2136
+ if val[0].rhs.empty?
2137
+ @opening_prec_seen = true
2138
+ else
2139
+ @trailing_prec_seen = true
2140
+ end
2141
+ builder = val[0]
2142
+ builder.precedence_sym = sym
2143
+ result = builder
2013
2144
 
2014
2145
  result
2015
2146
  end
2016
2147
  .,.,
2017
2148
 
2018
- module_eval(<<'.,.,', 'parser.y', 371)
2019
- def _reduce_108(val, _values, result)
2149
+ module_eval(<<'.,.,', 'parser.y', 444)
2150
+ def _reduce_116(val, _values, result)
2020
2151
  result = "option"
2021
2152
  result
2022
2153
  end
2023
2154
  .,.,
2024
2155
 
2025
- module_eval(<<'.,.,', 'parser.y', 372)
2026
- def _reduce_109(val, _values, result)
2156
+ module_eval(<<'.,.,', 'parser.y', 445)
2157
+ def _reduce_117(val, _values, result)
2027
2158
  result = "nonempty_list"
2028
2159
  result
2029
2160
  end
2030
2161
  .,.,
2031
2162
 
2032
- module_eval(<<'.,.,', 'parser.y', 373)
2033
- def _reduce_110(val, _values, result)
2163
+ module_eval(<<'.,.,', 'parser.y', 446)
2164
+ def _reduce_118(val, _values, result)
2034
2165
  result = "list"
2035
2166
  result
2036
2167
  end
2037
2168
  .,.,
2038
2169
 
2039
- # reduce 111 omitted
2170
+ # reduce 119 omitted
2040
2171
 
2041
- # reduce 112 omitted
2172
+ # reduce 120 omitted
2042
2173
 
2043
- module_eval(<<'.,.,', 'parser.y', 377)
2044
- def _reduce_113(val, _values, result)
2045
- result = if val[1]
2046
- [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[0])]
2047
- else
2048
- [val[0]]
2049
- end
2174
+ module_eval(<<'.,.,', 'parser.y', 451)
2175
+ def _reduce_121(val, _values, result)
2176
+ result = if val[1]
2177
+ [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[0])]
2178
+ else
2179
+ [val[0]]
2180
+ end
2050
2181
 
2051
2182
  result
2052
2183
  end
2053
2184
  .,.,
2054
2185
 
2055
- module_eval(<<'.,.,', 'parser.y', 383)
2056
- def _reduce_114(val, _values, result)
2186
+ module_eval(<<'.,.,', 'parser.y', 457)
2187
+ def _reduce_122(val, _values, result)
2057
2188
  result = val[0].append(val[2])
2058
2189
  result
2059
2190
  end
2060
2191
  .,.,
2061
2192
 
2062
- module_eval(<<'.,.,', 'parser.y', 384)
2063
- def _reduce_115(val, _values, result)
2193
+ module_eval(<<'.,.,', 'parser.y', 458)
2194
+ def _reduce_123(val, _values, result)
2064
2195
  result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[0].s_value, location: @lexer.location, args: val[2])]
2065
2196
  result
2066
2197
  end
2067
2198
  .,.,
2068
2199
 
2069
- module_eval(<<'.,.,', 'parser.y', 388)
2070
- def _reduce_116(val, _values, result)
2071
- if @prec_seen
2072
- on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec
2073
- @code_after_prec = true
2074
- end
2075
- begin_c_declaration("}")
2200
+ module_eval(<<'.,.,', 'parser.y', 463)
2201
+ def _reduce_124(val, _values, result)
2202
+ if prec_seen?
2203
+ on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec
2204
+ @code_after_prec = true
2205
+ end
2206
+ begin_c_declaration("}")
2076
2207
 
2077
2208
  result
2078
2209
  end
2079
2210
  .,.,
2080
2211
 
2081
- module_eval(<<'.,.,', 'parser.y', 396)
2082
- def _reduce_117(val, _values, result)
2083
- end_c_declaration
2212
+ module_eval(<<'.,.,', 'parser.y', 471)
2213
+ def _reduce_125(val, _values, result)
2214
+ end_c_declaration
2084
2215
 
2085
2216
  result
2086
2217
  end
2087
2218
  .,.,
2088
2219
 
2089
- module_eval(<<'.,.,', 'parser.y', 400)
2090
- def _reduce_118(val, _values, result)
2091
- result = val[2]
2220
+ module_eval(<<'.,.,', 'parser.y', 475)
2221
+ def _reduce_126(val, _values, result)
2222
+ result = val[2]
2092
2223
 
2093
2224
  result
2094
2225
  end
2095
2226
  .,.,
2096
2227
 
2097
- module_eval(<<'.,.,', 'parser.y', 403)
2098
- def _reduce_119(val, _values, result)
2228
+ module_eval(<<'.,.,', 'parser.y', 478)
2229
+ def _reduce_127(val, _values, result)
2099
2230
  result = val[1].s_value
2100
2231
  result
2101
2232
  end
2102
2233
  .,.,
2103
2234
 
2104
- module_eval(<<'.,.,', 'parser.y', 407)
2105
- def _reduce_120(val, _values, result)
2106
- begin_c_declaration('\Z')
2107
- @grammar.epilogue_first_lineno = @lexer.line + 1
2235
+ module_eval(<<'.,.,', 'parser.y', 483)
2236
+ def _reduce_128(val, _values, result)
2237
+ begin_c_declaration('\Z')
2108
2238
 
2109
2239
  result
2110
2240
  end
2111
2241
  .,.,
2112
2242
 
2113
- module_eval(<<'.,.,', 'parser.y', 412)
2114
- def _reduce_121(val, _values, result)
2115
- end_c_declaration
2116
- @grammar.epilogue = val[2].s_value
2243
+ module_eval(<<'.,.,', 'parser.y', 487)
2244
+ def _reduce_129(val, _values, result)
2245
+ end_c_declaration
2246
+ @grammar.epilogue_first_lineno = val[0].first_line + 1
2247
+ @grammar.epilogue = val[2].s_value
2117
2248
 
2118
2249
  result
2119
2250
  end
2120
2251
  .,.,
2121
2252
 
2122
- # reduce 122 omitted
2253
+ # reduce 130 omitted
2123
2254
 
2124
- # reduce 123 omitted
2255
+ # reduce 131 omitted
2125
2256
 
2126
- # reduce 124 omitted
2257
+ # reduce 132 omitted
2127
2258
 
2128
- # reduce 125 omitted
2259
+ # reduce 133 omitted
2129
2260
 
2130
- # reduce 126 omitted
2261
+ # reduce 134 omitted
2131
2262
 
2132
- module_eval(<<'.,.,', 'parser.y', 423)
2133
- def _reduce_127(val, _values, result)
2134
- result = Lrama::Lexer::Token::Ident.new(s_value: val[0])
2263
+ module_eval(<<'.,.,', 'parser.y', 499)
2264
+ def _reduce_135(val, _values, result)
2265
+ result = Lrama::Lexer::Token::Ident.new(s_value: val[0].s_value)
2135
2266
  result
2136
2267
  end
2137
2268
  .,.,