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,65 @@
1
+ # Generated from lib/ibex/ir/validator/base.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ module Validator
6
+ # Shared JSON-shape checks for the two version-1 IR documents.
7
+ class Base
8
+ POSITION: ::String
9
+
10
+ private
11
+
12
+ # @rbs (untyped value, String path, Array[String] required, ?Array[String] optional) -> Hash[String, untyped]
13
+ def record: (untyped value, String path, Array[String] required, ?Array[String] optional) -> Hash[String, untyped]
14
+
15
+ # @rbs (untyped value, String path) -> Hash[String, untyped]
16
+ def object: (untyped value, String path) -> Hash[String, untyped]
17
+
18
+ # @rbs (untyped value, String path) -> Array[untyped]
19
+ def array: (untyped value, String path) -> Array[untyped]
20
+
21
+ # @rbs (untyped value, String path) -> String
22
+ def string: (untyped value, String path) -> String
23
+
24
+ # @rbs (untyped value, String path) -> String
25
+ def nonempty_string: (untyped value, String path) -> String
26
+
27
+ # @rbs (untyped value, String path) -> Integer
28
+ def integer: (untyped value, String path) -> Integer
29
+
30
+ # @rbs (untyped value, String path) -> Integer
31
+ def nonnegative_integer: (untyped value, String path) -> Integer
32
+
33
+ # @rbs (untyped value, String path) -> bool
34
+ def boolean: (untyped value, String path) -> bool
35
+
36
+ # @rbs (untyped value, String path, untyped expected) -> void
37
+ def literal: (untyped value, String path, untyped expected) -> void
38
+
39
+ # @rbs (untyped value, String path, Array[String] values) -> String
40
+ def enum: (untyped value, String path, Array[String] values) -> String
41
+
42
+ # @rbs (untyped value, String path, ?nullable: bool) -> void
43
+ def location: (untyped value, String path, ?nullable: bool) -> void
44
+
45
+ # @rbs (untyped value, String path) -> Integer
46
+ def positive_integer: (untyped value, String path) -> Integer
47
+
48
+ # @rbs (untyped value, String path) -> String?
49
+ def nullable_string: (untyped value, String path) -> String?
50
+
51
+ # @rbs (untyped value, String path) -> void
52
+ def metadata: (untyped value, String path) -> void
53
+
54
+ # @rbs (Hash[String, untyped] value, String key, String path) -> untyped
55
+ def field: (Hash[String, untyped] value, String key, String path) -> untyped
56
+
57
+ # @rbs (String path, String key) -> String
58
+ def child_path: (String path, String key) -> String
59
+
60
+ # @rbs (String path, String message) -> bot
61
+ def invalid: (String path, String message) -> bot
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,184 @@
1
+ # Generated from lib/ibex/ir/validator/grammar.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ module Validator
6
+ # Structural and referential validation for a versioned Grammar IR JSON object.
7
+ # rubocop:disable Metrics/ClassLength -- inline type contracts accompany one cohesive document validator.
8
+ class GrammarDocument < Base
9
+ ROOT_REQUIRED: Array[String]
10
+
11
+ ROOT_OPTIONAL: Array[String]
12
+
13
+ V2_ROOT_REQUIRED: Array[String]
14
+
15
+ V2_ROOT_OPTIONAL: Array[String]
16
+
17
+ SYMBOL_REQUIRED: Array[String]
18
+
19
+ SYMBOL_OPTIONAL: Array[String]
20
+
21
+ V2_SYMBOL_REQUIRED: Array[String]
22
+
23
+ PRODUCTION_REQUIRED: Array[String]
24
+
25
+ V2_PRODUCTION_REQUIRED: Array[String]
26
+
27
+ V2_ACTION_REQUIRED: Array[String]
28
+
29
+ ORIGIN_KINDS: Array[String]
30
+
31
+ RUBY_KEYWORDS: Array[String]
32
+
33
+ attr_reader symbols_by_id: Hash[Integer, Hash[String, untyped]]
34
+
35
+ attr_reader symbols_by_name: Hash[String, Hash[String, untyped]]
36
+
37
+ attr_reader productions_by_id: Hash[Integer, Hash[String, untyped]]
38
+
39
+ @version: Integer
40
+
41
+ @path: String
42
+
43
+ @data: Hash[String, untyped]
44
+
45
+ # @rbs (Hash[String, untyped] data, ?path: String, ?version: Integer) -> void
46
+ def initialize: (Hash[String, untyped] data, ?path: String, ?version: Integer) -> void
47
+
48
+ # @rbs () -> self
49
+ def validate: () -> self
50
+
51
+ private
52
+
53
+ # @rbs () -> void
54
+ def validate_envelope: () -> void
55
+
56
+ # @rbs () -> void
57
+ def validate_header: () -> void
58
+
59
+ # @rbs () -> void
60
+ def validate_options: () -> void
61
+
62
+ # @rbs () -> void
63
+ def validate_parser_parameters: () -> void
64
+
65
+ # @rbs () -> void
66
+ def validate_value_printers: () -> void
67
+
68
+ # @rbs () -> void
69
+ def validate_grammar_tests: () -> void
70
+
71
+ # @rbs () -> void
72
+ def validate_symbols: () -> void
73
+
74
+ # @rbs (untyped value, Integer index) -> void
75
+ def validate_symbol: (untyped value, Integer index) -> void
76
+
77
+ # @rbs (untyped value, String path) -> void
78
+ def validate_precedence: (untyped value, String path) -> void
79
+
80
+ # @rbs () -> void
81
+ def validate_reserved_symbols: () -> void
82
+
83
+ # @rbs (Integer id, String name) -> void
84
+ def validate_reserved_symbol: (Integer id, String name) -> void
85
+
86
+ # @rbs () -> void
87
+ def validate_start: () -> void
88
+
89
+ # @rbs (String start) -> void
90
+ def validate_multiple_starts: (String start) -> void
91
+
92
+ # @rbs () -> void
93
+ def validate_recovery: () -> void
94
+
95
+ # @rbs (untyped values, String path, kind: String) -> void
96
+ def validate_recovery_symbols: (untyped values, String path, kind: String) -> void
97
+
98
+ # @rbs (untyped value, String path, kind: String, seen: Hash[String, bool]) -> void
99
+ def validate_recovery_symbol: (untyped value, String path, kind: String, seen: Hash[String, bool]) -> void
100
+
101
+ # @rbs () -> void
102
+ def validate_productions: () -> void
103
+
104
+ # @rbs (untyped value, Integer index) -> void
105
+ def validate_production: (untyped value, Integer index) -> void
106
+
107
+ # @rbs (untyped value, String path, rhs_length: Integer) -> void
108
+ def validate_node_annotation: (untyped value, String path, rhs_length: Integer) -> void
109
+
110
+ # @rbs (untyped value, String path) -> void
111
+ def validate_lhs: (untyped value, String path) -> void
112
+
113
+ # @rbs (untyped value, String path) -> void
114
+ def validate_rhs: (untyped value, String path) -> void
115
+
116
+ # @rbs (untyped value, String path, rhs_length: Integer) -> void
117
+ def validate_action: (untyped value, String path, rhs_length: Integer) -> void
118
+
119
+ # @rbs (untyped value, String path, limit: Integer) -> void
120
+ def validate_named_refs: (untyped value, String path, limit: Integer) -> void
121
+
122
+ # @rbs (untyped value, String path) -> void
123
+ def validate_precedence_override: (untyped value, String path) -> void
124
+
125
+ # @rbs (untyped value, String path) -> void
126
+ def validate_origin: (untyped value, String path) -> void
127
+
128
+ # @rbs (untyped value, String path) -> void
129
+ def validate_string_map: (untyped value, String path) -> void
130
+
131
+ # @rbs () -> void
132
+ def validate_warnings: () -> void
133
+
134
+ # @rbs (untyped value, String path) -> void
135
+ def validate_warning: (untyped value, String path) -> void
136
+
137
+ # @rbs (Hash[String, untyped] warning, String path) -> void
138
+ def validate_warning_symbol: (Hash[String, untyped] warning, String path) -> void
139
+
140
+ # @rbs (Hash[String, untyped] warning, String field_name, String path) -> void
141
+ def validate_warning_production: (Hash[String, untyped] warning, String field_name, String path) -> void
142
+
143
+ # @rbs () -> void
144
+ def validate_lexer: () -> void
145
+
146
+ # @rbs () -> void
147
+ def validate_user_code_chunks: () -> void
148
+
149
+ # @rbs (untyped value, String path, ?nullable: bool) -> void
150
+ def validate_source_provenance: (untyped value, String path, ?nullable: bool) -> void
151
+
152
+ # @rbs (untyped value, String path) -> void
153
+ def validate_byte_span: (untyped value, String path) -> void
154
+
155
+ # @rbs () -> void
156
+ def validate_migration: () -> void
157
+
158
+ # @rbs (untyped value, String path) -> void
159
+ def validate_expansion: (untyped value, String path) -> void
160
+
161
+ # @rbs (untyped value, String path) -> void
162
+ def validate_parameter_expansion: (untyped value, String path) -> void
163
+
164
+ # @rbs (untyped value, String path) -> void
165
+ def validate_inline_expansion: (untyped value, String path) -> void
166
+
167
+ # @rbs (untyped value, String path, rhs_length: Integer) -> void
168
+ def validate_action_composition: (untyped value, String path, rhs_length: Integer) -> void
169
+
170
+ # @rbs (untyped value, String path, Integer rhs_length, Array[untyped] fragments) -> void
171
+ def validate_action_composition_plan: (untyped value, String path, Integer rhs_length, Array[untyped] fragments) -> void
172
+
173
+ # @rbs (untyped value, String path, Integer physical, Integer step_index) -> void
174
+ def validate_action_composition_step: (untyped value, String path, Integer physical, Integer step_index) -> void
175
+
176
+ # @rbs (Array[untyped] inputs, String path, Integer limit) -> void
177
+ def validate_action_slots: (Array[untyped] inputs, String path, Integer limit) -> void
178
+
179
+ # @rbs (untyped value, String path, Integer physical) -> void
180
+ def validate_action_lookahead: (untyped value, String path, Integer physical) -> void
181
+ end
182
+ end
183
+ end
184
+ end
@@ -0,0 +1,37 @@
1
+ # Generated from lib/ibex/ir/validator/lexer.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ module Validator
6
+ # Structural validation for the independently versioned Lexer IR.
7
+ class LexerDocument < Base
8
+ ROOT_REQUIRED: Array[String]
9
+
10
+ RULE_REQUIRED: Array[String]
11
+
12
+ # @rbs (Hash[String, untyped] data, ?path: String) -> void
13
+ def initialize: (Hash[String, untyped] data, ?path: String) -> void
14
+
15
+ # @rbs () -> self
16
+ def validate: () -> self
17
+
18
+ private
19
+
20
+ # @rbs () -> void
21
+ def validate_states: () -> void
22
+
23
+ # @rbs () -> void
24
+ def validate_rules: () -> void
25
+
26
+ # @rbs (Hash[String, untyped] rule, String path, String options) -> void
27
+ def validate_pattern: (Hash[String, untyped] rule, String path, String options) -> void
28
+
29
+ # @rbs () -> void
30
+ def validate_warnings: () -> void
31
+
32
+ # @rbs () -> void
33
+ def validate_source_provenance: () -> void
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,16 @@
1
+ # Generated from lib/ibex/ir/validator.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ # Validates a serialized public IR document before constructing immutable IR objects.
6
+ module Validator
7
+ POSITION: ::String
8
+
9
+ # @rbs (String source) -> (Grammar | Automaton | Lexer)
10
+ def self?.validate: (String source) -> (Grammar | Automaton | Lexer)
11
+
12
+ # @rbs (Automaton automaton) -> void
13
+ def self?.validate_automaton_digest: (Automaton automaton) -> void
14
+ end
15
+ end
16
+ end
data/sig/ibex/ir.rbs CHANGED
@@ -8,9 +8,43 @@ module Ibex
8
8
 
