ibex 0.2.0 → 0.4.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 (461) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +100 -272
  3. data/docs/architecture.md +187 -35
  4. data/docs/bison-import.md +103 -0
  5. data/docs/comparison-policy.md +127 -0
  6. data/docs/configuration-model.md +59 -0
  7. data/docs/configuration-report.md +28 -0
  8. data/docs/conflict-explanation-reviews/v1/records/README.md +28 -0
  9. data/docs/conflict-explanation-study.md +62 -0
  10. data/docs/construction-profiling.md +157 -0
  11. data/docs/cst-migration.md +3 -4
  12. data/docs/cst.md +24 -0
  13. data/docs/decisions/0000-template.md +24 -0
  14. data/docs/decisions/0001-separate-ir-pipeline.md +34 -0
  15. data/docs/decisions/0002-opaque-user-code-boundary.md +32 -0
  16. data/docs/decisions/0003-self-hosted-grammar-frontend.md +32 -0
  17. data/docs/decisions/0004-shared-semantic-and-lossless-source-model.md +33 -0
  18. data/docs/decisions/0005-contained-grammar-composition.md +34 -0
  19. data/docs/decisions/0006-bounded-structural-grammar-lowering.md +32 -0
  20. data/docs/decisions/0007-shared-parser-construction-pipeline.md +33 -0
  21. data/docs/decisions/0008-versioned-runtime-package-boundary.md +36 -0
  22. data/docs/decisions/0009-isolated-parser-sessions.md +34 -0
  23. data/docs/decisions/0010-committed-runtime-observation.md +34 -0
  24. data/docs/decisions/0011-versioned-semantic-action-boundary.md +37 -0
  25. data/docs/decisions/0012-bounded-nonexecuting-analysis.md +37 -0
  26. data/docs/decisions/0013-transactional-generation-publication.md +37 -0
  27. data/docs/decisions/0014-versioned-generated-lexer.md +35 -0
  28. data/docs/decisions/0015-worker-isolated-browser-analysis.md +32 -0
  29. data/docs/decisions/0016-red-green-concrete-syntax.md +34 -0
  30. data/docs/decisions/0017-persistent-syntax-artifacts.md +35 -0
  31. data/docs/decisions/0018-conservative-incremental-syntax-reuse.md +38 -0
  32. data/docs/decisions/0019-runtime-syntax-session-boundary.md +51 -0
  33. data/docs/decisions/0020-grammar-ir-parser-contract.md +65 -0
  34. data/docs/decisions/0021-data-only-parser-table-sidecar.md +50 -0
  35. data/docs/decisions/0022-manifest-bound-verification-report.md +77 -0
  36. data/docs/decisions/0023-syntax-only-repair-results.md +48 -0
  37. data/docs/decisions/0024-direct-ielr-construction.md +42 -0
  38. data/docs/decisions/README.md +74 -0
  39. data/docs/declarative-configuration.md +274 -0
  40. data/docs/development.md +196 -2
  41. data/docs/direct-ielr-decision.md +120 -0
  42. data/docs/direct-multi-entry-decision.md +82 -0
  43. data/docs/editor-setup.md +2 -1
  44. data/docs/error-ux-review-rubric-v1.md +117 -0
  45. data/docs/error-ux-reviews/v1/records/README.md +22 -0
  46. data/docs/error-ux-round2-review-status-v1.json +27 -0
  47. data/docs/error-ux-round2-reviews/v1/records/README.md +30 -0
  48. data/docs/error-ux-round2-v1.json +1617 -0
  49. data/docs/error-ux-round2.md +111 -0
  50. data/docs/error-ux.md +54 -0
  51. data/docs/getting-started.md +80 -0
  52. data/docs/grammar-reference.md +184 -13
  53. data/docs/ielr-design.md +43 -0
  54. data/docs/ielr.md +92 -0
  55. data/docs/impact.md +101 -0
  56. data/docs/ja/bison-import.md +51 -0
  57. data/docs/ja/stable-api.md +53 -0
  58. data/docs/lexer-construction-profile.md +109 -0
  59. data/docs/lexer-migration.md +5 -0
  60. data/docs/maturity.md +129 -0
  61. data/docs/project-site-strategy.md +54 -0
  62. data/docs/racc-migration-evidence.md +45 -0
  63. data/docs/racc-migration.md +11 -0
  64. data/docs/release-readiness.md +126 -68
  65. data/docs/repair-semantics.md +123 -0
  66. data/docs/runtime-abi-evolution.md +310 -0
  67. data/docs/stability.md +145 -34
  68. data/docs/status.md +43 -0
  69. data/docs/syntax-sessions.md +183 -0
  70. data/docs/table-artifact.md +125 -0
  71. data/docs/test-interactions.md +219 -0
  72. data/docs/verification-report.md +137 -0
  73. data/docs/verifier-trust-boundary.md +199 -0
  74. data/docs/workloads.md +132 -0
  75. data/lib/ibex/analysis/digraph.rb +128 -0
  76. data/lib/ibex/analysis/sets.rb +14 -0
  77. data/lib/ibex/analysis.rb +1 -0
  78. data/lib/ibex/bison_import/importer.rb +516 -0
  79. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  80. data/lib/ibex/bison_import.rb +200 -0
  81. data/lib/ibex/bounded_subprocess.rb +171 -0
  82. data/lib/ibex/cli/ambiguity.rb +14 -5
  83. data/lib/ibex/cli/analysis.rb +134 -0
  84. data/lib/ibex/cli/bison_import.rb +121 -0
  85. data/lib/ibex/cli/config.rb +128 -0
  86. data/lib/ibex/cli/diagnostics.rb +31 -11
  87. data/lib/ibex/cli/documentation.rb +11 -8
  88. data/lib/ibex/cli/equiv.rb +169 -0
  89. data/lib/ibex/cli/error_messages.rb +11 -4
  90. data/lib/ibex/cli/explain.rb +14 -5
  91. data/lib/ibex/cli/fix.rb +203 -0
  92. data/lib/ibex/cli/formatting.rb +11 -10
  93. data/lib/ibex/cli/fuzz.rb +200 -0
  94. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  95. data/lib/ibex/cli/generation_artifacts.rb +53 -2
  96. data/lib/ibex/cli/generation_error_messages.rb +1 -1
  97. data/lib/ibex/cli/grammar_tests.rb +32 -14
  98. data/lib/ibex/cli/impact.rb +393 -0
  99. data/lib/ibex/cli/ir_tools.rb +5 -61
  100. data/lib/ibex/cli/outputs.rb +60 -33
  101. data/lib/ibex/cli/reduce.rb +202 -0
  102. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  103. data/lib/ibex/cli/samples.rb +49 -23
  104. data/lib/ibex/cli/verify.rb +116 -0
  105. data/lib/ibex/cli/watch.rb +6 -5
  106. data/lib/ibex/cli.rb +362 -56
  107. data/lib/ibex/codegen/action_locations.rb +1 -1
  108. data/lib/ibex/codegen/action_method_source.rb +5 -6
  109. data/lib/ibex/codegen/action_source.rb +3 -2
  110. data/lib/ibex/codegen/ambiguity.rb +5 -4
  111. data/lib/ibex/codegen/explain.rb +123 -55
  112. data/lib/ibex/codegen/generated_action_abi.rb +10 -5
  113. data/lib/ibex/codegen/rbs.rb +15 -7
  114. data/lib/ibex/codegen/report.rb +25 -13
  115. data/lib/ibex/codegen/ruby.rb +28 -64
  116. data/lib/ibex/codegen/ruby_actions.rb +9 -6
  117. data/lib/ibex/codegen/ruby_syntax.rb +15 -9
  118. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  119. data/lib/ibex/configuration/explanation.rb +421 -0
  120. data/lib/ibex/configuration/inspector.rb +232 -0
  121. data/lib/ibex/configuration.rb +580 -0
  122. data/lib/ibex/coverage/collector.rb +21 -11
  123. data/lib/ibex/coverage/event_stream.rb +13 -7
  124. data/lib/ibex/coverage/report.rb +26 -18
  125. data/lib/ibex/coverage/runtime_event_validator.rb +30 -21
  126. data/lib/ibex/delta_reducer.rb +99 -0
  127. data/lib/ibex/diff.rb +141 -0
  128. data/lib/ibex/equiv/machine.rb +135 -0
  129. data/lib/ibex/equiv.rb +373 -0
  130. data/lib/ibex/fix.rb +557 -0
  131. data/lib/ibex/frontend/ast.rb +22 -2
  132. data/lib/ibex/frontend/bootstrap_parser.rb +6 -13
  133. data/lib/ibex/frontend/diagnostic.rb +1 -1
  134. data/lib/ibex/frontend/formatter.rb +72 -26
  135. data/lib/ibex/frontend/generated_parser.rb +147 -117
  136. data/lib/ibex/frontend/generated_parser_base.rb +7 -3
  137. data/lib/ibex/frontend/generated_parser_includes.rb +1 -11
  138. data/lib/ibex/frontend/generation.rb +1 -1
  139. data/lib/ibex/frontend/parser/declarations.rb +17 -2
  140. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  141. data/lib/ibex/frontend/regenerator.rb +1 -0
  142. data/lib/ibex/frontend/resolution.rb +2 -1
  143. data/lib/ibex/frontend/resolver.rb +1 -1
  144. data/lib/ibex/frontend/rule_documentation.rb +2 -1
  145. data/lib/ibex/frontend/source_cursor.rb +2 -2
  146. data/lib/ibex/frontend/source_span.rb +9 -1
  147. data/lib/ibex/frontend/token_adapter/declaration_state.rb +38 -6
  148. data/lib/ibex/frontend/token_adapter.rb +10 -0
  149. data/lib/ibex/frontend.rb +1 -0
  150. data/lib/ibex/fuzz.rb +219 -0
  151. data/lib/ibex/generation_input.rb +1 -1
  152. data/lib/ibex/generation_manifest.rb +36 -25
  153. data/lib/ibex/generation_transaction.rb +1 -1
  154. data/lib/ibex/generation_transaction_recovery.rb +4 -4
  155. data/lib/ibex/generation_transaction_validation.rb +2 -2
  156. data/lib/ibex/grammar_tests.rb +1 -1
  157. data/lib/ibex/impact/action_impact.rb +148 -0
  158. data/lib/ibex/impact/automaton_impact.rb +57 -0
  159. data/lib/ibex/impact/coverage_impact.rb +53 -0
  160. data/lib/ibex/impact/graph.rb +132 -0
  161. data/lib/ibex/impact/propagation.rb +147 -0
  162. data/lib/ibex/impact/report.rb +273 -0
  163. data/lib/ibex/impact/seeds.rb +69 -0
  164. data/lib/ibex/impact/severity.rb +139 -0
  165. data/lib/ibex/impact.rb +16 -0
  166. data/lib/ibex/ir/automaton_ir.rb +61 -19
  167. data/lib/ibex/ir/grammar_ir.rb +76 -45
  168. data/lib/ibex/ir/lexer_ir.rb +5 -5
  169. data/lib/ibex/ir/parser_contract.rb +135 -0
  170. data/lib/ibex/ir/serialize.rb +203 -76
  171. data/lib/ibex/ir/validator/automaton.rb +64 -34
  172. data/lib/ibex/ir/validator/base.rb +51 -33
  173. data/lib/ibex/ir/validator/grammar.rb +113 -83
  174. data/lib/ibex/ir/validator/lexer.rb +2 -2
  175. data/lib/ibex/ir/validator.rb +2 -1
  176. data/lib/ibex/ir.rb +16 -3
  177. data/lib/ibex/lalr/build_metrics.rb +50 -2
  178. data/lib/ibex/lalr/builder.rb +191 -56
  179. data/lib/ibex/lalr/conflict_search.rb +15 -4
  180. data/lib/ibex/lalr/counterexample.rb +19 -14
  181. data/lib/ibex/lalr/direct_lookaheads.rb +110 -57
  182. data/lib/ibex/lalr/goto_follows.rb +229 -0
  183. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  184. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  185. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  186. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  187. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  188. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  189. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  190. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  191. data/lib/ibex/lalr/ielr_partition.rb +22 -8
  192. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  193. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  194. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  195. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  196. data/lib/ibex/lalr.rb +52 -1
  197. data/lib/ibex/location.rb +3 -3
  198. data/lib/ibex/lsp/document_handlers.rb +9 -7
  199. data/lib/ibex/lsp/initialization_handlers.rb +9 -7
  200. data/lib/ibex/lsp/navigation_handlers.rb +25 -11
  201. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  202. data/lib/ibex/lsp/position_codec.rb +6 -2
  203. data/lib/ibex/lsp/request_handlers.rb +3 -2
  204. data/lib/ibex/lsp/request_support.rb +14 -7
  205. data/lib/ibex/lsp/server.rb +13 -11
  206. data/lib/ibex/lsp/symbol_index.rb +13 -13
  207. data/lib/ibex/lsp/symbol_index_builder.rb +30 -20
  208. data/lib/ibex/lsp/symbol_occurrence.rb +8 -2
  209. data/lib/ibex/lsp/transport.rb +13 -3
  210. data/lib/ibex/lsp/workspace.rb +5 -4
  211. data/lib/ibex/lsp/workspace_analyzer.rb +1 -1
  212. data/lib/ibex/lsp.rb +1 -0
  213. data/lib/ibex/messages/en.yml +28 -0
  214. data/lib/ibex/messages/ja.yml +28 -0
  215. data/lib/ibex/messages.rb +68 -0
  216. data/lib/ibex/metrics.rb +175 -0
  217. data/lib/ibex/normalize/declarations.rb +2 -0
  218. data/lib/ibex/normalize/diagnostics.rb +63 -38
  219. data/lib/ibex/normalize/expander.rb +5 -4
  220. data/lib/ibex/normalize/expression.rb +8 -6
  221. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  222. data/lib/ibex/normalize/inline_expansion.rb +100 -49
  223. data/lib/ibex/normalize/lexer.rb +3 -3
  224. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +11 -10
  225. data/lib/ibex/normalize/parameter_lowering.rb +40 -23
  226. data/lib/ibex/normalize/parameters.rb +31 -4
  227. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  228. data/lib/ibex/normalize.rb +10 -20
  229. data/lib/ibex/racc_migration/report.rb +6 -3
  230. data/lib/ibex/rake_task.rb +1 -1
  231. data/lib/ibex/samples.rb +43 -13
  232. data/lib/ibex/table_artifact/builder.rb +266 -0
  233. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  234. data/lib/ibex/table_artifact/document.rb +39 -0
  235. data/lib/ibex/table_artifact/executor.rb +187 -0
  236. data/lib/ibex/table_artifact/serializer.rb +57 -0
  237. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  238. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  239. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  240. data/lib/ibex/table_artifact/validator.rb +253 -0
  241. data/lib/ibex/table_artifact.rb +88 -0
  242. data/lib/ibex/table_simulation/result.rb +6 -2
  243. data/lib/ibex/table_simulation/step.rb +3 -1
  244. data/lib/ibex/tables.rb +14 -0
  245. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  246. data/lib/ibex/verification_report/builder.rb +159 -0
  247. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  248. data/lib/ibex/verification_report/logical_path.rb +68 -0
  249. data/lib/ibex/verification_report/validator.rb +329 -0
  250. data/lib/ibex/verification_report.rb +69 -0
  251. data/lib/ibex/verify/action_correspondence.rb +138 -0
  252. data/lib/ibex/verify/language_witness.rb +295 -0
  253. data/lib/ibex/verify/reference_collection.rb +190 -0
  254. data/lib/ibex/verify/result.rb +73 -0
  255. data/lib/ibex/verify/verifier.rb +598 -0
  256. data/lib/ibex/verify.rb +15 -0
  257. data/lib/ibex/version.rb +1 -1
  258. data/lib/ibex/watch/runner.rb +10 -1
  259. data/lib/ibex/watch/source_snapshot.rb +13 -8
  260. data/lib/ibex.rb +11 -0
  261. data/schema/{automaton-ir-v1.schema.json → automaton-ir-definitions.schema.json} +6 -6
  262. data/schema/{automaton-ir-v2.schema.json → automaton-ir.schema.json} +14 -7
  263. data/schema/bison-import-v1.schema.json +106 -0
  264. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  265. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  266. data/schema/construction-profile-v1.schema.json +779 -0
  267. data/schema/diff-v1.schema.json +41 -0
  268. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  269. data/schema/equiv-v1.schema.json +64 -0
  270. data/schema/error-ux-review-v1.schema.json +609 -0
  271. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  272. data/schema/error-ux-round2-v1.schema.json +519 -0
  273. data/schema/explain-v1.schema.json +63 -1
  274. data/schema/fix-v1.schema.json +64 -0
  275. data/schema/fix-v2.schema.json +66 -0
  276. data/schema/fix-v3.schema.json +101 -0
  277. data/schema/fuzz-regression-v1.schema.json +79 -0
  278. data/schema/fuzz-v1.schema.json +114 -0
  279. data/schema/{grammar-ir-v2.schema.json → grammar-ir-extensions.schema.json} +20 -65
  280. data/schema/{grammar-ir-v1.schema.json → grammar-ir-foundation.schema.json} +3 -3
  281. data/schema/grammar-ir.schema.json +271 -0
  282. data/schema/ielr-benchmark-v1.schema.json +85 -0
  283. data/schema/impact-v1.schema.json +208 -0
  284. data/schema/lexer-profile-v1.schema.json +491 -0
  285. data/schema/metrics-v1.schema.json +60 -0
  286. data/schema/reduce-v1.schema.json +22 -0
  287. data/schema/reduce-v2.schema.json +63 -0
  288. data/schema/table-artifact-v1.schema.json +377 -0
  289. data/schema/verification-report-v1.schema.json +222 -0
  290. data/schema/verify-v1.schema.json +42 -0
  291. data/sig/ibex/analysis/digraph.rbs +19 -0
  292. data/sig/ibex/analysis/sets.rbs +10 -0
  293. data/sig/ibex/bison_import/importer.rbs +140 -0
  294. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  295. data/sig/ibex/bison_import.rbs +95 -0
  296. data/sig/ibex/bounded_subprocess.rbs +76 -0
  297. data/sig/ibex/cli/ambiguity.rbs +6 -0
  298. data/sig/ibex/cli/analysis.rbs +43 -0
  299. data/sig/ibex/cli/bison_import.rbs +32 -0
  300. data/sig/ibex/cli/config.rbs +35 -0
  301. data/sig/ibex/cli/diagnostics.rbs +16 -3
  302. data/sig/ibex/cli/documentation.rbs +5 -1
  303. data/sig/ibex/cli/equiv.rbs +49 -0
  304. data/sig/ibex/cli/error_messages.rbs +6 -0
  305. data/sig/ibex/cli/explain.rbs +6 -0
  306. data/sig/ibex/cli/fix.rbs +53 -0
  307. data/sig/ibex/cli/formatting.rbs +5 -1
  308. data/sig/ibex/cli/fuzz.rbs +47 -0
  309. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  310. data/sig/ibex/cli/generation_artifacts.rbs +21 -2
  311. data/sig/ibex/cli/generation_error_messages.rbs +2 -2
  312. data/sig/ibex/cli/grammar_tests.rbs +15 -3
  313. data/sig/ibex/cli/impact.rbs +95 -0
  314. data/sig/ibex/cli/ir_tools.rbs +7 -19
  315. data/sig/ibex/cli/outputs.rbs +9 -3
  316. data/sig/ibex/cli/reduce.rbs +60 -0
  317. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  318. data/sig/ibex/cli/samples.rbs +8 -0
  319. data/sig/ibex/cli/verify.rbs +28 -0
  320. data/sig/ibex/cli/watch.rbs +2 -2
  321. data/sig/ibex/cli.rbs +79 -5
  322. data/sig/ibex/codegen/action_method_source.rbs +4 -4
  323. data/sig/ibex/codegen/explain.rbs +45 -25
  324. data/sig/ibex/codegen/generated_action_abi.rbs +14 -10
  325. data/sig/ibex/codegen/rbs.rbs +12 -10
  326. data/sig/ibex/codegen/report.rbs +12 -12
  327. data/sig/ibex/codegen/ruby.rbs +18 -15
  328. data/sig/ibex/codegen/ruby_actions.rbs +6 -6
  329. data/sig/ibex/codegen/ruby_syntax.rbs +10 -8
  330. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  331. data/sig/ibex/configuration/explanation.rbs +195 -0
  332. data/sig/ibex/configuration/inspector.rbs +53 -0
  333. data/sig/ibex/configuration.rbs +242 -0
  334. data/sig/ibex/coverage/collector.rbs +16 -14
  335. data/sig/ibex/coverage/event_stream.rbs +12 -10
  336. data/sig/ibex/coverage/report.rbs +20 -18
  337. data/sig/ibex/coverage/runtime_event_validator.rbs +38 -36
  338. data/sig/ibex/delta_reducer.rbs +38 -0
  339. data/sig/ibex/diff.rbs +47 -0
  340. data/sig/ibex/equiv/machine.rbs +54 -0
  341. data/sig/ibex/equiv.rbs +129 -0
  342. data/sig/ibex/fix.rbs +138 -0
  343. data/sig/ibex/frontend/ast.rbs +33 -7
  344. data/sig/ibex/frontend/bootstrap_parser.rbs +2 -0
  345. data/sig/ibex/frontend/diagnostic.rbs +2 -2
  346. data/sig/ibex/frontend/formatter.rbs +38 -30
  347. data/sig/ibex/frontend/generated_parser.rbs +87 -77
  348. data/sig/ibex/frontend/generated_parser_base.rbs +4 -2
  349. data/sig/ibex/frontend/parser/declarations.rbs +3 -0
  350. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  351. data/sig/ibex/frontend/resolution.rbs +3 -2
  352. data/sig/ibex/frontend/source_cursor.rbs +2 -2
  353. data/sig/ibex/frontend/source_span.rbs +5 -2
  354. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +13 -1
  355. data/sig/ibex/frontend/token_adapter.rbs +6 -0
  356. data/sig/ibex/fuzz.rbs +71 -0
  357. data/sig/ibex/generation_input.rbs +2 -2
  358. data/sig/ibex/generation_manifest.rbs +35 -32
  359. data/sig/ibex/generation_transaction_recovery.rbs +2 -2
  360. data/sig/ibex/generation_transaction_validation.rbs +2 -2
  361. data/sig/ibex/grammar_tests.rbs +2 -2
  362. data/sig/ibex/impact/action_impact.rbs +58 -0
  363. data/sig/ibex/impact/automaton_impact.rbs +37 -0
  364. data/sig/ibex/impact/coverage_impact.rbs +28 -0
  365. data/sig/ibex/impact/graph.rbs +67 -0
  366. data/sig/ibex/impact/propagation.rbs +56 -0
  367. data/sig/ibex/impact/report.rbs +107 -0
  368. data/sig/ibex/impact/seeds.rbs +36 -0
  369. data/sig/ibex/impact/severity.rbs +55 -0
  370. data/sig/ibex/impact.rbs +6 -0
  371. data/sig/ibex/ir/automaton_ir.rbs +30 -11
  372. data/sig/ibex/ir/grammar_ir.rbs +41 -27
  373. data/sig/ibex/ir/lexer_ir.rbs +8 -8
  374. data/sig/ibex/ir/parser_contract.rbs +69 -0
  375. data/sig/ibex/ir/serialize.rbs +63 -28
  376. data/sig/ibex/ir/validator/automaton.rbs +47 -44
  377. data/sig/ibex/ir/validator/base.rbs +35 -31
  378. data/sig/ibex/ir/validator/grammar.rbs +78 -67
  379. data/sig/ibex/ir/validator/lexer.rbs +4 -4
  380. data/sig/ibex/ir.rbs +9 -3
  381. data/sig/ibex/lalr/build_metrics.rbs +42 -2
  382. data/sig/ibex/lalr/builder.rbs +75 -24
  383. data/sig/ibex/lalr/conflict_search.rbs +5 -2
  384. data/sig/ibex/lalr/counterexample.rbs +17 -14
  385. data/sig/ibex/lalr/direct_lookaheads.rbs +35 -28
  386. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  387. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  388. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  389. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  390. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  391. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  392. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  393. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  394. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  395. data/sig/ibex/lalr/ielr_partition.rbs +17 -5
  396. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  397. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  398. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  399. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  400. data/sig/ibex/lalr.rbs +11 -1
  401. data/sig/ibex/location.rbs +6 -6
  402. data/sig/ibex/lsp/document_handlers.rbs +8 -8
  403. data/sig/ibex/lsp/initialization_handlers.rbs +12 -12
  404. data/sig/ibex/lsp/navigation_handlers.rbs +15 -12
  405. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  406. data/sig/ibex/lsp/position_codec.rbs +8 -4
  407. data/sig/ibex/lsp/request_handlers.rbs +4 -4
  408. data/sig/ibex/lsp/request_support.rbs +8 -8
  409. data/sig/ibex/lsp/server.rbs +16 -16
  410. data/sig/ibex/lsp/symbol_index.rbs +20 -21
  411. data/sig/ibex/lsp/symbol_index_builder.rbs +9 -8
  412. data/sig/ibex/lsp/symbol_occurrence.rbs +11 -5
  413. data/sig/ibex/lsp/transport.rbs +18 -6
  414. data/sig/ibex/lsp/workspace.rbs +3 -2
  415. data/sig/ibex/lsp/workspace_analyzer.rbs +1 -1
  416. data/sig/ibex/messages.rbs +26 -0
  417. data/sig/ibex/metrics.rbs +50 -0
  418. data/sig/ibex/normalize/diagnostics.rbs +4 -4
  419. data/sig/ibex/normalize/expander.rbs +2 -2
  420. data/sig/ibex/normalize/expression.rbs +10 -8
  421. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  422. data/sig/ibex/normalize/inline_expansion.rbs +59 -50
  423. data/sig/ibex/normalize/lexer.rbs +4 -4
  424. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +15 -14
  425. data/sig/ibex/normalize/parameter_lowering.rbs +18 -18
  426. data/sig/ibex/normalize/parameters.rbs +13 -8
  427. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  428. data/sig/ibex/normalize.rbs +11 -5
  429. data/sig/ibex/racc_migration/report.rbs +8 -6
  430. data/sig/ibex/rake_task.rbs +1 -1
  431. data/sig/ibex/samples.rbs +13 -4
  432. data/sig/ibex/table_artifact/builder.rbs +93 -0
  433. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  434. data/sig/ibex/table_artifact/document.rbs +27 -0
  435. data/sig/ibex/table_artifact/executor.rbs +66 -0
  436. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  437. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  438. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  439. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  440. data/sig/ibex/table_artifact/validator.rbs +66 -0
  441. data/sig/ibex/table_artifact.rbs +32 -0
  442. data/sig/ibex/table_simulation/result.rbs +8 -4
  443. data/sig/ibex/table_simulation/step.rbs +4 -2
  444. data/sig/ibex/tables.rbs +10 -9
  445. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  446. data/sig/ibex/verification_report/builder.rbs +53 -0
  447. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  448. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  449. data/sig/ibex/verification_report/validator.rbs +114 -0
  450. data/sig/ibex/verification_report.rbs +44 -0
  451. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  452. data/sig/ibex/verify/language_witness.rbs +112 -0
  453. data/sig/ibex/verify/reference_collection.rbs +63 -0
  454. data/sig/ibex/verify/result.rbs +52 -0
  455. data/sig/ibex/verify/verifier.rbs +170 -0
  456. data/sig/ibex/verify.rbs +6 -0
  457. data/sig/ibex/watch/runner.rbs +12 -2
  458. data/sig/ibex/watch/source_snapshot.rbs +13 -9
  459. metadata +254 -12
  460. data/lib/ibex/ir/migration.rb +0 -120
  461. data/sig/ibex/ir/migration.rbs +0 -34
