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
@@ -0,0 +1,38 @@
1
+ # Generated from lib/lrama/state/resolved_conflict.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class State
5
+ # * state: A state on which the conflct is resolved
6
+ # * symbol: A symbol under discussion
7
+ # * reduce: A reduce under discussion
8
+ # * which: For which a conflict is resolved. :shift, :reduce or :error (for nonassociative)
9
+ # * resolved_by_precedence: If the conflict is resolved by precedence definition or not
10
+ class ResolvedConflict
11
+ type which_enum = :reduce | :shift | :error
12
+
13
+ attr_reader state: State
14
+
15
+ attr_reader symbol: Grammar::Symbol
16
+
17
+ attr_reader reduce: State::Action::Reduce
18
+
19
+ attr_reader which: which_enum
20
+
21
+ attr_reader resolved_by_precedence: bool
22
+
23
+ # @rbs (state: State, symbol: Grammar::Symbol, reduce: State::Action::Reduce, which: which_enum, resolved_by_precedence: bool) -> void
24
+ def initialize: (state: State, symbol: Grammar::Symbol, reduce: State::Action::Reduce, which: which_enum, resolved_by_precedence: bool) -> void
25
+
26
+ # @rbs () -> (::String | bot)
27
+ def report_message: () -> (::String | bot)
28
+
29
+ # @rbs () -> (::String | bot)
30
+ def report_precedences_message: () -> (::String | bot)
31
+
32
+ private
33
+
34
+ # @rbs () -> (::String | bot)
35
+ def how_resolved: () -> (::String | bot)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,19 @@
1
+ # Generated from lib/lrama/state/shift_reduce_conflict.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class State
5
+ class ShiftReduceConflict
6
+ attr_reader symbols: Array[Grammar::Symbol]
7
+
8
+ attr_reader shift: State::Action::Shift
9
+
10
+ attr_reader reduce: State::Action::Reduce
11
+
12
+ # @rbs (symbols: Array[Grammar::Symbol], shift: State::Action::Shift, reduce: State::Action::Reduce) -> void
13
+ def initialize: (symbols: Array[Grammar::Symbol], shift: State::Action::Shift, reduce: State::Action::Reduce) -> void
14
+
15
+ # @rbs () -> :shift_reduce
16
+ def type: () -> :shift_reduce
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,231 @@
1
+ # Generated from lib/lrama/state.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class State
5
+ type conflict = State::ShiftReduceConflict | State::ReduceReduceConflict
6
+
7
+ type transition = Action::Shift | Action::Goto
8
+
9
+ type lookahead_set = Hash[Item, Array[Grammar::Symbol]]
10
+
11
+ @id: Integer
12
+
13
+ @accessing_symbol: Grammar::Symbol
14
+
15
+ @kernels: Array[Item]
16
+
17
+ @items: Array[Item]
18
+
19
+ @items_to_state: Hash[Array[Item], State]
20
+
21
+ @conflicts: Array[conflict]
22
+
23
+ @resolved_conflicts: Array[ResolvedConflict]
24
+
25
+ @default_reduction_rule: Grammar::Rule?
26
+
27
+ @closure: Array[Item]
28
+
29
+ @nterm_transitions: Array[Action::Goto]
30
+
31
+ @term_transitions: Array[Action::Shift]
32
+
33
+ @transitions: Array[transition]
34
+
35
+ @internal_dependencies: Hash[Action::Goto, Array[Action::Goto]]
36
+
37
+ @successor_dependencies: Hash[Action::Goto, Array[Action::Goto]]
38
+
39
+ attr_reader id: Integer
40
+
41
+ attr_reader accessing_symbol: Grammar::Symbol
42
+
43
+ attr_reader kernels: Array[Item]
44
+
45
+ attr_reader conflicts: Array[conflict]
46
+
47
+ attr_reader resolved_conflicts: Array[ResolvedConflict]
48
+
49
+ attr_reader default_reduction_rule: Grammar::Rule?
50
+
51
+ attr_reader closure: Array[Item]
52
+
53
+ attr_reader items: Array[Item]
54
+
55
+ attr_reader annotation_list: Array[InadequacyAnnotation]
56
+
57
+ attr_reader predecessors: Array[State]
58
+
59
+ attr_reader items_to_state: Hash[Array[Item], State]
60
+
61
+ attr_reader lane_items: Hash[State, Array[[ Item, Item ]]]
62
+
63
+ attr_accessor _transitions: Array[[ Grammar::Symbol, Array[Item] ]]
64
+
65
+ attr_accessor reduces: Array[Action::Reduce]
66
+
67
+ attr_accessor ielr_isocores: Array[State]
68
+
69
+ attr_accessor lalr_isocore: State
70
+
71
+ attr_accessor lookaheads_recomputed: bool
72
+
73
+ attr_accessor follow_kernel_items: Hash[Action::Goto, Hash[Item, bool]]
74
+
75
+ attr_accessor always_follows: Hash[Action::Goto, Array[Grammar::Symbol]]
76
+
77
+ attr_accessor goto_follows: Hash[Action::Goto, Array[Grammar::Symbol]]
78
+
79
+ # @rbs (Integer id, Grammar::Symbol accessing_symbol, Array[Item] kernels) -> void
80
+ def initialize: (Integer id, Grammar::Symbol accessing_symbol, Array[Item] kernels) -> void
81
+
82
+ # @rbs (State other) -> bool
83
+ def ==: (State other) -> bool
84
+
85
+ # @rbs (Array[Item] closure) -> void
86
+ def closure=: (Array[Item] closure) -> void
87
+
88
+ # @rbs () -> Array[Action::Reduce]
89
+ def non_default_reduces: () -> Array[Action::Reduce]
90
+
91
+ # @rbs () -> void
92
+ def compute_transitions_and_reduces: () -> void
93
+
94
+ # @rbs (Grammar::Symbol next_sym, State next_state) -> void
95
+ def set_lane_items: (Grammar::Symbol next_sym, State next_state) -> void
96
+
97
+ # @rbs (Array[Item] items, State next_state) -> void
98
+ def set_items_to_state: (Array[Item] items, State next_state) -> void
99
+
100
+ # @rbs (Grammar::Rule rule, Array[Grammar::Symbol] look_ahead) -> void
101
+ def set_look_ahead: (Grammar::Rule rule, Array[Grammar::Symbol] look_ahead) -> void
102
+
103
+ # @rbs (Grammar::Rule rule, Hash[Grammar::Symbol, Array[Action::Goto]] sources) -> void
104
+ def set_look_ahead_sources: (Grammar::Rule rule, Hash[Grammar::Symbol, Array[Action::Goto]] sources) -> void
105
+
106
+ # @rbs () -> Array[Action::Goto]
107
+ def nterm_transitions: () -> Array[Action::Goto]
108
+
109
+ # @rbs () -> Array[Action::Shift]
110
+ def term_transitions: () -> Array[Action::Shift]
111
+
112
+ # @rbs () -> Array[transition]
113
+ def transitions: () -> Array[transition]
114
+
115
+ # @rbs (transition transition, State next_state) -> void
116
+ def update_transition: (transition transition, State next_state) -> void
117
+
118
+ # @rbs () -> void
119
+ def update_transitions_caches: () -> void
120
+
121
+ # @rbs () -> Array[Action::Shift]
122
+ def selected_term_transitions: () -> Array[Action::Shift]
123
+
124
+ # Move to next state by sym
125
+ #
126
+ # @rbs (Grammar::Symbol sym) -> State
127
+ def transition: (Grammar::Symbol sym) -> State
128
+
129
+ # @rbs (Item item) -> Action::Reduce
130
+ def find_reduce_by_item!: (Item item) -> Action::Reduce
131
+
132
+ # @rbs (Grammar::Rule default_reduction_rule) -> void
133
+ def default_reduction_rule=: (Grammar::Rule default_reduction_rule) -> void
134
+
135
+ # @rbs () -> bool
136
+ def has_conflicts?: () -> bool
137
+
138
+ # @rbs () -> Array[conflict]
139
+ def sr_conflicts: () -> Array[conflict]
140
+
141
+ # @rbs () -> Array[conflict]
142
+ def rr_conflicts: () -> Array[conflict]
143
+
144
+ # Clear information related to conflicts.
145
+ # IELR computation re-calculates conflicts and default reduction of states
146
+ # after LALR computation.
147
+ # Call this method before IELR computation to avoid duplicated conflicts information
148
+ # is stored.
149
+ #
150
+ # @rbs () -> void
151
+ def clear_conflicts: () -> void
152
+
153
+ # @rbs () -> bool
154
+ def split_state?: () -> bool
155
+
156
+ # Definition 3.40 (propagate_lookaheads)
157
+ #
158
+ # @rbs (State next_state) -> lookahead_set
159
+ def propagate_lookaheads: (State next_state) -> lookahead_set
160
+
161
+ # Definition 3.43 (is_compatible)
162
+ #
163
+ # @rbs (lookahead_set filtered_lookahead) -> bool
164
+ def is_compatible?: (lookahead_set filtered_lookahead) -> bool
165
+
166
+ # Definition 3.38 (lookahead_set_filters)
167
+ #
168
+ # @rbs () -> lookahead_set
169
+ def lookahead_set_filters: () -> lookahead_set
170
+
171
+ # Definition 3.27 (inadequacy_lists)
172
+ #
173
+ # @rbs () -> Hash[Grammar::Symbol, Array[Action::Shift | Action::Reduce]]
174
+ def inadequacy_list: () -> Hash[Grammar::Symbol, Array[Action::Shift | Action::Reduce]]
175
+
176
+ # Definition 3.30 (annotate_manifestation)
177
+ #
178
+ # @rbs () -> void
179
+ def annotate_manifestation: () -> void
180
+
181
+ # Definition 3.32 (annotate_predecessor)
182
+ #
183
+ # @rbs (State predecessor) -> void
184
+ def annotate_predecessor: (State predecessor) -> void
185
+
186
+ # @rbs () -> Array[Item]
187
+ def first_kernels: () -> Array[Item]
188
+
189
+ # @rbs (Array[InadequacyAnnotation] propagating_list) -> void
190
+ def append_annotation_list: (Array[InadequacyAnnotation] propagating_list) -> void
191
+
192
+ # Definition 3.31 (compute_lhs_contributions)
193
+ #
194
+ # @rbs (Grammar::Symbol sym, Grammar::Symbol token) -> (nil | Hash[Item, bool])
195
+ def lhs_contributions: (Grammar::Symbol sym, Grammar::Symbol token) -> (nil | Hash[Item, bool])
196
+
197
+ # Definition 3.26 (item_lookahead_sets)
198
+ #
199
+ # @rbs () -> lookahead_set
200
+ def item_lookahead_set: () -> lookahead_set
201
+
202
+ # @rbs (lookahead_set k) -> void
203
+ def item_lookahead_set=: (lookahead_set k) -> void
204
+
205
+ # @rbs (Item item) -> Array[[State, Item]]
206
+ def predecessors_with_item: (Item item) -> Array[[ State, Item ]]
207
+
208
+ # @rbs (State prev_state) -> void
209
+ def append_predecessor: (State prev_state) -> void
210
+
211
+ # Definition 3.39 (compute_goto_follow_set)
212
+ #
213
+ # @rbs (Grammar::Symbol nterm_token) -> Array[Grammar::Symbol]
214
+ def goto_follow_set: (Grammar::Symbol nterm_token) -> Array[Grammar::Symbol]
215
+
216
+ # Definition 3.8 (Goto Follows Internal Relation)
217
+ #
218
+ # @rbs (Action::Goto goto) -> Array[Action::Goto]
219
+ def internal_dependencies: (Action::Goto goto) -> Array[Action::Goto]
220
+
221
+ # Definition 3.5 (Goto Follows Successor Relation)
222
+ #
223
+ # @rbs (Action::Goto goto) -> Array[Action::Goto]
224
+ def successor_dependencies: (Action::Goto goto) -> Array[Action::Goto]
225
+
226
+ # Definition 3.9 (Goto Follows Predecessor Relation)
227
+ #
228
+ # @rbs (Action::Goto goto) -> Array[Action::Goto]
229
+ def predecessor_dependencies: (Action::Goto goto) -> Array[Action::Goto]
230
+ end
231
+ end
@@ -0,0 +1,215 @@
1
+ # Generated from lib/lrama/states.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ # States is passed to a template file
5
+ #
6
+ # "Efficient Computation of LALR(1) Look-Ahead Sets"
7
+ # https://dl.acm.org/doi/pdf/10.1145/69622.357187
8
+ class States
9
+ type state_id = Integer
10
+
11
+ type rule_id = Integer
12
+
13
+ include Grammar::_DelegatedMethods
14
+
15
+ @grammar: Grammar
16
+
17
+ @tracer: Tracer
18
+
19
+ @states: Array[State]
20
+
21
+ @direct_read_sets: Hash[State::Action::Goto, Bitmap::bitmap]
22
+
23
+ @reads_relation: Hash[State::Action::Goto, Array[State::Action::Goto]]
24
+
25
+ @read_sets: Hash[State::Action::Goto, Bitmap::bitmap]
26
+
27
+ @includes_relation: Hash[State::Action::Goto, Array[State::Action::Goto]]
28
+
29
+ @lookback_relation: Hash[state_id, Hash[rule_id, Array[State::Action::Goto]]]
30
+
31
+ @follow_sets: Hash[State::Action::Goto, Bitmap::bitmap]
32
+
33
+ @la: Hash[state_id, Hash[rule_id, Bitmap::bitmap]]
34
+
35
+ extend Forwardable
36
+
37
+ include Lrama::Tracer::Duration
38
+
39
+ attr_reader states: Array[State]
40
+
41
+ attr_reader reads_relation: Hash[State::Action::Goto, Array[State::Action::Goto]]
42
+
43
+ attr_reader includes_relation: Hash[State::Action::Goto, Array[State::Action::Goto]]
44
+
45
+ attr_reader lookback_relation: Hash[state_id, Hash[rule_id, Array[State::Action::Goto]]]
46
+
47
+ # @rbs (Grammar grammar, Tracer tracer) -> void
48
+ def initialize: (Grammar grammar, Tracer tracer) -> void
49
+
50
+ # @rbs () -> void
51
+ def compute: () -> void
52
+
53
+ # @rbs () -> void
54
+ def compute_ielr: () -> void
55
+
56
+ # @rbs () -> Integer
57
+ def states_count: () -> Integer
58
+
59
+ # @rbs () -> Hash[State::Action::Goto, Array[Grammar::Symbol]]
60
+ def direct_read_sets: () -> Hash[State::Action::Goto, Array[Grammar::Symbol]]
61
+
62
+ # @rbs () -> Hash[State::Action::Goto, Array[Grammar::Symbol]]
63
+ def read_sets: () -> Hash[State::Action::Goto, Array[Grammar::Symbol]]
64
+
65
+ # @rbs () -> Hash[State::Action::Goto, Array[Grammar::Symbol]]
66
+ def follow_sets: () -> Hash[State::Action::Goto, Array[Grammar::Symbol]]
67
+
68
+ # @rbs () -> Hash[state_id, Hash[rule_id, Array[Grammar::Symbol]]]
69
+ def la: () -> Hash[state_id, Hash[rule_id, Array[Grammar::Symbol]]]
70
+
71
+ # @rbs () -> Integer
72
+ def sr_conflicts_count: () -> Integer
73
+
74
+ # @rbs () -> Integer
75
+ def rr_conflicts_count: () -> Integer
76
+
77
+ # @rbs (Logger logger) -> void
78
+ def validate!: (Logger logger) -> void
79
+
80
+ def compute_la_sources_for_conflicted_states: () -> untyped
81
+
82
+ private
83
+
84
+ # @rbs (Grammar::Symbol accessing_symbol, Array[State::Item] kernels, Hash[Array[State::Item], State] states_created) -> [State, bool]
85
+ def create_state: (Grammar::Symbol accessing_symbol, Array[State::Item] kernels, Hash[Array[State::Item], State] states_created) -> [ State, bool ]
86
+
87
+ # @rbs (State state) -> void
88
+ def setup_state: (State state) -> void
89
+
90
+ # @rbs (Array[State] states, State state) -> void
91
+ def enqueue_state: (Array[State] states, State state) -> void
92
+
93
+ # @rbs () -> void
94
+ def compute_lr0_states: () -> void
95
+
96
+ # @rbs () -> Array[State::Action::Goto]
97
+ def nterm_transitions: () -> Array[State::Action::Goto]
98
+
99
+ # @rbs () -> void
100
+ def compute_look_ahead_sets: () -> void
101
+
102
+ # @rbs () -> void
103
+ def compute_direct_read_sets: () -> void
104
+
105
+ # @rbs () -> void
106
+ def compute_reads_relation: () -> void
107
+
108
+ # @rbs () -> void
109
+ def compute_read_sets: () -> void
110
+
111
+ # Execute transition of state by symbols
112
+ # then return final state.
113
+ #
114
+ # @rbs (State state, Array[Grammar::Symbol] symbols) -> State
115
+ def transition: (State state, Array[Grammar::Symbol] symbols) -> State
116
+
117
+ # @rbs () -> void
118
+ def compute_includes_relation: () -> void
119
+
120
+ # @rbs () -> void
121
+ def compute_lookback_relation: () -> void
122
+
123
+ # @rbs () -> void
124
+ def compute_follow_sets: () -> void
125
+
126
+ # @rbs () -> void
127
+ def compute_la: () -> void
128
+
129
+ # @rbs (Bitmap::bitmap bit) -> Array[Grammar::Symbol]
130
+ def bitmap_to_terms: (Bitmap::bitmap bit) -> Array[Grammar::Symbol]
131
+
132
+ # @rbs () -> void
133
+ def compute_conflicts: () -> void
134
+
135
+ # @rbs () -> void
136
+ def compute_shift_reduce_conflicts: () -> void
137
+
138
+ # @rbs (Grammar::Precedence shift_prec, Grammar::Precedence reduce_prec, State::ResolvedConflict resolved_conflict) -> void
139
+ def mark_precedences_used: (Grammar::Precedence shift_prec, Grammar::Precedence reduce_prec, State::ResolvedConflict resolved_conflict) -> void
140
+
141
+ # @rbs () -> void
142
+ def compute_reduce_reduce_conflicts: () -> void
143
+
144
+ # @rbs () -> void
145
+ def compute_default_reduction: () -> void
146
+
147
+ # @rbs () -> void
148
+ def clear_conflicts: () -> void
149
+
150
+ # Definition 3.15 (Predecessors)
151
+ #
152
+ # @rbs () -> void
153
+ def compute_predecessors: () -> void
154
+
155
+ # Definition 3.16 (follow_kernel_items)
156
+ #
157
+ # @rbs () -> void
158
+ def compute_follow_kernel_items: () -> void
159
+
160
+ # @rbs () -> Hash[State::Action::Goto, Array[State::Action::Goto]]
161
+ def compute_goto_internal_relation: () -> Hash[State::Action::Goto, Array[State::Action::Goto]]
162
+
163
+ # @rbs () -> Hash[State::Action::Goto, Bitmap::bitmap]
164
+ def compute_goto_bitmaps: () -> Hash[State::Action::Goto, Bitmap::bitmap]
165
+
166
+ # Definition 3.20 (always_follows, one closure)
167
+ #
168
+ # @rbs () -> void
169
+ def compute_always_follows: () -> void
170
+
171
+ # @rbs () -> Hash[State::Action::Goto, Array[State::Action::Goto]]
172
+ def compute_goto_successor_or_internal_relation: () -> Hash[State::Action::Goto, Array[State::Action::Goto]]
173
+
174
+ # @rbs () -> Hash[State::Action::Goto, Bitmap::bitmap]
175
+ def compute_transition_bitmaps: () -> Hash[State::Action::Goto, Bitmap::bitmap]
176
+
177
+ # Definition 3.24 (goto_follows, via always_follows)
178
+ #
179
+ # @rbs () -> void
180
+ def compute_goto_follows: () -> void
181
+
182
+ # @rbs () -> Hash[State::Action::Goto, Array[State::Action::Goto]]
183
+ def compute_goto_internal_or_predecessor_dependencies: () -> Hash[State::Action::Goto, Array[State::Action::Goto]]
184
+
185
+ # @rbs () -> Hash[State::Action::Goto, Bitmap::bitmap]
186
+ def compute_always_follows_bitmaps: () -> Hash[State::Action::Goto, Bitmap::bitmap]
187
+
188
+ # @rbs () -> void
189
+ def split_states: () -> void
190
+
191
+ # @rbs () -> void
192
+ def compute_inadequacy_annotations: () -> void
193
+
194
+ # @rbs (State state, State::lookahead_set filtered_lookaheads) -> void
195
+ def merge_lookaheads: (State state, State::lookahead_set filtered_lookaheads) -> void
196
+
197
+ # @rbs (State state, State::Action::Shift | State::Action::Goto transition, State next_state) -> void
198
+ def compute_state: (State state, State::Action::Shift | State::Action::Goto transition, State next_state) -> void
199
+
200
+ # @rbs (Logger logger) -> void
201
+ def validate_conflicts_within_threshold!: (Logger logger) -> void
202
+
203
+ # @rbs (Logger logger) -> bool
204
+ def conflicts_within_threshold?: (Logger logger) -> bool
205
+
206
+ # @rbs (Logger logger) -> bool
207
+ def sr_conflicts_within_threshold?: (Logger logger) -> bool
208
+
209
+ # @rbs (Logger logger) -> bool
210
+ def rr_conflicts_within_threshold?: (Logger logger) -> bool
211
+
212
+ # @rbs () -> void
213
+ def clear_look_ahead_sets: () -> void
214
+ end
215
+ end
@@ -0,0 +1,13 @@
1
+ # Generated from lib/lrama/tracer/actions.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Tracer
5
+ class Actions
6
+ # @rbs (IO io, ?actions: bool, **bool options) -> void
7
+ def initialize: (IO io, ?actions: bool, **bool options) -> void
8
+
9
+ # @rbs (Lrama::Grammar grammar) -> void
10
+ def trace: (Lrama::Grammar grammar) -> void
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # Generated from lib/lrama/tracer/closure.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Tracer
5
+ class Closure
6
+ # @rbs (IO io, ?automaton: bool, ?closure: bool, **bool) -> void
7
+ def initialize: (IO io, ?automaton: bool, ?closure: bool, **bool) -> void
8
+
9
+ # @rbs (Lrama::State state) -> void
10
+ def trace: (Lrama::State state) -> void
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ # Generated from lib/lrama/tracer/duration.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Tracer
5
+ module Duration
6
+ @_report_duration_enabled: bool
7
+
8
+ # @rbs () -> void
9
+ def self.enable: () -> void
10
+
11
+ # @rbs () -> bool
12
+ def self.enabled?: () -> bool
13
+
14
+ # @rbs [T] (_ToS message) { -> T } -> T
15
+ def report_duration: [T] (_ToS message) { () -> T } -> T
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ # Generated from lib/lrama/tracer/only_explicit_rules.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Tracer
5
+ class OnlyExplicitRules
6
+ # @rbs (IO io, ?only_explicit: bool, **bool) -> void
7
+ def initialize: (IO io, ?only_explicit: bool, **bool) -> void
8
+
9
+ # @rbs (Lrama::Grammar grammar) -> void
10
+ def trace: (Lrama::Grammar grammar) -> void
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # Generated from lib/lrama/tracer/rules.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Tracer
5
+ class Rules
6
+ # @rbs (IO io, ?rules: bool, ?only_explicit: bool, **bool) -> void
7
+ def initialize: (IO io, ?rules: bool, ?only_explicit: bool, **bool) -> void
8
+
9
+ # @rbs (Lrama::Grammar grammar) -> void
10
+ def trace: (Lrama::Grammar grammar) -> void
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ # Generated from lib/lrama/tracer/state.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Tracer
5
+ class State
6
+ # @rbs (IO io, ?automaton: bool, ?closure: bool, **bool) -> void
7
+ def initialize: (IO io, ?automaton: bool, ?closure: bool, **bool) -> void
8
+
9
+ # @rbs (Lrama::State state) -> void
10
+ def trace: (Lrama::State state) -> void
11
+
12
+ # @rbs (Integer state_count, Lrama::State state) -> void
13
+ def trace_list_append: (Integer state_count, Lrama::State state) -> void
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ # Generated from lib/lrama/tracer.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Tracer
5
+ # @rbs (IO io, **bool options) -> void
6
+ def initialize: (IO io, **bool options) -> void
7
+
8
+ # @rbs (Lrama::Grammar grammar) -> void
9
+ def trace: (Lrama::Grammar grammar) -> void
10
+
11
+ # @rbs (Lrama::State state) -> void
12
+ def trace_closure: (Lrama::State state) -> void
13
+
14
+ # @rbs (Lrama::State state) -> void
15
+ def trace_state: (Lrama::State state) -> void
16
+
17
+ # @rbs (Integer state_count, Lrama::State state) -> void
18
+ def trace_state_list_append: (Integer state_count, Lrama::State state) -> void
19
+
20
+ # @rbs () -> void
21
+ def enable_duration: () -> void
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ # Generated from lib/lrama/version.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ VERSION: String
5
+ end
@@ -0,0 +1,13 @@
1
+ # Generated from lib/lrama/warnings/conflicts.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Warnings
5
+ class Conflicts
6
+ # @rbs (Lrama::Logger logger, bool warnings) -> void
7
+ def initialize: (Lrama::Logger logger, bool warnings) -> void
8
+
9
+ # @rbs (Lrama::States states) -> void
10
+ def warn: (Lrama::States states) -> void
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ # Generated from lib/lrama/warnings/implicit_empty.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Warnings
5
+ # Warning rationale: Empty rules are easily overlooked and ambiguous
6
+ # - Empty alternatives like `rule: | "token";` can be missed during code reading
7
+ # - Difficult to distinguish between intentional empty rules vs. omissions
8
+ # - Explicit marking with %empty directive comment improves clarity
9
+ class ImplicitEmpty
10
+ # @rbs (Lrama::Logger logger, bool warnings) -> void
11
+ def initialize: (Lrama::Logger logger, bool warnings) -> void
12
+
13
+ # @rbs (Lrama::Grammar grammar) -> void
14
+ def warn: (Lrama::Grammar grammar) -> void
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,31 @@
1
+ # Generated from lib/lrama/warnings/name_conflicts.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Warnings
5
+ # Warning rationale: Parameterized rule names conflicting with symbol names
6
+ # - When a %rule name is identical to a terminal or non-terminal symbol name,
7
+ # it reduces grammar readability and may cause unintended behavior
8
+ # - Detecting these conflicts helps improve grammar definition quality
9
+ class NameConflicts
10
+ # @rbs (Lrama::Logger logger, bool warnings) -> void
11
+ def initialize: (Lrama::Logger logger, bool warnings) -> void
12
+
13
+ # @rbs (Lrama::Grammar grammar) -> void
14
+ def warn: (Lrama::Grammar grammar) -> void
15
+
16
+ private
17
+
18
+ # @rbs (Lrama::Grammar grammar) -> Set[String]
19
+ def collect_symbol_names: (Lrama::Grammar grammar) -> Set[String]
20
+
21
+ # @rbs (Array[untyped] terms, Set[String] symbol_names) -> void
22
+ def collect_term_names: (Array[untyped] terms, Set[String] symbol_names) -> void
23
+
24
+ # @rbs (Array[untyped] nterms, Set[String] symbol_names) -> void
25
+ def collect_nterm_names: (Array[untyped] nterms, Set[String] symbol_names) -> void
26
+
27
+ # @rbs (Array[untyped] parameterized_rules, Set[String] symbol_names) -> void
28
+ def check_conflicts: (Array[untyped] parameterized_rules, Set[String] symbol_names) -> void
29
+ end
30
+ end
31
+ end