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,98 @@
1
+ # Generated from lib/ibex/table_simulation/simulator.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module TableSimulation
5
+ # Deterministic, semantic-action-free table interpreter.
6
+ class Simulator
7
+ DEFAULT_MAX_STEPS: Integer
8
+
9
+ DEFAULT_MAX_STACK: Integer
10
+
11
+ EOF_NAME: String
12
+
13
+ ERROR_NAME: String
14
+
15
+ IMPLICIT_ERROR: IR::error_action
16
+
17
+ attr_reader automaton: IR::Automaton
18
+
19
+ attr_reader max_steps: Integer
20
+
21
+ attr_reader max_stack: Integer
22
+
23
+ attr_reader eof: IR::GrammarSymbol
24
+
25
+ # @rbs (IR::Automaton automaton, ?max_steps: Integer, ?max_stack: Integer) -> void
26
+ def initialize: (IR::Automaton automaton, ?max_steps: Integer, ?max_stack: Integer) -> void
27
+
28
+ # @rbs () -> Session
29
+ def start: () -> Session
30
+
31
+ # @rbs (Array[String] tokens) -> Result
32
+ def simulate: (Array[String] tokens) -> Result
33
+
34
+ # @rbs (String spelling) -> IR::GrammarSymbol
35
+ def terminal: (String spelling) -> IR::GrammarSymbol
36
+
37
+ private
38
+
39
+ # @rbs (Array[IR::GrammarSymbol] terminals) -> Hash[String, Array[IR::GrammarSymbol]]
40
+ def terminal_aliases: (Array[IR::GrammarSymbol] terminals) -> Hash[String, Array[IR::GrammarSymbol]]
41
+ end
42
+
43
+ # Stateful token-at-a-time table simulation session.
44
+ class Session
45
+ @tokens: Array[String]
46
+
47
+ @steps: Array[Step]
48
+
49
+ attr_reader status: Symbol?
50
+
51
+ # @rbs (Simulator simulator) -> void
52
+ def initialize: (Simulator simulator) -> void
53
+
54
+ # @rbs (String spelling) -> Array[Step]
55
+ def push: (String spelling) -> Array[Step]
56
+
57
+ # @rbs () -> Array[Step]
58
+ def steps: () -> Array[Step]
59
+
60
+ # @rbs () -> Array[String]
61
+ def tokens: () -> Array[String]
62
+
63
+ # @rbs () -> Result
64
+ def finish: () -> Result
65
+
66
+ private
67
+
68
+ # @rbs (IR::GrammarSymbol terminal, eof: bool) -> Array[Step]
69
+ def process: (IR::GrammarSymbol terminal, eof: bool) -> Array[Step]
70
+
71
+ # @rbs (IR::AutomatonState state, Integer token_id) -> [IR::parser_action, String]
72
+ def action_for: (IR::AutomatonState state, Integer token_id) -> [ IR::parser_action, String ]
73
+
74
+ # @rbs (IR::AutomatonState state, IR::GrammarSymbol terminal, IR::parser_action action, String source) -> void
75
+ def record_shift: (IR::AutomatonState state, IR::GrammarSymbol terminal, IR::parser_action action, String source) -> void
76
+
77
+ # @rbs (IR::AutomatonState state, IR::GrammarSymbol terminal, IR::parser_action action, String source) -> void
78
+ def record_reduce: (IR::AutomatonState state, IR::GrammarSymbol terminal, IR::parser_action action, String source) -> void
79
+
80
+ # @rbs (IR::AutomatonState state, IR::GrammarSymbol terminal, String action, String source) -> void
81
+ def record_terminal: (IR::AutomatonState state, IR::GrammarSymbol terminal, String action, String source) -> void
82
+
83
+ # @rbs (IR::AutomatonState state, IR::GrammarSymbol terminal, String action, String source,
84
+ # before: Integer, ?production_id: Integer?, ?lhs: String?, ?rhs_length: Integer?,
85
+ # ?target_state: Integer?) -> void
86
+ def append_step: (IR::AutomatonState state, IR::GrammarSymbol terminal, String action, String source, before: Integer, ?production_id: Integer?, ?lhs: String?, ?rhs_length: Integer?, ?target_state: Integer?) -> void
87
+
88
+ # @rbs () -> IR::AutomatonState
89
+ def current_state: () -> IR::AutomatonState
90
+
91
+ # @rbs () -> void
92
+ def enforce_stack_budget!: () -> void
93
+
94
+ # @rbs () -> void
95
+ def ensure_active!: () -> void
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,42 @@
1
+ # Generated from lib/ibex/table_simulation/step.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module TableSimulation
5
+ # One immutable parser-table action.
6
+ class Step
7
+ type document_value = String | Integer | nil
8
+
9
+ attr_reader sequence: Integer
10
+
11
+ attr_reader state: Integer
12
+
13
+ attr_reader token_id: Integer
14
+
15
+ attr_reader token: String
16
+
17
+ attr_reader action: String
18
+
19
+ attr_reader action_source: String
20
+
21
+ attr_reader production_id: Integer?
22
+
23
+ attr_reader lhs: String?
24
+
25
+ attr_reader rhs_length: Integer?
26
+
27
+ attr_reader target_state: Integer?
28
+
29
+ attr_reader stack_depth_before: Integer
30
+
31
+ attr_reader stack_depth_after: Integer
32
+
33
+ # @rbs (sequence: Integer, state: Integer, token_id: Integer, token: String, action: String,
34
+ # action_source: String, production_id: Integer?, lhs: String?, rhs_length: Integer?,
35
+ # target_state: Integer?, stack_depth_before: Integer, stack_depth_after: Integer) -> void
36
+ def initialize: (sequence: Integer, state: Integer, token_id: Integer, token: String, action: String, action_source: String, production_id: Integer?, lhs: String?, rhs_length: Integer?, target_state: Integer?, stack_depth_before: Integer, stack_depth_after: Integer) -> void
37
+
38
+ # @rbs () -> Hash[String, document_value]
39
+ def to_h: () -> Hash[String, document_value]
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/ibex/table_simulation/text.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module TableSimulation
5
+ # Stable one-line renderer for simulation steps.
6
+ module Text
7
+ # @rbs (Step step) -> String
8
+ def self.render_step: (Step step) -> String
9
+
10
+ # @rbs (Result result) -> String
11
+ def self.render: (Result result) -> String
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ # Generated from lib/ibex/table_simulation.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Safe LR table simulation over validated Automaton IR.
5
+ module TableSimulation
6
+ end
7
+ end
data/sig/ibex/tables.rbs CHANGED
@@ -3,45 +3,20 @@
3
3
  module Ibex