@@ -9,34 +9,32 @@ module Ibex
9
9
 
10
10
  EMPTY_PRODUCTIONS: Array[IR::Production]
11
11
 
12
- EMPTY_NODES: Array[lookahead_node]
12
+ EMPTY_NODES: Array[Integer]
13
13
 
14
- @terminal_masks: Array[Integer]
14
+ attr_reader lr0_state_count: Integer?
15
15
 
16
- @terminal_ids: Array[Integer]
16
+ attr_reader lr0_item_count: Integer?
17
17
 
18
- @production_item_cores: Array[Array[item_core]]
18
+ attr_reader propagation_edge_count: Integer?
19
19
 
20
- @augmented_item_cores: Array[item_core]
20
+ attr_reader states: Array[core_set]
21
21
 
22
- @production_rhs: Array[Array[Integer]]
22
+ attr_reader transitions: transitions
23
23
 
24
- @augmented_rhs: Array[Integer]
25
-
26
- @productions_by_lhs: Hash[Integer, Array[IR::Production]]
27
-
28
- @sets: Analysis::Sets
29
-
30
- @grammar: IR::Grammar
31
-
32
- # @rbs (IR::Grammar grammar, Analysis::Sets sets) -> void
33
- def initialize: (IR::Grammar grammar, Analysis::Sets sets) -> void
24
+ # @rbs (IR::Grammar grammar, Analysis::Sets sets, ?starts: Array[String]?, ?profile: bool) -> void
25
+ def initialize: (IR::Grammar grammar, Analysis::Sets sets, ?starts: Array[String]?, ?profile: bool) -> void
34
26
 