9
9
  type named_ref = { name: String, index: Integer }
10
10
 
11
+ type byte_span = { start: Integer, end: Integer }
12
+
13
+ type source_provenance = { file: String?, root: String?, byte_span: byte_span? }
14
+
15
+ type parser_parameter = { name: String, semantic_type: String? }
16
+
17
+ type value_printer = { symbol: String, code: String, loc: location }
18
+
19
+ type recovery_policy = { sync_tokens: Array[String], on_error_reduce: Array[Array[String]] }
20
+
21
+ type grammar_test = { expectation: :accept | :reject, source: String, loc: location }
22
+
23
+ type node_annotation = { name: String, fields: Array[String], loc: location }
24
+
25
+ type lexer_warning = { type: :redos, rule: Integer, loc: location }
26
+
27
+ type parameter_expansion = { rule: String, arguments: Array[String] }
28
+
29
+ type inline_expansion = { rule: String }
30
+
31
+ type production_expansion = { parameter: parameter_expansion?, inline: inline_expansion?, include_chain: Array[source_provenance] }
32
+
33
+ type action_fragment = { kind: :rule | :inline, source: source_provenance? }
34
+
35
+ type action_composition_step = { kind: :rule | :inline, rule: String?, code: String?, loc: location, named_refs: Array[named_ref], context_length: Integer, inputs: Array[Integer], stack_inputs: Array[Integer], lookahead: Integer?, result_var: bool, result_type: String? }
36
+
37
+ type action_composition_plan = { version: Integer, physical: Integer, steps: Array[action_composition_step] }
38
+
39
+ type action_composition = { strategy: String, fragments: Array[action_fragment], ?plan: action_composition_plan }
40
+
41
+ type migration_metadata = { from_schema_version: Integer, unavailable: Array[String] }
42
+
11
43
  type user_code_chunks = Hash[String, Array[UserCodeChunk]]
