ibex 0.1.0 → 0.3.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 (603) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +89 -123
  3. data/docs/architecture.md +477 -31
  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 +106 -0
  12. data/docs/cst.md +237 -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 +262 -0
  40. data/docs/development.md +306 -0
  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 +26 -0
  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 +1581 -0
  49. data/docs/error-ux-round2.md +111 -0
  50. data/docs/error-ux.md +114 -0
  51. data/docs/getting-started.md +80 -0
  52. data/docs/grammar-reference.md +629 -18
  53. data/docs/ielr-design.md +43 -0
  54. data/docs/ielr.md +92 -0
  55. data/docs/ja/bison-import.md +51 -0
  56. data/docs/ja/stable-api.md +53 -0
  57. data/docs/lexer-construction-profile.md +109 -0
  58. data/docs/lexer-migration.md +56 -0
  59. data/docs/maturity.md +128 -0
  60. data/docs/project-site-strategy.md +54 -0
  61. data/docs/racc-migration-evidence.md +45 -0
  62. data/docs/racc-migration.md +45 -6
  63. data/docs/release-readiness.md +221 -0
  64. data/docs/repair-semantics.md +123 -0
  65. data/docs/runtime-abi-evolution.md +307 -0
  66. data/docs/stability.md +234 -0
  67. data/docs/status.md +43 -0
  68. data/docs/syntax-sessions.md +183 -0
  69. data/docs/table-artifact.md +125 -0
  70. data/docs/test-interactions.md +219 -0
  71. data/docs/verification-report.md +137 -0
  72. data/docs/verifier-trust-boundary.md +199 -0
  73. data/docs/workloads.md +132 -0
  74. data/examples/README.md +60 -0
  75. data/examples/calculator.y +44 -0
  76. data/examples/csv.y +32 -0
  77. data/examples/ini.y +70 -0
  78. data/examples/json.y +48 -0
  79. data/examples/tiny_language.y +75 -0
  80. data/lib/ibex/analysis/digraph.rb +128 -0
  81. data/lib/ibex/analysis/sets.rb +5 -4
  82. data/lib/ibex/analysis.rb +1 -0
  83. data/lib/ibex/artifact_set.rb +63 -0
  84. data/lib/ibex/bison_import/importer.rb +516 -0
  85. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  86. data/lib/ibex/bison_import.rb +200 -0
  87. data/lib/ibex/bounded_subprocess.rb +171 -0
  88. data/lib/ibex/cli/ambiguity.rb +75 -0
  89. data/lib/ibex/cli/analysis.rb +134 -0
  90. data/lib/ibex/cli/bison_import.rb +121 -0
  91. data/lib/ibex/cli/config.rb +128 -0
  92. data/lib/ibex/cli/counterexample_options.rb +6 -2
  93. data/lib/ibex/cli/coverage.rb +173 -0
  94. data/lib/ibex/cli/debug.rb +106 -0
  95. data/lib/ibex/cli/diagnostics.rb +136 -0
  96. data/lib/ibex/cli/documentation.rb +70 -0
  97. data/lib/ibex/cli/equiv.rb +169 -0
  98. data/lib/ibex/cli/error_messages.rb +184 -0
  99. data/lib/ibex/cli/explain.rb +85 -0
  100. data/lib/ibex/cli/fix.rb +203 -0
  101. data/lib/ibex/cli/formatting.rb +387 -0
  102. data/lib/ibex/cli/fuzz.rb +200 -0
  103. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  104. data/lib/ibex/cli/generation_artifacts.rb +189 -0
  105. data/lib/ibex/cli/generation_error_messages.rb +39 -0
  106. data/lib/ibex/cli/grammar_tests.rb +140 -0
  107. data/lib/ibex/cli/ir_tools.rb +128 -0
  108. data/lib/ibex/cli/lsp.rb +33 -0
  109. data/lib/ibex/cli/outputs.rb +133 -23
  110. data/lib/ibex/cli/racc_migration.rb +87 -0
  111. data/lib/ibex/cli/reduce.rb +202 -0
  112. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  113. data/lib/ibex/cli/samples.rb +118 -0
  114. data/lib/ibex/cli/verify.rb +116 -0
  115. data/lib/ibex/cli/watch.rb +104 -0
  116. data/lib/ibex/cli.rb +825 -55
  117. data/lib/ibex/codegen/action_locations.rb +103 -0
  118. data/lib/ibex/codegen/action_method_source.rb +209 -0
  119. data/lib/ibex/codegen/action_source.rb +119 -0
  120. data/lib/ibex/codegen/ambiguity.rb +174 -0
  121. data/lib/ibex/codegen/cst_metadata.rb +171 -0
  122. data/lib/ibex/codegen/documentation.rb +170 -0
  123. data/lib/ibex/codegen/explain.rb +380 -0
  124. data/lib/ibex/codegen/generated_action_abi.rb +293 -0
  125. data/lib/ibex/codegen/html.rb +94 -10
  126. data/lib/ibex/codegen/mermaid.rb +43 -0
  127. data/lib/ibex/codegen/railroad.rb +197 -0
  128. data/lib/ibex/codegen/railroad_documentation.rb +59 -0
  129. data/lib/ibex/codegen/rbs.rb +331 -2
  130. data/lib/ibex/codegen/report.rb +67 -15
  131. data/lib/ibex/codegen/ruby.rb +305 -66
  132. data/lib/ibex/codegen/ruby_actions.rb +146 -0
  133. data/lib/ibex/codegen/ruby_ast.rb +121 -0
  134. data/lib/ibex/codegen/ruby_error_messages.rb +28 -0
  135. data/lib/ibex/codegen/ruby_lexer.rb +83 -0
  136. data/lib/ibex/codegen/ruby_syntax.rb +96 -0
  137. data/lib/ibex/codegen/ruby_table_metadata.rb +57 -0
  138. data/lib/ibex/codegen/ruby_value_printers.rb +56 -0
  139. data/lib/ibex/codegen/symbol_labels.rb +1 -1
  140. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  141. data/lib/ibex/configuration/explanation.rb +421 -0
  142. data/lib/ibex/configuration/inspector.rb +232 -0
  143. data/lib/ibex/configuration.rb +580 -0
  144. data/lib/ibex/coverage/collector.rb +198 -0
  145. data/lib/ibex/coverage/event_stream.rb +103 -0
  146. data/lib/ibex/coverage/report.rb +267 -0
  147. data/lib/ibex/coverage/runtime_event_validator.rb +169 -0
  148. data/lib/ibex/coverage.rb +13 -0
  149. data/lib/ibex/delta_reducer.rb +99 -0
  150. data/lib/ibex/diff.rb +140 -0
  151. data/lib/ibex/equiv/machine.rb +135 -0
  152. data/lib/ibex/equiv.rb +373 -0
  153. data/lib/ibex/error_messages/parser.rb +159 -0
  154. data/lib/ibex/error_messages/parser_v2.rb +198 -0
  155. data/lib/ibex/error_messages/renderer.rb +65 -0
  156. data/lib/ibex/error_messages/sentence_search.rb +196 -0
  157. data/lib/ibex/error_messages/update.rb +169 -0
  158. data/lib/ibex/error_messages.rb +165 -0
  159. data/lib/ibex/fix.rb +557 -0
  160. data/lib/ibex/frontend/ast.rb +166 -7
  161. data/lib/ibex/frontend/bootstrap_parser.rb +40 -4
  162. data/lib/ibex/frontend/diagnostic.rb +81 -0
  163. data/lib/ibex/frontend/diagnostic_recovery.rb +268 -0
  164. data/lib/ibex/frontend/dsl.rb +66 -7
  165. data/lib/ibex/frontend/formatter.rb +453 -0
  166. data/lib/ibex/frontend/generated_parser.rb +644 -190
  167. data/lib/ibex/frontend/generated_parser_base.rb +170 -32
  168. data/lib/ibex/frontend/generated_parser_includes.rb +51 -0
  169. data/lib/ibex/frontend/generated_parser_metadata.rb +61 -0
  170. data/lib/ibex/frontend/generated_parser_parameters.rb +60 -0
  171. data/lib/ibex/frontend/generation.rb +33 -0
  172. data/lib/ibex/frontend/lexer.rb +162 -10
  173. data/lib/ibex/frontend/lexer_recovery.rb +84 -0
  174. data/lib/ibex/frontend/parser/declarations.rb +262 -11
  175. data/lib/ibex/frontend/parser/parameters.rb +82 -0
  176. data/lib/ibex/frontend/parser/rules.rb +43 -6
  177. data/lib/ibex/frontend/parser.rb +182 -4
  178. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  179. data/lib/ibex/frontend/regenerator.rb +27 -1
  180. data/lib/ibex/frontend/resolution.rb +70 -0
  181. data/lib/ibex/frontend/resolver.rb +217 -0
  182. data/lib/ibex/frontend/rule_documentation.rb +104 -0
  183. data/lib/ibex/frontend/source_cursor.rb +133 -9
  184. data/lib/ibex/frontend/source_document.rb +229 -0
  185. data/lib/ibex/frontend/source_loader.rb +150 -0
  186. data/lib/ibex/frontend/source_span.rb +89 -0
  187. data/lib/ibex/frontend/token_adapter/declaration_document_state.rb +47 -0
  188. data/lib/ibex/frontend/token_adapter/declaration_lexer_state.rb +83 -0
  189. data/lib/ibex/frontend/token_adapter/declaration_state.rb +244 -22
  190. data/lib/ibex/frontend/token_adapter/delimiter_tracker.rb +8 -2
  191. data/lib/ibex/frontend/token_adapter/rule_state.rb +60 -2
  192. data/lib/ibex/frontend/token_adapter.rb +18 -3
  193. data/lib/ibex/frontend.rb +14 -2
  194. data/lib/ibex/fuzz.rb +219 -0
  195. data/lib/ibex/generation_input.rb +57 -0
  196. data/lib/ibex/generation_manifest.rb +211 -0
  197. data/lib/ibex/generation_transaction.rb +261 -0
  198. data/lib/ibex/generation_transaction_recovery.rb +109 -0
  199. data/lib/ibex/generation_transaction_validation.rb +196 -0
  200. data/lib/ibex/grammar_tests.rb +206 -0
  201. data/lib/ibex/ir/automaton_ir.rb +86 -11
  202. data/lib/ibex/ir/grammar_ir.rb +170 -26
  203. data/lib/ibex/ir/lexer_ir.rb +76 -0
  204. data/lib/ibex/ir/parser_contract.rb +135 -0
  205. data/lib/ibex/ir/serialize.rb +268 -50
  206. data/lib/ibex/ir/validator/automaton.rb +375 -0
  207. data/lib/ibex/ir/validator/base.rb +147 -0
  208. data/lib/ibex/ir/validator/grammar.rb +634 -0
  209. data/lib/ibex/ir/validator/lexer.rb +113 -0
  210. data/lib/ibex/ir/validator.rb +63 -0
  211. data/lib/ibex/ir.rb +71 -5
  212. data/lib/ibex/lalr/build_metrics.rb +71 -0
  213. data/lib/ibex/lalr/builder.rb +514 -52
  214. data/lib/ibex/lalr/conflict.rb +1 -0
  215. data/lib/ibex/lalr/conflict_search.rb +26 -9
  216. data/lib/ibex/lalr/counterexample.rb +38 -18
  217. data/lib/ibex/lalr/direct_lookaheads.rb +289 -0
  218. data/lib/ibex/lalr/goto_follows.rb +229 -0
  219. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  220. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  221. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  222. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  223. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  224. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  225. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  226. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  227. data/lib/ibex/lalr/ielr_partition.rb +166 -0
  228. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  229. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  230. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  231. data/lib/ibex/lalr/on_error_reductions.rb +74 -0
  232. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  233. data/lib/ibex/lalr.rb +59 -1
  234. data/lib/ibex/location.rb +129 -0
  235. data/lib/ibex/lsp/document_handlers.rb +68 -0
  236. data/lib/ibex/lsp/document_store.rb +264 -0
  237. data/lib/ibex/lsp/document_store_diagnostics.rb +44 -0
  238. data/lib/ibex/lsp/document_store_validation.rb +61 -0
  239. data/lib/ibex/lsp/initialization_handlers.rb +80 -0
  240. data/lib/ibex/lsp/navigation_handlers.rb +70 -0
  241. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  242. data/lib/ibex/lsp/position_codec.rb +113 -0
  243. data/lib/ibex/lsp/protocol_error.rb +33 -0
  244. data/lib/ibex/lsp/request_handlers.rb +46 -0
  245. data/lib/ibex/lsp/request_support.rb +94 -0
  246. data/lib/ibex/lsp/server.rb +148 -0
  247. data/lib/ibex/lsp/symbol_index.rb +241 -0
  248. data/lib/ibex/lsp/symbol_index_builder.rb +277 -0
  249. data/lib/ibex/lsp/symbol_index_precedence_references.rb +44 -0
  250. data/lib/ibex/lsp/symbol_index_source_queries.rb +61 -0
  251. data/lib/ibex/lsp/symbol_occurrence.rb +23 -0
  252. data/lib/ibex/lsp/transport.rb +128 -0
  253. data/lib/ibex/lsp/workspace.rb +128 -0
  254. data/lib/ibex/lsp/workspace_analyzer.rb +199 -0
  255. data/lib/ibex/lsp.rb +33 -0
  256. data/lib/ibex/messages/en.yml +28 -0
  257. data/lib/ibex/messages/ja.yml +28 -0
  258. data/lib/ibex/messages.rb +68 -0
  259. data/lib/ibex/metrics.rb +175 -0
  260. data/lib/ibex/normalize/declarations.rb +142 -7
  261. data/lib/ibex/normalize/diagnostics.rb +94 -24
  262. data/lib/ibex/normalize/expander.rb +64 -59
  263. data/lib/ibex/normalize/expression.rb +63 -40
  264. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  265. data/lib/ibex/normalize/inline_expansion.rb +465 -0
  266. data/lib/ibex/normalize/inline_validation.rb +174 -0
  267. data/lib/ibex/normalize/lexer.rb +131 -0
  268. data/lib/ibex/normalize/named_references.rb +60 -0
  269. data/lib/ibex/normalize/nodes.rb +46 -0
  270. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +70 -0
  271. data/lib/ibex/normalize/parameter_lowering.rb +143 -0
  272. data/lib/ibex/normalize/parameter_substitution.rb +125 -0
  273. data/lib/ibex/normalize/parameter_validation.rb +140 -0
  274. data/lib/ibex/normalize/parameters.rb +226 -0
  275. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  276. data/lib/ibex/normalize/recovery_declarations.rb +84 -0
  277. data/lib/ibex/normalize.rb +172 -17
  278. data/lib/ibex/racc_migration/checker.rb +122 -0
  279. data/lib/ibex/racc_migration/harness.rb +177 -0
  280. data/lib/ibex/racc_migration/report.rb +97 -0
  281. data/lib/ibex/racc_migration.rb +12 -0
  282. data/lib/ibex/rake_task.rb +116 -0
  283. data/lib/ibex/samples.rb +216 -0
  284. data/lib/ibex/table_artifact/builder.rb +266 -0
  285. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  286. data/lib/ibex/table_artifact/document.rb +39 -0
  287. data/lib/ibex/table_artifact/executor.rb +187 -0
  288. data/lib/ibex/table_artifact/serializer.rb +57 -0
  289. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  290. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  291. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  292. data/lib/ibex/table_artifact/validator.rb +253 -0
  293. data/lib/ibex/table_artifact.rb +88 -0
  294. data/lib/ibex/table_simulation/result.rb +55 -0
  295. data/lib/ibex/table_simulation/simulator.rb +253 -0
  296. data/lib/ibex/table_simulation/step.rb +62 -0
  297. data/lib/ibex/table_simulation/text.rb +31 -0
  298. data/lib/ibex/table_simulation.rb +13 -0
  299. data/lib/ibex/tables.rb +22 -69
  300. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  301. data/lib/ibex/verification_report/builder.rb +159 -0
  302. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  303. data/lib/ibex/verification_report/logical_path.rb +68 -0
  304. data/lib/ibex/verification_report/validator.rb +329 -0
  305. data/lib/ibex/verification_report.rb +69 -0
  306. data/lib/ibex/verify/action_correspondence.rb +138 -0
  307. data/lib/ibex/verify/language_witness.rb +295 -0
  308. data/lib/ibex/verify/reference_collection.rb +190 -0
  309. data/lib/ibex/verify/result.rb +73 -0
  310. data/lib/ibex/verify/verifier.rb +598 -0
  311. data/lib/ibex/verify.rb +15 -0
  312. data/lib/ibex/version.rb +1 -1
  313. data/lib/ibex/watch/runner.rb +181 -0
  314. data/lib/ibex/watch/source_snapshot.rb +98 -0
  315. data/lib/ibex/watch.rb +11 -0
  316. data/lib/ibex.rb +35 -1
  317. data/schema/automaton-ir-definitions.schema.json +401 -0
  318. data/schema/automaton-ir.schema.json +65 -0
  319. data/schema/benchmark-v1.schema.json +212 -0
  320. data/schema/benchmark-v2.schema.json +61 -0
  321. data/schema/bison-import-v1.schema.json +106 -0
  322. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  323. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  324. data/schema/construction-profile-v1.schema.json +779 -0
  325. data/schema/cst-v1.json +170 -0
  326. data/schema/diff-v1.schema.json +41 -0
  327. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  328. data/schema/equiv-v1.schema.json +64 -0
  329. data/schema/error-ux-review-v1.schema.json +609 -0
  330. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  331. data/schema/error-ux-round2-v1.schema.json +519 -0
  332. data/schema/error-ux-v1.schema.json +258 -0
  333. data/schema/explain-v1.schema.json +495 -0
  334. data/schema/fix-v1.schema.json +64 -0
  335. data/schema/fix-v2.schema.json +66 -0
  336. data/schema/fix-v3.schema.json +101 -0
  337. data/schema/frontend-diagnostics-v1.schema.json +154 -0
  338. data/schema/fuzz-regression-v1.schema.json +79 -0
  339. data/schema/fuzz-v1.schema.json +114 -0
  340. data/schema/generation-manifest-v1.schema.json +115 -0
  341. data/schema/grammar-ir-extensions.schema.json +734 -0
  342. data/schema/grammar-ir-foundation.schema.json +426 -0
  343. data/schema/grammar-ir.schema.json +271 -0
  344. data/schema/ielr-benchmark-v1.schema.json +85 -0
  345. data/schema/lexer-ir-v1.schema.json +215 -0
  346. data/schema/lexer-profile-v1.schema.json +491 -0
  347. data/schema/metrics-v1.schema.json +60 -0
  348. data/schema/migration-check-v1.schema.json +60 -0
  349. data/schema/performance-comparison-v1.schema.json +395 -0
  350. data/schema/public-performance-comparison-v1.schema.json +506 -0
  351. data/schema/public-performance-profile-v1.schema.json +360 -0
  352. data/schema/reduce-v1.schema.json +22 -0
  353. data/schema/reduce-v2.schema.json +63 -0
  354. data/schema/runtime-coverage-v1.schema.json +86 -0
  355. data/schema/runtime-event-v1.schema.json +308 -0
  356. data/schema/table-artifact-v1.schema.json +377 -0
  357. data/schema/table-simulation-v1.schema.json +70 -0
  358. data/schema/verification-report-v1.schema.json +222 -0
  359. data/schema/verify-v1.schema.json +42 -0
  360. data/sig/ibex/analysis/digraph.rbs +19 -0
  361. data/sig/ibex/artifact_set.rbs +37 -0
  362. data/sig/ibex/bison_import/importer.rbs +140 -0
  363. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  364. data/sig/ibex/bison_import.rbs +95 -0
  365. data/sig/ibex/bounded_subprocess.rbs +76 -0
  366. data/sig/ibex/cli/ambiguity.rbs +28 -0
  367. data/sig/ibex/cli/analysis.rbs +43 -0
  368. data/sig/ibex/cli/bison_import.rbs +32 -0
  369. data/sig/ibex/cli/config.rbs +35 -0
  370. data/sig/ibex/cli/counterexample_options.rbs +2 -0
  371. data/sig/ibex/cli/coverage.rbs +53 -0
  372. data/sig/ibex/cli/debug.rbs +28 -0
  373. data/sig/ibex/cli/diagnostics.rbs +51 -0
  374. data/sig/ibex/cli/documentation.rbs +29 -0
  375. data/sig/ibex/cli/equiv.rbs +49 -0
  376. data/sig/ibex/cli/error_messages.rbs +63 -0
  377. data/sig/ibex/cli/explain.rbs +31 -0
  378. data/sig/ibex/cli/fix.rbs +53 -0
  379. data/sig/ibex/cli/formatting.rbs +107 -0
  380. data/sig/ibex/cli/fuzz.rbs +47 -0
  381. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  382. data/sig/ibex/cli/generation_artifacts.rbs +69 -0
  383. data/sig/ibex/cli/generation_error_messages.rbs +19 -0
  384. data/sig/ibex/cli/grammar_tests.rbs +48 -0
  385. data/sig/ibex/cli/ir_tools.rbs +39 -0
  386. data/sig/ibex/cli/lsp.rbs +14 -0
  387. data/sig/ibex/cli/outputs.rbs +26 -3
  388. data/sig/ibex/cli/racc_migration.rbs +30 -0
  389. data/sig/ibex/cli/reduce.rbs +60 -0
  390. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  391. data/sig/ibex/cli/samples.rbs +38 -0
  392. data/sig/ibex/cli/verify.rbs +28 -0
  393. data/sig/ibex/cli/watch.rbs +43 -0
  394. data/sig/ibex/cli.rbs +182 -9
  395. data/sig/ibex/codegen/action_locations.rbs +45 -0
  396. data/sig/ibex/codegen/action_method_source.rbs +65 -0
  397. data/sig/ibex/codegen/action_source.rbs +50 -0
  398. data/sig/ibex/codegen/ambiguity.rbs +60 -0
  399. data/sig/ibex/codegen/cst_metadata.rbs +59 -0
  400. data/sig/ibex/codegen/documentation.rbs +50 -0
  401. data/sig/ibex/codegen/explain.rbs +105 -0
  402. data/sig/ibex/codegen/generated_action_abi.rbs +105 -0
  403. data/sig/ibex/codegen/html.rbs +18 -2
  404. data/sig/ibex/codegen/mermaid.rbs +16 -0
  405. data/sig/ibex/codegen/railroad.rbs +82 -0
  406. data/sig/ibex/codegen/railroad_documentation.rbs +31 -0
  407. data/sig/ibex/codegen/rbs.rbs +86 -4
  408. data/sig/ibex/codegen/report.rbs +16 -8
  409. data/sig/ibex/codegen/ruby.rbs +105 -28
  410. data/sig/ibex/codegen/ruby_actions.rbs +54 -0
  411. data/sig/ibex/codegen/ruby_ast.rbs +34 -0
  412. data/sig/ibex/codegen/ruby_error_messages.rbs +16 -0
  413. data/sig/ibex/codegen/ruby_lexer.rbs +25 -0
  414. data/sig/ibex/codegen/ruby_syntax.rbs +27 -0
  415. data/sig/ibex/codegen/ruby_table_metadata.rbs +26 -0
  416. data/sig/ibex/codegen/ruby_value_printers.rbs +28 -0
  417. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  418. data/sig/ibex/configuration/explanation.rbs +195 -0
  419. data/sig/ibex/configuration/inspector.rbs +53 -0
  420. data/sig/ibex/configuration.rbs +242 -0
  421. data/sig/ibex/coverage/collector.rbs +78 -0
  422. data/sig/ibex/coverage/event_stream.rbs +44 -0
  423. data/sig/ibex/coverage/report.rbs +102 -0
  424. data/sig/ibex/coverage/runtime_event_validator.rbs +70 -0
  425. data/sig/ibex/coverage.rbs +7 -0
  426. data/sig/ibex/delta_reducer.rbs +38 -0
  427. data/sig/ibex/diff.rbs +47 -0
  428. data/sig/ibex/equiv/machine.rbs +54 -0
  429. data/sig/ibex/equiv.rbs +129 -0
  430. data/sig/ibex/error_messages/parser.rbs +58 -0
  431. data/sig/ibex/error_messages/parser_v2.rbs +67 -0
  432. data/sig/ibex/error_messages/renderer.rbs +23 -0
  433. data/sig/ibex/error_messages/sentence_search.rbs +80 -0
  434. data/sig/ibex/error_messages/update.rbs +43 -0
  435. data/sig/ibex/error_messages.rbs +85 -0
  436. data/sig/ibex/fix.rbs +138 -0
  437. data/sig/ibex/frontend/ast.rbs +237 -22
  438. data/sig/ibex/frontend/bootstrap_parser.rbs +13 -0
  439. data/sig/ibex/frontend/diagnostic.rbs +53 -0
  440. data/sig/ibex/frontend/diagnostic_recovery.rbs +98 -0
  441. data/sig/ibex/frontend/dsl.rbs +33 -4
  442. data/sig/ibex/frontend/formatter.rbs +143 -0
  443. data/sig/ibex/frontend/generated_parser.rbs +228 -68
  444. data/sig/ibex/frontend/generated_parser_base.rbs +65 -12
  445. data/sig/ibex/frontend/generated_parser_includes.rbs +23 -0
  446. data/sig/ibex/frontend/generated_parser_metadata.rbs +23 -0
  447. data/sig/ibex/frontend/generated_parser_parameters.rbs +24 -0
  448. data/sig/ibex/frontend/generation.rbs +6 -0
  449. data/sig/ibex/frontend/lexer.rbs +49 -2
  450. data/sig/ibex/frontend/lexer_recovery.rbs +25 -0
  451. data/sig/ibex/frontend/parser/declarations.rbs +57 -0
  452. data/sig/ibex/frontend/parser/parameters.rbs +28 -0
  453. data/sig/ibex/frontend/parser/rules.rbs +3 -0
  454. data/sig/ibex/frontend/parser.rbs +66 -0
  455. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  456. data/sig/ibex/frontend/regenerator.rbs +11 -0
  457. data/sig/ibex/frontend/resolution.rbs +34 -0
  458. data/sig/ibex/frontend/resolver.rbs +91 -0
  459. data/sig/ibex/frontend/rule_documentation.rbs +42 -0
  460. data/sig/ibex/frontend/source_cursor.rbs +38 -5
  461. data/sig/ibex/frontend/source_document.rbs +119 -0
  462. data/sig/ibex/frontend/source_loader.rbs +66 -0
  463. data/sig/ibex/frontend/source_span.rbs +56 -0
  464. data/sig/ibex/frontend/token_adapter/declaration_document_state.rbs +21 -0
  465. data/sig/ibex/frontend/token_adapter/declaration_lexer_state.rbs +27 -0
  466. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +83 -3
  467. data/sig/ibex/frontend/token_adapter/rule_state.rbs +20 -0
  468. data/sig/ibex/frontend/token_adapter.rbs +11 -2
  469. data/sig/ibex/frontend.rbs +1 -1
  470. data/sig/ibex/fuzz.rbs +71 -0
  471. data/sig/ibex/generation_input.rbs +37 -0
  472. data/sig/ibex/generation_manifest.rbs +70 -0
  473. data/sig/ibex/generation_transaction.rbs +82 -0
  474. data/sig/ibex/generation_transaction_recovery.rbs +36 -0
  475. data/sig/ibex/generation_transaction_validation.rbs +65 -0
  476. data/sig/ibex/grammar_tests.rbs +93 -0
  477. data/sig/ibex/ir/automaton_ir.rbs +35 -10
  478. data/sig/ibex/ir/grammar_ir.rbs +96 -22
  479. data/sig/ibex/ir/lexer_ir.rbs +57 -0
  480. data/sig/ibex/ir/parser_contract.rbs +69 -0
  481. data/sig/ibex/ir/serialize.rbs +75 -23
  482. data/sig/ibex/ir/validator/automaton.rbs +112 -0
  483. data/sig/ibex/ir/validator/base.rbs +69 -0
  484. data/sig/ibex/ir/validator/grammar.rbs +195 -0
  485. data/sig/ibex/ir/validator/lexer.rbs +37 -0
  486. data/sig/ibex/ir/validator.rbs +16 -0
  487. data/sig/ibex/ir.rbs +45 -5
  488. data/sig/ibex/lalr/build_metrics.rbs +60 -0
  489. data/sig/ibex/lalr/builder.rbs +150 -19
  490. data/sig/ibex/lalr/conflict_search.rbs +12 -5
  491. data/sig/ibex/lalr/counterexample.rbs +20 -14
  492. data/sig/ibex/lalr/direct_lookaheads.rbs +93 -0
  493. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  494. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  495. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  496. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  497. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  498. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  499. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  500. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  501. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  502. data/sig/ibex/lalr/ielr_partition.rbs +71 -0
  503. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  504. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  505. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  506. data/sig/ibex/lalr/on_error_reductions.rbs +22 -0
  507. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  508. data/sig/ibex/lalr.rbs +17 -1
  509. data/sig/ibex/location.rbs +67 -0
  510. data/sig/ibex/lsp/document_handlers.rbs +24 -0
  511. data/sig/ibex/lsp/document_store.rbs +94 -0
  512. data/sig/ibex/lsp/document_store_diagnostics.rbs +20 -0
  513. data/sig/ibex/lsp/document_store_validation.rbs +26 -0
  514. data/sig/ibex/lsp/initialization_handlers.rbs +30 -0
  515. data/sig/ibex/lsp/navigation_handlers.rbs +33 -0
  516. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  517. data/sig/ibex/lsp/position_codec.rbs +44 -0
  518. data/sig/ibex/lsp/protocol_error.rbs +32 -0
  519. data/sig/ibex/lsp/request_handlers.rbs +26 -0
  520. data/sig/ibex/lsp/request_support.rbs +40 -0
  521. data/sig/ibex/lsp/server.rbs +55 -0
  522. data/sig/ibex/lsp/symbol_index.rbs +77 -0
  523. data/sig/ibex/lsp/symbol_index_builder.rbs +88 -0
  524. data/sig/ibex/lsp/symbol_index_precedence_references.rbs +18 -0
  525. data/sig/ibex/lsp/symbol_index_source_queries.rbs +26 -0
  526. data/sig/ibex/lsp/symbol_occurrence.rbs +31 -0
  527. data/sig/ibex/lsp/transport.rbs +47 -0
  528. data/sig/ibex/lsp/workspace.rbs +42 -0
  529. data/sig/ibex/lsp/workspace_analyzer.rbs +69 -0
  530. data/sig/ibex/lsp.rbs +7 -0
  531. data/sig/ibex/messages.rbs +26 -0
  532. data/sig/ibex/metrics.rbs +50 -0
  533. data/sig/ibex/normalize/declarations.rbs +31 -0
  534. data/sig/ibex/normalize/diagnostics.rbs +13 -4
  535. data/sig/ibex/normalize/expander.rbs +22 -16
  536. data/sig/ibex/normalize/expression.rbs +11 -9
  537. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  538. data/sig/ibex/normalize/inline_expansion.rbs +129 -0
  539. data/sig/ibex/normalize/inline_validation.rbs +40 -0
  540. data/sig/ibex/normalize/lexer.rbs +37 -0
  541. data/sig/ibex/normalize/named_references.rbs +20 -0
  542. data/sig/ibex/normalize/nodes.rbs +14 -0
  543. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +33 -0
  544. data/sig/ibex/normalize/parameter_lowering.rbs +35 -0
  545. data/sig/ibex/normalize/parameter_substitution.rbs +42 -0
  546. data/sig/ibex/normalize/parameter_validation.rbs +44 -0
  547. data/sig/ibex/normalize/parameters.rbs +51 -0
  548. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  549. data/sig/ibex/normalize/recovery_declarations.rbs +24 -0
  550. data/sig/ibex/normalize.rbs +129 -18
  551. data/sig/ibex/racc_migration/checker.rbs +36 -0
  552. data/sig/ibex/racc_migration/harness.rbs +16 -0
  553. data/sig/ibex/racc_migration/report.rbs +55 -0
  554. data/sig/ibex/racc_migration.rbs +8 -0
  555. data/sig/ibex/rake_task.rbs +51 -0
  556. data/sig/ibex/samples.rbs +60 -0
  557. data/sig/ibex/table_artifact/builder.rbs +93 -0
  558. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  559. data/sig/ibex/table_artifact/document.rbs +27 -0
  560. data/sig/ibex/table_artifact/executor.rbs +66 -0
  561. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  562. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  563. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  564. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  565. data/sig/ibex/table_artifact/validator.rbs +66 -0
  566. data/sig/ibex/table_artifact.rbs +32 -0
  567. data/sig/ibex/table_simulation/result.rbs +36 -0
  568. data/sig/ibex/table_simulation/simulator.rbs +98 -0
  569. data/sig/ibex/table_simulation/step.rbs +42 -0
  570. data/sig/ibex/table_simulation/text.rbs +14 -0
  571. data/sig/ibex/table_simulation.rbs +7 -0
  572. data/sig/ibex/tables.rbs +10 -35
  573. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  574. data/sig/ibex/verification_report/builder.rbs +53 -0
  575. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  576. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  577. data/sig/ibex/verification_report/validator.rbs +114 -0
  578. data/sig/ibex/verification_report.rbs +44 -0
  579. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  580. data/sig/ibex/verify/language_witness.rbs +112 -0
  581. data/sig/ibex/verify/reference_collection.rbs +63 -0
  582. data/sig/ibex/verify/result.rbs +52 -0
  583. data/sig/ibex/verify/verifier.rbs +170 -0
  584. data/sig/ibex/verify.rbs +6 -0
  585. data/sig/ibex/watch/runner.rbs +58 -0
  586. data/sig/ibex/watch/source_snapshot.rbs +46 -0
  587. data/sig/ibex/watch.rbs +7 -0
  588. data/sig/ibex.rbs +2 -0
  589. metadata +524 -19
  590. data/.rubocop.yml +0 -43
  591. data/CHANGELOG.md +0 -30
  592. data/Rakefile +0 -25
  593. data/Steepfile +0 -10
  594. data/docs/compat-notes.md +0 -37
  595. data/docs/lexer-coverage.md +0 -14
  596. data/docs/phase10-extensions.md +0 -27
  597. data/gemfiles/Gemfile +0 -7
  598. data/gemfiles/Gemfile.lock +0 -98
  599. data/lib/ibex/frontend/grammar.y +0 -156
  600. data/lib/ibex/runtime/parser.rb +0 -360
  601. data/lib/ibex/runtime.rb +0 -8
  602. data/sig/ibex/runtime/parser.rbs +0 -167
  603. data/sig/ibex/runtime.rbs +0 -6
