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
@@ -0,0 +1,112 @@
1
+ # Generated from lib/ibex/verify/language_witness.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Verify
5
+ type witness_status = :accepted | :error | :missing_entry | :shifted
6
+
7
+ # Compares canonical and submitted parser acceptance over a bounded set of
8
+ # terminal sequences. This is a semantic witness, not a proof of language
9
+ # equivalence: the reference collection is complete within its budgets and
10
+ # the token enumeration is deliberately finite.
11
+ class LanguageWitness
12
+ class Difference
13
+ attr_reader entry: String
14
+
15
+ attr_reader tokens: Array[String]
16
+
17
+ attr_reader canonical: witness_status
18
+
19
+ attr_reader target: witness_status
20
+
21
+ # @rbs (entry: String, tokens: Array[String], canonical: witness_status,
22
+ # target: witness_status) -> void
23
+ def initialize: (entry: String, tokens: Array[String], canonical: witness_status, target: witness_status) -> void
24
+ end
25
+
26
+ class Result
27
+ attr_reader differences: Array[Difference]
28
+
29
+ attr_reader explored: Integer
30
+
31
+ attr_reader truncated: bool
32
+
33
+ attr_reader max_tokens: Integer
34
+
35
+ attr_reader max_cases: Integer
36
+
37
+ # @rbs (differences: Array[Difference], explored: Integer, truncated: bool,
38
+ # max_tokens: Integer, max_cases: Integer) -> void
39
+ def initialize: (differences: Array[Difference], explored: Integer, truncated: bool, max_tokens: Integer, max_cases: Integer) -> void
40
+
41
+ # @rbs () -> bool
42
+ def ok?: () -> bool
43
+ end
44
+
45
+ # @rbs (IR::Grammar grammar, IR::Automaton target, ?max_tokens: Integer,
46
+ # ?max_cases: Integer, ?max_states: Integer, ?max_items: Integer) -> void
47
+ def initialize: (IR::Grammar grammar, IR::Automaton target, ?max_tokens: Integer, ?max_cases: Integer, ?max_states: Integer, ?max_items: Integer) -> void
48
+
49
+ # @rbs () -> Result
50
+ def verify: () -> Result
51
+
52
+ private
53
+
54
+ # @rbs () -> Array[IR::GrammarSymbol]
55
+ def input_tokens: () -> Array[IR::GrammarSymbol]
56
+
57
+ # @rbs (String, Array[Integer], Array[Difference], Integer) -> [Integer, bool]
58
+ def verify_entry: (String, Array[Integer], Array[Difference], Integer) -> [ Integer, bool ]
59
+
60
+ # @rbs (Integer id) -> String
61
+ def token_name: (Integer id) -> String
62
+
63
+ # @rbs (String entry, Array[Integer]) -> witness_status
64
+ def simulate_target: (String entry, Array[Integer]) -> witness_status
65
+
66
+ # Canonical collection is intentionally built here rather than through
67
+ # the production construction entry point, keeping this witness
68
+ # independent from construction code.
69
+ class CanonicalMachine
70
+ # @rbs (IR::Grammar grammar, max_states: Integer, max_items: Integer) -> void
71
+ def initialize: (IR::Grammar grammar, max_states: Integer, max_items: Integer) -> void
72
+
73
+ # @rbs (String entry, Array[Integer]) -> witness_status
74
+ def simulate: (String entry, Array[Integer]) -> witness_status
75
+
76
+ private
77
+
78
+ # @rbs (ReferenceCollection::Collection) -> Array[IR::AutomatonState]
79
+ def build_states: (ReferenceCollection::Collection) -> Array[IR::AutomatonState]
80
+
81
+ # @rbs (ReferenceCollection::Collection, Set[Array[Integer]], Integer) -> IR::AutomatonState
82
+ def build_state: (ReferenceCollection::Collection, Set[Array[Integer]], Integer) -> IR::AutomatonState
83
+
84
+ # @rbs (Array[IR::AutomatonItem], Hash[Integer, Integer]) -> Hash[Integer, IR::parser_action]
85
+ def resolve_actions: (Array[IR::AutomatonItem], Hash[Integer, Integer]) -> Hash[Integer, IR::parser_action]
86
+
87
+ # @rbs (Hash[Integer, Integer]) -> Hash[Integer, Array[IR::parser_action]]
88
+ def transition_candidates: (Hash[Integer, Integer]) -> Hash[Integer, Array[IR::parser_action]]
89
+
90
+ # @rbs (Array[IR::AutomatonItem], Hash[Integer, Array[IR::parser_action]]) -> void
91
+ def completed_candidates: (Array[IR::AutomatonItem], Hash[Integer, Array[IR::parser_action]]) -> void
92
+
93
+ # @rbs (Integer production_id) -> Array[Integer]
94
+ def rhs_for: (Integer production_id) -> Array[Integer]
95
+ end
96
+
97
+ # A stack machine shared by the canonical reference and submitted IR.
98
+ class Machine
99
+ # @rbs (Array[IR::AutomatonState] states, IR::Grammar grammar) -> void
100
+ def initialize: (Array[IR::AutomatonState] states, IR::Grammar grammar) -> void
101
+
102
+ # @rbs (Integer initial, Array[Integer]) -> witness_status
103
+ def simulate: (Integer initial, Array[Integer]) -> witness_status
104
+
105
+ private
106
+
107
+ # @rbs (Array[Integer], Integer) -> witness_status
108
+ def consume: (Array[Integer], Integer) -> witness_status
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,63 @@
1
+ # Generated from lib/ibex/verify/reference_collection.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Verify
5
+ # Independently derives canonical LR(1) and LR(0) item collections.
6
+ class ReferenceCollection
7
+ # Immutable canonical collection and its symbol transitions.
8
+ class Collection
9
+ attr_reader states: Array[Set[Array[Integer]]]
10
+
11
+ attr_reader transitions: Array[Hash[Integer, Integer]]
12
+
13
+ # @rbs (states: Array[Set[Array[Integer]]], transitions: Array[Hash[Integer, Integer]]) -> void
14
+ def initialize: (states: Array[Set[Array[Integer]]], transitions: Array[Hash[Integer, Integer]]) -> void
15
+ end
16
+
17
+ # @rbs (IR::Grammar grammar, ?max_states: Integer, ?max_items: Integer) -> void
18
+ def initialize: (IR::Grammar grammar, ?max_states: Integer, ?max_items: Integer) -> void
19
+
20
+ # @rbs (Symbol kind) -> Collection
21
+ def build: (Symbol kind) -> Collection
22
+
23
+ private
24
+
25
+ # @rbs (Array[Set[Array[Integer]]] seeds, Symbol kind) -> Collection
26
+ def collection: (Array[Set[Array[Integer]]] seeds, Symbol kind) -> Collection
27
+
28
+ # @rbs (Array[Set[Array[Integer]]] states, Hash[Array[Array[Integer]], Integer] indexes,
29
+ # Set[Array[Integer]] state) -> Integer
30
+ def insert_state: (Array[Set[Array[Integer]]] states, Hash[Array[Array[Integer]], Integer] indexes, Set[Array[Integer]] state) -> Integer
31
+
32
+ # @rbs (Set[Array[Integer]] seed, Symbol kind) -> Set[Array[Integer]]
33
+ def closure: (Set[Array[Integer]] seed, Symbol kind) -> Set[Array[Integer]]
34
+
35
+ # @rbs (Set[Array[Integer]] state, Integer symbol_id, Symbol kind) -> Set[Array[Integer]]
36
+ def go_to: (Set[Array[Integer]] state, Integer symbol_id, Symbol kind) -> Set[Array[Integer]]
37
+
38
+ # @rbs (Set[Array[Integer]] items, Array[Array[Integer]] queue, Array[Integer] item) -> void
39
+ def add_item: (Set[Array[Integer]] items, Array[Array[Integer]] queue, Array[Integer] item) -> void
40
+
41
+ # @rbs () -> void
42
+ def account_item: () -> void
43
+
44
+ # @rbs (Set[Array[Integer]] state) -> Array[Integer]
45
+ def next_symbols: (Set[Array[Integer]] state) -> Array[Integer]
46
+
47
+ # @rbs (Integer production_id, Integer dot, Integer? inherited) -> Array[Integer]
48
+ def closure_lookaheads: (Integer production_id, Integer dot, Integer? inherited) -> Array[Integer]
49
+
50
+ # @rbs (Integer production_id) -> Array[Integer]
51
+ def rhs_for: (Integer production_id) -> Array[Integer]
52
+
53
+ # @rbs (Integer production_id) -> IR::GrammarSymbol
54
+ def start_symbol: (Integer production_id) -> IR::GrammarSymbol
55
+
56
+ # @rbs () -> Integer
57
+ def eof_id: () -> Integer
58
+
59
+ # @rbs () -> Hash[Symbol, Integer]
60
+ def bounds: () -> Hash[Symbol, Integer]
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,52 @@
1
+ # Generated from lib/ibex/verify/result.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Verify
5
+ # One stable verifier finding.
6
+ class Violation
7
+ attr_reader id: String
8
+
9
+ attr_reader location: String
10
+
11
+ attr_reader message: String
12
+
13
+ # @rbs (id: String, location: String, message: String) -> void
14
+ def initialize: (id: String, location: String, message: String) -> void
15
+
16
+ # @rbs () -> Hash[Symbol, String]
17
+ def to_h: () -> Hash[Symbol, String]
18
+ end
19
+
20
+ # Immutable independent-verification report.
21
+ class Result
22
+ type report_value = String | Integer | bool | Array[String] | Hash[Symbol, Integer] | Array[Hash[Symbol, String]]
23
+
24
+ attr_reader algorithm: String
25
+
26
+ attr_reader strict: bool
27
+
28
+ attr_reader checks: Array[String]
29
+
30
+ attr_reader violations: Array[Violation]
31
+
32
+ attr_reader bounds: Hash[Symbol, Integer]
33
+
34
+ # @rbs (algorithm: String, strict: bool, checks: Array[String], violations: Array[Violation],
35
+ # bounds: Hash[Symbol, Integer]) -> void
36
+ def initialize: (algorithm: String, strict: bool, checks: Array[String], violations: Array[Violation], bounds: Hash[Symbol, Integer]) -> void
37
+
38
+ # @rbs () -> bool
39
+ def valid?: () -> bool
40
+
41
+ # @rbs () -> Hash[Symbol, report_value]
42
+ def to_h: () -> Hash[Symbol, report_value]
43
+ end
44
+
45
+ class BudgetExceeded < Ibex::Error
46
+ attr_reader bounds: Hash[Symbol, Integer]
47
+
48
+ # @rbs (String message, bounds: Hash[Symbol, Integer]) -> void
49
+ def initialize: (String message, bounds: Hash[Symbol, Integer]) -> void
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,170 @@
1
+ # Generated from lib/ibex/verify/verifier.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Verify
5
+ # Checks Automaton IR semantics against an independently derived collection.
6
+ # rubocop:disable Metrics/ClassLength -- V1-V9 share one violation and item-identity model.
7
+ class Verifier
8
+ DEFAULT_CHECKS: Array[String]
9
+
10
+ STRICT_CHECKS: Array[String]
11
+
12
+ ERROR_ACTION: IR::error_action
13
+
14
+ # @rbs (IR::Automaton automaton, ?strict: bool, ?max_states: Integer, ?max_items: Integer) -> void
15
+ def initialize: (IR::Automaton automaton, ?strict: bool, ?max_states: Integer, ?max_items: Integer) -> void
16
+
17
+ # @rbs () -> Result
18
+ def verify: () -> Result
19
+
20
+ private
21
+
22
+ # V9 is a bounded semantic witness for IELR only. It deliberately does
23
+ # not replace V1/V2 or claim unbounded language equivalence.
24
+ # @rbs () -> void
25
+ def verify_ielr_adequacy: () -> void
26
+
27
+ # @rbs () -> void
28
+ def verify_grammar_digest: () -> void
29
+
30
+ # @rbs () -> void
31
+ def verify_item_collection: () -> void
32
+
33
+ # SLR lookaheads affect completed items only. The builder may retain
34
+ # propagation lookaheads on non-completed items, but they cannot select
35
+ # an ACTION cell and therefore are outside the SLR semantic contract.
36
+ # @rbs (Array[Set[Array[Integer]]] expected_states) -> void
37
+ def compare_slr_states: (Array[Set[Array[Integer]]] expected_states) -> void
38
+
39
+ # @rbs (IR::AutomatonState state,
40
+ # Hash[Array[Array[Integer]], Array[Set[Array[Integer]]]] expected_by_core) ->
41
+ # Array[Array[Integer]]?
42
+ def verify_slr_state: (IR::AutomatonState state, Hash[Array[Array[Integer]], Array[Set[Array[Integer]]]] expected_by_core) -> Array[Array[Integer]]?
43
+
44
+ # @rbs (IR::AutomatonState state, IR::AutomatonItem item) -> void
45
+ def verify_slr_lookaheads: (IR::AutomatonState state, IR::AutomatonItem item) -> void
46
+
47
+ # @rbs () -> Array[Set[Array[Integer]]]
48
+ def lr1_states: () -> Array[Set[Array[Integer]]]
49
+
50
+ # @rbs () -> Array[Set[Array[Integer]]]
51
+ def lalr_states: () -> Array[Set[Array[Integer]]]
52
+
53
+ # @rbs () -> Array[Set[Array[Integer]]]
54
+ def canonical_lr1_states: () -> Array[Set[Array[Integer]]]
55
+
56
+ # @rbs (Array[Set[Array[Integer]]] expected_states) -> void
57
+ def compare_expected_states: (Array[Set[Array[Integer]]] expected_states) -> void
58
+
59
+ # @rbs (Array[Set[Array[Integer]]] expected_states) -> void
60
+ def compare_ielr_states: (Array[Set[Array[Integer]]] expected_states) -> void
61
+
62
+ # @rbs () -> void
63
+ def verify_transitions_and_actions: () -> void
64
+
65
+ # @rbs (IR::AutomatonState state) -> void
66
+ def verify_transition_items: (IR::AutomatonState state) -> void
67
+
68
+ # @rbs (IR::AutomatonState state) -> void
69
+ def verify_state_actions: (IR::AutomatonState state) -> void
70
+
71
+ # @rbs (IR::AutomatonState state, IR::GrammarSymbol terminal, Array[IR::parser_action] expected,
72
+ # IR::parser_action actual, Array[Integer] conflict_tokens) -> void
73
+ def verify_terminal_action: (IR::AutomatonState state, IR::GrammarSymbol terminal, Array[IR::parser_action] expected, IR::parser_action actual, Array[Integer] conflict_tokens) -> void
74
+
75
+ # @rbs (IR::AutomatonState state, IR::GrammarSymbol terminal, IR::parser_action actual) -> void
76
+ def verify_error_cell: (IR::AutomatonState state, IR::GrammarSymbol terminal, IR::parser_action actual) -> void
77
+
78
+ # @rbs (IR::AutomatonState state, IR::GrammarSymbol terminal, IR::parser_action expected,
79
+ # IR::parser_action actual) -> void
80
+ def verify_single_action: (IR::AutomatonState state, IR::GrammarSymbol terminal, IR::parser_action expected, IR::parser_action actual) -> void
81
+
82
+ # @rbs (IR::AutomatonState state, IR::GrammarSymbol terminal, Array[IR::parser_action] expected,
83
+ # IR::parser_action actual, Array[Integer] conflict_tokens) -> void
84
+ def verify_conflicted_action: (IR::AutomatonState state, IR::GrammarSymbol terminal, Array[IR::parser_action] expected, IR::parser_action actual, Array[Integer] conflict_tokens) -> void
85
+
86
+ # @rbs () -> void
87
+ def verify_table_formats: () -> void
88
+
89
+ # @rbs (Tables::action_table table, Integer row) -> Hash[Integer, IR::runtime_action]
90
+ def action_row: (Tables::action_table table, Integer row) -> Hash[Integer, IR::runtime_action]
91
+
92
+ # @rbs (Tables::goto_table table, Integer row) -> Hash[Integer, untyped]
93
+ def goto_row: (Tables::goto_table table, Integer row) -> Hash[Integer, untyped]
94
+
95
+ # @rbs () -> void
96
+ def verify_reachability_and_productivity: () -> void
97
+
98
+ # @rbs () -> void
99
+ def verify_epsilon_termination: () -> void
100
+
101
+ # @rbs () -> void
102
+ def verify_conflict_determinism: () -> void
103
+
104
+ # @rbs (IR::AutomatonState state, IR::conflict conflict) -> void
105
+ def verify_conflict_resolution: (IR::AutomatonState state, IR::conflict conflict) -> void
106
+
107
+ # @rbs (IR::conflict conflict) -> Array[IR::parser_action]
108
+ def conflict_candidates: (IR::conflict conflict) -> Array[IR::parser_action]
109
+
110
+ # @rbs (IR::conflict conflict) -> IR::parser_action?
111
+ def resolved_conflict_action: (IR::conflict conflict) -> IR::parser_action?
112
+
113
+ # @rbs (IR::AutomatonState state) -> Hash[Integer, Array[IR::parser_action]]
114
+ def action_candidates: (IR::AutomatonState state) -> Hash[Integer, Array[IR::parser_action]]
115
+
116
+ # @rbs (IR::AutomatonState state, Integer symbol_id) -> Array[Array[Integer]]
117
+ def shifted_items: (IR::AutomatonState state, Integer symbol_id) -> Array[Array[Integer]]
118
+
119
+ # @rbs (IR::AutomatonState state, Integer terminal_id) -> IR::parser_action
120
+ def effective_action: (IR::AutomatonState state, Integer terminal_id) -> IR::parser_action
121
+
122
+ # @rbs () -> Set[Integer]
123
+ def reachable_states: () -> Set[Integer]
124
+
125
+ # @rbs () -> Set[Integer]
126
+ def productive_nonterminals: () -> Set[Integer]
127
+
128
+ # @rbs (Hash[Integer, Integer] edges) -> bool
129
+ def directed_cycle?: (Hash[Integer, Integer] edges) -> bool
130
+
131
+ # @rbs (IR::AutomatonState state) -> Set[Array[Integer]]
132
+ def expanded_items: (IR::AutomatonState state) -> Set[Array[Integer]]
133
+
134
+ # Automaton IR intentionally exposes every augmented production as -1,
135
+ # even when construction internally assigned one per start symbol.
136
+ # @rbs (Set[Array[Integer]] state) -> Set[Array[Integer]]
137
+ def visible_state: (Set[Array[Integer]] state) -> Set[Array[Integer]]
138
+
139
+ # @rbs (Set[Array[Integer]] state) -> Array[Array[Integer]]
140
+ def core_key: (Set[Array[Integer]] state) -> Array[Array[Integer]]
141
+
142
+ # @rbs (Array[Set[Array[Integer]]] states) -> Hash[Array[Array[Integer]], Integer]
143
+ def multiset: (Array[Set[Array[Integer]]] states) -> Hash[Array[Array[Integer]], Integer]
144
+
145
+ # @rbs (Integer production_id) -> Array[Integer]
146
+ def follow_ids: (Integer production_id) -> Array[Integer]
147
+
148
+ # @rbs (Integer production_id) -> Array[Integer]
149
+ def rhs_for: (Integer production_id) -> Array[Integer]
150
+
151
+ # @rbs (Integer production_id) -> IR::GrammarSymbol
152
+ def start_symbol: (Integer production_id) -> IR::GrammarSymbol
153
+
154
+ # @rbs () -> Integer
155
+ def eof_id: () -> Integer
156
+
157
+ # @rbs () -> Array[Integer]
158
+ def start_symbol_ids: () -> Array[Integer]
159
+
160
+ # @rbs () -> ReferenceCollection
161
+ def reference: () -> ReferenceCollection
162
+
163
+ # @rbs (String id, String location, String message) -> void
164
+ def violation: (String id, String location, String message) -> void
165
+
166
+ # @rbs (IR::AutomatonState state) -> String
167
+ def state_path: (IR::AutomatonState state) -> String
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,6 @@
1
+ # Generated from lib/ibex/verify.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Verify
5
+ end
6
+ end
@@ -0,0 +1,58 @@
1
+ # Generated from lib/ibex/watch/runner.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Watch
5
+ interface _BuildResult
6
+ def source_paths: () -> Array[String]
7
+
8
+ def attempted_paths: () -> Array[String]
9
+ end
10
+
11
+ interface _Output
12
+ def puts: (*Object?) -> Object?
13
+ end
14
+
15
+ # Polls source fingerprints, debounces changes, and publishes stable builds.
16
+ class Runner
17
+ DEFAULT_INTERVAL: Float
18
+
19
+ DEFAULT_DEBOUNCE: Float
20
+
21
+ # rubocop:disable Layout/LineLength
22
+ # @rbs (paths: Array[String], build: ^() -> _BuildResult, publish: ^(_BuildResult, SourceSnapshot, ^() -> bool) -> void, failure_paths: ^() -> Array[String], stderr: _Output, clock: ^() -> Float, sleeper: ^(Float) -> void, iteration_hook: ^(Symbol, Integer, Array[String]) -> (Integer | Symbol | nil), ?interval: Float, ?debounce: Float) -> void
23
+ def initialize: (paths: Array[String], build: ^() -> _BuildResult, publish: ^(_BuildResult, SourceSnapshot, ^() -> bool) -> void, failure_paths: ^() -> Array[String], stderr: _Output, clock: ^() -> Float, sleeper: ^(Float) -> void, iteration_hook: ^(Symbol, Integer, Array[String]) -> (Integer | Symbol | nil), ?interval: Float, ?debounce: Float) -> void
24
+
25
+ # @rbs () -> Integer
26
+ def run: () -> Integer
27
+
28
+ private
29
+
30
+ # @rbs (SourceSnapshot before) -> [SourceSnapshot, bool]
31
+ def build_once: (SourceSnapshot before) -> [ SourceSnapshot, bool ]
32
+
33
+ # @rbs (SourceSnapshot snapshot) -> SourceSnapshot
34
+ def wait_for_change: (SourceSnapshot snapshot) -> SourceSnapshot
35
+
36
+ # @rbs (SourceSnapshot changed) -> SourceSnapshot
37
+ def debounce: (SourceSnapshot changed) -> SourceSnapshot
38
+
39
+ # @rbs (Exception error) -> void
40
+ def report_failure: (Exception error) -> void
41
+
42
+ # @rbs (SourceSnapshot before, Exception error) -> [SourceSnapshot, bool]
43
+ def failed_build: (SourceSnapshot before, Exception error) -> [ SourceSnapshot, bool ]
44
+
45
+ # @rbs (Exception error, SourceSnapshot snapshot) -> void
46
+ def report_failure_once: (Exception error, SourceSnapshot snapshot) -> void
47
+
48
+ # @rbs (Symbol event) -> Integer?
49
+ def stop_status: (Symbol event) -> Integer?
50
+
51
+ # @rbs (Array[String] paths) -> Array[String]
52
+ def normalize_paths: (Array[String] paths) -> Array[String]
53
+
54
+ # @rbs () { () -> Integer } -> Integer
55
+ def with_signal_handlers: () { () -> Integer } -> Integer
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,46 @@
1
+ # Generated from lib/ibex/watch/source_snapshot.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Watch
5
+ # Stable metadata and content fingerprints for watched source paths.
6
+ class SourceSnapshot
7
+ type fingerprint_value = Symbol | String | Integer | nil | Hash[Symbol, fingerprint_value]
8
+
9
+ type fingerprint = Hash[Symbol, fingerprint_value]
10
+
11
+ attr_reader paths: Array[String]
12
+
13
+ # @rbs (Array[String] paths) -> void
14
+ def initialize: (Array[String] paths) -> void
15
+
16
+ # @rbs (SourceSnapshot other) -> bool
17
+ def ==: (SourceSnapshot other) -> bool
18
+
19
+ # Every path in this snapshot must have had the same value in the older snapshot.
20
+ # @rbs (SourceSnapshot older) -> bool
21
+ def unchanged_since?: (SourceSnapshot older) -> bool
22
+
23
+ attr_reader entries: Hash[String, fingerprint]
24
+
25
+ # @rbs (String path) -> fingerprint?
26
+ def entry: (String path) -> fingerprint?
27
+
28
+ private
29
+
30
+ # @rbs (String path) -> fingerprint
31
+ def fingerprint: (String path) -> fingerprint
32
+
33
+ # @rbs (File::Stat stat) -> fingerprint
34
+ def stat_signature: (File::Stat stat) -> fingerprint
35
+
36
+ # @rbs (File::Stat stat) -> Symbol
37
+ def file_kind: (File::Stat stat) -> Symbol
38
+
39
+ # @rbs (Time time) -> Integer
40
+ def nanoseconds: (Time time) -> Integer
41
+
42
+ # @rbs (fingerprint value, String path) -> void
43
+ def add_resolved_target: (fingerprint value, String path) -> void
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,7 @@
1
+ # Generated from lib/ibex/watch.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Portable polling support for repeatable parser generation.
5
+ module Watch
6
+ end
7
+ end
data/sig/ibex.rbs CHANGED
@@ -3,4 +3,6 @@
3
3
  # Ibex generates and runs Pure Ruby LR parsers.
4
4
  module Ibex
5
5
  ParseError: singleton(Runtime::ParseError)
6
+
7
+ ResourceLimitError: singleton(Runtime::ResourceLimitError)
6
8
  end