ibex 0.1.0 → 0.2.0

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 (384) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +247 -104
  3. data/docs/architecture.md +322 -28
  4. data/docs/cst-migration.md +107 -0
  5. data/docs/cst.md +213 -0
  6. data/docs/development.md +129 -0
  7. data/docs/editor-setup.md +25 -0
  8. data/docs/error-ux.md +60 -0
  9. data/docs/grammar-reference.md +458 -18
  10. data/docs/lexer-migration.md +51 -0
  11. data/docs/racc-migration.md +34 -6
  12. data/docs/release-readiness.md +163 -0
  13. data/docs/stability.md +124 -0
  14. data/examples/README.md +60 -0
  15. data/examples/calculator.y +44 -0
  16. data/examples/csv.y +32 -0
  17. data/examples/ini.y +70 -0
  18. data/examples/json.y +48 -0
  19. data/examples/tiny_language.y +75 -0
  20. data/lib/ibex/analysis/sets.rb +5 -4
  21. data/lib/ibex/artifact_set.rb +63 -0
  22. data/lib/ibex/cli/ambiguity.rb +66 -0
  23. data/lib/ibex/cli/counterexample_options.rb +6 -2
  24. data/lib/ibex/cli/coverage.rb +173 -0
  25. data/lib/ibex/cli/debug.rb +106 -0
  26. data/lib/ibex/cli/diagnostics.rb +116 -0
  27. data/lib/ibex/cli/documentation.rb +67 -0
  28. data/lib/ibex/cli/error_messages.rb +177 -0
  29. data/lib/ibex/cli/explain.rb +76 -0
  30. data/lib/ibex/cli/formatting.rb +386 -0
  31. data/lib/ibex/cli/generation_artifacts.rb +138 -0
  32. data/lib/ibex/cli/generation_error_messages.rb +39 -0
  33. data/lib/ibex/cli/grammar_tests.rb +122 -0
  34. data/lib/ibex/cli/ir_tools.rb +184 -0
  35. data/lib/ibex/cli/lsp.rb +33 -0
  36. data/lib/ibex/cli/outputs.rb +91 -8
  37. data/lib/ibex/cli/racc_migration.rb +87 -0
  38. data/lib/ibex/cli/samples.rb +92 -0
  39. data/lib/ibex/cli/watch.rb +103 -0
  40. data/lib/ibex/cli.rb +506 -37
  41. data/lib/ibex/codegen/action_locations.rb +103 -0
  42. data/lib/ibex/codegen/action_method_source.rb +210 -0
  43. data/lib/ibex/codegen/action_source.rb +118 -0
  44. data/lib/ibex/codegen/ambiguity.rb +173 -0
  45. data/lib/ibex/codegen/cst_metadata.rb +171 -0
  46. data/lib/ibex/codegen/documentation.rb +170 -0
  47. data/lib/ibex/codegen/explain.rb +312 -0
  48. data/lib/ibex/codegen/generated_action_abi.rb +288 -0
  49. data/lib/ibex/codegen/html.rb +94 -10
  50. data/lib/ibex/codegen/mermaid.rb +43 -0
  51. data/lib/ibex/codegen/railroad.rb +197 -0
  52. data/lib/ibex/codegen/railroad_documentation.rb +59 -0
  53. data/lib/ibex/codegen/rbs.rb +323 -2
  54. data/lib/ibex/codegen/report.rb +46 -6
  55. data/lib/ibex/codegen/ruby.rb +334 -59
  56. data/lib/ibex/codegen/ruby_actions.rb +143 -0
  57. data/lib/ibex/codegen/ruby_ast.rb +121 -0
  58. data/lib/ibex/codegen/ruby_error_messages.rb +28 -0
  59. data/lib/ibex/codegen/ruby_lexer.rb +83 -0
  60. data/lib/ibex/codegen/ruby_syntax.rb +90 -0
  61. data/lib/ibex/codegen/ruby_table_metadata.rb +57 -0
  62. data/lib/ibex/codegen/ruby_value_printers.rb +56 -0
  63. data/lib/ibex/codegen/symbol_labels.rb +1 -1
  64. data/lib/ibex/coverage/collector.rb +188 -0
  65. data/lib/ibex/coverage/event_stream.rb +97 -0
  66. data/lib/ibex/coverage/report.rb +259 -0
  67. data/lib/ibex/coverage/runtime_event_validator.rb +160 -0
  68. data/lib/ibex/coverage.rb +13 -0
  69. data/lib/ibex/error_messages/parser.rb +159 -0
  70. data/lib/ibex/error_messages/parser_v2.rb +198 -0
  71. data/lib/ibex/error_messages/renderer.rb +65 -0
  72. data/lib/ibex/error_messages/sentence_search.rb +196 -0
  73. data/lib/ibex/error_messages/update.rb +169 -0
  74. data/lib/ibex/error_messages.rb +165 -0
  75. data/lib/ibex/frontend/ast.rb +145 -6
  76. data/lib/ibex/frontend/bootstrap_parser.rb +47 -4
  77. data/lib/ibex/frontend/diagnostic.rb +81 -0
  78. data/lib/ibex/frontend/diagnostic_recovery.rb +268 -0
  79. data/lib/ibex/frontend/dsl.rb +66 -7
  80. data/lib/ibex/frontend/formatter.rb +407 -0
  81. data/lib/ibex/frontend/generated_parser.rb +614 -190
  82. data/lib/ibex/frontend/generated_parser_base.rb +164 -30
  83. data/lib/ibex/frontend/generated_parser_includes.rb +61 -0
  84. data/lib/ibex/frontend/generated_parser_metadata.rb +61 -0
  85. data/lib/ibex/frontend/generated_parser_parameters.rb +60 -0
  86. data/lib/ibex/frontend/generation.rb +33 -0
  87. data/lib/ibex/frontend/lexer.rb +162 -10
  88. data/lib/ibex/frontend/lexer_recovery.rb +84 -0
  89. data/lib/ibex/frontend/parser/declarations.rb +247 -11
  90. data/lib/ibex/frontend/parser/parameters.rb +82 -0
  91. data/lib/ibex/frontend/parser/rules.rb +43 -6
  92. data/lib/ibex/frontend/parser.rb +182 -4
  93. data/lib/ibex/frontend/regenerator.rb +26 -1
  94. data/lib/ibex/frontend/resolution.rb +69 -0
  95. data/lib/ibex/frontend/resolver.rb +217 -0
  96. data/lib/ibex/frontend/rule_documentation.rb +103 -0
  97. data/lib/ibex/frontend/source_cursor.rb +132 -8
  98. data/lib/ibex/frontend/source_document.rb +229 -0
  99. data/lib/ibex/frontend/source_loader.rb +150 -0
  100. data/lib/ibex/frontend/source_span.rb +81 -0
  101. data/lib/ibex/frontend/token_adapter/declaration_document_state.rb +47 -0
  102. data/lib/ibex/frontend/token_adapter/declaration_lexer_state.rb +83 -0
  103. data/lib/ibex/frontend/token_adapter/declaration_state.rb +216 -26
  104. data/lib/ibex/frontend/token_adapter/delimiter_tracker.rb +8 -2
  105. data/lib/ibex/frontend/token_adapter/rule_state.rb +60 -2
  106. data/lib/ibex/frontend/token_adapter.rb +8 -3
  107. data/lib/ibex/frontend.rb +13 -2
  108. data/lib/ibex/generation_input.rb +57 -0
  109. data/lib/ibex/generation_manifest.rb +200 -0
  110. data/lib/ibex/generation_transaction.rb +261 -0
  111. data/lib/ibex/generation_transaction_recovery.rb +109 -0
  112. data/lib/ibex/generation_transaction_validation.rb +196 -0
  113. data/lib/ibex/grammar_tests.rb +206 -0
  114. data/lib/ibex/ir/automaton_ir.rb +38 -5
  115. data/lib/ibex/ir/grammar_ir.rb +137 -24
  116. data/lib/ibex/ir/lexer_ir.rb +76 -0
  117. data/lib/ibex/ir/migration.rb +120 -0
  118. data/lib/ibex/ir/serialize.rb +110 -19
  119. data/lib/ibex/ir/validator/automaton.rb +345 -0
  120. data/lib/ibex/ir/validator/base.rb +129 -0
  121. data/lib/ibex/ir/validator/grammar.rb +604 -0
  122. data/lib/ibex/ir/validator/lexer.rb +113 -0
  123. data/lib/ibex/ir/validator.rb +62 -0
  124. data/lib/ibex/ir.rb +57 -4
  125. data/lib/ibex/lalr/build_metrics.rb +23 -0
  126. data/lib/ibex/lalr/builder.rb +379 -52
  127. data/lib/ibex/lalr/conflict.rb +1 -0
  128. data/lib/ibex/lalr/conflict_search.rb +11 -5
  129. data/lib/ibex/lalr/counterexample.rb +20 -5
  130. data/lib/ibex/lalr/direct_lookaheads.rb +236 -0
  131. data/lib/ibex/lalr/ielr_partition.rb +152 -0
  132. data/lib/ibex/lalr/on_error_reductions.rb +74 -0
  133. data/lib/ibex/lalr.rb +7 -0
  134. data/lib/ibex/location.rb +129 -0
  135. data/lib/ibex/lsp/document_handlers.rb +66 -0
  136. data/lib/ibex/lsp/document_store.rb +264 -0
  137. data/lib/ibex/lsp/document_store_diagnostics.rb +44 -0
  138. data/lib/ibex/lsp/document_store_validation.rb +61 -0
  139. data/lib/ibex/lsp/initialization_handlers.rb +78 -0
  140. data/lib/ibex/lsp/navigation_handlers.rb +56 -0
  141. data/lib/ibex/lsp/position_codec.rb +109 -0
  142. data/lib/ibex/lsp/protocol_error.rb +33 -0
  143. data/lib/ibex/lsp/request_handlers.rb +45 -0
  144. data/lib/ibex/lsp/request_support.rb +87 -0
  145. data/lib/ibex/lsp/server.rb +146 -0
  146. data/lib/ibex/lsp/symbol_index.rb +241 -0
  147. data/lib/ibex/lsp/symbol_index_builder.rb +267 -0
  148. data/lib/ibex/lsp/symbol_index_precedence_references.rb +44 -0
  149. data/lib/ibex/lsp/symbol_index_source_queries.rb +61 -0
  150. data/lib/ibex/lsp/symbol_occurrence.rb +17 -0
  151. data/lib/ibex/lsp/transport.rb +118 -0
  152. data/lib/ibex/lsp/workspace.rb +127 -0
  153. data/lib/ibex/lsp/workspace_analyzer.rb +199 -0
  154. data/lib/ibex/lsp.rb +32 -0
  155. data/lib/ibex/normalize/declarations.rb +140 -7
  156. data/lib/ibex/normalize/diagnostics.rb +50 -5
  157. data/lib/ibex/normalize/expander.rb +59 -55
  158. data/lib/ibex/normalize/expression.rb +60 -39
  159. data/lib/ibex/normalize/inline_expansion.rb +414 -0
  160. data/lib/ibex/normalize/inline_validation.rb +174 -0
  161. data/lib/ibex/normalize/lexer.rb +131 -0
  162. data/lib/ibex/normalize/named_references.rb +60 -0
  163. data/lib/ibex/normalize/nodes.rb +46 -0
  164. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +69 -0
  165. data/lib/ibex/normalize/parameter_lowering.rb +126 -0
  166. data/lib/ibex/normalize/parameter_substitution.rb +125 -0
  167. data/lib/ibex/normalize/parameter_validation.rb +140 -0
  168. data/lib/ibex/normalize/parameters.rb +199 -0
  169. data/lib/ibex/normalize/recovery_declarations.rb +84 -0
  170. data/lib/ibex/normalize.rb +179 -14
  171. data/lib/ibex/racc_migration/checker.rb +122 -0
  172. data/lib/ibex/racc_migration/harness.rb +177 -0
  173. data/lib/ibex/racc_migration/report.rb +94 -0
  174. data/lib/ibex/racc_migration.rb +12 -0
  175. data/lib/ibex/rake_task.rb +116 -0
  176. data/lib/ibex/samples.rb +186 -0
  177. data/lib/ibex/table_simulation/result.rb +51 -0
  178. data/lib/ibex/table_simulation/simulator.rb +253 -0
  179. data/lib/ibex/table_simulation/step.rb +60 -0
  180. data/lib/ibex/table_simulation/text.rb +31 -0
  181. data/lib/ibex/table_simulation.rb +13 -0
  182. data/lib/ibex/tables.rb +9 -70
  183. data/lib/ibex/version.rb +1 -1
  184. data/lib/ibex/watch/runner.rb +172 -0
  185. data/lib/ibex/watch/source_snapshot.rb +93 -0
  186. data/lib/ibex/watch.rb +11 -0
  187. data/lib/ibex.rb +25 -1
  188. data/schema/automaton-ir-v1.schema.json +401 -0
  189. data/schema/automaton-ir-v2.schema.json +58 -0
  190. data/schema/benchmark-v1.schema.json +212 -0
  191. data/schema/benchmark-v2.schema.json +61 -0
  192. data/schema/cst-v1.json +170 -0
  193. data/schema/error-ux-v1.schema.json +258 -0
  194. data/schema/explain-v1.schema.json +433 -0
  195. data/schema/frontend-diagnostics-v1.schema.json +154 -0
  196. data/schema/generation-manifest-v1.schema.json +115 -0
  197. data/schema/grammar-ir-v1.schema.json +426 -0
  198. data/schema/grammar-ir-v2.schema.json +779 -0
  199. data/schema/lexer-ir-v1.schema.json +215 -0
  200. data/schema/migration-check-v1.schema.json +60 -0
  201. data/schema/performance-comparison-v1.schema.json +395 -0
  202. data/schema/public-performance-comparison-v1.schema.json +506 -0
  203. data/schema/public-performance-profile-v1.schema.json +360 -0
  204. data/schema/runtime-coverage-v1.schema.json +86 -0
  205. data/schema/runtime-event-v1.schema.json +308 -0
  206. data/schema/table-simulation-v1.schema.json +70 -0
  207. data/sig/ibex/artifact_set.rbs +37 -0
  208. data/sig/ibex/cli/ambiguity.rbs +22 -0
  209. data/sig/ibex/cli/counterexample_options.rbs +2 -0
  210. data/sig/ibex/cli/coverage.rbs +53 -0
  211. data/sig/ibex/cli/debug.rbs +28 -0
  212. data/sig/ibex/cli/diagnostics.rbs +38 -0
  213. data/sig/ibex/cli/documentation.rbs +25 -0
  214. data/sig/ibex/cli/error_messages.rbs +57 -0
  215. data/sig/ibex/cli/explain.rbs +25 -0
  216. data/sig/ibex/cli/formatting.rbs +103 -0
  217. data/sig/ibex/cli/generation_artifacts.rbs +50 -0
  218. data/sig/ibex/cli/generation_error_messages.rbs +19 -0
  219. data/sig/ibex/cli/grammar_tests.rbs +36 -0
  220. data/sig/ibex/cli/ir_tools.rbs +51 -0
  221. data/sig/ibex/cli/lsp.rbs +14 -0
  222. data/sig/ibex/cli/outputs.rbs +17 -0
  223. data/sig/ibex/cli/racc_migration.rbs +30 -0
  224. data/sig/ibex/cli/samples.rbs +30 -0
  225. data/sig/ibex/cli/watch.rbs +43 -0
  226. data/sig/ibex/cli.rbs +104 -5
  227. data/sig/ibex/codegen/action_locations.rbs +45 -0
  228. data/sig/ibex/codegen/action_method_source.rbs +65 -0
  229. data/sig/ibex/codegen/action_source.rbs +50 -0
  230. data/sig/ibex/codegen/ambiguity.rbs +60 -0
  231. data/sig/ibex/codegen/cst_metadata.rbs +59 -0
  232. data/sig/ibex/codegen/documentation.rbs +50 -0
  233. data/sig/ibex/codegen/explain.rbs +85 -0
  234. data/sig/ibex/codegen/generated_action_abi.rbs +101 -0
  235. data/sig/ibex/codegen/html.rbs +18 -2
  236. data/sig/ibex/codegen/mermaid.rbs +16 -0
  237. data/sig/ibex/codegen/railroad.rbs +82 -0
  238. data/sig/ibex/codegen/railroad_documentation.rbs +31 -0
  239. data/sig/ibex/codegen/rbs.rbs +84 -4
  240. data/sig/ibex/codegen/report.rbs +8 -0
  241. data/sig/ibex/codegen/ruby.rbs +97 -23
  242. data/sig/ibex/codegen/ruby_actions.rbs +54 -0
  243. data/sig/ibex/codegen/ruby_ast.rbs +34 -0
  244. data/sig/ibex/codegen/ruby_error_messages.rbs +16 -0
  245. data/sig/ibex/codegen/ruby_lexer.rbs +25 -0
  246. data/sig/ibex/codegen/ruby_syntax.rbs +25 -0
  247. data/sig/ibex/codegen/ruby_table_metadata.rbs +26 -0
  248. data/sig/ibex/codegen/ruby_value_printers.rbs +28 -0
  249. data/sig/ibex/coverage/collector.rbs +76 -0
  250. data/sig/ibex/coverage/event_stream.rbs +42 -0
  251. data/sig/ibex/coverage/report.rbs +100 -0
  252. data/sig/ibex/coverage/runtime_event_validator.rbs +68 -0
  253. data/sig/ibex/coverage.rbs +7 -0
  254. data/sig/ibex/error_messages/parser.rbs +58 -0
  255. data/sig/ibex/error_messages/parser_v2.rbs +67 -0
  256. data/sig/ibex/error_messages/renderer.rbs +23 -0
  257. data/sig/ibex/error_messages/sentence_search.rbs +80 -0
  258. data/sig/ibex/error_messages/update.rbs +43 -0
  259. data/sig/ibex/error_messages.rbs +85 -0
  260. data/sig/ibex/frontend/ast.rbs +208 -19
  261. data/sig/ibex/frontend/bootstrap_parser.rbs +11 -0
  262. data/sig/ibex/frontend/diagnostic.rbs +53 -0
  263. data/sig/ibex/frontend/diagnostic_recovery.rbs +98 -0
  264. data/sig/ibex/frontend/dsl.rbs +33 -4
  265. data/sig/ibex/frontend/formatter.rbs +135 -0
  266. data/sig/ibex/frontend/generated_parser.rbs +218 -68
  267. data/sig/ibex/frontend/generated_parser_base.rbs +61 -10
  268. data/sig/ibex/frontend/generated_parser_includes.rbs +23 -0
  269. data/sig/ibex/frontend/generated_parser_metadata.rbs +23 -0
  270. data/sig/ibex/frontend/generated_parser_parameters.rbs +24 -0
  271. data/sig/ibex/frontend/generation.rbs +6 -0
  272. data/sig/ibex/frontend/lexer.rbs +49 -2
  273. data/sig/ibex/frontend/lexer_recovery.rbs +25 -0
  274. data/sig/ibex/frontend/parser/declarations.rbs +54 -0
  275. data/sig/ibex/frontend/parser/parameters.rbs +28 -0
  276. data/sig/ibex/frontend/parser/rules.rbs +3 -0
  277. data/sig/ibex/frontend/parser.rbs +66 -0
  278. data/sig/ibex/frontend/regenerator.rbs +11 -0
  279. data/sig/ibex/frontend/resolution.rbs +33 -0
  280. data/sig/ibex/frontend/resolver.rbs +91 -0
  281. data/sig/ibex/frontend/rule_documentation.rbs +42 -0
  282. data/sig/ibex/frontend/source_cursor.rbs +36 -3
  283. data/sig/ibex/frontend/source_document.rbs +119 -0
  284. data/sig/ibex/frontend/source_loader.rbs +66 -0
  285. data/sig/ibex/frontend/source_span.rbs +53 -0
  286. data/sig/ibex/frontend/token_adapter/declaration_document_state.rbs +21 -0
  287. data/sig/ibex/frontend/token_adapter/declaration_lexer_state.rbs +27 -0
  288. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +73 -5
  289. data/sig/ibex/frontend/token_adapter/rule_state.rbs +20 -0
  290. data/sig/ibex/frontend/token_adapter.rbs +5 -2
  291. data/sig/ibex/frontend.rbs +1 -1
  292. data/sig/ibex/generation_input.rbs +37 -0
  293. data/sig/ibex/generation_manifest.rbs +67 -0
  294. data/sig/ibex/generation_transaction.rbs +82 -0
  295. data/sig/ibex/generation_transaction_recovery.rbs +36 -0
  296. data/sig/ibex/generation_transaction_validation.rbs +65 -0
  297. data/sig/ibex/grammar_tests.rbs +93 -0
  298. data/sig/ibex/ir/automaton_ir.rbs +8 -2
  299. data/sig/ibex/ir/grammar_ir.rbs +75 -15
  300. data/sig/ibex/ir/lexer_ir.rbs +57 -0
  301. data/sig/ibex/ir/migration.rbs +34 -0
  302. data/sig/ibex/ir/serialize.rbs +23 -6
  303. data/sig/ibex/ir/validator/automaton.rbs +109 -0
  304. data/sig/ibex/ir/validator/base.rbs +65 -0
  305. data/sig/ibex/ir/validator/grammar.rbs +184 -0
  306. data/sig/ibex/ir/validator/lexer.rbs +37 -0
  307. data/sig/ibex/ir/validator.rbs +16 -0
  308. data/sig/ibex/ir.rbs +38 -4
  309. data/sig/ibex/lalr/build_metrics.rbs +20 -0
  310. data/sig/ibex/lalr/builder.rbs +95 -15
  311. data/sig/ibex/lalr/conflict_search.rbs +7 -3
  312. data/sig/ibex/lalr/counterexample.rbs +5 -2
  313. data/sig/ibex/lalr/direct_lookaheads.rbs +86 -0
  314. data/sig/ibex/lalr/ielr_partition.rbs +59 -0
  315. data/sig/ibex/lalr/on_error_reductions.rbs +22 -0
  316. data/sig/ibex/lalr.rbs +6 -0
  317. data/sig/ibex/location.rbs +67 -0
  318. data/sig/ibex/lsp/document_handlers.rbs +24 -0
  319. data/sig/ibex/lsp/document_store.rbs +94 -0
  320. data/sig/ibex/lsp/document_store_diagnostics.rbs +20 -0
  321. data/sig/ibex/lsp/document_store_validation.rbs +26 -0
  322. data/sig/ibex/lsp/initialization_handlers.rbs +30 -0
  323. data/sig/ibex/lsp/navigation_handlers.rbs +30 -0
  324. data/sig/ibex/lsp/position_codec.rbs +40 -0
  325. data/sig/ibex/lsp/protocol_error.rbs +32 -0
  326. data/sig/ibex/lsp/request_handlers.rbs +26 -0
  327. data/sig/ibex/lsp/request_support.rbs +40 -0
  328. data/sig/ibex/lsp/server.rbs +55 -0
  329. data/sig/ibex/lsp/symbol_index.rbs +78 -0
  330. data/sig/ibex/lsp/symbol_index_builder.rbs +87 -0
  331. data/sig/ibex/lsp/symbol_index_precedence_references.rbs +18 -0
  332. data/sig/ibex/lsp/symbol_index_source_queries.rbs +26 -0
  333. data/sig/ibex/lsp/symbol_occurrence.rbs +25 -0
  334. data/sig/ibex/lsp/transport.rbs +35 -0
  335. data/sig/ibex/lsp/workspace.rbs +41 -0
  336. data/sig/ibex/lsp/workspace_analyzer.rbs +69 -0
  337. data/sig/ibex/lsp.rbs +7 -0
  338. data/sig/ibex/normalize/declarations.rbs +31 -0
  339. data/sig/ibex/normalize/diagnostics.rbs +9 -0
  340. data/sig/ibex/normalize/expander.rbs +20 -14
  341. data/sig/ibex/normalize/expression.rbs +10 -10
  342. data/sig/ibex/normalize/inline_expansion.rbs +120 -0
  343. data/sig/ibex/normalize/inline_validation.rbs +40 -0
  344. data/sig/ibex/normalize/lexer.rbs +37 -0
  345. data/sig/ibex/normalize/named_references.rbs +20 -0
  346. data/sig/ibex/normalize/nodes.rbs +14 -0
  347. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +32 -0
  348. data/sig/ibex/normalize/parameter_lowering.rbs +35 -0
  349. data/sig/ibex/normalize/parameter_substitution.rbs +42 -0
  350. data/sig/ibex/normalize/parameter_validation.rbs +44 -0
  351. data/sig/ibex/normalize/parameters.rbs +46 -0
  352. data/sig/ibex/normalize/recovery_declarations.rbs +24 -0
  353. data/sig/ibex/normalize.rbs +123 -18
  354. data/sig/ibex/racc_migration/checker.rbs +36 -0
  355. data/sig/ibex/racc_migration/harness.rbs +16 -0
  356. data/sig/ibex/racc_migration/report.rbs +53 -0
  357. data/sig/ibex/racc_migration.rbs +8 -0
  358. data/sig/ibex/rake_task.rbs +51 -0
  359. data/sig/ibex/samples.rbs +51 -0
  360. data/sig/ibex/table_simulation/result.rbs +32 -0
  361. data/sig/ibex/table_simulation/simulator.rbs +98 -0
  362. data/sig/ibex/table_simulation/step.rbs +40 -0
  363. data/sig/ibex/table_simulation/text.rbs +14 -0
  364. data/sig/ibex/table_simulation.rbs +7 -0
  365. data/sig/ibex/tables.rbs +0 -26
  366. data/sig/ibex/watch/runner.rbs +48 -0
  367. data/sig/ibex/watch/source_snapshot.rbs +42 -0
  368. data/sig/ibex/watch.rbs +7 -0
  369. data/sig/ibex.rbs +2 -0
  370. metadata +301 -16
  371. data/.rubocop.yml +0 -43
  372. data/CHANGELOG.md +0 -30
  373. data/Rakefile +0 -25
  374. data/Steepfile +0 -10
  375. data/docs/compat-notes.md +0 -37
  376. data/docs/lexer-coverage.md +0 -14
  377. data/docs/phase10-extensions.md +0 -27
  378. data/gemfiles/Gemfile +0 -7
  379. data/gemfiles/Gemfile.lock +0 -98
  380. data/lib/ibex/frontend/grammar.y +0 -156
  381. data/lib/ibex/runtime/parser.rb +0 -360
  382. data/lib/ibex/runtime.rb +0 -8
  383. data/sig/ibex/runtime/parser.rbs +0 -167
  384. data/sig/ibex/runtime.rbs +0 -6