data/sig/ibex/ir.rbs CHANGED
@@ -2,15 +2,53 @@
2
2
 
3
3
  module Ibex
4
4
  module IR
5
+ type serialized_value = untyped
6
+
5
7
  type location = { file: String, line: Integer, column: Integer }
6
8
 
7
9
  type precedence = { associativity: Symbol, level: Integer }
8
10
 
9
11
  type named_ref = { name: String, index: Integer }
10
12
 
13
+ type byte_span = { start: Integer, end: Integer }
14
+
15
+ type source_provenance = { file: String?, root: String?, byte_span: byte_span? }
16
+
17
+ type parser_parameter = { name: String, semantic_type: String? }
18
+
19
+ type value_printer = { symbol: String, code: String, loc: location }
20
+
21
+ type recovery_policy = { sync_tokens: Array[String], on_error_reduce: Array[Array[String]] }
22
+
23
+ type grammar_test = { expectation: :accept | :reject, source: String, loc: location }
24
+
25
+ type node_annotation = { name: String, fields: Array[String], loc: location }
26
+
27
+ type lexer_warning = { type: :redos, rule: Integer, loc: location }
28
+
29
+ type lexer_rule_document_value = Integer | String | Symbol | nil | location
30
+
31
+ type lexer_document_value = String | Integer | Array[String] | Array[Hash[Symbol, lexer_rule_document_value]] | Array[lexer_warning] | source_provenance?
32
+
33
+ type parameter_expansion = { rule: String, arguments: Array[String] }
34
+
35
+ type inline_expansion = { rule: String }
36
+
37
+ type production_expansion = { parameter: parameter_expansion?, inline: inline_expansion?, include_chain: Array[source_provenance] }
38
+
39
+ type action_fragment = { kind: :rule | :inline, source: source_provenance? }
40
+
41
+ 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? }
42
+
43
+ type action_composition_plan = { version: Integer, physical: Integer, steps: Array[action_composition_step] }
44
+
45
+ type action_composition = { strategy: String, fragments: Array[action_fragment], ?plan: action_composition_plan }
46
+
11
47
  type user_code_chunks = Hash[String, Array[UserCodeChunk]]