12
44
 
13
- type grammar_options = { result_var: bool, omit_action_call: bool }
45
+ type grammar_options = { result_var: bool, omit_action_call: bool, ?cst: bool }
46
+
47
+ type grammar_mode = :default | :extended
14
48
 
15
49
  type grammar_warning = { type: Symbol, ?symbol: String, ?production: Integer, ?original: Integer, loc: location? }
16
50
 
@@ -28,13 +62,13 @@ module Ibex
28
62
 
29
63
  type conflict_resolution = { by: Symbol, chose: Symbol | Integer, ?associativity: Symbol }
30
64
 
31
- type shift_reduce_conflict = { type: :shift_reduce, symbol: String, shift_to: Integer, reduce: Integer, resolution: conflict_resolution }
65
+ type shift_reduce_conflict = { type: :shift_reduce, symbol: String, shift_to: Integer, reduce: Integer, resolution: conflict_resolution, ?midrule_origins: Array[location], ?entries: Array[String], ?composite: bool }
32
66
 
33
- type reduce_reduce_conflict = { type: :reduce_reduce, symbol: String, reductions: Array[Integer], resolution: conflict_resolution }
67
+ type reduce_reduce_conflict = { type: :reduce_reduce, symbol: String, reductions: Array[Integer], resolution: conflict_resolution, ?midrule_origins: Array[location], ?entries: Array[String], ?composite: bool }
34
68
 