4
4
  # Parser table construction and row-displacement compression.
5
5
  module Tables
6
- private def runtime_action: (IR::parser_action action) -> IR::runtime_action
7
-
8
- private def self.runtime_action: (IR::parser_action action) -> IR::runtime_action
9
-
10
- class TableSet < Struct[untyped]
11
- attr_accessor actions(): untyped
12
-
13
- attr_accessor gotos(): untyped
14
-
15
- attr_accessor default_actions(): untyped
16
-
17
- def self.new: (?actions: untyped, ?gotos: untyped, ?default_actions: untyped) -> instance
18
- | ({ ?actions: untyped, ?gotos: untyped, ?default_actions: untyped }) -> instance
19
- end
6
+ type action_table = Array[Hash[Integer, IR::runtime_action]] | CompactActions
20
7
 
21
- # Sparse table represented by per-row offsets and ownership checks.
22
- class Compact
23
- attr_reader offsets: Array[Integer]
8
+ type goto_table = Array[Hash[Integer, Integer]] | Compact
24
9
 
25
- attr_reader values: Array[untyped]
26
-
27
- attr_reader checks: Array[Integer?]
28
-
29
- attr_reader row_count: Integer
30
-
31
- # @rbs (Array[Hash[Integer, untyped]] rows) -> Compact
32
- def self.build: (Array[Hash[Integer, untyped]] rows) -> Compact
33
-
34
- # @rbs (Array[Integer] columns, Array[Integer?] checks) -> Integer
35
- private def self.find_offset: (Array[Integer] columns, Array[Integer?] checks) -> Integer
36
-
37
- # @rbs (offsets: Array[Integer], values: Array[untyped], checks: Array[Integer?], row_count: Integer) -> void
38
- def initialize: (offsets: Array[Integer], values: Array[untyped], checks: Array[Integer?], row_count: Integer) -> void
10
+ private def runtime_action: (IR::parser_action action) -> IR::runtime_action
39
11
 
40
- # @rbs (Integer row, Integer column) -> untyped
41
- def lookup: (Integer row, Integer column) -> untyped
12
+ private def self.runtime_action: (IR::parser_action action) -> IR::runtime_action
42
13
 