12
48
 
13
- type grammar_options = { result_var: bool, omit_action_call: bool }
49
+ type grammar_options = { result_var: bool, omit_action_call: bool, ?cst: bool }
50
+
51
+ type grammar_mode = :default | :extended
14
52
 
15
53
  type grammar_warning = { type: Symbol, ?symbol: String, ?production: Integer, ?original: Integer, loc: location? }
16
54
 
@@ -28,15 +66,17 @@ module Ibex
28
66
 
29
67
  type conflict_resolution = { by: Symbol, chose: Symbol | Integer, ?associativity: Symbol }
30
68
 
31
- type shift_reduce_conflict = { type: :shift_reduce, symbol: String, shift_to: Integer, reduce: Integer, resolution: conflict_resolution }
69
+ 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
70
 
33
- type reduce_reduce_conflict = { type: :reduce_reduce, symbol: String, reductions: Array[Integer], resolution: conflict_resolution }
71
+ 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
72
 
35
73
  type conflict = shift_reduce_conflict | reduce_reduce_conflict
36
74
 
37
- type conflict_summary = { sr: Integer, resolved_sr: Integer, rr: Integer, expected_sr: Integer, expectation_met: bool }
75
+ type conflict_summary = { sr: Integer, resolved_sr: Integer, rr: Integer, expected_sr: Integer, expectation_met: bool, ?expected_rr: Integer, ?rr_expectation_met: bool }
76
+
77
+ type derivation_node = { symbol: String, ?token: String, ?production: Integer, ?children: Array[derivation_node] }
38
78
 