35
27
  # @rbs () -> [Array[packed_items], transitions]
36
28
  def build: () -> [ Array[packed_items], transitions ]
37
29
 
30
+ # @rbs (Integer index) -> Integer
31
+ def augmented_production: (Integer index) -> Integer
32
+
38
33
  private
39
34
 
35
+ # @rbs () -> void
36
+ def initialize_item_encoding: () -> void
37
+
40
38
  # @rbs () -> [Array[core_set], transitions]
41
39
  def lr0_collection: () -> [ Array[core_set], transitions ]
42
40
 
@@ -50,22 +48,25 @@ module Ibex
50
48
  def empty_lookaheads: (Array[core_set] states) -> Array[packed_items]
51
49
 
52
50
  # @rbs (Array[core_set] states, transitions transitions, Array[packed_items] lookaheads) ->
53
- # Hash[lookahead_node, Array[lookahead_node]]
54
- def propagation_graph: (Array[core_set] states, transitions transitions, Array[packed_items] lookaheads) -> Hash[lookahead_node, Array[lookahead_node]]
51
+ # Hash[Integer, Array[Integer]]
52
+ def propagation_graph: (Array[core_set] states, transitions transitions, Array[packed_items] lookaheads) -> Hash[Integer, Array[Integer]]
55
53
 