35
69
  type conflict = shift_reduce_conflict | reduce_reduce_conflict
36
70
 
37
- type conflict_summary = { sr: Integer, resolved_sr: Integer, rr: Integer, expected_sr: Integer, expectation_met: bool }
71
+ type conflict_summary = { sr: Integer, resolved_sr: Integer, rr: Integer, expected_sr: Integer, expectation_met: bool, ?expected_rr: Integer, ?rr_expectation_met: bool }
38
72
 
39
73
  type interpretation = Hash[Symbol, untyped]
40
74
 
@@ -0,0 +1,20 @@
1
+ # Generated from lib/ibex/lalr/build_metrics.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ # Immutable structural measurements from one automaton build. These counts
6
+ # are intended for diagnostics and benchmarks, not parser behavior.
7
+ class BuildMetrics
8
+ attr_reader construction_states: Integer
9
+
10
+ attr_reader canonical_states: Integer?
11
+
12
+ attr_reader final_states: Integer
13
+
14
+ attr_reader strategy: Symbol
15
+
16
+ # @rbs (construction_states: Integer, canonical_states: Integer?, final_states: Integer, strategy: Symbol) -> void
17
+ def initialize: (construction_states: Integer, canonical_states: Integer?, final_states: Integer, strategy: Symbol) -> void
18
+ end
19
+ end
20
+ end
@@ -2,30 +2,61 @@
2
2
 