39
- type interpretation = Hash[Symbol, untyped]
79
+ type interpretation = { kind: Symbol, tree: derivation_node?, ?state: Integer, ?production: Integer }
40
80
 
41
81
  type counterexample = { state: Integer, type: Symbol, symbol_path: Array[String], sentence: Array[String], lookahead_index: Integer, unifying: bool, interpretations: Array[interpretation] }
42
82
  end
@@ -0,0 +1,60 @@
1
+ # Generated from lib/ibex/lalr/build_metrics.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ # Optional measurements are kept explicit for schema stability.
6
+ # rubocop:disable Metrics/ParameterLists
7
+ # Immutable structural measurements from one automaton build. These counts
8
+ # are intended for diagnostics and benchmarks, not parser behavior.
9
+ class BuildMetrics
10
+ attr_reader construction_states: Integer
11
+
12
+ attr_reader canonical_states: Integer?
13
+
14
+ attr_reader final_states: Integer
15
+
16
+ attr_reader strategy: Symbol
17
+
18
+ attr_reader lr0_states: Integer?
19
+
20
+ attr_reader lr0_items: Integer?
21
+
22
+ attr_reader canonical_items: Integer?
23
+
24
+ attr_reader final_items: Integer?
25
+
26
+ attr_reader final_lookahead_items: Integer?
27
+
28
+ attr_reader propagation_edges: Integer?
29
+
30
+ attr_reader ielr_initial_partitions: Integer?
31
+
32
+ attr_reader ielr_final_partitions: Integer?
33
+
34
+ attr_reader ielr_annotations: Integer?
35
+
36
+ attr_reader ielr_annotated_states: Integer?
37
+
38
+ attr_reader ielr_inadequacies: Integer?
39
+
40
+ attr_reader ielr_split_stable_discarded: Integer?
41
+
42
+ attr_reader ielr_lalr_states: Integer?
43
+
44
+ attr_reader ielr_split_states: Integer?
45
+
46
+ attr_reader ielr_unreachable_removed: Integer?
47
+
48
+ attr_reader ielr_remergeable_candidates: Integer?
49
+
50
+ # @rbs (construction_states: Integer, canonical_states: Integer?, final_states: Integer, strategy: Symbol,
51
+ # ?lr0_states: Integer?, ?lr0_items: Integer?, ?canonical_items: Integer?, ?final_items: Integer?,
52
+ # ?final_lookahead_items: Integer?, ?propagation_edges: Integer?, ?ielr_initial_partitions: Integer?,
53
+ # ?ielr_final_partitions: Integer?, ?ielr_annotations: Integer?, ?ielr_annotated_states: Integer?,
54
+ # ?ielr_inadequacies: Integer?, ?ielr_split_stable_discarded: Integer?, ?ielr_lalr_states: Integer?,
55
+ # ?ielr_split_states: Integer?, ?ielr_unreachable_removed: Integer?,
56
+ # ?ielr_remergeable_candidates: Integer?) -> void
57
+ def initialize: (construction_states: Integer, canonical_states: Integer?, final_states: Integer, strategy: Symbol, ?lr0_states: Integer?, ?lr0_items: Integer?, ?canonical_items: Integer?, ?final_items: Integer?, ?final_lookahead_items: Integer?, ?propagation_edges: Integer?, ?ielr_initial_partitions: Integer?, ?ielr_final_partitions: Integer?, ?ielr_annotations: Integer?, ?ielr_annotated_states: Integer?, ?ielr_inadequacies: Integer?, ?ielr_split_stable_discarded: Integer?, ?ielr_lalr_states: Integer?, ?ielr_split_states: Integer?, ?ielr_unreachable_removed: Integer?, ?ielr_remergeable_candidates: Integer?) -> void
58
+ end
59
+ end
60
+ end
@@ -2,30 +2,100 @@
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
 