56
- # @rbs (Hash[lookahead_node, Array[lookahead_node]] edges, transitions transitions,
54
+ # @rbs (Hash[Integer, Array[Integer]] edges, transitions transitions,
57
55
  # Integer state_id, Integer production_id, Integer dot) -> void
58
- def add_transition_edge: (Hash[lookahead_node, Array[lookahead_node]] edges, transitions transitions, Integer state_id, Integer production_id, Integer dot) -> void
56
+ def add_transition_edge: (Hash[Integer, Array[Integer]] edges, transitions transitions, Integer state_id, Integer production_id, Integer dot) -> void
59
57
 
60
- # @rbs (Hash[lookahead_node, Array[lookahead_node]] edges, Array[packed_items] lookaheads,
58
+ # @rbs (Hash[Integer, Array[Integer]] edges, Array[packed_items] lookaheads,
61
59
  # Integer state_id, Integer production_id, Integer dot) -> void
62
- def add_closure_relations: (Hash[lookahead_node, Array[lookahead_node]] edges, Array[packed_items] lookaheads, Integer state_id, Integer production_id, Integer dot) -> void
60
+ def add_closure_relations: (Hash[Integer, Array[Integer]] edges, Array[packed_items] lookaheads, Integer state_id, Integer production_id, Integer dot) -> void
61
+
62
+ # @rbs (Array[packed_items] lookaheads, Hash[Integer, Array[Integer]] edges) -> void
63
+ def propagate: (Array[packed_items] lookaheads, Hash[Integer, Array[Integer]] edges) -> void
63
64
 
