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