11
- @resolver: ConflictResolver
12
+ LALR_STRATEGIES: Array[Symbol]
12
13
 
13
- @productions_by_lhs: Hash[Integer, Array[IR::Production]]
14
+ IELR_STRATEGIES: Array[Symbol]
14
15
 
15
- @sets: Analysis::Sets
16
+ @grammar: IR::Grammar
16
17
 
17
18
  @algorithm: Symbol
18
19
 
19
- @grammar: IR::Grammar
20
+ @lalr_strategy: Symbol
21
+
22
+ @ielr_strategy: Symbol
23
+
24
+ @sets: Analysis::Sets
25
+
26
+ @productions_by_lhs: Hash[Integer, Array[IR::Production]]
27
+
28
+ @resolver: ConflictResolver
29
+
30
+ @metrics: BuildMetrics?
31
+
32
+ @start_names: Array[String]
33
+
34
+ @entry_isolation: bool
35
+
36
+ @attribute_entries: bool
20
37
 
21
- # @rbs (IR::Grammar grammar, ?algorithm: Symbol | String) -> void
22
- def initialize: (IR::Grammar grammar, ?algorithm: Symbol | String) -> void
38
+ @profile: bool
39
+
40
+ @remove_unreachable: bool
41
+
42
+ @canonical_suffix_lookahead_cache: Hash[Integer, Hash[Integer, Hash[Integer, Array[Integer]]]]
43
+
44
+ @canonical_item_cache: Hash[Integer, Array[Array[lr_item?]?]]?
45
+
46
+ @canonical_key_radices: [ Integer, Integer, Integer ]?
47
+
48
+ attr_reader metrics: BuildMetrics?
49
+
50
+ # @rbs (IR::Grammar grammar, ?algorithm: Symbol | String, ?lalr_strategy: Symbol | String,
51
+ # ?ielr_strategy: Symbol | String,
52
+ # ?entry_isolation: bool, ?starts: Array[String]?, ?attribute_entries: bool, ?profile: bool,
53
+ # ?remove_unreachable: bool) -> void
54
+ def initialize: (IR::Grammar grammar, ?algorithm: Symbol | String, ?lalr_strategy: Symbol | String, ?ielr_strategy: Symbol | String, ?entry_isolation: bool, ?starts: Array[String]?, ?attribute_entries: bool, ?profile: bool, ?remove_unreachable: bool) -> void
23
55
 
