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,131 @@
1
+ # Generated from lib/lrama/grammar/symbols/resolver.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Grammar
5
+ class Symbols
6
+ class Resolver
7
+ interface _DelegatedMethods
8
+ def symbols: () -> Array[Grammar::Symbol]
9
+
10
+ def nterms: () -> Array[Grammar::Symbol]
11
+
12
+ def terms: () -> Array[Grammar::Symbol]
13
+
14
+ def add_nterm: (id: Lexer::Token::Base, ?alias_name: String?, ?tag: Lexer::Token::Tag?) -> Grammar::Symbol
15
+
16
+ def add_term: (id: Lexer::Token::Base, ?alias_name: String?, ?tag: Lexer::Token::Tag?, ?token_id: Integer?, ?replace: bool) -> Grammar::Symbol
17
+
18
+ def find_symbol_by_number!: (Integer number) -> Grammar::Symbol
19
+
20
+ def find_symbol_by_id!: (Lexer::Token::Base id) -> Grammar::Symbol
21
+
22
+ def token_to_symbol: (Lexer::Token::Base token) -> Grammar::Symbol
23
+
24
+ def find_symbol_by_s_value!: (::String s_value) -> Grammar::Symbol
25
+
26
+ def fill_nterm_type: (Array[Grammar::Type] types) -> void
27
+
28
+ def fill_symbol_number: () -> void
29
+
30
+ def fill_printer: (Array[Grammar::Printer] printers) -> void
31
+
32
+ def fill_destructor: (Array[Destructor] destructors) -> (Destructor | bot)
33
+
34
+ def fill_error_token: (Array[Grammar::ErrorToken] error_tokens) -> void
35
+
36
+ def sort_by_number!: () -> Array[Grammar::Symbol]
37
+ end
38
+
39
+ @symbols: Array[Grammar::Symbol]?
40
+
41
+ @number: Integer
42
+
43
+ @used_numbers: Hash[Integer, bool]
44
+
45
+ attr_reader terms: Array[Grammar::Symbol]
46
+
47
+ attr_reader nterms: Array[Grammar::Symbol]
48
+
49
+ # @rbs () -> void
50
+ def initialize: () -> void
51
+
52
+ # @rbs () -> Array[Grammar::Symbol]
53
+ def symbols: () -> Array[Grammar::Symbol]
54
+
55
+ # @rbs () -> Array[Grammar::Symbol]
56
+ def sort_by_number!: () -> Array[Grammar::Symbol]
57
+
58
+ # @rbs (id: Lexer::Token::Base, ?alias_name: String?, ?tag: Lexer::Token::Tag?, ?token_id: Integer?, ?replace: bool) -> Grammar::Symbol
59
+ def add_term: (id: Lexer::Token::Base, ?alias_name: String?, ?tag: Lexer::Token::Tag?, ?token_id: Integer?, ?replace: bool) -> Grammar::Symbol
60
+
61
+ # @rbs (id: Lexer::Token::Base, ?alias_name: String?, ?tag: Lexer::Token::Tag?) -> Grammar::Symbol
62
+ def add_nterm: (id: Lexer::Token::Base, ?alias_name: String?, ?tag: Lexer::Token::Tag?) -> Grammar::Symbol
63
+
64
+ # @rbs (::String s_value) -> Grammar::Symbol?
65
+ def find_term_by_s_value: (::String s_value) -> Grammar::Symbol?
66
+
67
+ # @rbs (::String s_value) -> Grammar::Symbol?
68
+ def find_symbol_by_s_value: (::String s_value) -> Grammar::Symbol?
69
+
70
+ # @rbs (::String s_value) -> Grammar::Symbol
71
+ def find_symbol_by_s_value!: (::String s_value) -> Grammar::Symbol
72
+
73
+ # @rbs (Lexer::Token::Base id) -> Grammar::Symbol?
74
+ def find_symbol_by_id: (Lexer::Token::Base id) -> Grammar::Symbol?
75
+
76
+ # @rbs (Lexer::Token::Base id) -> Grammar::Symbol
77
+ def find_symbol_by_id!: (Lexer::Token::Base id) -> Grammar::Symbol
78
+
79
+ # @rbs (Integer token_id) -> Grammar::Symbol?
80
+ def find_symbol_by_token_id: (Integer token_id) -> Grammar::Symbol?
81
+
82
+ # @rbs (Integer number) -> Grammar::Symbol
83
+ def find_symbol_by_number!: (Integer number) -> Grammar::Symbol
84
+
85
+ # @rbs () -> void
86
+ def fill_symbol_number: () -> void
87
+
88
+ # @rbs (Array[Grammar::Type] types) -> void
89
+ def fill_nterm_type: (Array[Grammar::Type] types) -> void
90
+
91
+ # @rbs (Array[Grammar::Printer] printers) -> void
92
+ def fill_printer: (Array[Grammar::Printer] printers) -> void
93
+
94
+ # @rbs (Array[Destructor] destructors) -> (Array[Grammar::Symbol] | bot)
95
+ def fill_destructor: (Array[Destructor] destructors) -> (Array[Grammar::Symbol] | bot)
96
+
97
+ # @rbs (Array[Grammar::ErrorToken] error_tokens) -> void
98
+ def fill_error_token: (Array[Grammar::ErrorToken] error_tokens) -> void
99
+
100
+ # @rbs (Lexer::Token::Base token) -> Grammar::Symbol
101
+ def token_to_symbol: (Lexer::Token::Base token) -> Grammar::Symbol
102
+
103
+ # @rbs () -> void
104
+ def validate!: () -> void
105
+
106
+ private
107
+
108
+ # @rbs (Lexer::Token::Base id) -> Grammar::Symbol
109
+ def find_nterm_by_id!: (Lexer::Token::Base id) -> Grammar::Symbol
110
+
111
+ # @rbs () -> void
112
+ def fill_terms_number: () -> void
113
+
114
+ # @rbs () -> void
115
+ def fill_nterms_number: () -> void
116
+
117
+ # @rbs () -> Hash[Integer, bool]
118
+ def used_numbers: () -> Hash[Integer, bool]
119
+
120
+ # @rbs () -> void
121
+ def validate_number_uniqueness!: () -> void
122
+
123
+ # @rbs () -> void
124
+ def validate_alias_name_uniqueness!: () -> void
125
+
126
+ # @rbs () -> void
127
+ def validate_symbols!: () -> void
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,21 @@
1
+ # Generated from lib/lrama/grammar/type.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Grammar
5
+ class Type
6
+ @id: Lexer::Token::Base
7
+
8
+ @tag: Lexer::Token::Tag
9
+
10
+ attr_reader id: Lexer::Token::Base
11
+
12
+ attr_reader tag: Lexer::Token::Tag
13
+
14
+ # @rbs (id: Lexer::Token::Base, tag: Lexer::Token::Tag) -> void
15
+ def initialize: (id: Lexer::Token::Base, tag: Lexer::Token::Tag) -> void
16
+
17
+ # @rbs (Grammar::Type other) -> bool
18
+ def ==: (Grammar::Type other) -> bool
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ # Generated from lib/lrama/grammar/union.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Grammar
5
+ class Union
6
+ attr_reader code: Grammar::Code::NoReferenceCode
7
+
8
+ attr_reader lineno: Integer
9
+
10
+ # @rbs (code: Grammar::Code::NoReferenceCode, lineno: Integer) -> void
11
+ def initialize: (code: Grammar::Code::NoReferenceCode, lineno: Integer) -> void
12
+
13
+ # @rbs () -> String
14
+ def braces_less_code: () -> String
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,289 @@
1
+ # Generated from lib/lrama/grammar.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ # Grammar is the result of parsing an input grammar file
5
+ class Grammar
6
+ interface _DelegatedMethods
7
+ def rules: () -> Array[Rule]
8
+
9
+ def accept_symbol: () -> Grammar::Symbol
10
+
11
+ def eof_symbol: () -> Grammar::Symbol
12
+
13
+ def undef_symbol: () -> Grammar::Symbol
14
+
15
+ def precedences: () -> Array[Precedence]
16
+
17
+ # delegate to @symbols_resolver
18
+ def symbols: () -> Array[Grammar::Symbol]
19
+
20
+ def terms: () -> Array[Grammar::Symbol]
21
+
22
+ def nterms: () -> Array[Grammar::Symbol]
23
+
24
+ def find_symbol_by_s_value!: (::String s_value) -> Grammar::Symbol
25
+
26
+ def ielr_defined?: () -> bool
27
+ end
28
+
29
+ include Symbols::Resolver::_DelegatedMethods
30
+
31
+ @rule_counter: Counter
32
+
33
+ @percent_codes: Array[PercentCode]
34
+
35
+ @printers: Array[Printer]
36
+
37
+ @destructors: Array[Destructor]
38
+
39
+ @error_tokens: Array[ErrorToken]
40
+
41
+ @symbols_resolver: Symbols::Resolver
42
+
43
+ @types: Array[Type]
44
+
45
+ @rule_builders: Array[RuleBuilder]
46
+
47
+ @rules: Array[Rule]
48
+
49
+ @sym_to_rules: Hash[Integer, Array[Rule]]
50
+
51
+ @parameterized_resolver: Parameterized::Resolver
52
+
53
+ @empty_symbol: Grammar::Symbol
54
+
55
+ @eof_symbol: Grammar::Symbol
56
+
57
+ @error_symbol: Grammar::Symbol
58
+
59
+ @undef_symbol: Grammar::Symbol
60
+
61
+ @accept_symbol: Grammar::Symbol
62
+
63
+ @aux: Auxiliary
64
+
65
+ @no_stdlib: bool
66
+
67
+ @locations: bool
68
+
69
+ @define: Hash[String, String]
70
+
71
+ @required: bool
72
+
73
+ @union: Union
74
+
75
+ @precedences: Array[Precedence]
76
+
77
+ @start_nterm: Lrama::Lexer::Token::Base?
78
+
79
+ extend Forwardable
80
+
81
+ attr_reader percent_codes: Array[PercentCode]
82
+
83
+ attr_reader eof_symbol: Grammar::Symbol
84
+
85
+ attr_reader error_symbol: Grammar::Symbol
86
+
87
+ attr_reader undef_symbol: Grammar::Symbol
88
+
89
+ attr_reader accept_symbol: Grammar::Symbol
90
+
91
+ attr_reader aux: Auxiliary
92
+
93
+ attr_reader parameterized_resolver: Parameterized::Resolver
94
+
95
+ attr_reader precedences: Array[Precedence]
96
+
97
+ attr_accessor union: Union
98
+
99
+ attr_accessor expect: Integer
100
+
101
+ attr_accessor printers: Array[Printer]
102
+
103
+ attr_accessor error_tokens: Array[ErrorToken]
104
+
105
+ attr_accessor lex_param: String
106
+
107
+ attr_accessor parse_param: String
108
+
109
+ attr_accessor initial_action: Grammar::Code::InitialActionCode
110
+
111
+ attr_accessor after_shift: Lexer::Token::Base
112
+
113
+ attr_accessor before_reduce: Lexer::Token::Base
114
+
115
+ attr_accessor after_reduce: Lexer::Token::Base
116
+
117
+ attr_accessor after_shift_error_token: Lexer::Token::Base
118
+
119
+ attr_accessor after_pop_stack: Lexer::Token::Base
120
+
121
+ attr_accessor symbols_resolver: Symbols::Resolver
122
+
123
+ attr_accessor types: Array[Type]
124
+
125
+ attr_accessor rules: Array[Rule]
126
+
127
+ attr_accessor rule_builders: Array[RuleBuilder]
128
+
129
+ attr_accessor sym_to_rules: Hash[Integer, Array[Rule]]
130
+
131
+ attr_accessor no_stdlib: bool
132
+
133
+ attr_accessor locations: bool
134
+
135
+ attr_accessor define: Hash[String, String]
136
+
137
+ attr_accessor required: bool
138
+
139
+ # @rbs (Counter rule_counter, bool locations, Hash[String, String] define) -> void
140
+ def initialize: (Counter rule_counter, bool locations, Hash[String, String] define) -> void
141
+
142
+ # @rbs (Counter rule_counter, Counter midrule_action_counter) -> RuleBuilder
143
+ def create_rule_builder: (Counter rule_counter, Counter midrule_action_counter) -> RuleBuilder
144
+
145
+ # @rbs (id: Lexer::Token::Base, code: Lexer::Token::UserCode) -> Array[PercentCode]
146
+ def add_percent_code: (id: Lexer::Token::Base, code: Lexer::Token::UserCode) -> Array[PercentCode]
147
+
148
+ # @rbs (ident_or_tags: Array[Lexer::Token::Ident|Lexer::Token::Tag], token_code: Lexer::Token::UserCode, lineno: Integer) -> Array[Destructor]
149
+ def add_destructor: (ident_or_tags: Array[Lexer::Token::Ident | Lexer::Token::Tag], token_code: Lexer::Token::UserCode, lineno: Integer) -> Array[Destructor]
150
+
151
+ # @rbs (ident_or_tags: Array[Lexer::Token::Ident|Lexer::Token::Tag], token_code: Lexer::Token::UserCode, lineno: Integer) -> Array[Printer]
152
+ def add_printer: (ident_or_tags: Array[Lexer::Token::Ident | Lexer::Token::Tag], token_code: Lexer::Token::UserCode, lineno: Integer) -> Array[Printer]
153
+
154
+ # @rbs (ident_or_tags: Array[Lexer::Token::Ident|Lexer::Token::Tag], token_code: Lexer::Token::UserCode, lineno: Integer) -> Array[ErrorToken]
155
+ def add_error_token: (ident_or_tags: Array[Lexer::Token::Ident | Lexer::Token::Tag], token_code: Lexer::Token::UserCode, lineno: Integer) -> Array[ErrorToken]
156
+
157
+ # @rbs (id: Lexer::Token::Base, tag: Lexer::Token::Tag) -> Array[Type]
158
+ def add_type: (id: Lexer::Token::Base, tag: Lexer::Token::Tag) -> Array[Type]
159
+
160
+ # @rbs (Grammar::Symbol sym, Integer precedence, String s_value, Integer lineno) -> Precedence
161
+ def add_nonassoc: (Grammar::Symbol sym, Integer precedence, String s_value, Integer lineno) -> Precedence
162
+
163
+ # @rbs (Grammar::Symbol sym, Integer precedence, String s_value, Integer lineno) -> Precedence
164
+ def add_left: (Grammar::Symbol sym, Integer precedence, String s_value, Integer lineno) -> Precedence
165
+
166
+ # @rbs (Grammar::Symbol sym, Integer precedence, String s_value, Integer lineno) -> Precedence
167
+ def add_right: (Grammar::Symbol sym, Integer precedence, String s_value, Integer lineno) -> Precedence
168
+
169
+ # @rbs (Grammar::Symbol sym, Integer precedence, String s_value, Integer lineno) -> Precedence
170
+ def add_precedence: (Grammar::Symbol sym, Integer precedence, String s_value, Integer lineno) -> Precedence
171
+
172
+ # @rbs (Lrama::Lexer::Token::Base id) -> Lrama::Lexer::Token::Base
173
+ def set_start_nterm: (Lrama::Lexer::Token::Base id) -> Lrama::Lexer::Token::Base
174
+
175
+ # @rbs (Grammar::Symbol sym, Precedence precedence) -> (Precedence | bot)
176
+ def set_precedence: (Grammar::Symbol sym, Precedence precedence) -> (Precedence | bot)
177
+
178
+ # @rbs (Grammar::Code::NoReferenceCode code, Integer lineno) -> Union
179
+ def set_union: (Grammar::Code::NoReferenceCode code, Integer lineno) -> Union
180
+
181
+ # @rbs (RuleBuilder builder) -> Array[RuleBuilder]
182
+ def add_rule_builder: (RuleBuilder builder) -> Array[RuleBuilder]
183
+
184
+ # @rbs (Parameterized::Rule rule) -> Array[Parameterized::Rule]
185
+ def add_parameterized_rule: (Parameterized::Rule rule) -> Array[Parameterized::Rule]
186
+
187
+ # @rbs () -> Array[Parameterized::Rule]
188
+ def parameterized_rules: () -> Array[Parameterized::Rule]
189
+
190
+ # @rbs (Array[Parameterized::Rule] rules) -> Array[Parameterized::Rule]
191
+ def prepend_parameterized_rules: (Array[Parameterized::Rule] rules) -> Array[Parameterized::Rule]
192
+
193
+ # @rbs (Integer prologue_first_lineno) -> Integer
194
+ def prologue_first_lineno=: (Integer prologue_first_lineno) -> Integer
195
+
196
+ # @rbs (String prologue) -> String
197
+ def prologue=: (String prologue) -> String
198
+
199
+ # @rbs (Integer epilogue_first_lineno) -> Integer
200
+ def epilogue_first_lineno=: (Integer epilogue_first_lineno) -> Integer
201
+
202
+ # @rbs (String epilogue) -> String
203
+ def epilogue=: (String epilogue) -> String
204
+
205
+ # @rbs () -> void
206
+ def prepare: () -> void
207
+
208
+ # TODO: More validation methods
209
+ #
210
+ # * Validation for no_declared_type_reference
211
+ #
212
+ # @rbs () -> void
213
+ def validate!: () -> void
214
+
215
+ # @rbs (Grammar::Symbol sym) -> Array[Rule]
216
+ def find_rules_by_symbol!: (Grammar::Symbol sym) -> Array[Rule]
217
+
218
+ # @rbs (Grammar::Symbol sym) -> Array[Rule]?
219
+ def find_rules_by_symbol: (Grammar::Symbol sym) -> Array[Rule]?
220
+
221
+ # @rbs (String s_value) -> Array[Rule]
222
+ def select_rules_by_s_value: (String s_value) -> Array[Rule]
223
+
224
+ # @rbs () -> Array[String]
225
+ def unique_rule_s_values: () -> Array[String]
226
+
227
+ # @rbs () -> bool
228
+ def ielr_defined?: () -> bool
229
+
230
+ private
231
+
232
+ # @rbs () -> void
233
+ def sort_precedence: () -> void
234
+
235
+ # @rbs () -> Array[Grammar::Symbol]
236
+ def compute_nullable: () -> Array[Grammar::Symbol]
237
+
238
+ # @rbs () -> Array[Grammar::Symbol]
239
+ def compute_first_set: () -> Array[Grammar::Symbol]
240
+
241
+ # @rbs () -> Array[RuleBuilder]
242
+ def setup_rules: () -> Array[RuleBuilder]
243
+
244
+ # @rbs () -> Grammar::Symbol
245
+ def append_special_symbols: () -> Grammar::Symbol
246
+
247
+ # @rbs () -> void
248
+ def resolve_inline_rules: () -> void
249
+
250
+ # @rbs () -> void
251
+ def normalize_rules: () -> void
252
+
253
+ # Add $accept rule to the top of rules
254
+ def add_accept_rule: () -> untyped
255
+
256
+ # Collect symbols from rules
257
+ #
258
+ # @rbs () -> void
259
+ def collect_symbols: () -> void
260
+
261
+ # @rbs () -> void
262
+ def set_lhs_and_rhs: () -> void
263
+
264
+ # Rule inherits precedence from the last term in RHS.
265
+ #
266
+ # https://www.gnu.org/software/bison/manual/html_node/How-Precedence.html
267
+ #
268
+ # @rbs () -> void
269
+ def fill_default_precedence: () -> void
270
+
271
+ # @rbs () -> Array[Grammar::Symbol]
272
+ def fill_symbols: () -> Array[Grammar::Symbol]
273
+
274
+ # @rbs () -> Array[Rule]
275
+ def fill_sym_to_rules: () -> Array[Rule]
276
+
277
+ # @rbs () -> void
278
+ def validate_no_precedence_for_nterm!: () -> void
279
+
280
+ # @rbs () -> void
281
+ def validate_rule_lhs_is_nterm!: () -> void
282
+
283
+ # # @rbs () -> void
284
+ def validate_duplicated_precedence!: () -> untyped
285
+
286
+ # @rbs () -> void
287
+ def set_locations: () -> void
288
+ end
289
+ end
@@ -29,7 +29,7 @@ module Lrama
29
29
  def generate_error_message: (String error_message) -> String