@@ -0,0 +1,120 @@
1
+ # Generated from lib/ibex/normalize/inline_expansion.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Deterministically substitutes inline-rule productions before LR construction.
5
+ # rubocop:disable Metrics/ModuleLength -- expansion, action plans, and id remapping share one invariant.
6
+ module NormalizeInlineExpansion
7
+ private
8
+
9
+ # @rbs () -> void
10
+ def expand_inline_rules: () -> void
11
+
12
+ # Explicit heap frames avoid tying grammar depth to the Ruby call stack.
13
+ # The single-definition path reuses its accumulated arrays, so a long
14
+ # acyclic chain remains linear in the size of its final action plan.
15
+ # @rbs (IR::Production production, Hash[Integer, Array[IR::Production]] definitions) ->
16
+ # Array[Hash[Symbol, untyped]]
17
+ def expand_inline_production: (IR::Production production, Hash[Integer, Array[IR::Production]] definitions) -> Array[Hash[Symbol, untyped]]
18
+
19
+ # @rbs (Array[Hash[Symbol, untyped]] frames, Hash[Integer, Array[IR::Production]] definitions,
20
+ # Array[Array[Hash[Symbol, untyped]]] worklist, Array[Hash[Symbol, untyped]] variants,
21
+ # IR::location? location) -> void
22
+ def drain_inline_expansion_frames: (Array[Hash[Symbol, untyped]] frames, Hash[Integer, Array[IR::Production]] definitions, Array[Array[Hash[Symbol, untyped]]] worklist, Array[Hash[Symbol, untyped]] variants, IR::location? location) -> void
23
+
24
+ # @rbs (Array[Hash[Symbol, untyped]] frames, Hash[Integer, Array[IR::Production]] definitions,
25
+ # Array[Array[Hash[Symbol, untyped]]] worklist, Array[Hash[Symbol, untyped]] variants,
26
+ # IR::location? location) -> bool
27
+ def advance_inline_expansion_frame?: (Array[Hash[Symbol, untyped]] frames, Hash[Integer, Array[IR::Production]] definitions, Array[Array[Hash[Symbol, untyped]]] worklist, Array[Hash[Symbol, untyped]] variants, IR::location? location) -> bool
28
+
29
+ # @rbs (Array[Hash[Symbol, untyped]] frames, Array[IR::Production] choices, Integer symbol_id,
30
+ # Array[Array[Hash[Symbol, untyped]]] worklist) -> void
31
+ def schedule_inline_choice_branches: (Array[Hash[Symbol, untyped]] frames, Array[IR::Production] choices, Integer symbol_id, Array[Array[Hash[Symbol, untyped]]] worklist) -> void
32
+
33
+ # @rbs (Array[Hash[Symbol, untyped]] frames, Array[Hash[Symbol, untyped]] variants,
34
+ # Array[Array[Hash[Symbol, untyped]]] worklist, IR::location? location) -> bool
35
+ def complete_inline_expansion_frame?: (Array[Hash[Symbol, untyped]] frames, Array[Hash[Symbol, untyped]] variants, Array[Array[Hash[Symbol, untyped]]] worklist, IR::location? location) -> bool
36
+
37
+ # @rbs (IR::Production production, Integer? symbol_id) -> Hash[Symbol, untyped]
38
+ def inline_expansion_frame: (IR::Production production, Integer? symbol_id) -> Hash[Symbol, untyped]
39
+
40
+ # @rbs (Array[Hash[Symbol, untyped]] frames) -> Array[Hash[Symbol, untyped]]
41
+ def clone_inline_expansion_frames: (Array[Hash[Symbol, untyped]] frames) -> Array[Hash[Symbol, untyped]]
42
+
43
+ # @rbs (IR::Production production) -> Hash[Symbol, untyped]
44
+ def empty_inline_variant: (IR::Production production) -> Hash[Symbol, untyped]
45
+
46
+ # @rbs (Hash[Symbol, untyped] variant, Integer symbol_id) -> Hash[Symbol, untyped]
47
+ def append_inline_symbol: (Hash[Symbol, untyped] variant, Integer symbol_id) -> Hash[Symbol, untyped]
48
+
49
+ # @rbs (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child) -> Hash[Symbol, untyped]
50
+ def combine_inline_variant: (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child) -> Hash[Symbol, untyped]
51
+
52
+ # @rbs (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child,
53
+ # Integer physical_offset, Integer step_offset) -> Array[Hash[Symbol, untyped]]
54
+ def combined_inline_steps: (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child, Integer physical_offset, Integer step_offset) -> Array[Hash[Symbol, untyped]]
55
+
56
+ # @rbs (Array[untyped] left, Array[untyped] right) -> Array[untyped]
57
+ def append_inline_array: (Array[untyped] left, Array[untyped] right) -> Array[untyped]
58
+
59
+ # @rbs (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child) -> Integer?
60
+ def combined_inline_precedence: (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child) -> Integer?
61
+
62
+ # @rbs (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child,
63
+ # Integer physical_offset, Integer step_offset) -> Array[Hash[Symbol, untyped]]
64
+ def remap_inline_steps: (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child, Integer physical_offset, Integer step_offset) -> Array[Hash[Symbol, untyped]]
65
+
66
+ # @rbs (Array[Symbol | Integer] reference, Integer physical_offset, Integer step_offset) ->
67
+ # Array[Symbol | Integer]
68
+ def remap_inline_reference: (Array[Symbol | Integer] reference, Integer physical_offset, Integer step_offset) -> Array[Symbol | Integer]
69
+
70
+ # @rbs (Hash[Symbol, untyped] variant, IR::Production production) -> Hash[Symbol, untyped]
71
+ def finish_inline_precedence: (Hash[Symbol, untyped] variant, IR::Production production) -> Hash[Symbol, untyped]
72
+
73
+ # @rbs (Hash[Symbol, untyped] variant, IR::Production production, Integer symbol_id) ->
74
+ # Hash[Symbol, untyped]
75
+ def finish_inline_choice: (Hash[Symbol, untyped] variant, IR::Production production, Integer symbol_id) -> Hash[Symbol, untyped]
76
+
77
+ # @rbs (IR::Production production, Array[Array[Symbol | Integer]] inputs, Integer lookahead,
78
+ # Symbol kind, String? rule) -> Hash[Symbol, untyped]
79
+ def inline_action_step: (IR::Production production, Array[Array[Symbol | Integer]] inputs, Integer lookahead, Symbol kind, String? rule) -> Hash[Symbol, untyped]
80
+
81
+ # @rbs (IR::Production production, Hash[Symbol, untyped] variant, Integer id) -> IR::Production
82
+ def composed_inline_production: (IR::Production production, Hash[Symbol, untyped] variant, Integer id) -> IR::Production
83
+
84
+ # @rbs (IR::Production production, Integer physical_length, Array[Hash[Symbol, untyped]]) -> IR::Action
85
+ def composed_inline_action: (IR::Production production, Integer physical_length, Array[Hash[Symbol, untyped]]) -> IR::Action
86
+
87
+ # @rbs (Hash[Symbol, untyped] step, Integer physical_length) -> Hash[Symbol, untyped]
88
+ def composition_plan_step: (Hash[Symbol, untyped] step, Integer physical_length) -> Hash[Symbol, untyped]
89
+
90
+ # @rbs (Array[Symbol | Integer] reference, Integer physical_length) -> Integer
91
+ def resolve_inline_reference: (Array[Symbol | Integer] reference, Integer physical_length) -> Integer
92
+
93
+ # @rbs (Integer rhs_length) -> String
94
+ def inline_implicit_code: (Integer rhs_length) -> String
95
+
96
+ # @rbs (IR::location location) -> IR::source_provenance
97
+ def inline_source_provenance: (IR::location location) -> IR::source_provenance
98
+
99
+ # @rbs (IR::Production production, Hash[Symbol, untyped] variant) -> IR::production_expansion
100
+ def inline_production_expansion: (IR::Production production, Hash[Symbol, untyped] variant) -> IR::production_expansion
101
+
102
+ # @rbs (IR::Production production, Integer id) -> IR::Production
103
+ def copy_inline_production: (IR::Production production, Integer id) -> IR::Production
104
+
105
+ # @rbs (IR::Production production) -> void
106
+ def charge_inline_expansion!: (IR::Production production) -> void
107
+
108
+ # @rbs (Integer count, IR::location? location) -> void
109
+ def enforce_inline_choice_limit!: (Integer count, IR::location? location) -> void
110
+
111
+ # @rbs (Array[IR::Production] productions) -> void
112
+ def rebuild_inline_symbols: (Array[IR::Production] productions) -> void
113
+
114
+ # @rbs (IR::GrammarSymbol definition, Integer id) -> IR::GrammarSymbol
115
+ def remap_inline_symbol: (IR::GrammarSymbol definition, Integer id) -> IR::GrammarSymbol
116
+
117
+ # @rbs (IR::Production production, Integer id, Hash[Integer, Integer] id_map) -> IR::Production
118
+ def remap_inline_production: (IR::Production production, Integer id, Hash[Integer, Integer] id_map) -> IR::Production
119
+ end
120
+ end
@@ -0,0 +1,40 @@
1
+ # Generated from lib/ibex/normalize/inline_validation.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Static validation and collection for rules eliminated by inline expansion.
5
+ module NormalizeInlineValidation
6
+ private
7
+
8
+ # @rbs () -> void
9
+ def gather_inline_rules: () -> void
10
+
11
+ # @rbs () -> void
12
+ def validate_inline_terminal_collisions: () -> void
13
+
14
+ # @rbs () -> void
15
+ def validate_inline_start: () -> void
16
+
17
+ # @rbs () -> void
18
+ def validate_inline_cycles: () -> void
19
+
20
+ # A formal is live for cycle analysis only when substituting its actual can
21
+ # introduce a grammar reference. Calls propagate liveness through their
22
+ # callee's live positions until the finite formal set reaches a fixed point.
23
+ # @rbs () -> Hash[String, Set[Integer]]
24
+ def parameter_formal_liveness: () -> Hash[String, Set[Integer]]
25
+
26
+ # @rbs (Frontend::AST::item item, Array[String] formals,
27
+ # Hash[String, Set[Integer]] liveness, Set[Integer] found) -> void
28
+ def collect_live_formals: (Frontend::AST::item item, Array[String] formals, Hash[String, Set[Integer]] liveness, Set[Integer] found) -> void
29
+
30
+ # Structural AST traversal necessarily branches once for each public item shape.
31
+ # rubocop:disable Metrics/CyclomaticComplexity
32
+ # @rbs (Frontend::AST::item item, Array[String] formals, Set[String] names,
33
+ # Array[[String, Frontend::Location]] edges, Hash[String, Set[Integer]] liveness) -> void
34
+ def collect_inline_edges: (Frontend::AST::item item, Array[String] formals, Set[String] names, Array[[ String, Frontend::Location ]] edges, Hash[String, Set[Integer]] liveness) -> void
35
+
36
+ # @rbs (String name, Hash[String, Array[[String, Frontend::Location]]] graph,
37
+ # Hash[String, Symbol] states) -> void
38
+ def visit_inline_cycle: (String name, Hash[String, Array[[ String, Frontend::Location ]]] graph, Hash[String, Symbol] states) -> void
39
+ end
40
+ end
@@ -0,0 +1,37 @@
1
+ # Generated from lib/ibex/normalize/lexer.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Lexer declaration normalization and static safety checks.
5
+ module NormalizeLexer
6
+ private
7
+
8
+ # @rbs () -> IR::Lexer?
9
+ def normalize_lexer: () -> IR::Lexer?
10
+
11
+ # @rbs (Frontend::AST::LexerState definition, Array[String] states, Array[IR::LexerRule] rules,
12
+ # Array[Hash[Symbol, untyped]] warnings) -> void
13
+ def normalize_lexer_state: (Frontend::AST::LexerState definition, Array[String] states, Array[IR::LexerRule] rules, Array[Hash[Symbol, untyped]] warnings) -> void
14
+
15
+ # @rbs (Frontend::AST::LexerRule definition, String state, Integer id,
16
+ # Array[Hash[Symbol, untyped]] warnings) -> IR::LexerRule
17
+ def normalize_lexer_rule: (Frontend::AST::LexerRule definition, String state, Integer id, Array[Hash[Symbol, untyped]] warnings) -> IR::LexerRule
18
+
19
+ # @rbs (Frontend::AST::LexerRule definition) -> void
20
+ def validate_lexer_token: (Frontend::AST::LexerRule definition) -> void
21
+
22
+ # @rbs (Frontend::AST::LexerRule definition) -> void
23
+ def validate_lexer_action: (Frontend::AST::LexerRule definition) -> void
24
+
25
+ # @rbs (Frontend::AST::LexerRule definition) -> [String, String]
26
+ def normalize_lexer_pattern: (Frontend::AST::LexerRule definition) -> [ String, String ]
27
+
28
+ # @rbs (String raw, Frontend::Location location) -> String
29
+ def decode_lexer_literal: (String raw, Frontend::Location location) -> String
30
+
31
+ # @rbs (Frontend::AST::LexerRule definition, String source, String options) -> void
32
+ def validate_lexer_regexp: (Frontend::AST::LexerRule definition, String source, String options) -> void
33
+
34
+ # @rbs (String source) -> bool
35
+ def risky_lexer_pattern?: (String source) -> bool
36
+ end
37
+ end
@@ -0,0 +1,20 @@
1
+ # Generated from lib/ibex/normalize/named_references.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Named-reference collection and validation shared by ordinary and parameterized items.
5
+ module NormalizeNamedReferences
6
+ private
7
+
8
+ # @rbs (Frontend::AST::Group group) -> void
9
+ def reject_group_named_references: (Frontend::AST::Group group) -> void
10
+
11
+ # @rbs (Frontend::AST::item item) -> (Frontend::AST::SymbolReference | Frontend::AST::ParameterizedReference)?
12
+ def named_reference_in: (Frontend::AST::item item) -> (Frontend::AST::SymbolReference | Frontend::AST::ParameterizedReference)?
13
+
14
+ # @rbs (Frontend::AST::item item, Array[IR::named_ref] refs, Integer index) -> void
15
+ def add_named_reference: (Frontend::AST::item item, Array[IR::named_ref] refs, Integer index) -> void
16
+
17
+ # @rbs (Frontend::AST::item item) -> (Frontend::AST::SymbolReference | Frontend::AST::ParameterizedReference)?
18
+ def unwrap_reference: (Frontend::AST::item item) -> (Frontend::AST::SymbolReference | Frontend::AST::ParameterizedReference)?
19
+ end
20
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/ibex/normalize/nodes.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Validation and normalization for generated AST node declarations.
5
+ module NormalizeNodes
6
+ private
7
+
8
+ # @rbs (Frontend::AST::Alternative alternative, Array[String] rhs) -> IR::node_annotation?
9
+ def normalize_node_annotation: (Frontend::AST::Alternative alternative, Array[String] rhs) -> IR::node_annotation?
10
+
11
+ # @rbs (Frontend::AST::NodeAnnotation annotation, Array[String] rhs) -> void
12
+ def validate_node_fields: (Frontend::AST::NodeAnnotation annotation, Array[String] rhs) -> void
13
+ end
14
+ end
@@ -0,0 +1,32 @@
1
+ # Generated from lib/ibex/normalize/parameter_ebnf_lowering.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Resumable EBNF lowering used inside specialized parameter alternatives.
5
+ module NormalizeParameterEbnfLowering
6
+ private
7
+
8
+ # @rbs (Hash[Symbol, untyped] frame,
9
+ # Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
10
+ def lower_parameter_suffix: (Hash[Symbol, untyped] frame, Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
11
+
12
+ # @rbs (Hash[Symbol, untyped] frame,
13
+ # Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
14
+ def finish_parameter_suffix: (Hash[Symbol, untyped] frame, Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
15
+
16
+ # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::SeparatedList item) -> void
17
+ def lower_parameter_separated_list: (Hash[Symbol, untyped] frame, Frontend::AST::SeparatedList item) -> void
18
+
19
+ # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::SeparatedList item) -> void
20
+ def finish_parameter_separated_list: (Hash[Symbol, untyped] frame, Frontend::AST::SeparatedList item) -> void
21
+
22
+ # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::Group item) -> void
23
+ def lower_parameter_group: (Hash[Symbol, untyped] frame, Frontend::AST::Group item) -> void
24
+
25
+ # @rbs (Hash[Symbol, untyped] frame, String helper, Frontend::AST::Group item,
26
+ # Array[Frontend::AST::item] alternative) -> void
27
+ def start_parameter_group_alternative: (Hash[Symbol, untyped] frame, String helper, Frontend::AST::Group item, Array[Frontend::AST::item] alternative) -> void
28
+
29
+ # @rbs (Hash[Symbol, untyped] frame, String helper, Frontend::AST::Group item, Integer length) -> void
30
+ def finish_parameter_group_alternative: (Hash[Symbol, untyped] frame, String helper, Frontend::AST::Group item, Integer length) -> void
31
+ end
32
+ end
@@ -0,0 +1,35 @@
1
+ # Generated from lib/ibex/normalize/parameter_lowering.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Resumable, source-ordered lowering for specialized parameter alternatives.
5
+ module NormalizeParameterLowering
6
+ private
7
+
8
+ # @rbs (Hash[Symbol, untyped] frame) -> void
9
+ def advance_parameter_alternative: (Hash[Symbol, untyped] frame) -> void
10
+
11
+ # @rbs (Hash[Symbol, untyped] frame) { () -> void } -> void
12
+ def with_parameter_frame_context: (Hash[Symbol, untyped] frame) { () -> void } -> void
13
+
14
+ # @rbs (Hash[Symbol, untyped] frame) -> bool
15
+ def parameter_items_remaining?: (Hash[Symbol, untyped] frame) -> bool
16
+
17
+ # @rbs (Hash[Symbol, untyped] frame) -> void
18
+ def start_parameter_item: (Hash[Symbol, untyped] frame) -> void
19
+
20
+ # @rbs (Hash[Symbol, untyped] frame, Array[untyped] operation) -> void
21
+ def process_parameter_operation: (Hash[Symbol, untyped] frame, Array[untyped] operation) -> void
22
+
23
+ # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::item item) -> void
24
+ def lower_parameter_item: (Hash[Symbol, untyped] frame, Frontend::AST::item item) -> void
25
+
26
+ # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::ParameterizedReference item) -> void
27
+ def lower_parameter_call: (Hash[Symbol, untyped] frame, Frontend::AST::ParameterizedReference item) -> void
28
+
29
+ # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::item item) -> void
30
+ def finish_parameter_item: (Hash[Symbol, untyped] frame, Frontend::AST::item item) -> void
31
+
32
+ # @rbs (Hash[Symbol, untyped] frame) -> void
33
+ def finish_parameter_alternative: (Hash[Symbol, untyped] frame) -> void
34
+ end
35
+ end
@@ -0,0 +1,42 @@
1
+ # Generated from lib/ibex/normalize/parameter_substitution.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Structural, sharing-preserving substitution for parameterized user rules.
5
+ module NormalizeParameterSubstitution
6
+ private
7
+
8
+ # @rbs (Frontend::AST::Alternative alternative, Hash[String, Frontend::AST::item] bindings) ->
9
+ # Frontend::AST::Alternative
10
+ def substitute_parameter_alternative: (Frontend::AST::Alternative alternative, Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::Alternative
11
+
12
+ # @rbs (Frontend::AST::Alternative alternative, Hash[String, Frontend::AST::item] bindings) -> String?
13
+ def substitute_parameter_precedence: (Frontend::AST::Alternative alternative, Hash[String, Frontend::AST::item] bindings) -> String?
14
+
15
+ # @rbs (Frontend::AST::item item, Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::item
16
+ def substitute_parameter_item: (Frontend::AST::item item, Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::item
17
+
18
+ # @rbs (Frontend::AST::SymbolReference formal, Frontend::AST::item argument) -> Frontend::AST::item
19
+ def substitute_formal_reference: (Frontend::AST::SymbolReference formal, Frontend::AST::item argument) -> Frontend::AST::item
20
+
21
+ # @rbs (Frontend::AST::item item, ?Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::item
22
+ def clone_parameter_item: (Frontend::AST::item item, ?Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::item
23
+
24
+ # @rbs (Frontend::AST::SymbolReference item, Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::item
25
+ def clone_parameter_symbol: (Frontend::AST::SymbolReference item, Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::item
26
+
27
+ # @rbs (Frontend::AST::ParameterizedReference item, Hash[String, Frontend::AST::item] bindings) ->
28
+ # Frontend::AST::ParameterizedReference
29
+ def clone_parameter_call: (Frontend::AST::ParameterizedReference item, Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::ParameterizedReference
30
+
31
+ # @rbs (Frontend::AST::Group item, Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::Group
32
+ def clone_parameter_group: (Frontend::AST::Group item, Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::Group
33
+
34
+ # @rbs (Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item,
35
+ # Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::item
36
+ def clone_parameter_suffix: (Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item, Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::item
37
+
38
+ # @rbs (Frontend::AST::SeparatedList item, Hash[String, Frontend::AST::item] bindings) ->
39
+ # Frontend::AST::SeparatedList
40
+ def clone_parameter_separated_list: (Frontend::AST::SeparatedList item, Hash[String, Frontend::AST::item] bindings) -> Frontend::AST::SeparatedList
41
+ end
42
+ end
@@ -0,0 +1,44 @@
1
+ # Generated from lib/ibex/normalize/parameter_validation.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Static validation and collection of parameterized user rule definitions.
5
+ module NormalizeParameterValidation
6
+ private
7
+
8
+ # @rbs () -> void
9
+ def gather_parameter_templates: () -> void
10
+
11
+ # @rbs (Frontend::AST::Rule rule, Hash[String, Frontend::AST::Rule] plain_rules) -> void
12
+ def gather_parameterized_rule: (Frontend::AST::Rule rule, Hash[String, Frontend::AST::Rule] plain_rules) -> void
13
+
14
+ # @rbs (Frontend::AST::Rule rule) -> void
15
+ def validate_parameter_formals: (Frontend::AST::Rule rule) -> void
16
+
17
+ # @rbs (Frontend::AST::Rule rule) -> bot
18
+ def reject_mixed_parameterized_rule: (Frontend::AST::Rule rule) -> bot
19
+
20
+ # @rbs () -> void
21
+ def validate_parameter_terminal_collisions: () -> void
22
+
23
+ # @rbs (Frontend::AST::Rule rule) -> void
24
+ def validate_parameter_references: (Frontend::AST::Rule rule) -> void
25
+
26
+ # @rbs (Frontend::AST::item item, Array[String] formals, inside_argument: bool) -> void
27
+ def validate_parameter_item: (Frontend::AST::item item, Array[String] formals, inside_argument: bool) -> void
28
+
29
+ # @rbs (Frontend::AST::ParameterizedReference item, Array[String] formals, inside_argument: bool) -> void
30
+ def validate_parameterized_item: (Frontend::AST::ParameterizedReference item, Array[String] formals, inside_argument: bool) -> void
31
+
32
+ # @rbs (Frontend::AST::SymbolReference | Frontend::AST::ParameterizedReference item) -> bot
33
+ def reject_argument_named_reference: (Frontend::AST::SymbolReference | Frontend::AST::ParameterizedReference item) -> bot
34
+
35
+ # @rbs (Frontend::AST::ParameterizedReference reference) -> void
36
+ def validate_parameter_call: (Frontend::AST::ParameterizedReference reference) -> void
37
+
38
+ # @rbs (Frontend::AST::Rule rule) -> bool
39
+ def parameterized_rule?: (Frontend::AST::Rule rule) -> bool
40
+
41
+ # @rbs (String name) -> bool
42
+ def parameter_template?: (String name) -> bool
43
+ end
44
+ end
@@ -0,0 +1,46 @@
1
+ # Generated from lib/ibex/normalize/parameters.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Iterative, hygienic specialization of validated parameterized user rules.
5
+ module NormalizeParameters
6
+ private
7
+
8
+ # @rbs (Frontend::AST::ParameterizedReference reference) -> String
9
+ def specialize_parameterized_reference: (Frontend::AST::ParameterizedReference reference) -> String
10
+
11
+ # @rbs (Frontend::AST::ParameterizedReference reference) -> [String, bool]
12
+ def schedule_parameter_specialization: (Frontend::AST::ParameterizedReference reference) -> [ String, bool ]
13
+
14
+ # @rbs (Frontend::AST::ParameterizedReference reference) -> void
15
+ def enforce_parameter_limits!: (Frontend::AST::ParameterizedReference reference) -> void
16
+
17
+ # A constructor-growing recursive call can create infinitely many distinct
18
+ # specializations. Calls whose arguments shrink or merely change are
19
+ # allowed; they may reach a memoized fixed point after finite expansion.
20
+ # @rbs (Array[Frontend::AST::item] candidates, Array[Frontend::AST::item] ancestors) -> bool
21
+ def growing_parameter_arguments?: (Array[Frontend::AST::item] candidates, Array[Frontend::AST::item] ancestors) -> bool
22
+
23
+ # @rbs (Frontend::AST::item candidate, String target) -> bool
24
+ def parameter_argument_contains?: (Frontend::AST::item candidate, String target) -> bool
25
+
26
+ # @rbs (Frontend::AST::ParameterizedReference reference) -> String
27
+ def new_parameter_helper: (Frontend::AST::ParameterizedReference reference) -> String
28
+
29
+ # @rbs (Frontend::AST::ParameterizedReference reference, String helper,
30
+ # Array[Frontend::AST::item] arguments, Array[String] rendered_arguments) ->
31
+ # Hash[Symbol, untyped]
32
+ def parameter_frame: (Frontend::AST::ParameterizedReference reference, String helper, Array[Frontend::AST::item] arguments, Array[String] rendered_arguments) -> Hash[Symbol, untyped]
33
+
34
+ # @rbs () -> void
35
+ def drain_parameter_worklist: () -> void
36
+
37
+ # @rbs (Hash[Symbol, untyped] frame) -> bool
38
+ def prepare_parameter_alternative?: (Hash[Symbol, untyped] frame) -> bool
39
+
40
+ # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::Rule template, Integer index) -> void
41
+ def prepare_parameter_alternative_entry: (Hash[Symbol, untyped] frame, Frontend::AST::Rule template, Integer index) -> void
42
+
43
+ # @rbs (Hash[Symbol, untyped] frame) -> void
44
+ def clear_parameter_alternative: (Hash[Symbol, untyped] frame) -> void
45
+ end
46
+ end
@@ -0,0 +1,24 @@
1
+ # Generated from lib/ibex/normalize/recovery_declarations.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Recovery declaration extraction and post-interning symbol validation.
5
+ module NormalizeRecoveryDeclarations
6
+ private
7
+
8
+ # @rbs (Frontend::AST::Start | Frontend::AST::Recovery | Frontend::AST::OnErrorReduce |
9
+ # Frontend::AST::GrammarTest declaration) -> void
10
+ def read_parser_control_declaration: (Frontend::AST::Start | Frontend::AST::Recovery | Frontend::AST::OnErrorReduce | Frontend::AST::GrammarTest declaration) -> void
11
+
12
+ # @rbs (Frontend::AST::GrammarTest declaration) -> void
13
+ def read_grammar_test: (Frontend::AST::GrammarTest declaration) -> void
14
+
15
+ # @rbs (Frontend::AST::Recovery declaration) -> void
16
+ def read_recovery_declaration: (Frontend::AST::Recovery declaration) -> void
17
+
18
+ # @rbs (Frontend::AST::OnErrorReduce declaration) -> void
19
+ def read_on_error_reduce_declaration: (Frontend::AST::OnErrorReduce declaration) -> void
20
+
21
+ # @rbs () -> void
22
+ def validate_recovery_declarations: () -> void
23
+ end
24
+ end
@@ -5,52 +5,141 @@ module Ibex
5
5
  class Normalizer
6
6
  include NormalizeDeclarations
7
7
 
8
+ include NormalizeLexer
9
+
10
+ include NormalizeRecoveryDeclarations
11
+
12
+ include NormalizeParameterValidation
13
+
14
+ include NormalizeInlineValidation
15
+
16
+ include NormalizeParameterSubstitution
17
+
18
+ include NormalizeParameterEbnfLowering
19
+
20
+ include NormalizeParameterLowering
21
+
22
+ include NormalizeParameters
23
+
24
+ include NormalizeNamedReferences
25
+
26
+ include NormalizeNodes
27
+
8
28
  include NormalizeExpander
9
29
 
30
+ include NormalizeInlineExpansion
31
+
10
32
  include NormalizeDiagnostics
11
33
 
12
34
  RESERVED_NAMES: Array[String]
13
35
 
14
- @ast: Frontend::AST::Root
36
+ RUBY_KEYWORDS: Array[String]
15
37
 
16
- @mode: Symbol
38
+ DEFAULT_MAX_PARAMETER_SPECIALIZATIONS: ::Integer
17
39
 
18
- @symbols: Array[IR::GrammarSymbol]
40
+ DEFAULT_MAX_INLINE_EXPANSIONS: ::Integer
19
41
 
20
- @symbols_by_name: Hash[String, IR::GrammarSymbol]
42
+ @explicit_starts: Array[String]?
21
43
 
22
- @productions: Array[IR::Production]
44
+ @lexer_declaration: Frontend::AST::Lexer?
23
45
 
24
- @warnings: Array[IR::grammar_warning]
46
+ @grammar_tests: Array[IR::grammar_test]
25
47
 
26
- @helper_sequence: Integer
48
+ @on_error_reduce_groups: Array[Array[String]]
27
49
 
28
- @declared_tokens: Hash[String, IR::location]
50
+ @recovery_sync_tokens: Array[String]
29
51
 
30
- @precedence: Hash[String, IR::precedence]
52
+ @value_printers: Hash[String, IR::value_printer]
31
53
 
32
- @precedence_locations: Hash[String, IR::location]
54
+ @parser_parameters: Array[IR::parser_parameter]
33
55
 
34
- @options: IR::grammar_options
56
+ @conversions: Hash[String, String]
57
+
58
+ @expected_rr_conflicts: Integer?
35
59
 
36
60
  @expected_conflicts: Integer
37
61
 
38
- @conversions: Hash[String, String]
62
+ @options: IR::grammar_options
39
63
 
40
- @explicit_start: String?
64
+ @semantic_type_locations: Hash[String, IR::location]
41
65
 
42
- @start_name: String
66
+ @semantic_types: Hash[String, String]
67
+
68
+ @display_name_locations: Hash[String, IR::location]
69
+
70
+ @display_names: Hash[String, String]
71
+
72
+ @precedence_locations: Hash[String, IR::location]
73
+
74
+ @precedence: Hash[String, IR::precedence]
75
+
76
+ @node_shapes: Hash[String, Array[String]]
77
+
78
+ @inline_expansion_count: Integer
79
+
80
+ @max_inline_expansions: Integer
81
+
82
+ @inline_rule_by_symbol: Hash[Integer, String]
83
+
84
+ @inline_symbol_ids: Set[Integer]
85
+
86
+ @inline_rule_names: Set[String]
87
+
88
+ @rule_documentation: Hash[String, String]
89
+
90
+ @current_parameter_expansion: IR::parameter_expansion?
91
+
92
+ @max_parameter_specializations: Integer
93
+
94
+ @parameter_worklist_active: bool
95
+
96
+ @parameter_worklist: Array[Hash[Symbol, untyped]]
97
+
98
+ @parameter_specializations: Hash[[ String, Array[String] ], String]
99
+
100
+ @parameter_formals: Hash[String, Array[String]]
101
+
102
+ @parameter_templates: Hash[String, Array[Frontend::AST::Rule]]
43
103
 
44
104
  @start_location: Frontend::Location?
45
105
 
46
- # @rbs (Frontend::AST::Root ast, ?mode: Symbol | String) -> void
47
- def initialize: (Frontend::AST::Root ast, ?mode: Symbol | String) -> void
106
+ @start_name: String
107
+
108
+ @start_names: Array[String]
109
+
110
+ @declared_tokens: Hash[String, IR::location]
111
+
112
+ @helper_sequence: Integer
113
+
114
+ @warnings: Array[IR::grammar_warning]
115
+
116
+ @productions: Array[IR::Production]
117
+
118
+ @symbols_by_name: Hash[String, IR::GrammarSymbol]
119
+
120
+ @symbols: Array[IR::GrammarSymbol]
121
+
122
+ @mode: IR::grammar_mode
123
+
124
+ @current_include_chain: Array[IR::source_provenance]
125
+
126
+ @resolution: Frontend::Resolution?
127
+
128
+ @ast: Frontend::AST::Root
129
+
130
+ # @rbs (Frontend::AST::Root | Frontend::AST::Fragment | Frontend::Resolution input,
131
+ # ?mode: Symbol | String, ?max_parameter_specializations: Integer,
132
+ # ?max_inline_expansions: Integer) -> void
133
+ def initialize: (Frontend::AST::Root | Frontend::AST::Fragment | Frontend::Resolution input, ?mode: Symbol | String, ?max_parameter_specializations: Integer, ?max_inline_expansions: Integer) -> void
48
134
 
49
135
  # @rbs () -> IR::Grammar
50
136
  def normalize: () -> IR::Grammar
51
137
 
52
138
  private
53
139
 
140
+ # @rbs (Symbol name, untyped value) -> void
141
+ def validate_positive_limit!: (Symbol name, untyped value) -> void
142
+
54
143
  # @rbs () -> void
55
144
  def intern_reserved_symbols: () -> void
56
145
 
@@ -60,8 +149,21 @@ module Ibex
60
149
  # @rbs () -> void
61
150
  def intern_user_nonterminals: () -> void
62
151
 
63
- # @rbs (String name, Symbol kind, ?reserved: bool, ?location: IR::location?) -> IR::GrammarSymbol
64
- def intern: (String name, Symbol kind, ?reserved: bool, ?location: IR::location?) -> IR::GrammarSymbol
152
+ # @rbs () -> Array[String]
153
+ def normalized_start_names: () -> Array[String]
154
+
155
+ # @rbs (Frontend::AST::Rule rule) -> bool
156
+ def start_rule_candidate?: (Frontend::AST::Rule rule) -> bool
157
+
158
+ # @rbs (Frontend::AST::Rule rule) -> void
159
+ def intern_user_nonterminal: (Frontend::AST::Rule rule) -> void
160
+
161
+ # @rbs () -> Hash[String, String]
162
+ def validated_rule_documentation: () -> Hash[String, String]
163
+
164
+ # @rbs (String name, Symbol kind, ?reserved: bool, ?location: IR::location?,
165
+ # ?documentation: String?, ?metadata_name: String?) -> IR::GrammarSymbol
166
+ def intern: (String name, Symbol kind, ?reserved: bool, ?location: IR::location?, ?documentation: String?, ?metadata_name: String?) -> IR::GrammarSymbol
65
167
 
66
168
  # @rbs (String name) -> IR::GrammarSymbol?
67
169
  def symbol: (String name) -> IR::GrammarSymbol?
@@ -92,5 +194,8 @@ module Ibex
92
194
 
93
195
  # @rbs (IR::location? location, String message) -> bot
94
196
  def fail_hash: (IR::location? location, String message) -> bot
197
+
198
+ # @rbs () -> IR::production_expansion?
199
+ def resolved_expansion: () -> IR::production_expansion?
95
200
  end
96
201
  end