24
56
  # @rbs () -> IR::Automaton
25
57
  def build: () -> IR::Automaton
26
58
 
27
59
  private
28
60
 
61
+ # @rbs (states: Array[IR::AutomatonState], conflict_summary: IR::conflict_summary,
62
+ # entry_states: Hash[String, Integer]) -> IR::Automaton
63
+ def build_output_automaton: (states: Array[IR::AutomatonState], conflict_summary: IR::conflict_summary, entry_states: Hash[String, Integer]) -> IR::Automaton
64
+
65
+ # @rbs (Array[IR::AutomatonState] states) -> IR::conflict_summary
66
+ def conflict_summary: (Array[IR::AutomatonState] states) -> IR::conflict_summary
67
+
68
+ # @rbs () -> [Array[packed_items], transitions, build_collection]
69
+ def automaton_collection: () -> [ Array[packed_items], transitions, build_collection ]
70
+
71
+ # @rbs () -> [Array[packed_items], transitions, build_collection]
72
+ def ielr_collection: () -> [ Array[packed_items], transitions, build_collection ]
73
+
74
+ # @rbs () -> [Array[packed_items], transitions, build_collection]
75
+ def ielr_direct_collection: () -> [ Array[packed_items], transitions, build_collection ]
76
+
77
+ # @rbs () -> [Array[packed_items], transitions, build_collection]
78
+ def canonical_lr1_collection: () -> [ Array[packed_items], transitions, build_collection ]
79
+
80
+ # @rbs (Symbol strategy) -> [Array[packed_items], transitions, build_collection]
81
+ def merged_canonical_collection: (Symbol strategy) -> [ Array[packed_items], transitions, build_collection ]
82
+
83
+ # @rbs () -> untyped
84
+ def direct_collection: () -> untyped
85
+
86
+ # @rbs (Array[item_set] states, strategy: Symbol) -> build_collection
87
+ def canonical_profile: (Array[item_set] states, strategy: Symbol) -> build_collection
88
+
89
+ # @rbs (Array[packed_items] items) -> [Integer?, Integer?]
90
+ def profiled_final_item_counts: (Array[packed_items] items) -> [ Integer?, Integer? ]
91
+
92
+ # @rbs (build_collection collection, Integer final_states, Integer? final_items,
93
+ # Integer? final_lookahead_items) -> BuildMetrics
94
+ def build_metrics: (build_collection collection, Integer final_states, Integer? final_items, Integer? final_lookahead_items) -> BuildMetrics
95
+
96
+ # @rbs () -> String
97
+ def algorithm_name: () -> String
98
+
29
99
  # @rbs () -> [Array[item_set], transitions]