64
- # @rbs (Array[packed_items] lookaheads, Hash[lookahead_node, Array[lookahead_node]] edges) -> void
65
- def propagate: (Array[packed_items] lookaheads, Hash[lookahead_node, Array[lookahead_node]] edges) -> void
65
+ # @rbs (Array[packed_items] lookaheads, Integer node) -> Set[Integer]
66
+ def node_set: (Array[packed_items] lookaheads, Integer node) -> Set[Integer]
66
67
 
67
- # @rbs (Array[packed_items] lookaheads, lookahead_node node) -> Set[Integer]
68
- def node_set: (Array[packed_items] lookaheads, lookahead_node node) -> Set[Integer]
68
+ # @rbs (Integer state_id, Integer production_id, Integer dot) -> Integer
69
+ def node_id: (Integer state_id, Integer production_id, Integer dot) -> Integer
69
70
 
70
71
  # @rbs (Integer bits) -> Array[Integer]
71
72
  def terminal_ids: (Integer bits) -> Array[Integer]
@@ -79,8 +80,14 @@ module Ibex
79
80
  # @rbs (Integer production_id, Integer dot) -> item_core
80
81
  def item_core: (Integer production_id, Integer dot) -> item_core
81
82
 
82
- # @rbs (core_set items) -> Array[item_core]
83
- def item_key: (core_set items) -> Array[item_core]
83
+ # @rbs (core_set items) -> Array[Integer]
84
+ def item_key: (core_set items) -> Array[Integer]
85
+
86
+ # @rbs (String name) -> Integer
87
+ def start_index: (String name) -> Integer
88
+
89
+ # @rbs () -> Array[String]
90
+ def grammar_starts: () -> Array[String]
84
91
  end
85
92
  end
86
93
  end