3
3
  module Ibex
4
4
  module LALR
5
- # Builds canonical LR(1) states and merges states with equal LR(0) cores.
5
+ # Builds deterministic SLR, direct LALR(1), or canonical LR(1) automata.
6
+ # rubocop:disable Metrics/ClassLength -- collection strategies share one action/conflict construction path.
6
7
  class Builder
7
8
  AUGMENTED_PRODUCTION: Integer
8
9
 
9
10
  ALGORITHMS: Array[Symbol]
10
11
 
12
+ LALR_STRATEGIES: Array[Symbol]
13
+
14
+ @canonical_key_radices: [ Integer, Integer, Integer ]?
15
+
16
+ @canonical_item_cache: Hash[Integer, Array[Array[lr_item?]?]]?
17
+
18
+ @canonical_suffix_lookahead_cache: Hash[Integer, Hash[Integer, Hash[Integer, Array[Integer]]]]
19
+
20
+ @attribute_entries: bool
21
+
22
+ @entry_isolation: bool
23
+
24
+ @start_names: Array[String]
25
+
26
+ @metrics: BuildMetrics?
27
+
11
28
  @resolver: ConflictResolver
12
29
 
13
30
  @productions_by_lhs: Hash[Integer, Array[IR::Production]]
14
31
 
15
32
  @sets: Analysis::Sets
16
33
 
34
+ @lalr_strategy: Symbol
35
+
17
36
  @algorithm: Symbol
18
37
 
19
38
  @grammar: IR::Grammar
20
39
 
21
- # @rbs (IR::Grammar grammar, ?algorithm: Symbol | String) -> void
22
- def initialize: (IR::Grammar grammar, ?algorithm: Symbol | String) -> void
40
+ attr_reader metrics: BuildMetrics?
41
+
42
+ # @rbs (IR::Grammar grammar, ?algorithm: Symbol | String, ?lalr_strategy: Symbol | String,
43
+ # ?entry_isolation: bool, ?starts: Array[String]?, ?attribute_entries: bool) -> void
44
+ def initialize: (IR::Grammar grammar, ?algorithm: Symbol | String, ?lalr_strategy: Symbol | String, ?entry_isolation: bool, ?starts: Array[String]?, ?attribute_entries: bool) -> void
23
45
 
24
46
  # @rbs () -> IR::Automaton
25
47
  def build: () -> IR::Automaton
26
48
 
27
49
  private
28
50
 
51
+ # @rbs (Array[IR::AutomatonState] states) -> IR::conflict_summary
52
+ def conflict_summary: (Array[IR::AutomatonState] states) -> IR::conflict_summary
53
+
54
+ # @rbs () -> [Array[packed_items], transitions, Integer, Integer?, Symbol]
55
+ def automaton_collection: () -> [ Array[packed_items], transitions, Integer, Integer?, Symbol ]
56
+
57
+ # @rbs () -> String
58
+ def algorithm_name: () -> String
59
+
29
60
  # @rbs () -> [Array[item_set], transitions]
30
61
  def canonical_collection: () -> [ Array[item_set], transitions ]
31
62
 
@@ -35,21 +66,21 @@ module Ibex
35
66
  # @rbs (Array[Integer] suffix, Integer inherited) -> Array[Integer]
36
67
  def suffix_lookaheads: (Array[Integer] suffix, Integer inherited) -> Array[Integer]
37
68
 
69
+ # @rbs (Integer production_id, Integer dot, Integer inherited) -> Array[Integer]
70
+ def canonical_suffix_lookaheads: (Integer production_id, Integer dot, Integer inherited) -> Array[Integer]
71
+
72
+ # @rbs (Integer production_id, Integer dot, Integer lookahead) -> lr_item
73
+ def canonical_item: (Integer production_id, Integer dot, Integer lookahead) -> lr_item
74
+
38
75
  # @rbs (item_set items, Array[lr_item] queue, lr_item item) -> void