30
100
  def canonical_collection: () -> [ Array[item_set], transitions ]
31
101
 
@@ -35,21 +105,21 @@ module Ibex
35
105
  # @rbs (Array[Integer] suffix, Integer inherited) -> Array[Integer]
36
106
  def suffix_lookaheads: (Array[Integer] suffix, Integer inherited) -> Array[Integer]
37
107
 
108
+ # @rbs (Integer production_id, Integer dot, Integer inherited) -> Array[Integer]
109
+ def canonical_suffix_lookaheads: (Integer production_id, Integer dot, Integer inherited) -> Array[Integer]
110
+
111
+ # @rbs (Integer production_id, Integer dot, Integer lookahead) -> lr_item
112
+ def canonical_item: (Integer production_id, Integer dot, Integer lookahead) -> lr_item
113
+
38
114
  # @rbs (item_set items, Array[lr_item] queue, lr_item item) -> void
39
115
  def enqueue_item: (item_set items, Array[lr_item] queue, lr_item item) -> void
40
116
 
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
117
+ # @rbs (item_set items) -> Hash[Integer, item_set]
118
+ def shifted_kernels: (item_set items) -> Hash[Integer, item_set]
46
119
 
47
120
  # @rbs (Array[item_set] states, transitions transitions) -> [Array[packed_items], transitions]
48
121
  def merge_lalr: (Array[item_set] states, transitions transitions) -> [ Array[packed_items], transitions ]
49
122
 
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
123
  # @rbs (Array[item_set] states) -> Array[packed_items]
54
124
  def pack_canonical_items: (Array[item_set] states) -> Array[packed_items]
55
125
 
@@ -65,6 +135,11 @@ module Ibex
65
135
  # @rbs (Integer state_id, Array[IR::AutomatonItem] items, Hash[Integer, Integer] transitions) -> IR::AutomatonState
66
136
  def build_state: (Integer state_id, Array[IR::AutomatonItem] items, Hash[Integer, Integer] transitions) -> IR::AutomatonState
67
137
 
138
+ # Conflict hashes are produced locally immediately before this boundary.
139
+ # Both conflict variants carry the same optional midrule provenance field.
140
+ # @rbs (IR::conflict conflict) -> IR::conflict
141
+ def attribute_midrule_conflict: (IR::conflict conflict) -> IR::conflict
142
+
68
143
  # @rbs (Array[IR::AutomatonItem] items, Hash[Integer, Array[IR::parser_action]] candidates) -> void
69
144
  def add_completed_actions: (Array[IR::AutomatonItem] items, Hash[Integer, Array[IR::parser_action]] candidates) -> void
70
145
 
@@ -75,11 +150,67 @@ module Ibex
75
150
  # @rbs (Integer production_id) -> Array[Integer]
76
151
  def rhs_for: (Integer production_id) -> Array[Integer]
77
152
 