43
- # @rbs (Integer row) -> Hash[Integer, untyped]
44
- def row: (Integer row) -> Hash[Integer, untyped]
14
+ class TableSet < Struct[Object?]
15
+ attr_accessor actions: action_table
16
+ attr_accessor gotos: goto_table
17
+ attr_accessor default_actions: Array[IR::runtime_action?]
18
+ def self.new: (?actions: action_table, ?gotos: goto_table, ?default_actions: Array[IR::runtime_action?]) -> instance
19
+ | ({ ?actions: action_table, ?gotos: goto_table, ?default_actions: Array[IR::runtime_action?] }) -> instance
45
20
  end
46
21
 
47
22
  # @rbs (IR::Automaton automaton, ?format: Symbol | String) -> TableSet
@@ -0,0 +1,24 @@
1
+ # Generated from lib/ibex/verifiable_generation_bundle.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Explicitly renders and publishes one manifest-bound verification bundle.
5
+ class VerifiableGenerationBundle
6
+ # rubocop:disable Metrics/ParameterLists -- persisted artifact paths and verification bounds are explicit inputs.
7
+ # @rbs (IR::Automaton automaton, wrapper_path: String, wrapper_source: String,
8
+ # table_path: String, report_path: String, manifest_path: String,
9
+ # source_records: Array[GenerationInput], ?manifest_options: Hash[String, Object?],
10
+ # ?wrapper_mode: Integer?, ?representation: Symbol | String, ?cst_trivia: Symbol | String?,
11
+ # ?omit_action_call: bool?, ?strict: bool, ?max_states: Integer, ?max_items: Integer) -> void
12
+ def initialize: (IR::Automaton automaton, wrapper_path: String, wrapper_source: String, table_path: String, report_path: String, manifest_path: String, source_records: Array[GenerationInput], ?manifest_options: Hash[String, Object?], ?wrapper_mode: Integer?, ?representation: Symbol | String, ?cst_trivia: Symbol | String?, ?omit_action_call: bool?, ?strict: bool, ?max_states: Integer, ?max_items: Integer) -> void
13
+
14
+ # Render table, wrapper, and report before the non-cyclic manifest marker.
15
+ # @rbs () -> ArtifactSet
16
+ def render: () -> ArtifactSet
17
+
18
+ # @rbs (?warning: ^(String) -> void, ?stability_check: ^() -> bool) -> ArtifactSet
19
+ def publish: (?warning: ^(String) -> void, ?stability_check: ^() -> bool) -> ArtifactSet
20
+
21
+ # @rbs (String manifest_path) -> Hash[String, VerificationReport::Validator::json_value]
22
+ def self.validate_file: (String manifest_path) -> Hash[String, VerificationReport::Validator::json_value]
23
+ end
24
+ end
@@ -0,0 +1,53 @@
1
+ # Generated from lib/ibex/verification_report/builder.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module VerificationReport
5
+ # Builds deterministic evidence from an Automaton IR verification run.
6
+ class Builder
7
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
8
+
9
+ # @rbs (IR::Automaton automaton, table: TableArtifact::Document,
10
+ # source_records: Array[GenerationInput], table_path: String, strict: bool,
11
+ # max_states: Integer, max_items: Integer) -> void
12
+ def initialize: (IR::Automaton automaton, table: TableArtifact::Document, source_records: Array[GenerationInput], table_path: String, strict: bool, max_states: Integer, max_items: Integer) -> void
13
+
14
+ # @rbs () -> String
15
+ def render: () -> String
16
+
17
+ private
18
+
19
+ # @rbs () -> Hash[Symbol, Integer]
20
+ def bounds: () -> Hash[Symbol, Integer]
21
+
22
+ # @rbs () -> Array[String]
23
+ def requested_checks: () -> Array[String]
24
+
25
+ # @rbs () -> Hash[String, json_value]
26
+ def verification_outcome: () -> Hash[String, json_value]
27
+
28
+ # @rbs () -> Hash[String, json_value]
29
+ def input_identity: () -> Hash[String, json_value]
30
+
31
+ # @rbs () -> Hash[String, json_value]
32
+ def ir_identity: () -> Hash[String, json_value]
33
+
34
+ # @rbs () -> Hash[String, json_value]
35
+ def table_identity: () -> Hash[String, json_value]
36
+
37
+ # @rbs () -> void
38
+ def validate_table_identity!: () -> void
39
+
40
+ # @rbs () -> String
41
+ def grammar_digest: () -> String
42
+
43
+ # @rbs () -> String
44
+ def automaton_digest: () -> String
45
+
46
+ # @rbs (String digest) -> String
47
+ def prefixed_digest: (String digest) -> String
48
+
49
+ # @rbs (Hash[Symbol, String] value) -> Hash[String, String]
50
+ def stringify_keys: (Hash[Symbol, String] value) -> Hash[String, String]
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,41 @@
1
+ # Generated from lib/ibex/verification_report/canonical_ir.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module VerificationReport
5
+ # Rebuilds immutable IR with source locations expressed as report logical identities.
6
+ class CanonicalIR
7
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[json_value, json_value]
8
+
9
+ LOGICAL_ROOT: String
10
+
11
+ # @rbs (IR::Automaton automaton, source_records: Array[GenerationInput]) -> void
12
+ def initialize: (IR::Automaton automaton, source_records: Array[GenerationInput]) -> void
13
+
14
+ # @rbs () -> IR::Automaton
15
+ def build: () -> IR::Automaton
16
+
17
+ private
18
+
19
+ # @rbs (json_value value) -> json_value
20
+ def normalize_source_identity!: (json_value value) -> json_value
21
+
22
+ # @rbs (json_value value) -> String
23
+ def generate_json: (json_value value) -> String
24
+
25
+ # @rbs (json_value value) -> json_value
26
+ def normalize_for_json: (json_value value) -> json_value
27
+
28
+ # @rbs (String file) -> String
29
+ def logical_file: (String file) -> String
30
+
31
+ # @rbs (GenerationInput record, String file) -> bool
32
+ def record_matches?: (GenerationInput record, String file) -> bool
33
+
34
+ # @rbs (String file) -> bool
35
+ def absolute_file?: (String file) -> bool
36
+
37
+ # @rbs (IR::Grammar grammar) -> String
38
+ def digest: (IR::Grammar grammar) -> String
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,34 @@
1
+ # Generated from lib/ibex/verification_report/logical_path.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module VerificationReport
5
+ # Closed logical identities used by version 1 verification reports.
6
+ module LogicalPath
7
+ MAX_INPUT_FILES: Integer
8
+
9
+ BASENAME: Regexp
10
+
11
+ INPUT: Regexp
12
+
13
+ TABLE: Regexp
14
+
15
+ # @rbs (String path, Integer index) -> String
16
+ def self?.input: (String path, Integer index) -> String
17
+
18
+ # @rbs (String path) -> String
19
+ def self?.table: (String path) -> String
20
+
21
+ # @rbs (Object? value, Integer index) -> bool
22
+ def self?.canonical_input?: (Object? value, Integer index) -> bool
23
+
24
+ # @rbs (Object? value) -> bool
25
+ def self?.canonical_table?: (Object? value) -> bool
26
+
27
+ # @rbs (String path) -> String
28
+ def self?.basename: (String path) -> String
29
+
30
+ # @rbs (String value) -> bool
31
+ def self?.usable_basename?: (String value) -> bool
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,114 @@
1
+ # Generated from lib/ibex/verification_report/validator.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module VerificationReport
5
+ # Validates a report and its cross-artifact manifest/table bindings.
6
+ # rubocop:disable Metrics/ClassLength -- closed report and cross-artifact invariants form one validator contract.
7
+ class Validator
8
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
9
+
10
+ ROOT_KEYS: Array[String]
11
+
12
+ CHECKER_KEYS: Array[String]
13
+
14
+ BOUNDS_KEYS: Array[String]
15
+
16
+ INPUT_KEYS: Array[String]
17
+
18
+ INPUT_FILE_KEYS: Array[String]
19
+
20
+ IR_KEYS: Array[String]
21
+
22
+ GRAMMAR_KEYS: Array[String]
23
+
24
+ AUTOMATON_KEYS: Array[String]
25
+
26
+ TABLE_KEYS: Array[String]
27
+
28
+ OUTCOME_KEYS: Array[String]
29
+
30
+ VIOLATION_KEYS: Array[String]
31
+
32
+ EXHAUSTION_KEYS: Array[String]
33
+
34
+ DIGEST: Regexp
35
+
36
+ ALGORITHMS: Array[String]
37
+
38
+ # @rbs (String source) -> Hash[String, json_value]
39
+ def validate: (String source) -> Hash[String, json_value]
40
+
41
+ # @rbs (manifest_source: String, report_source: String, table_source: String) -> Hash[String, json_value]
42
+ def validate_bundle: (manifest_source: String, report_source: String, table_source: String) -> Hash[String, json_value]
43
+
44
+ # @rbs (String manifest_path) -> Hash[String, json_value]
45
+ def validate_bundle_file: (String manifest_path) -> Hash[String, json_value]
46
+
47
+ private
48
+
49
+ # @rbs (json_value document) -> void
50
+ def validate_document: (json_value document) -> void
51
+
52
+ # @rbs (json_value value) -> void
53
+ def validate_checker: (json_value value) -> void
54
+
55
+ # @rbs (json_value value) -> void
56
+ def validate_bounds: (json_value value) -> void
57
+
58
+ # @rbs (json_value value) -> void
59
+ def validate_input: (json_value value) -> void
60
+
61
+ # @rbs (json_value value) -> void
62
+ def validate_ir: (json_value value) -> void
63
+
64
+ # @rbs (json_value value) -> void
65
+ def validate_table: (json_value value) -> void
66
+
67
+ # @rbs (json_value value, String profile) -> void
68
+ def validate_outcome: (json_value value, String profile) -> void
69
+
70
+ # @rbs (json_value value, Array[String] requested) -> Array[json_value]
71
+ def validate_violations: (json_value value, Array[String] requested) -> Array[json_value]
72
+
73
+ # @rbs (Hash[String, json_value] manifest, String kind) -> Hash[String, json_value]
74
+ def unique_artifact: (Hash[String, json_value] manifest, String kind) -> Hash[String, json_value]
75
+
76
+ # @rbs (Hash[String, json_value] entry, String source, String label) -> void
77
+ def validate_manifest_bytes!: (Hash[String, json_value] entry, String source, String label) -> void
78
+
79
+ # @rbs (Hash[String, json_value] manifest, Hash[String, json_value] report) -> void
80
+ def validate_inputs!: (Hash[String, json_value] manifest, Hash[String, json_value] report) -> void
81
+
82
+ # @rbs (Hash[String, json_value] report, TableArtifact::Document table,
83
+ # Hash[String, json_value] table_entry) -> void
84
+ def validate_table_binding!: (Hash[String, json_value] report, TableArtifact::Document table, Hash[String, json_value] table_entry) -> void
85
+
86
+ # @rbs (json_value value, String path) -> Array[String]
87
+ def checks: (json_value value, String path) -> Array[String]
88
+
89
+ # @rbs (json_value value, Array[String] keys, String path) -> Hash[String, json_value]
90
+ def object: (json_value value, Array[String] keys, String path) -> Hash[String, json_value]
91
+
92
+ # @rbs (json_value value, String path) -> Array[json_value]
93
+ def array: (json_value value, String path) -> Array[json_value]
94
+
95
+ # @rbs (json_value value, String path, ?allow_empty: bool) -> String
96
+ def string: (json_value value, String path, ?allow_empty: bool) -> String
97
+
98
+ # @rbs (json_value value, String path) -> String
99
+ def digest: (json_value value, String path) -> String
100
+
101
+ # @rbs (json_value value, String path) -> Integer
102
+ def positive_integer: (json_value value, String path) -> Integer
103
+
104
+ # @rbs (json_value value, String path) -> Integer
105
+ def nonnegative_integer: (json_value value, String path) -> Integer
106
+
107
+ # @rbs [T] (T value, Array[T] values, String path) -> T
108
+ def enum: [T] (T value, Array[T] values, String path) -> T
109
+
110
+ # @rbs (json_value actual, json_value expected, String path) -> void
111
+ def equal: (json_value actual, json_value expected, String path) -> void
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,44 @@
1
+ # Generated from lib/ibex/verification_report.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # A versioned, scoped report that binds bounded verification to input and
5
+ # data-only parser table identities without claiming to verify opaque code.
6
+ module VerificationReport
7
+ IDENTIFIER: String
8
+
9
+ SCHEMA_VERSION: Integer
10
+
11
+ IR_IDENTITY_SCOPE: String
12
+
13
+ DEFAULT_MAX_STATES: Integer
14
+
15
+ DEFAULT_MAX_ITEMS: Integer
16
+
17
+ EXCLUDED_TRUST: Array[String]
18
+
19
+ class ValidationError < Ibex::Error
20
+ end
21
+
22
+ # Rebuild the supplied Automaton IR with path-neutral source locations for one bundle.
23
+ # @rbs (IR::Automaton automaton, source_records: Array[GenerationInput]) -> IR::Automaton
24
+ def self?.canonical_automaton: (IR::Automaton automaton, source_records: Array[GenerationInput]) -> IR::Automaton
25
+
26
+ # @rbs (IR::Automaton automaton, table: TableArtifact::Document,
27
+ # source_records: Array[GenerationInput], table_path: String, ?strict: bool,
28
+ # ?max_states: Integer, ?max_items: Integer) -> String
29
+ def self?.render: (IR::Automaton automaton, table: TableArtifact::Document, source_records: Array[GenerationInput], table_path: String, ?strict: bool, ?max_states: Integer, ?max_items: Integer) -> String
30
+
31
+ # Validate the closed report shape and its canonical evidence digest.
32
+ # @rbs (String source) -> Hash[String, VerificationReport::Validator::json_value]
33
+ def self?.validate: (String source) -> Hash[String, VerificationReport::Validator::json_value]
34
+
35
+ # Validate report, table, and manifest bytes as one non-cyclic bundle.
36
+ # @rbs (manifest_source: String, report_source: String, table_source: String) -> Hash[String, VerificationReport::Validator::json_value]
37
+ def self?.validate_bundle: (manifest_source: String, report_source: String, table_source: String) -> Hash[String, VerificationReport::Validator::json_value]
38
+
39
+ # Resolve the report and table through a manifest and validate every
40
+ # published artifact before checking the cross-artifact identities.
41
+ # @rbs (String manifest_path) -> Hash[String, VerificationReport::Validator::json_value]
42
+ def self?.validate_bundle_file: (String manifest_path) -> Hash[String, VerificationReport::Validator::json_value]
43
+ end
44
+ end
@@ -0,0 +1,50 @@
1
+ # Generated from lib/ibex/verify/action_correspondence.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Verify
5
+ type correspondence_action = IR::parser_action
6
+
7
+ # Compares resolved ACTION/GOTO behavior over all paired viable prefixes.
8
+ class ActionCorrespondence
9
+ class Difference < Struct[Symbol | Integer? | correspondence_action?]
10
+ attr_accessor kind: Symbol
11
+ attr_accessor canonical_state: Integer
12
+ attr_accessor target_state: Integer
13
+ attr_accessor symbol: Integer?
14
+ attr_accessor canonical: correspondence_action?
15
+ attr_accessor target: correspondence_action?
16
+ def self.new: (kind: Symbol, canonical_state: Integer, target_state: Integer, symbol: Integer?, canonical: correspondence_action?, target: correspondence_action?) -> instance
17
+ end
18
+
19
+ class Result < Struct[Array[Difference] | Integer | bool]
20
+ attr_accessor differences: Array[Difference]
21
+ attr_accessor explored: Integer
22
+ attr_accessor truncated: bool
23
+ def self.new: (differences: Array[Difference], explored: Integer, truncated: bool) -> instance
24
+ def ok?: () -> bool
25
+ end
26
+
27
+ # @rbs (IR::Automaton canonical, IR::Automaton target, ?max_pairs: Integer) -> void
28
+ def initialize: (IR::Automaton canonical, IR::Automaton target, ?max_pairs: Integer) -> void
29
+
30
+ # @rbs () -> Result
31
+ def verify: () -> Result
32
+
33
+ private
34
+
35
+ # @rbs (Integer, Integer, IR::AutomatonState, IR::AutomatonState,
36
+ # Array[Difference], Array[Array[Integer]]) -> void
37
+ def compare_terminals: (Integer, Integer, IR::AutomatonState, IR::AutomatonState, Array[Difference], Array[Array[Integer]]) -> void
38
+
39
+ # @rbs (Integer, Integer, IR::AutomatonState, IR::AutomatonState,
40
+ # Array[Difference], Array[Array[Integer]]) -> void
41
+ def compare_gotos: (Integer, Integer, IR::AutomatonState, IR::AutomatonState, Array[Difference], Array[Array[Integer]]) -> void
42
+
43
+ # @rbs (IR::AutomatonState, Integer) -> IR::parser_action
44
+ def effective_action: (IR::AutomatonState, Integer) -> IR::parser_action
45
+
46
+ # @rbs (IR::parser_action) -> Array[Object]
47
+ def action_signature: (IR::parser_action) -> Array[Object]
48
+ end
49
+ end
50
+ end