@@ -0,0 +1,89 @@
1
+ # Generated from lib/ibex/lalr/goto_follows.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ # Computes DeRemer–Pennello goto-follow sets over an LR(0) collection.
6
+ # The three dependency closures are kept separately because IELR relies on
7
+ # the distinction between stable (successor/internal) and predecessor
8
+ # dependencies when a state is split.
9
+ class GotoFollows
10
+ @kernel_cores: Array[Array[item_core]]
11
+
12
+ @transitions: transitions
13
+
14
+ @states: Array[core_set]
15
+
16
+ @sets: Analysis::Sets
17
+
18
+ @grammar: IR::Grammar
19
+
20
+ attr_reader from_state: Array[Integer]
21
+
22
+ attr_reader to_state: Array[Integer]
23
+
24
+ attr_reader goto_index: Hash[[ Integer, Integer ], Integer]
25
+
26
+ attr_reader direct_reads: Array[Integer]
27
+
28
+ attr_reader successor_edges: Array[Array[Integer]]
29
+
30
+ attr_reader internal_edges: Array[Array[Integer]]
31
+
32
+ attr_reader includes_edges: Array[Array[Integer]]
33
+
34
+ attr_reader predecessors: Array[Array[Integer]]
35
+
36
+ attr_reader successor_follows: Array[Integer]
37
+
38
+ attr_reader always_follows: Array[Integer]
39
+
40
+ attr_reader goto_follows: Array[Integer]
41
+
42
+ attr_reader follow_kernel_items: Array[Integer]
43
+
44
+ attr_reader kernel_cores: Array[Array[item_core]]
45
+
46
+ # @rbs (IR::Grammar grammar, Analysis::Sets sets, Array[core_set] states, transitions transitions,
47
+ # Array[Integer] start_states, ?start_names: Array[String]?) -> void
48
+ def initialize: (IR::Grammar grammar, Analysis::Sets sets, Array[core_set] states, transitions transitions, Array[Integer] start_states, ?start_names: Array[String]?) -> void
49
+
50
+ # @rbs (Integer state_id, Integer nonterminal_id) -> Integer?
51
+ def goto_for: (Integer state_id, Integer nonterminal_id) -> Integer?
52
+
53
+ # @rbs () -> Array[Hash[Integer, Integer]]
54
+ def reduction_lookaheads: () -> Array[Hash[Integer, Integer]]
55
+
56
+ private
57
+
58
+ # @rbs () -> void
59
+ def build_gotos: () -> void
60
+
61
+ # @rbs () -> void
62
+ def build_dependencies: () -> void
63
+
64
+ # @rbs () -> void
65
+ def build_follow_sets: () -> void
66
+
67
+ # @rbs (Array[Array[Integer]], Array[Array[Integer]]) -> Array[Array[Integer]]
68
+ def merged_edges: (Array[Array[Integer]], Array[Array[Integer]]) -> Array[Array[Integer]]
69
+
70
+ # @rbs (Integer goto_id) -> Integer
71
+ def compute_follow_kernel_items: (Integer goto_id) -> Integer
72
+
73
+ # @rbs (core_set items) -> Array[item_core]
74
+ def kernel_items: (core_set items) -> Array[item_core]
75
+
76
+ # @rbs (Integer goto_id) -> Integer
77
+ def symbol_for_goto: (Integer goto_id) -> Integer
78
+
79
+ # @rbs (Integer state_id, Array[Integer]) -> Integer?
80
+ def advance: (Integer state_id, Array[Integer]) -> Integer?
81
+
82
+ # @rbs (Integer production_id) -> Array[Integer]
83
+ def rhs_for: (Integer production_id) -> Array[Integer]
84
+
85
+ # @rbs () -> Integer
86
+ def eof_id: () -> Integer
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,67 @@
1
+ # Generated from lib/ibex/lalr/ielr/annotator.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ module IELR
6
+ # Finds grammar-relative inadequacies and traces their possible
7
+ # manifestations through predecessor states.
8
+ class Annotator
9
+ attr_reader annotation_lists: Array[Array[Annotation]]
10
+
11
+ attr_reader inadequacies: Array[Array[Inadequacy]]
12
+
13
+ attr_reader item_lookaheads: ItemLookaheads
14
+
15
+ attr_reader split_stable_discarded: Integer
16
+
17
+ # @rbs (IR::Grammar grammar, Array[core_set] states, transitions transitions,
18
+ # Array[packed_items] items, GotoFollows goto_follows, ?resolver: ConflictResolver?) -> void
19
+ def initialize: (IR::Grammar grammar, Array[core_set] states, transitions transitions, Array[packed_items] items, GotoFollows goto_follows, ?resolver: ConflictResolver?) -> void
20
+
21
+ # @rbs () -> Array[Array[Annotation]]
22
+ def build: () -> Array[Array[Annotation]]
23
+
24
+ private
25
+
26
+ # @rbs (Integer state_id) -> Array[Inadequacy]
27
+ def build_inadequacies: (Integer state_id) -> Array[Inadequacy]
28
+
29
+ # @rbs (Integer state_id, Integer token_id) -> Array[[Symbol, Integer?]]
30
+ def contributions_for: (Integer state_id, Integer token_id) -> Array[[ Symbol, Integer? ]]
31
+
32
+ # @rbs (Integer state_id, Inadequacy inadequacy) -> Annotation
33
+ def annotate_manifestation: (Integer state_id, Inadequacy inadequacy) -> Annotation
34
+
35
+ # @rbs (Integer state_id, Integer successor_id, Annotation annotation) -> Annotation
36
+ def annotate_predecessor: (Integer state_id, Integer successor_id, Annotation annotation) -> Annotation
37
+
38
+ # @rbs (Integer state_id, Array[item_core], Integer, Integer) -> bool
39
+ def always_via_lhs?: (Integer state_id, Array[item_core], Integer, Integer) -> bool
40
+
41
+ # @rbs (Integer state_id, Array[item_core], Integer, Integer) -> Integer
42
+ def project_row: (Integer state_id, Array[item_core], Integer, Integer) -> Integer
43
+
44
+ # @rbs (Integer state_id, Integer production_id, Integer length) -> Integer
45
+ def completed_kernel_mask: (Integer state_id, Integer production_id, Integer length) -> Integer
46
+
47
+ # @rbs (Integer state_id, Integer lhs_id, Integer token_id) -> Integer?
48
+ def compute_lhs_contributions: (Integer state_id, Integer lhs_id, Integer token_id) -> Integer?
49
+
50
+ # @rbs (Integer state_id, Annotation annotation) -> bool
51
+ def register?: (Integer state_id, Annotation annotation) -> bool
52
+
53
+ # @rbs (Integer state_id, Integer production_id) -> Integer
54
+ def lhs_for: (Integer state_id, Integer production_id) -> Integer
55
+
56
+ # @rbs (Integer production_id) -> Array[Integer]
57
+ def rhs_for: (Integer production_id) -> Array[Integer]
58
+
59
+ # @rbs (core_set items) -> Array[item_core]
60
+ def kernel_items: (core_set items) -> Array[item_core]
61
+
62
+ # @rbs (Integer state_id, Integer production_id, Integer dot) -> Integer?
63
+ def kernel_index_of: (Integer state_id, Integer production_id, Integer dot) -> Integer?
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/ibex/lalr/ielr/bits.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ module IELR
6
+ module Bits
7
+ # @rbs (Integer bits) { (Integer) -> void } -> void
8
+ # @rbs (Integer bits) -> Enumerator[Integer, void]
9
+ def self?.each_set_bit: (Integer bits) { (Integer) -> void } -> void
10
+ | (Integer bits) -> Enumerator[Integer, void]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,24 @@
1
+ # Generated from lib/ibex/lalr/ielr/inadequacy.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ module IELR
6
+ type contribution = [ Symbol, Integer? ]
7
+
8
+ class Inadequacy < Struct[Integer | Array[contribution]]
9
+ attr_accessor state: Integer
10
+ attr_accessor token: Integer
11
+ attr_accessor contributions: Array[contribution]
12
+ attr_accessor id: Integer
13
+ def self.new: (state: Integer, token: Integer, contributions: Array[contribution], id: Integer) -> instance
14
+ end
15
+
16
+ class Annotation < Struct[Inadequacy | Array[Integer?]]
17
+ attr_accessor inadequacy: Inadequacy
18
+ attr_accessor matrix: Array[Integer?]
19
+ def self.new: (inadequacy: Inadequacy, matrix: Array[Integer?]) -> instance
20
+ def key: () -> [ Integer, Array[Integer?] ]
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,35 @@
1
+ # Generated from lib/ibex/lalr/ielr/item_lookaheads.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ module IELR
6
+ # Lazily derives the lookahead of a kernel item from predecessor states
7
+ # and goto-follow sets. Memoisation is important: predecessor paths can
8
+ # share exponentially many suffixes in a real grammar.
9
+ class ItemLookaheads
10
+ @memo: Hash[Integer, Integer]
11
+
12
+ # @rbs (IR::Grammar grammar, GotoFollows goto_follows, Array[Array[item_core]] kernel_cores,
13
+ # Array[Array[Integer]] predecessors, ?start_states: Array[Integer]?) -> void
14
+ def initialize: (IR::Grammar grammar, GotoFollows goto_follows, Array[Array[item_core]] kernel_cores, Array[Array[Integer]] predecessors, ?start_states: Array[Integer]?) -> void
15
+
16
+ # @rbs (Integer state_id, Integer kernel_index) -> Integer
17
+ def fetch: (Integer state_id, Integer kernel_index) -> Integer
18
+
19
+ # @rbs () -> Integer
20
+ def size: () -> Integer
21
+
22
+ private
23
+
24
+ # @rbs (Integer state_id, Integer kernel_index) -> Integer
25
+ def compute: (Integer state_id, Integer kernel_index) -> Integer
26
+
27
+ # @rbs (Integer state_id, Integer production_id) -> Integer
28
+ def goto_follows_for: (Integer state_id, Integer production_id) -> Integer
29
+
30
+ # @rbs (Integer production_id) -> Integer
31
+ def start_seed: (Integer production_id) -> Integer
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,17 @@
1
+ # Generated from lib/ibex/lalr/ielr/pipeline.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ module IELR
6
+ # Coordinates the canonical-free direct IELR phases. The returned
7
+ # profile deliberately reports canonical metrics as unavailable.
8
+ class Pipeline
9
+ # @rbs (IR::Grammar grammar, Analysis::Sets sets, ?starts: Array[String]?, ?profile: bool) -> void
10
+ def initialize: (IR::Grammar grammar, Analysis::Sets sets, ?starts: Array[String]?, ?profile: bool) -> void
11
+
12
+ # @rbs () -> [Array[packed_items], transitions, LALR::build_collection]
13
+ def build: () -> [ Array[packed_items], transitions, LALR::build_collection ]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ # Generated from lib/ibex/lalr/ielr/split_stability.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ module IELR
6
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
7
+ module SplitStability
8
+ MAX_ENUMERATED_POTENTIALS: ::Integer
9
+
10
+ # @rbs (Annotation) -> bool
11
+ def self?.simple?: (Annotation) -> bool
12
+
13
+ # @rbs (Annotation, ConflictResolver) -> bool
14
+ def self?.split_stable?: (Annotation, ConflictResolver) -> bool
15
+
16
+ # @rbs (ConflictResolver, Integer, Array[Object]) -> Object?
17
+ def self?.resolve: (ConflictResolver, Integer, Array[Object]) -> Object?
18
+
19
+ # @rbs (Object?) -> Object?
20
+ def self?.normalize: (Object?) -> Object?
21
+
22
+ # @rbs (Array[Integer]) -> Array[Array[Integer]]
23
+ def self?.subsets: (Array[Integer]) -> Array[Array[Integer]]
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/ibex/lalr/ielr/split_state.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ module IELR
6
+ class SplitState < Struct[Array[item_core] | Array[[ Integer, Integer ]] | Integer]
7
+ attr_accessor core: Array[item_core]
8
+ attr_accessor transitions: Array[[ Integer, Integer ]]
9
+ attr_accessor lalr_isocore: Integer
10
+ def self.new: (core: Array[item_core], transitions: Array[[ Integer, Integer ]], lalr_isocore: Integer) -> instance
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,76 @@
1
+ # Generated from lib/ibex/lalr/ielr/state_splitter.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ module IELR
6
+ # Splits LR(0) isocores only where an inadequacy would change the
7
+ # resolved action. New states copy their transition arrays; no mutable
8
+ # transition table is shared between isocores.
9
+ class StateSplitter
10
+ attr_reader annotations: Array[Array[Annotation]]
11
+
12
+ attr_reader states: Array[SplitState]
13
+
14
+ attr_reader lalr_isocores: Array[Integer]
15
+
16
+ attr_reader split_states: Integer
17
+
18
+ attr_reader inadequacies: Array[Array[Inadequacy]]
19
+
20
+ attr_reader split_stable_discarded: Integer
21
+
22
+ # @rbs (IR::Grammar grammar, Array[core_set] states, transitions transitions,
23
+ # Array[packed_items] items, GotoFollows goto_follows, ?resolver: ConflictResolver?) -> void
24
+ # rubocop:disable Metrics/AbcSize -- initialization wires the phase tables once.
25
+ def initialize: (IR::Grammar grammar, Array[core_set] states, transitions transitions, Array[packed_items] items, GotoFollows goto_follows, ?resolver: ConflictResolver?) -> void
26
+
27
+ # @rbs () -> [Array[packed_items], transitions]
28
+ def build: () -> [ Array[packed_items], transitions ]
29
+
30
+ private
31
+
32
+ # @rbs (Integer from_id, Integer to_id, Integer transition_index) -> void
33
+ def compute_state: (Integer from_id, Integer to_id, Integer transition_index) -> void
34
+
35
+ # @rbs (Integer from_id, Integer to_id) -> Array[Integer]
36
+ def propagate_lookaheads: (Integer from_id, Integer to_id) -> Array[Integer]
37
+
38
+ # @rbs (Integer state_id, Integer nonterminal_id) -> Integer
39
+ def compute_goto_follow_set: (Integer state_id, Integer nonterminal_id) -> Integer
40
+
41
+ # @rbs (Integer state_id) -> Array[Integer]
42
+ def lookahead_set_filters: (Integer state_id) -> Array[Integer]
43
+
44
+ # @rbs (Integer state_id, Array[Integer]) -> bool
45
+ def compatible?: (Integer state_id, Array[Integer]) -> bool
46
+
47
+ # @rbs (Annotation, Array[Integer]) -> Object?
48
+ def dominant_contribution: (Annotation, Array[Integer]) -> Object?
49
+
50
+ # @rbs (Integer after_id, Array[Integer]) -> Integer
51
+ def append_isocore: (Integer after_id, Array[Integer]) -> Integer
52
+
53
+ # @rbs (Integer state_id, Array[Integer]) -> void
54
+ def merge_lookaheads: (Integer state_id, Array[Integer]) -> void
55
+
56
+ # @rbs () -> Array[packed_items]
57
+ def pack_items: () -> Array[packed_items]
58
+
59
+ # @rbs () -> transitions
60
+ def packed_transitions: () -> transitions
61
+
62
+ # @rbs (core_set items) -> Array[item_core]
63
+ def kernel_items: (core_set items) -> Array[item_core]
64
+
65
+ # @rbs (Integer state_id, Integer production_id, Integer dot) -> Integer?
66
+ def kernel_index_of: (Integer state_id, Integer production_id, Integer dot) -> Integer?
67
+
68
+ # @rbs (Integer production_id) -> Integer
69
+ def lhs_for: (Integer production_id) -> Integer
70
+
71
+ # @rbs (Integer production_id) -> Array[Integer]
72
+ def rhs_for: (Integer production_id) -> Array[Integer]
73
+ end
74
+ end
75
+ end
76
+ end
@@ -5,9 +5,17 @@ module Ibex
5
5
  # Deterministically merges compatible canonical LR(1) states and splits