78
- # @rbs (item_set items) -> Array[item_core]
79
- def core_key: (item_set items) -> Array[item_core]
153
+ # @rbs () -> [Integer, Integer, Integer]
154
+ def canonical_key_radices: () -> [ Integer, Integer, Integer ]
155
+
156
+ # @rbs (item_set items) -> Array[Integer]
157
+ def core_key: (item_set items) -> Array[Integer]
158
+
159
+ # @rbs (item_set items) -> Array[Integer]
160
+ def item_key: (item_set items) -> Array[Integer]
161
+
162
+ # @rbs (String name) -> Integer
163
+ def augmented_production: (String name) -> Integer
164
+
165
+ # @rbs (Integer production_id) -> String
166
+ def start_name_for_augmented: (Integer production_id) -> String
167
+
168
+ # @rbs (Array[packed_items] items) -> Hash[String, Integer]
169
+ def entry_states_for: (Array[packed_items] items) -> Hash[String, Integer]
170
+
171
+ # @rbs () -> IR::Automaton
172
+ def build_isolated_automaton: () -> IR::Automaton
173
+
174
+ # @rbs (Array[[String, IR::Automaton, BuildMetrics]] entries, Integer construction_states,
175
+ # Integer? canonical_states, Integer final_states) -> BuildMetrics
176
+ def isolated_metrics: (Array[[ String, IR::Automaton, BuildMetrics ]] entries, Integer construction_states, Integer? canonical_states, Integer final_states) -> BuildMetrics
177
+
178
+ # @rbs (Array[[String, IR::Automaton, BuildMetrics]] entries, Symbol method) -> Integer?
179
+ def sum_optional_metric: (Array[[ String, IR::Automaton, BuildMetrics ]] entries, Symbol method) -> Integer?
180
+
181
+ # @rbs () -> Integer
182
+ def output_schema_version: () -> Integer
183
+
184
+ # @rbs () -> String?
185
+ def output_entry_construction: () -> String?
186
+
187
+ # @rbs (String name) -> [String, IR::Automaton, BuildMetrics]
188
+ def isolated_entry: (String name) -> [ String, IR::Automaton, BuildMetrics ]
189
+
190
+ # @rbs (IR::AutomatonState state, Integer offset, String entry) -> IR::AutomatonState
191
+ def offset_state: (IR::AutomatonState state, Integer offset, String entry) -> IR::AutomatonState
192
+
193
+ # @rbs (IR::parser_action action, Integer offset) -> IR::parser_action
194
+ def offset_action: (IR::parser_action action, Integer offset) -> IR::parser_action
195
+
196
+ # @rbs (IR::parser_action? action, Integer offset) -> IR::parser_action?
197
+ def offset_default_action: (IR::parser_action? action, Integer offset) -> IR::parser_action?
198
+
199
+ # @rbs (IR::conflict conflict, Integer offset, String entry) -> IR::conflict
200
+ def offset_conflict: (IR::conflict conflict, Integer offset, String entry) -> IR::conflict
201
+
202
+ # @rbs (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) ->
203
+ # Array[IR::AutomatonState]
204
+ def attribute_entry_conflicts: (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[IR::AutomatonState]
205
+
206
+ # @rbs (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[Array[String]]
207
+ def entry_reachability: (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[Array[String]]
208
+
209
+ # @rbs () -> Set[conflict_fingerprint]
210
+ def isolated_conflict_fingerprints: () -> Set[conflict_fingerprint]
80
211
 
81
- # @rbs (item_set items) -> Array[lr_item]
82
- def item_key: (item_set items) -> Array[lr_item]
212
+ # @rbs (IR::conflict conflict) -> conflict_fingerprint
213
+ def conflict_fingerprint: (IR::conflict conflict) -> conflict_fingerprint
83
214
  end
84
215
  end
85
216
  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,15 +40,23 @@ 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
44
48
 
45
- # @rbs () -> search_result?
46
- def call: () -> search_result?
49
+ # @rbs () -> search_outcome
50
+ def call: () -> search_outcome
51
+
52
+ # @rbs () -> bool
53
+ def exhausted?: () -> bool
47
54
 
48
55
  private
49
56
 
57
+ # @rbs (:found | :not_found | :exhausted status, ?search_result? result) -> search_outcome
58
+ def outcome: (:found | :not_found | :exhausted status, ?search_result? result) -> search_outcome
59
+
50
60
  # @rbs (Configuration current) -> Array[Configuration]
51
61
  def conflict_configurations: (Configuration current) -> Array[Configuration]
52
62
 
@@ -123,9 +133,6 @@ module Ibex
123
133
 
124
134
  # @rbs () -> Integer
125
135
  def count_configuration: () -> Integer
126
-
127
- # @rbs () -> bool
128
- def exhausted?: () -> bool
129
136
  end
130
137
  end
131
138
  end
@@ -11,22 +11,26 @@ module Ibex
11
11
  # @rbs (IR::Automaton automaton, ?max_tokens: Integer, ?max_configurations: Integer) -> void
12
12
  def initialize: (IR::Automaton automaton, ?max_tokens: Integer, ?max_configurations: Integer) -> void
13
13
 
14
- # @rbs () -> Array[IR::counterexample]
15
- def all: () -> Array[IR::counterexample]
14
+ # @rbs () -> Array[search_counterexample]
15
+ def all: () -> Array[search_counterexample]
16
+
17
+ # @rbs (Integer state_id, Integer conflict_index) -> search_counterexample
18
+ def for_conflict: (Integer state_id, Integer conflict_index) -> search_counterexample
16
19
 
17
20
  private
18
21
 
19
- # @rbs (IR::AutomatonState state, IR::conflict conflict) -> IR::counterexample
20
- def build_example: (IR::AutomatonState state, IR::conflict conflict) -> IR::counterexample
22
+ # @rbs (IR::AutomatonState state, IR::conflict conflict) -> search_counterexample
23
+ def build_example: (IR::AutomatonState state, IR::conflict conflict) -> search_counterexample
21
24
 
22
- # @rbs (IR::AutomatonState state, IR::conflict conflict, Hash[Symbol, untyped] result) -> IR::counterexample
23
- def unifying_example: (IR::AutomatonState state, IR::conflict conflict, Hash[Symbol, untyped] result) -> IR::counterexample
25
+ # @rbs (IR::AutomatonState state, IR::conflict conflict, search_outcome outcome,
26
+ # search_result result) -> search_counterexample
27
+ def unifying_example: (IR::AutomatonState state, IR::conflict conflict, search_outcome outcome, search_result result) -> search_counterexample
24
28
 
25
- # @rbs (IR::AutomatonState state, IR::conflict conflict) -> IR::counterexample
26
- def reachability_example: (IR::AutomatonState state, IR::conflict conflict) -> IR::counterexample
29
+ # @rbs (IR::AutomatonState state, IR::conflict conflict, search_outcome outcome) -> search_counterexample
30
+ def reachability_example: (IR::AutomatonState state, IR::conflict conflict, search_outcome outcome) -> search_counterexample
27
31
 
28
- # @rbs (Integer target) -> Array[Integer]
29
- def shortest_state_path: (Integer target) -> Array[Integer]
32
+ # @rbs (Integer target, IR::conflict conflict) -> Array[Integer]
33
+ def shortest_state_path: (Integer target, IR::conflict conflict) -> Array[Integer]
30
34
 
31
35
  # @rbs () -> Hash[Integer, Array[Integer]]
32
36
  def compute_shortest_yields: () -> Hash[Integer, Array[Integer]]
@@ -37,11 +41,13 @@ module Ibex
37
41
  # @rbs (IR::conflict conflict) -> Array[IR::interpretation]
38
42
  def interpretations: (IR::conflict conflict) -> Array[IR::interpretation]
39
43
 
40
- # @rbs (IR::shift_reduce_conflict conflict) -> IR::interpretation
41
- def shift_interpretation: (IR::shift_reduce_conflict conflict) -> IR::interpretation
44
+ # The compact counterexample tree intentionally uses a lightweight shape
45
+ # whose children are symbol names rather than recursively expanded nodes.
46
+ # @rbs (IR::shift_reduce_conflict conflict) -> untyped
47
+ def shift_interpretation: (IR::shift_reduce_conflict conflict) -> untyped
42
48
 
43
- # @rbs (Integer production_id) -> IR::interpretation
44
- def reduce_interpretation: (Integer production_id) -> IR::interpretation
49
+ # @rbs (Integer production_id) -> untyped
50
+ def reduce_interpretation: (Integer production_id) -> untyped
45
51
 
46
52
  # @rbs (Array[Integer] symbol_ids) -> Array[String]
47
53
  def names: (Array[Integer] symbol_ids) -> Array[String]
@@ -0,0 +1,93 @@
1
+ # Generated from lib/ibex/lalr/direct_lookaheads.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ # Builds an LR(0) collection and propagates LALR(1) lookaheads directly
6
+ # over item occurrences. Canonical LR(1) states are never materialized.
7
+ class DirectLookaheads
8
+ AUGMENTED_PRODUCTION: Integer
9
+
10
+ EMPTY_PRODUCTIONS: Array[IR::Production]
11
+
12
+ EMPTY_NODES: Array[Integer]
13
+
14
+ attr_reader lr0_state_count: Integer?
15
+
16
+ attr_reader lr0_item_count: Integer?
17
+
18
+ attr_reader propagation_edge_count: Integer?
19
+
20
+ attr_reader states: Array[core_set]
21
+
22
+ attr_reader transitions: transitions
23
+
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
26
+
27
+ # @rbs () -> [Array[packed_items], transitions]
28
+ def build: () -> [ Array[packed_items], transitions ]
29
+
30
+ # @rbs (Integer index) -> Integer
31
+ def augmented_production: (Integer index) -> Integer
32
+
33
+ private
34
+
35
+ # @rbs () -> void
36
+ def initialize_item_encoding: () -> void
37
+
38
+ # @rbs () -> [Array[core_set], transitions]
39
+ def lr0_collection: () -> [ Array[core_set], transitions ]
40
+
41
+ # @rbs (core_set seed) -> core_set
42
+ def closure: (core_set seed) -> core_set
43
+
44
+ # @rbs (core_set items) -> Hash[Integer, core_set]
45
+ def shifted_kernels: (core_set items) -> Hash[Integer, core_set]
46
+
47
+ # @rbs (Array[core_set] states) -> Array[packed_items]
48
+ def empty_lookaheads: (Array[core_set] states) -> Array[packed_items]
49
+
50
+ # @rbs (Array[core_set] states, transitions transitions, Array[packed_items] lookaheads) ->
51
+ # Hash[Integer, Array[Integer]]
52
+ def propagation_graph: (Array[core_set] states, transitions transitions, Array[packed_items] lookaheads) -> Hash[Integer, Array[Integer]]
53
+
54
+ # @rbs (Hash[Integer, Array[Integer]] edges, transitions transitions,
55
+ # 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
57
+
58
+ # @rbs (Hash[Integer, Array[Integer]] edges, Array[packed_items] lookaheads,
59
+ # 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
64
+
65
+ # @rbs (Array[packed_items] lookaheads, Integer node) -> Set[Integer]
66
+ def node_set: (Array[packed_items] lookaheads, Integer node) -> Set[Integer]
67
+
68
+ # @rbs (Integer state_id, Integer production_id, Integer dot) -> Integer
69
+ def node_id: (Integer state_id, Integer production_id, Integer dot) -> Integer
70
+
71
+ # @rbs (Integer bits) -> Array[Integer]
72
+ def terminal_ids: (Integer bits) -> Array[Integer]
73
+
74
+ # @rbs (Integer production_id) -> Array[Integer]
75
+ def rhs_for: (Integer production_id) -> Array[Integer]
76
+
77
+ # @rbs (Integer production_id, Integer rhs_length) -> Array[item_core]
78
+ def item_cores_for: (Integer production_id, Integer rhs_length) -> Array[item_core]
79
+
80
+ # @rbs (Integer production_id, Integer dot) -> item_core
81
+ def item_core: (Integer production_id, Integer dot) -> item_core
82
+
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]
91
+ end
92
+ end
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