30
30
 
31
31
  # @rbs () -> String
32
- def line_with_carets: () -> String
32
+ def error_with_carets: () -> String
33
33
 
34
34
  private
35
35
 
@@ -37,10 +37,19 @@ module Lrama
37
37
  def path: () -> String
38
38
 
39
39
  # @rbs () -> String
40
- def blanks: () -> String
40
+ def carets_line: () -> String
41
41
 
42
42
  # @rbs () -> String
43
- def carets: () -> String
43
+ def leading_whitespace: () -> String
44
+
45
+ # @rbs () -> String
46
+ def highlight_marker: () -> String
47
+
48
+ # @rbs () -> String
49
+ def formatted_first_lineno: () -> String
50
+
51
+ # @rbs () -> String
52
+ def line_number_padding: () -> String
44
53
 
45
54
  # @rbs () -> String
46
55
  def text: () -> String
@@ -0,0 +1,53 @@
1
+ # Generated from lib/lrama/lexer/token/base.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Lexer
5
+ module Token
6
+ class Base
7
+ attr_reader s_value: String
8
+
9
+ attr_reader location: Location
10
+
11
+ attr_accessor alias_name: String
12
+
13
+ attr_accessor referred: bool
14
+
15
+ attr_reader errors: Array[String]
16
+
17
+ # @rbs (s_value: String, ?alias_name: String, ?location: Location) -> void
18
+ def initialize: (s_value: String, ?alias_name: String, ?location: Location) -> void
19
+
20
+ # @rbs () -> String
21
+ def to_s: () -> String
22
+
23
+ # @rbs (String string) -> bool
24
+ def referred_by?: (String string) -> bool
25
+
26
+ # @rbs (Lexer::Token::Base other) -> bool
27
+ def ==: (Lexer::Token::Base other) -> bool
28
+
29
+ # @rbs () -> Integer
30
+ def first_line: () -> Integer
31
+
32
+ alias line first_line
33
+
34
+ # @rbs () -> Integer
35
+ def first_column: () -> Integer
36
+
37
+ alias column first_column
38
+
39
+ # @rbs () -> Integer
40
+ def last_line: () -> Integer
41
+
42
+ # @rbs () -> Integer
43
+ def last_column: () -> Integer
44
+
45
+ # @rbs (Lrama::Grammar::Reference ref, String message) -> bot
46
+ def invalid_ref: (Lrama::Grammar::Reference ref, String message) -> bot
47
+
48
+ # @rbs () -> bool
49
+ def validate: () -> bool
50
+ end
51
+ end
52
+ end
53
+ end
@@ -2,8 +2,15 @@
2
2
 