6
6
  # partitions until their outgoing transitions are congruent.
7
7
  class IELRPartition
8
+ type contribution_action = [ :shift ] | [ :reduce, Integer ] | [ :accept ]
9
+
8
10
  AUGMENTED_PRODUCTION: Integer
9
11
 
10
- @contributions: Array[Hash[Integer, Set[Array[untyped]]]]
12
+ @profile: bool
13
+
14
+ @final_partition_count: Integer?
15
+
16
+ @initial_partition_count: Integer?
17
+
18
+ @contributions: Array[Hash[Integer, Set[contribution_action]]]
11
19
 
12
20
  @transitions: transitions
13
21
 
@@ -15,8 +23,12 @@ module Ibex
15
23
 
16
24
  @grammar: IR::Grammar
17
25
 
18
- # @rbs (IR::Grammar grammar, Array[item_set] states, transitions transitions) -> void
19
- def initialize: (IR::Grammar grammar, Array[item_set] states, transitions transitions) -> void
26
+ attr_reader initial_partition_count: Integer?
27
+
28
+ attr_reader final_partition_count: Integer?
29
+
30
+ # @rbs (IR::Grammar grammar, Array[item_set] states, transitions transitions, ?profile: bool) -> void
31
+ def initialize: (IR::Grammar grammar, Array[item_set] states, transitions transitions, ?profile: bool) -> void
20
32
 