39
76
  def enqueue_item: (item_set items, Array[lr_item] queue, lr_item item) -> void
40
77
 
41
- # @rbs (item_set items) -> Array[Integer]
42
- def next_symbols: (item_set items) -> Array[Integer]
43
-
44
- # @rbs (item_set items, Integer symbol_id) -> item_set
45
- def go_to: (item_set items, Integer symbol_id) -> item_set
78
+ # @rbs (item_set items) -> Hash[Integer, item_set]
79
+ def shifted_kernels: (item_set items) -> Hash[Integer, item_set]
46
80
 
47
81
  # @rbs (Array[item_set] states, transitions transitions) -> [Array[packed_items], transitions]
48
82
  def merge_lalr: (Array[item_set] states, transitions transitions) -> [ Array[packed_items], transitions ]
49
83
 
50
- # @rbs (Array[item_set] canonical_states, transitions canonical_transitions) -> [Array[packed_items], transitions]
51
- def automaton_items: (Array[item_set] canonical_states, transitions canonical_transitions) -> [ Array[packed_items], transitions ]
52
-
53
84
  # @rbs (Array[item_set] states) -> Array[packed_items]
54
85
  def pack_canonical_items: (Array[item_set] states) -> Array[packed_items]
55
86
 
@@ -65,6 +96,12 @@ module Ibex
65
96
  # @rbs (Integer state_id, Array[IR::AutomatonItem] items, Hash[Integer, Integer] transitions) -> IR::AutomatonState
66
97
  def build_state: (Integer state_id, Array[IR::AutomatonItem] items, Hash[Integer, Integer] transitions) -> IR::AutomatonState
67
98
 
99
+ # Conflict hashes are produced locally immediately before this boundary.
100
+ # Keeping the parameter untyped avoids duplicating both discriminated
101
+ # hash variants solely to add their common optional provenance field.
102
+ # @rbs (untyped conflict) -> IR::conflict
103
+ def attribute_midrule_conflict: (untyped conflict) -> IR::conflict
104
+
68
105
  # @rbs (Array[IR::AutomatonItem] items, Hash[Integer, Array[IR::parser_action]] candidates) -> void
69
106
  def add_completed_actions: (Array[IR::AutomatonItem] items, Hash[Integer, Array[IR::parser_action]] candidates) -> void
70
107
 
@@ -75,11 +112,54 @@ module Ibex
75
112
  # @rbs (Integer production_id) -> Array[Integer]
76
113
  def rhs_for: (Integer production_id) -> Array[Integer]
77
114
 