3
3
  module Lrama
4
4
  class Lexer
5
- class Token
6
- class Char < Token
5
+ module Token
6
+ class Char < Base
7
+ # @rbs () -> void
8
+ def validate: () -> void
9
+
10
+ private
11
+
12
+ # @rbs () -> void
13
+ def validate_ascii_code_range: () -> void
7
14
  end
8
15
  end
9
16
  end
@@ -0,0 +1,11 @@
1
+ # Generated from lib/lrama/lexer/token/empty.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Lexer
5
+ module Token
6
+ class Empty < Base
7
+ def initialize: (?location: untyped) -> untyped
8
+ end
9
+ end
10
+ end
11
+ end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Lrama
4
4
  class Lexer
5
- class Token
6
- class Ident < Token
5
+ module Token
6
+ class Ident < Base
7
7
  end
8
8
  end
9
9
  end
@@ -2,14 +2,14 @@
2
2
 
3
3
  module Lrama
4
4
  class Lexer
5
- class Token
6
- class InstantiateRule < Token
7
- attr_reader args: Array[Lexer::Token]
5
+ module Token
6
+ class InstantiateRule < Base
7
+ attr_reader args: Array[Lexer::Token::Base]
8
8
 
9
9
  attr_reader lhs_tag: Lexer::Token::Tag?