21
33
  # @rbs () -> [Array[packed_items], transitions]
22
34
  def build: () -> [ Array[packed_items], transitions ]
@@ -46,8 +58,8 @@ module Ibex
46
58
  # @rbs (state_partition members) -> packed_items
47
59
  def merge_items: (state_partition members) -> packed_items
48
60
 
49
- # @rbs (Integer state_id) -> Hash[Integer, Set[Array[untyped]]]
50
- def action_contributions: (Integer state_id) -> Hash[Integer, Set[Array[untyped]]]
61
+ # @rbs (Integer state_id) -> Hash[Integer, Set[contribution_action]]
62
+ def action_contributions: (Integer state_id) -> Hash[Integer, Set[contribution_action]]
51
63
 
52
64
  # @rbs (Integer production_id) -> Array[Integer]
53
65
  def rhs_for: (Integer production_id) -> Array[Integer]
@@ -0,0 +1,21 @@
1
+ # Generated from lib/ibex/lalr/inadequacy_report.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ type report_value = String | Symbol | Integer | bool | nil | IR::parser_action | Array[report_value] | Hash[Symbol, report_value]
6
+
7
+ # Diagnostic-only report for canonical-vs-LALR action differences. It is
8
+ # intentionally separate from normal construction because it enumerates a
9
+ # canonical LR(1) reference.
10
+ class InadequacyReport
11
+ # @rbs (IR::Automaton canonical, IR::Automaton target, ?max_pairs: Integer) -> void
12
+ def initialize: (IR::Automaton canonical, IR::Automaton target, ?max_pairs: Integer) -> void
13
+
14
+ # @rbs () -> Hash[Symbol, report_value]
15
+ def to_h: () -> Hash[Symbol, report_value]
16
+
17
+ # @rbs () -> String
18
+ def to_json: () -> String
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,38 @@
1
+ # Generated from lib/ibex/lalr/lookahead_propagation.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ # Recomputes item lookaheads on an already-built LR(0) automaton. This is
6
+ # Phase 4 of direct IELR and is also useful as an independent cross-check
7
+ # for DirectLookaheads.
8
+ class LookaheadPropagation
9
+ EMPTY: Array[Integer]
10
+
11
+ attr_reader propagation_edge_count: Integer
12
+
13
+ # @rbs (IR::Grammar grammar, Analysis::Sets sets, Array[core_set] states, transitions transitions,
14
+ # seeds: Array[[Integer, item_core, Integer]]) -> Array[packed_items]
15
+ def initialize: (IR::Grammar grammar, Analysis::Sets sets, Array[core_set] states, transitions transitions, seeds: Array[[ Integer, item_core, Integer ]]) -> Array[packed_items]
16
+
17
+ # @rbs () -> Array[packed_items]
18
+ def build: () -> Array[packed_items]
19
+
20
+ private
21
+
22
+ # @rbs (Hash[Object, Array[Object]], Integer, Integer, Integer) -> void
23
+ def add_transition: (Hash[Object, Array[Object]], Integer, Integer, Integer) -> void
24
+
25
+ # @rbs (Hash[Object, Array[Object]], Array[packed_items], Integer, Integer, Integer) -> void
26
+ def add_closure: (Hash[Object, Array[Object]], Array[packed_items], Integer, Integer, Integer) -> void
27
+
28
+ # @rbs (Array[packed_items], Hash[Object, Array[Object]]) -> void
29
+ def propagate: (Array[packed_items], Hash[Object, Array[Object]]) -> void
30
+
31
+ # @rbs (Integer bits) -> Array[Integer]
32
+ def terminal_ids: (Integer bits) -> Array[Integer]
33
+
34
+ # @rbs (Integer production_id) -> Array[Integer]
35
+ def rhs_for: (Integer production_id) -> Array[Integer]
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,50 @@
1
+ # Generated from lib/ibex/lalr/lr0_collection.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ # Constructs only the LR(0) core collection. Keeping this separate from
6
+ # lookahead propagation makes the direct IELR phases reusable and gives
7
+ # them a stable, canonical-free input representation.
8
+ class LR0Collection
9
+ AUGMENTED_PRODUCTION: Integer
10
+
11
+ @grammar: IR::Grammar
12
+
13
+ @productions_by_lhs: Hash[Integer, Array[IR::Production]]
14
+
15
+ @starts: Array[String]
16
+
17
+ @augmented_rhs: Hash[Integer, Array[Integer]]
18
+
19
+ @production_rhs: Array[Array[Integer]]
20
+
21
+ @item_key_stride: Integer
22
+
23
+ # @rbs (IR::Grammar grammar, ?starts: Array[String]?) -> void
24
+ def initialize: (IR::Grammar grammar, ?starts: Array[String]?) -> void
25
+
26
+ # @rbs () -> [Array[core_set], transitions]
27
+ def build: () -> [ Array[core_set], transitions ]
28
+
29
+ # @rbs (Integer index) -> Integer
30
+ def augmented_production: (Integer index) -> Integer
31
+
32
+ # @rbs (Integer production_id) -> Array[Integer]
33
+ def rhs_for: (Integer production_id) -> Array[Integer]
34
+
35
+ # @rbs (Integer production_id) -> Integer
36
+ def lhs_for: (Integer production_id) -> Integer
37
+
38
+ # @rbs (core_set items) -> Hash[Integer, core_set]
39
+ def shifted_kernels: (core_set items) -> Hash[Integer, core_set]
40
+
41
+ private
42
+
43
+ # @rbs (core_set seed) -> core_set
44
+ def closure: (core_set seed) -> core_set
45
+
46
+ # @rbs (core_set items) -> Array[Integer]
47
+ def item_key: (core_set items) -> Array[Integer]
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,25 @@
1
+ # Generated from lib/ibex/lalr/unreachable_states.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ # Optional post-resolution compaction. It is intentionally off by
6
+ # default because state numbers are part of diagnostics and golden output.
7
+ module UnreachableStates
8
+ # @rbs (Array[IR::AutomatonState] states, Array[Integer] start_states) ->
9
+ # [Array[IR::AutomatonState], Hash[Integer, Integer]]
10
+ def self?.remove: (Array[IR::AutomatonState] states, Array[Integer] start_states) -> [ Array[IR::AutomatonState], Hash[Integer, Integer] ]
11
+
12
+ # @rbs (Array[IR::AutomatonState], Array[Integer]) -> Array[Integer]
13
+ def self?.reachable_states: (Array[IR::AutomatonState], Array[Integer]) -> Array[Integer]
14
+
15
+ # @rbs (Hash[Integer, Integer], Hash[Integer, Integer]) -> Hash[Integer, Integer]
16
+ def self?.remap_edges: (Hash[Integer, Integer], Hash[Integer, Integer]) -> Hash[Integer, Integer]
17
+
18
+ # @rbs (IR::parser_action?, Hash[Integer, Integer]) -> IR::parser_action?
19
+ def self?.remap_action: (IR::parser_action?, Hash[Integer, Integer]) -> IR::parser_action?
20
+
21
+ # @rbs (IR::conflict, Hash[Integer, Integer]) -> IR::conflict
22
+ def self?.remap_conflict: (IR::conflict, Hash[Integer, Integer]) -> IR::conflict
23
+ end
24
+ end
25
+ end