78
- # @rbs (item_set items) -> Array[item_core]
79
- def core_key: (item_set items) -> Array[item_core]
115
+ # @rbs () -> [Integer, Integer, Integer]
116
+ def canonical_key_radices: () -> [ Integer, Integer, Integer ]
117
+
118
+ # @rbs (item_set items) -> Array[Integer]
119
+ def core_key: (item_set items) -> Array[Integer]
120
+
121
+ # @rbs (item_set items) -> Array[Integer]
122
+ def item_key: (item_set items) -> Array[Integer]
123
+
124
+ # @rbs (String name) -> Integer
125
+ def augmented_production: (String name) -> Integer
126
+
127
+ # @rbs (Integer production_id) -> String
128
+ def start_name_for_augmented: (Integer production_id) -> String
129
+
130
+ # @rbs (Array[packed_items] items) -> Hash[String, Integer]
131
+ def entry_states_for: (Array[packed_items] items) -> Hash[String, Integer]
132
+
133
+ # @rbs () -> IR::Automaton
134
+ def build_isolated_automaton: () -> IR::Automaton
135
+
136
+ # @rbs (String name) -> [String, IR::Automaton, BuildMetrics]
137
+ def isolated_entry: (String name) -> [ String, IR::Automaton, BuildMetrics ]
138
+
139
+ # @rbs (IR::AutomatonState state, Integer offset, String entry) -> IR::AutomatonState
140
+ def offset_state: (IR::AutomatonState state, Integer offset, String entry) -> IR::AutomatonState
141
+
142
+ # @rbs (IR::parser_action action, Integer offset) -> IR::parser_action
143
+ def offset_action: (IR::parser_action action, Integer offset) -> IR::parser_action
144
+
145
+ # @rbs (IR::parser_action? action, Integer offset) -> IR::parser_action?
146
+ def offset_default_action: (IR::parser_action? action, Integer offset) -> IR::parser_action?
147
+
148
+ # @rbs (IR::conflict conflict, Integer offset, String entry) -> IR::conflict
149
+ def offset_conflict: (IR::conflict conflict, Integer offset, String entry) -> IR::conflict
150
+
151
+ # @rbs (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) ->
152
+ # Array[IR::AutomatonState]
153
+ def attribute_entry_conflicts: (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[IR::AutomatonState]
154
+
155
+ # @rbs (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[Array[String]]
156
+ def entry_reachability: (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[Array[String]]
157
+
158
+ # @rbs () -> Set[Array[untyped]]
159
+ def isolated_conflict_fingerprints: () -> Set[Array[untyped]]
80
160
 
81
- # @rbs (item_set items) -> Array[lr_item]
82
- def item_key: (item_set items) -> Array[lr_item]
161
+ # @rbs (IR::conflict conflict) -> Array[untyped]
162
+ def conflict_fingerprint: (IR::conflict conflict) -> Array[untyped]
83
163
  end
84
164
  end
85
165
  end
@@ -20,6 +20,8 @@ module Ibex
20
20
  | ({ ?states: Array[Integer], ?nodes: Array[derivation_node] }) -> instance
21
21
  end
22
22
 
23
+ @initial_state: Integer
24
+
23
25
  @input_tokens: Array[Integer]
24
26
 
25
27
  @explored: Integer
@@ -38,6 +40,8 @@ module Ibex
38
40
 
39
41
  @automaton: IR::Automaton
40
42
 
43
+ attr_reader explored: Integer
44
+
41
45
  # @rbs (IR::Automaton automaton, IR::AutomatonState state, IR::conflict conflict,
42
46
  # ?max_tokens: Integer, ?max_configurations: Integer) -> void
43
47
  def initialize: (IR::Automaton automaton, IR::AutomatonState state, IR::conflict conflict, ?max_tokens: Integer, ?max_configurations: Integer) -> void
@@ -45,6 +49,9 @@ module Ibex
45
49
  # @rbs () -> search_result?
46
50
  def call: () -> search_result?
47
51
 
52
+ # @rbs () -> bool
53
+ def exhausted?: () -> bool
54
+
48
55
  private
49
56
 
50
57
  # @rbs (Configuration current) -> Array[Configuration]
@@ -123,9 +130,6 @@ module Ibex
123
130
 
124
131
  # @rbs () -> Integer
125
132
  def count_configuration: () -> Integer
126
-
127
- # @rbs () -> bool
128
- def exhausted?: () -> bool
129
133
  end
130
134
  end
131
135
  end
@@ -14,6 +14,9 @@ module Ibex
14
14
  # @rbs () -> Array[IR::counterexample]
15
15
  def all: () -> Array[IR::counterexample]
16
16
 
17
+ # @rbs (Integer state_id, Integer conflict_index) -> IR::counterexample
18
+ def for_conflict: (Integer state_id, Integer conflict_index) -> IR::counterexample
19
+
17
20
  private
18
21
 
19
22
  # @rbs (IR::AutomatonState state, IR::conflict conflict) -> IR::counterexample
@@ -25,8 +28,8 @@ module Ibex
25
28
  # @rbs (IR::AutomatonState state, IR::conflict conflict) -> IR::counterexample
26
29
  def reachability_example: (IR::AutomatonState state, IR::conflict conflict) -> IR::counterexample
27
30
 
28
- # @rbs (Integer target) -> Array[Integer]
29
- def shortest_state_path: (Integer target) -> Array[Integer]
31
+ # @rbs (Integer target, IR::conflict conflict) -> Array[Integer]
32
+ def shortest_state_path: (Integer target, IR::conflict conflict) -> Array[Integer]
30
33
 
31
34
  # @rbs () -> Hash[Integer, Array[Integer]]
32
35
  def compute_shortest_yields: () -> Hash[Integer, Array[Integer]]