10
10
 
11
- # @rbs (s_value: String, ?alias_name: String, ?location: Location, ?args: Array[Lexer::Token], ?lhs_tag: Lexer::Token::Tag?) -> void
12
- def initialize: (s_value: String, ?alias_name: String, ?location: Location, ?args: Array[Lexer::Token], ?lhs_tag: Lexer::Token::Tag?) -> void
11
+ # @rbs (s_value: String, ?alias_name: String, ?location: Location, ?args: Array[Lexer::Token::Base], ?lhs_tag: Lexer::Token::Tag?) -> void
12
+ def initialize: (s_value: String, ?alias_name: String, ?location: Location, ?args: Array[Lexer::Token::Base], ?lhs_tag: Lexer::Token::Tag?) -> void
13
13
 
14
14
  # @rbs () -> String
15
15
  def rule_name: () -> String
@@ -0,0 +1,13 @@
1
+ # Generated from lib/lrama/lexer/token/int.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Lexer
5
+ module Token
6
+ class Int < Base
7
+ def initialize: (s_value: Integer, ?alias_name: String, ?location: Location) -> void
8
+
9
+ def s_value: () -> Integer
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ # Generated from lib/lrama/lexer/token/str.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Lexer
5
+ module Token
6
+ class Str < Base
7
+ end
8
+ end
9
+ end
10
+ end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Lrama
4
4
  class Lexer
5
- class Token
6
- class Tag < Token
5
+ module Token
6
+ class Tag < Base
7
7
  # @rbs () -> String
8
8
  def member: () -> String
9
9
  end
@@ -0,0 +1,10 @@
1
+ # Generated from lib/lrama/lexer/token/token.rb with RBS::Inline
2
+
3
+ module Lrama
4
+ class Lexer
5
+ module Token
6
+ class Token < Base
7
+ end
8
+ end
9
+ end
10
+ end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Lrama
4
4
  class Lexer
5
- class Token
6
- class UserCode < Token
5
+ module Token
6
+ class UserCode < Base
7
7
  attr_accessor tag: Lexer::Token::Tag
8
8
 
9
9
  # @rbs () -> Array[Lrama::Grammar::Reference]