ibex 0.2.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 (437) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +95 -272
  3. data/docs/architecture.md +187 -35
  4. data/docs/bison-import.md +103 -0
  5. data/docs/comparison-policy.md +127 -0
  6. data/docs/configuration-model.md +59 -0
  7. data/docs/configuration-report.md +28 -0
  8. data/docs/conflict-explanation-reviews/v1/records/README.md +28 -0
  9. data/docs/conflict-explanation-study.md +62 -0
  10. data/docs/construction-profiling.md +157 -0
  11. data/docs/cst-migration.md +3 -4
  12. data/docs/cst.md +24 -0
  13. data/docs/decisions/0000-template.md +24 -0
  14. data/docs/decisions/0001-separate-ir-pipeline.md +34 -0
  15. data/docs/decisions/0002-opaque-user-code-boundary.md +32 -0
  16. data/docs/decisions/0003-self-hosted-grammar-frontend.md +32 -0
  17. data/docs/decisions/0004-shared-semantic-and-lossless-source-model.md +33 -0
  18. data/docs/decisions/0005-contained-grammar-composition.md +34 -0
  19. data/docs/decisions/0006-bounded-structural-grammar-lowering.md +32 -0
  20. data/docs/decisions/0007-shared-parser-construction-pipeline.md +33 -0
  21. data/docs/decisions/0008-versioned-runtime-package-boundary.md +36 -0
  22. data/docs/decisions/0009-isolated-parser-sessions.md +34 -0
  23. data/docs/decisions/0010-committed-runtime-observation.md +34 -0
  24. data/docs/decisions/0011-versioned-semantic-action-boundary.md +37 -0
  25. data/docs/decisions/0012-bounded-nonexecuting-analysis.md +37 -0
  26. data/docs/decisions/0013-transactional-generation-publication.md +37 -0
  27. data/docs/decisions/0014-versioned-generated-lexer.md +35 -0
  28. data/docs/decisions/0015-worker-isolated-browser-analysis.md +32 -0
  29. data/docs/decisions/0016-red-green-concrete-syntax.md +34 -0
  30. data/docs/decisions/0017-persistent-syntax-artifacts.md +35 -0
  31. data/docs/decisions/0018-conservative-incremental-syntax-reuse.md +38 -0
  32. data/docs/decisions/0019-runtime-syntax-session-boundary.md +51 -0
  33. data/docs/decisions/0020-grammar-ir-parser-contract.md +65 -0
  34. data/docs/decisions/0021-data-only-parser-table-sidecar.md +50 -0
  35. data/docs/decisions/0022-manifest-bound-verification-report.md +77 -0
  36. data/docs/decisions/0023-syntax-only-repair-results.md +48 -0
  37. data/docs/decisions/0024-direct-ielr-construction.md +42 -0
  38. data/docs/decisions/README.md +74 -0
  39. data/docs/declarative-configuration.md +262 -0
  40. data/docs/development.md +179 -2
  41. data/docs/direct-ielr-decision.md +120 -0
  42. data/docs/direct-multi-entry-decision.md +82 -0
  43. data/docs/editor-setup.md +2 -1
  44. data/docs/error-ux-review-rubric-v1.md +117 -0
  45. data/docs/error-ux-reviews/v1/records/README.md +22 -0
  46. data/docs/error-ux-round2-review-status-v1.json +27 -0
  47. data/docs/error-ux-round2-reviews/v1/records/README.md +30 -0
  48. data/docs/error-ux-round2-v1.json +1581 -0
  49. data/docs/error-ux-round2.md +111 -0
  50. data/docs/error-ux.md +54 -0
  51. data/docs/getting-started.md +80 -0
  52. data/docs/grammar-reference.md +184 -13
  53. data/docs/ielr-design.md +43 -0
  54. data/docs/ielr.md +92 -0
  55. data/docs/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 +5 -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 +11 -0
  63. data/docs/release-readiness.md +126 -68
  64. data/docs/repair-semantics.md +123 -0
  65. data/docs/runtime-abi-evolution.md +307 -0
  66. data/docs/stability.md +144 -34
  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/lib/ibex/analysis/digraph.rb +128 -0
  75. data/lib/ibex/analysis.rb +1 -0
  76. data/lib/ibex/bison_import/importer.rb +516 -0
  77. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  78. data/lib/ibex/bison_import.rb +200 -0
  79. data/lib/ibex/bounded_subprocess.rb +171 -0
  80. data/lib/ibex/cli/ambiguity.rb +14 -5
  81. data/lib/ibex/cli/analysis.rb +134 -0
  82. data/lib/ibex/cli/bison_import.rb +121 -0
  83. data/lib/ibex/cli/config.rb +128 -0
  84. data/lib/ibex/cli/diagnostics.rb +31 -11
  85. data/lib/ibex/cli/documentation.rb +11 -8
  86. data/lib/ibex/cli/equiv.rb +169 -0
  87. data/lib/ibex/cli/error_messages.rb +11 -4
  88. data/lib/ibex/cli/explain.rb +14 -5
  89. data/lib/ibex/cli/fix.rb +203 -0
  90. data/lib/ibex/cli/formatting.rb +11 -10
  91. data/lib/ibex/cli/fuzz.rb +200 -0
  92. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  93. data/lib/ibex/cli/generation_artifacts.rb +53 -2
  94. data/lib/ibex/cli/generation_error_messages.rb +1 -1
  95. data/lib/ibex/cli/grammar_tests.rb +32 -14
  96. data/lib/ibex/cli/ir_tools.rb +5 -61
  97. data/lib/ibex/cli/outputs.rb +60 -33
  98. data/lib/ibex/cli/reduce.rb +202 -0
  99. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  100. data/lib/ibex/cli/samples.rb +49 -23
  101. data/lib/ibex/cli/verify.rb +116 -0
  102. data/lib/ibex/cli/watch.rb +6 -5
  103. data/lib/ibex/cli.rb +357 -56
  104. data/lib/ibex/codegen/action_locations.rb +1 -1
  105. data/lib/ibex/codegen/action_method_source.rb +5 -6
  106. data/lib/ibex/codegen/action_source.rb +3 -2
  107. data/lib/ibex/codegen/ambiguity.rb +5 -4
  108. data/lib/ibex/codegen/explain.rb +123 -55
  109. data/lib/ibex/codegen/generated_action_abi.rb +10 -5
  110. data/lib/ibex/codegen/rbs.rb +15 -7
  111. data/lib/ibex/codegen/report.rb +25 -13
  112. data/lib/ibex/codegen/ruby.rb +28 -64
  113. data/lib/ibex/codegen/ruby_actions.rb +9 -6
  114. data/lib/ibex/codegen/ruby_syntax.rb +15 -9
  115. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  116. data/lib/ibex/configuration/explanation.rb +421 -0
  117. data/lib/ibex/configuration/inspector.rb +232 -0
  118. data/lib/ibex/configuration.rb +580 -0
  119. data/lib/ibex/coverage/collector.rb +21 -11
  120. data/lib/ibex/coverage/event_stream.rb +13 -7
  121. data/lib/ibex/coverage/report.rb +26 -18
  122. data/lib/ibex/coverage/runtime_event_validator.rb +30 -21
  123. data/lib/ibex/delta_reducer.rb +99 -0
  124. data/lib/ibex/diff.rb +140 -0
  125. data/lib/ibex/equiv/machine.rb +135 -0
  126. data/lib/ibex/equiv.rb +373 -0
  127. data/lib/ibex/fix.rb +557 -0
  128. data/lib/ibex/frontend/ast.rb +22 -2
  129. data/lib/ibex/frontend/bootstrap_parser.rb +6 -13
  130. data/lib/ibex/frontend/diagnostic.rb +1 -1
  131. data/lib/ibex/frontend/formatter.rb +72 -26
  132. data/lib/ibex/frontend/generated_parser.rb +147 -117
  133. data/lib/ibex/frontend/generated_parser_base.rb +7 -3
  134. data/lib/ibex/frontend/generated_parser_includes.rb +1 -11
  135. data/lib/ibex/frontend/generation.rb +1 -1
  136. data/lib/ibex/frontend/parser/declarations.rb +17 -2
  137. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  138. data/lib/ibex/frontend/regenerator.rb +1 -0
  139. data/lib/ibex/frontend/resolution.rb +2 -1
  140. data/lib/ibex/frontend/resolver.rb +1 -1
  141. data/lib/ibex/frontend/rule_documentation.rb +2 -1
  142. data/lib/ibex/frontend/source_cursor.rb +2 -2
  143. data/lib/ibex/frontend/source_span.rb +9 -1
  144. data/lib/ibex/frontend/token_adapter/declaration_state.rb +38 -6
  145. data/lib/ibex/frontend/token_adapter.rb +10 -0
  146. data/lib/ibex/frontend.rb +1 -0
  147. data/lib/ibex/fuzz.rb +219 -0
  148. data/lib/ibex/generation_input.rb +1 -1
  149. data/lib/ibex/generation_manifest.rb +36 -25
  150. data/lib/ibex/generation_transaction.rb +1 -1
  151. data/lib/ibex/generation_transaction_recovery.rb +4 -4
  152. data/lib/ibex/generation_transaction_validation.rb +2 -2
  153. data/lib/ibex/grammar_tests.rb +1 -1
  154. data/lib/ibex/ir/automaton_ir.rb +61 -19
  155. data/lib/ibex/ir/grammar_ir.rb +76 -45
  156. data/lib/ibex/ir/lexer_ir.rb +5 -5
  157. data/lib/ibex/ir/parser_contract.rb +135 -0
  158. data/lib/ibex/ir/serialize.rb +203 -76
  159. data/lib/ibex/ir/validator/automaton.rb +64 -34
  160. data/lib/ibex/ir/validator/base.rb +51 -33
  161. data/lib/ibex/ir/validator/grammar.rb +113 -83
  162. data/lib/ibex/ir/validator/lexer.rb +2 -2
  163. data/lib/ibex/ir/validator.rb +2 -1
  164. data/lib/ibex/ir.rb +16 -3
  165. data/lib/ibex/lalr/build_metrics.rb +50 -2
  166. data/lib/ibex/lalr/builder.rb +191 -56
  167. data/lib/ibex/lalr/conflict_search.rb +15 -4
  168. data/lib/ibex/lalr/counterexample.rb +19 -14
  169. data/lib/ibex/lalr/direct_lookaheads.rb +110 -57
  170. data/lib/ibex/lalr/goto_follows.rb +229 -0
  171. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  172. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  173. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  174. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  175. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  176. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  177. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  178. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  179. data/lib/ibex/lalr/ielr_partition.rb +22 -8
  180. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  181. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  182. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  183. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  184. data/lib/ibex/lalr.rb +52 -1
  185. data/lib/ibex/location.rb +3 -3
  186. data/lib/ibex/lsp/document_handlers.rb +9 -7
  187. data/lib/ibex/lsp/initialization_handlers.rb +9 -7
  188. data/lib/ibex/lsp/navigation_handlers.rb +25 -11
  189. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  190. data/lib/ibex/lsp/position_codec.rb +6 -2
  191. data/lib/ibex/lsp/request_handlers.rb +3 -2
  192. data/lib/ibex/lsp/request_support.rb +14 -7
  193. data/lib/ibex/lsp/server.rb +13 -11
  194. data/lib/ibex/lsp/symbol_index.rb +13 -13
  195. data/lib/ibex/lsp/symbol_index_builder.rb +30 -20
  196. data/lib/ibex/lsp/symbol_occurrence.rb +8 -2
  197. data/lib/ibex/lsp/transport.rb +13 -3
  198. data/lib/ibex/lsp/workspace.rb +5 -4
  199. data/lib/ibex/lsp/workspace_analyzer.rb +1 -1
  200. data/lib/ibex/lsp.rb +1 -0
  201. data/lib/ibex/messages/en.yml +28 -0
  202. data/lib/ibex/messages/ja.yml +28 -0
  203. data/lib/ibex/messages.rb +68 -0
  204. data/lib/ibex/metrics.rb +175 -0
  205. data/lib/ibex/normalize/declarations.rb +2 -0
  206. data/lib/ibex/normalize/diagnostics.rb +63 -38
  207. data/lib/ibex/normalize/expander.rb +5 -4
  208. data/lib/ibex/normalize/expression.rb +8 -6
  209. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  210. data/lib/ibex/normalize/inline_expansion.rb +100 -49
  211. data/lib/ibex/normalize/lexer.rb +3 -3
  212. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +11 -10
  213. data/lib/ibex/normalize/parameter_lowering.rb +40 -23
  214. data/lib/ibex/normalize/parameters.rb +31 -4
  215. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  216. data/lib/ibex/normalize.rb +10 -20
  217. data/lib/ibex/racc_migration/report.rb +6 -3
  218. data/lib/ibex/rake_task.rb +1 -1
  219. data/lib/ibex/samples.rb +43 -13
  220. data/lib/ibex/table_artifact/builder.rb +266 -0
  221. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  222. data/lib/ibex/table_artifact/document.rb +39 -0
  223. data/lib/ibex/table_artifact/executor.rb +187 -0
  224. data/lib/ibex/table_artifact/serializer.rb +57 -0
  225. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  226. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  227. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  228. data/lib/ibex/table_artifact/validator.rb +253 -0
  229. data/lib/ibex/table_artifact.rb +88 -0
  230. data/lib/ibex/table_simulation/result.rb +6 -2
  231. data/lib/ibex/table_simulation/step.rb +3 -1
  232. data/lib/ibex/tables.rb +14 -0
  233. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  234. data/lib/ibex/verification_report/builder.rb +159 -0
  235. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  236. data/lib/ibex/verification_report/logical_path.rb +68 -0
  237. data/lib/ibex/verification_report/validator.rb +329 -0
  238. data/lib/ibex/verification_report.rb +69 -0
  239. data/lib/ibex/verify/action_correspondence.rb +138 -0
  240. data/lib/ibex/verify/language_witness.rb +295 -0
  241. data/lib/ibex/verify/reference_collection.rb +190 -0
  242. data/lib/ibex/verify/result.rb +73 -0
  243. data/lib/ibex/verify/verifier.rb +598 -0
  244. data/lib/ibex/verify.rb +15 -0
  245. data/lib/ibex/version.rb +1 -1
  246. data/lib/ibex/watch/runner.rb +10 -1
  247. data/lib/ibex/watch/source_snapshot.rb +13 -8
  248. data/lib/ibex.rb +10 -0
  249. data/schema/{automaton-ir-v1.schema.json → automaton-ir-definitions.schema.json} +6 -6
  250. data/schema/{automaton-ir-v2.schema.json → automaton-ir.schema.json} +14 -7
  251. data/schema/bison-import-v1.schema.json +106 -0
  252. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  253. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  254. data/schema/construction-profile-v1.schema.json +779 -0
  255. data/schema/diff-v1.schema.json +41 -0
  256. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  257. data/schema/equiv-v1.schema.json +64 -0
  258. data/schema/error-ux-review-v1.schema.json +609 -0
  259. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  260. data/schema/error-ux-round2-v1.schema.json +519 -0
  261. data/schema/explain-v1.schema.json +63 -1
  262. data/schema/fix-v1.schema.json +64 -0
  263. data/schema/fix-v2.schema.json +66 -0
  264. data/schema/fix-v3.schema.json +101 -0
  265. data/schema/fuzz-regression-v1.schema.json +79 -0
  266. data/schema/fuzz-v1.schema.json +114 -0
  267. data/schema/{grammar-ir-v2.schema.json → grammar-ir-extensions.schema.json} +20 -65
  268. data/schema/{grammar-ir-v1.schema.json → grammar-ir-foundation.schema.json} +3 -3
  269. data/schema/grammar-ir.schema.json +271 -0
  270. data/schema/ielr-benchmark-v1.schema.json +85 -0
  271. data/schema/lexer-profile-v1.schema.json +491 -0
  272. data/schema/metrics-v1.schema.json +60 -0
  273. data/schema/reduce-v1.schema.json +22 -0
  274. data/schema/reduce-v2.schema.json +63 -0
  275. data/schema/table-artifact-v1.schema.json +377 -0
  276. data/schema/verification-report-v1.schema.json +222 -0
  277. data/schema/verify-v1.schema.json +42 -0
  278. data/sig/ibex/analysis/digraph.rbs +19 -0
  279. data/sig/ibex/bison_import/importer.rbs +140 -0
  280. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  281. data/sig/ibex/bison_import.rbs +95 -0
  282. data/sig/ibex/bounded_subprocess.rbs +76 -0
  283. data/sig/ibex/cli/ambiguity.rbs +6 -0
  284. data/sig/ibex/cli/analysis.rbs +43 -0
  285. data/sig/ibex/cli/bison_import.rbs +32 -0
  286. data/sig/ibex/cli/config.rbs +35 -0
  287. data/sig/ibex/cli/diagnostics.rbs +16 -3
  288. data/sig/ibex/cli/documentation.rbs +5 -1
  289. data/sig/ibex/cli/equiv.rbs +49 -0
  290. data/sig/ibex/cli/error_messages.rbs +6 -0
  291. data/sig/ibex/cli/explain.rbs +6 -0
  292. data/sig/ibex/cli/fix.rbs +53 -0
  293. data/sig/ibex/cli/formatting.rbs +5 -1
  294. data/sig/ibex/cli/fuzz.rbs +47 -0
  295. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  296. data/sig/ibex/cli/generation_artifacts.rbs +21 -2
  297. data/sig/ibex/cli/generation_error_messages.rbs +2 -2
  298. data/sig/ibex/cli/grammar_tests.rbs +15 -3
  299. data/sig/ibex/cli/ir_tools.rbs +7 -19
  300. data/sig/ibex/cli/outputs.rbs +9 -3
  301. data/sig/ibex/cli/reduce.rbs +60 -0
  302. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  303. data/sig/ibex/cli/samples.rbs +8 -0
  304. data/sig/ibex/cli/verify.rbs +28 -0
  305. data/sig/ibex/cli/watch.rbs +2 -2
  306. data/sig/ibex/cli.rbs +79 -5
  307. data/sig/ibex/codegen/action_method_source.rbs +4 -4
  308. data/sig/ibex/codegen/explain.rbs +45 -25
  309. data/sig/ibex/codegen/generated_action_abi.rbs +14 -10
  310. data/sig/ibex/codegen/rbs.rbs +12 -10
  311. data/sig/ibex/codegen/report.rbs +12 -12
  312. data/sig/ibex/codegen/ruby.rbs +18 -15
  313. data/sig/ibex/codegen/ruby_actions.rbs +6 -6
  314. data/sig/ibex/codegen/ruby_syntax.rbs +10 -8
  315. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  316. data/sig/ibex/configuration/explanation.rbs +195 -0
  317. data/sig/ibex/configuration/inspector.rbs +53 -0
  318. data/sig/ibex/configuration.rbs +242 -0
  319. data/sig/ibex/coverage/collector.rbs +16 -14
  320. data/sig/ibex/coverage/event_stream.rbs +12 -10
  321. data/sig/ibex/coverage/report.rbs +20 -18
  322. data/sig/ibex/coverage/runtime_event_validator.rbs +38 -36
  323. data/sig/ibex/delta_reducer.rbs +38 -0
  324. data/sig/ibex/diff.rbs +47 -0
  325. data/sig/ibex/equiv/machine.rbs +54 -0
  326. data/sig/ibex/equiv.rbs +129 -0
  327. data/sig/ibex/fix.rbs +138 -0
  328. data/sig/ibex/frontend/ast.rbs +33 -7
  329. data/sig/ibex/frontend/bootstrap_parser.rbs +2 -0
  330. data/sig/ibex/frontend/diagnostic.rbs +2 -2
  331. data/sig/ibex/frontend/formatter.rbs +38 -30
  332. data/sig/ibex/frontend/generated_parser.rbs +87 -77
  333. data/sig/ibex/frontend/generated_parser_base.rbs +4 -2
  334. data/sig/ibex/frontend/parser/declarations.rbs +3 -0
  335. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  336. data/sig/ibex/frontend/resolution.rbs +3 -2
  337. data/sig/ibex/frontend/source_cursor.rbs +2 -2
  338. data/sig/ibex/frontend/source_span.rbs +5 -2
  339. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +13 -1
  340. data/sig/ibex/frontend/token_adapter.rbs +6 -0
  341. data/sig/ibex/fuzz.rbs +71 -0
  342. data/sig/ibex/generation_input.rbs +2 -2
  343. data/sig/ibex/generation_manifest.rbs +35 -32
  344. data/sig/ibex/generation_transaction_recovery.rbs +2 -2
  345. data/sig/ibex/generation_transaction_validation.rbs +2 -2
  346. data/sig/ibex/grammar_tests.rbs +2 -2
  347. data/sig/ibex/ir/automaton_ir.rbs +30 -11
  348. data/sig/ibex/ir/grammar_ir.rbs +41 -27
  349. data/sig/ibex/ir/lexer_ir.rbs +8 -8
  350. data/sig/ibex/ir/parser_contract.rbs +69 -0
  351. data/sig/ibex/ir/serialize.rbs +63 -28
  352. data/sig/ibex/ir/validator/automaton.rbs +47 -44
  353. data/sig/ibex/ir/validator/base.rbs +35 -31
  354. data/sig/ibex/ir/validator/grammar.rbs +78 -67
  355. data/sig/ibex/ir/validator/lexer.rbs +4 -4
  356. data/sig/ibex/ir.rbs +9 -3
  357. data/sig/ibex/lalr/build_metrics.rbs +42 -2
  358. data/sig/ibex/lalr/builder.rbs +75 -24
  359. data/sig/ibex/lalr/conflict_search.rbs +5 -2
  360. data/sig/ibex/lalr/counterexample.rbs +17 -14
  361. data/sig/ibex/lalr/direct_lookaheads.rbs +35 -28
  362. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  363. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  364. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  365. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  366. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  367. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  368. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  369. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  370. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  371. data/sig/ibex/lalr/ielr_partition.rbs +17 -5
  372. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  373. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  374. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  375. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  376. data/sig/ibex/lalr.rbs +11 -1
  377. data/sig/ibex/location.rbs +6 -6
  378. data/sig/ibex/lsp/document_handlers.rbs +8 -8
  379. data/sig/ibex/lsp/initialization_handlers.rbs +12 -12
  380. data/sig/ibex/lsp/navigation_handlers.rbs +15 -12
  381. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  382. data/sig/ibex/lsp/position_codec.rbs +8 -4
  383. data/sig/ibex/lsp/request_handlers.rbs +4 -4
  384. data/sig/ibex/lsp/request_support.rbs +8 -8
  385. data/sig/ibex/lsp/server.rbs +16 -16
  386. data/sig/ibex/lsp/symbol_index.rbs +20 -21
  387. data/sig/ibex/lsp/symbol_index_builder.rbs +9 -8
  388. data/sig/ibex/lsp/symbol_occurrence.rbs +11 -5
  389. data/sig/ibex/lsp/transport.rbs +18 -6
  390. data/sig/ibex/lsp/workspace.rbs +3 -2
  391. data/sig/ibex/lsp/workspace_analyzer.rbs +1 -1
  392. data/sig/ibex/messages.rbs +26 -0
  393. data/sig/ibex/metrics.rbs +50 -0
  394. data/sig/ibex/normalize/diagnostics.rbs +4 -4
  395. data/sig/ibex/normalize/expander.rbs +2 -2
  396. data/sig/ibex/normalize/expression.rbs +10 -8
  397. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  398. data/sig/ibex/normalize/inline_expansion.rbs +59 -50
  399. data/sig/ibex/normalize/lexer.rbs +4 -4
  400. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +15 -14
  401. data/sig/ibex/normalize/parameter_lowering.rbs +18 -18
  402. data/sig/ibex/normalize/parameters.rbs +13 -8
  403. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  404. data/sig/ibex/normalize.rbs +11 -5
  405. data/sig/ibex/racc_migration/report.rbs +8 -6
  406. data/sig/ibex/rake_task.rbs +1 -1
  407. data/sig/ibex/samples.rbs +13 -4
  408. data/sig/ibex/table_artifact/builder.rbs +93 -0
  409. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  410. data/sig/ibex/table_artifact/document.rbs +27 -0
  411. data/sig/ibex/table_artifact/executor.rbs +66 -0
  412. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  413. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  414. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  415. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  416. data/sig/ibex/table_artifact/validator.rbs +66 -0
  417. data/sig/ibex/table_artifact.rbs +32 -0
  418. data/sig/ibex/table_simulation/result.rbs +8 -4
  419. data/sig/ibex/table_simulation/step.rbs +4 -2
  420. data/sig/ibex/tables.rbs +10 -9
  421. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  422. data/sig/ibex/verification_report/builder.rbs +53 -0
  423. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  424. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  425. data/sig/ibex/verification_report/validator.rbs +114 -0
  426. data/sig/ibex/verification_report.rbs +44 -0
  427. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  428. data/sig/ibex/verify/language_witness.rbs +112 -0
  429. data/sig/ibex/verify/reference_collection.rbs +63 -0
  430. data/sig/ibex/verify/result.rbs +52 -0
  431. data/sig/ibex/verify/verifier.rbs +170 -0
  432. data/sig/ibex/verify.rbs +6 -0
  433. data/sig/ibex/watch/runner.rbs +12 -2
  434. data/sig/ibex/watch/source_snapshot.rbs +13 -9
  435. metadata +232 -12
  436. data/lib/ibex/ir/migration.rb +0 -120
  437. data/sig/ibex/ir/migration.rbs +0 -34
@@ -0,0 +1,50 @@
1
+ # Generated from lib/ibex/metrics.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Deterministic structural metrics over normalized Grammar and Automaton IR.
5
+ class Metrics
6
+ type report_value = String | Integer | Float | Array[report_value] | Hash[Symbol, report_value]
7
+
8
+ # @rbs (IR::Automaton automaton) -> void
9
+ def initialize: (IR::Automaton automaton) -> void
10
+
11
+ # @rbs () -> Hash[Symbol, report_value]
12
+ def to_h: () -> Hash[Symbol, report_value]
13
+
14
+ private
15
+
16
+ # @rbs () -> Hash[Symbol, Integer]
17
+ def symbol_metrics: () -> Hash[Symbol, Integer]
18
+
19
+ # @rbs () -> Hash[Symbol, report_value]
20
+ def grammar_metrics: () -> Hash[Symbol, report_value]
21
+
22
+ # @rbs () -> Hash[Symbol, report_value]
23
+ def automaton_metrics: () -> Hash[Symbol, report_value]
24
+
25
+ # @rbs (Array[Integer] values) -> Float
26
+ def average: (Array[Integer] values) -> Float
27
+
28
+ # @rbs () -> Hash[Integer, Array[Integer]]
29
+ def dependency_graph: () -> Hash[Integer, Array[Integer]]
30
+
31
+ # @rbs () -> Hash[Integer, Set[Integer]]
32
+ def reachability: () -> Hash[Integer, Set[Integer]]
33
+
34
+ # @rbs () -> Array[Array[Integer]]
35
+ def recursion_components: () -> Array[Array[Integer]]
36
+
37
+ # @rbs () -> Array[Integer]
38
+ def recursive_nonterminal_ids: () -> Array[Integer]
39
+
40
+ # Longest path after collapsing mutually recursive nonterminals.
41
+ # @rbs () -> Integer
42
+ def recursion_component_depth: () -> Integer
43
+
44
+ # @rbs (Array[Set[Integer]] edges) -> Integer
45
+ def longest_dag_path: (Array[Set[Integer]] edges) -> Integer
46
+
47
+ # @rbs (Integer id) -> String
48
+ def symbol_name: (Integer id) -> String
49
+ end
50
+ end
@@ -17,8 +17,8 @@ module Ibex
17
17
  # @rbs () -> void
18
18
  def warn_unreachable_nonterminals: () -> void
19
19
 
20
- # @rbs () -> Set[Integer]
21
- def reachable_symbol_ids: () -> Set[Integer]
20
+ # @rbs () -> Hash[Integer, true]
21
+ def reachable_symbol_ids: () -> Hash[Integer, true]
22
22
 
23
23
  # @rbs () -> void
24
24
  def warn_unused_terminals: () -> void
@@ -32,8 +32,8 @@ module Ibex
32
32
  # @rbs () -> void
33
33
  def warn_empty_language: () -> void
34
34
 
35
- # @rbs () -> Set[Integer]
36
- def productive_terminal_ids: () -> Set[Integer]
35
+ # @rbs () -> Hash[Integer, true]
36
+ def productive_terminal_ids: () -> Hash[Integer, true]
37
37
 
38
38
  # @rbs (IR::GrammarSymbol grammar_symbol) -> bool
39
39
  def productive_terminal?: (IR::GrammarSymbol grammar_symbol) -> bool
@@ -59,8 +59,8 @@ module Ibex
59
59
  # @rbs (String expression, Frontend::Location location) -> IR::Action
60
60
  def synthetic_action: (String expression, Frontend::Location location) -> IR::Action
61
61
 
62
- # @rbs (Symbol kind, Frontend::AST::item item) -> Hash[Symbol, untyped]
63
- def synthetic_origin: (Symbol kind, Frontend::AST::item item) -> Hash[Symbol, untyped]
62
+ # @rbs (Symbol kind, Frontend::AST::item item) -> Hash[Symbol, Object?]
63
+ def synthetic_origin: (Symbol kind, Frontend::AST::item item) -> Hash[Symbol, Object?]
64
64
 
65
65
  # @rbs (Frontend::AST::InlineAction? action, Array[IR::named_ref] named_refs) -> IR::Action?
66
66
  def normalize_action: (Frontend::AST::InlineAction? action, Array[IR::named_ref] named_refs) -> IR::Action?
@@ -3,19 +3,21 @@
3
3
  module Ibex
4
4
  # Deterministically renders frontend EBNF items for production origin metadata.
5
5
  module NormalizeExpression
6
+ type pending_item = String | Frontend::AST::item
7
+
6
8
  # @rbs (Frontend::AST::item item) -> String
7
9
  def self.render: (Frontend::AST::item item) -> String
8
10
 
9
- # @rbs (Array[untyped] pending, Frontend::AST::item item) -> void
10
- private def self.push_render_item: (Array[untyped] pending, Frontend::AST::item item) -> void
11
+ # @rbs (Array[pending_item] pending, Frontend::AST::item item) -> void
12
+ private def self.push_render_item: (Array[pending_item] pending, Frontend::AST::item item) -> void
11
13
 
12
- # @rbs (Array[untyped] pending, Frontend::AST::ParameterizedReference item) -> void
13
- private def self.push_render_parameterized_reference: (Array[untyped] pending, Frontend::AST::ParameterizedReference item) -> void
14
+ # @rbs (Array[pending_item] pending, Frontend::AST::ParameterizedReference item) -> void
15
+ private def self.push_render_parameterized_reference: (Array[pending_item] pending, Frontend::AST::ParameterizedReference item) -> void
14
16
 
15
- # @rbs (Array[untyped] pending, Frontend::AST::Group item) -> void
16
- private def self.push_render_group: (Array[untyped] pending, Frontend::AST::Group item) -> void
17
+ # @rbs (Array[pending_item] pending, Frontend::AST::Group item) -> void
18
+ private def self.push_render_group: (Array[pending_item] pending, Frontend::AST::Group item) -> void
17
19
 
18
- # @rbs (Array[untyped] pending, Array[Frontend::AST::item] items, String separator) -> void
19
- private def self.push_render_items: (Array[untyped] pending, Array[Frontend::AST::item] items, String separator) -> void
20
+ # @rbs (Array[pending_item] pending, Array[Frontend::AST::item] items, String separator) -> void
21
+ private def self.push_render_items: (Array[pending_item] pending, Array[Frontend::AST::item] items, String separator) -> void
20
22
  end
21
23
  end
@@ -0,0 +1,11 @@
1
+ # Generated from lib/ibex/normalize/grammar_builder.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Builds the single current Grammar IR format for every normalized source.
5
+ module NormalizeGrammarBuilder
6
+ private
7
+
8
+ # @rbs (IR::ParserContract? parser_contract) -> IR::Grammar
9
+ def build_grammar: (IR::ParserContract? parser_contract) -> IR::Grammar
10
+ end
11
+ end
@@ -4,6 +4,14 @@ module Ibex
4
4
  # Deterministically substitutes inline-rule productions before LR construction.
5
5
  # rubocop:disable Metrics/ModuleLength -- expansion, action plans, and id remapping share one invariant.
6
6
  module NormalizeInlineExpansion
7
+ type inline_reference = [ :physical | :step, Integer ]
8
+
9
+ type inline_step = { kind: :inline | :rule, rule: String?, code: String?, loc: IR::location, named_refs: Array[IR::named_ref], context_length: Integer, inputs: Array[inline_reference], stack_inputs: Array[inline_reference], lookahead: Integer, result_var: bool, result_type: String? }
10
+
11
+ type inline_variant = { rhs: Array[Integer], steps: Array[inline_step], logical_refs: Array[inline_reference], output_ref: inline_reference?, inline_used: bool, inline_rule: String?, precedence_override: Integer?, precedence_contributes: bool, parameter: IR::parameter_expansion? }
12
+
13
+ type inline_frame = { production: IR::Production, symbol_id: Integer?, index: Integer, variant: inline_variant }
14
+
7
15
  private
8
16
 
9
17
  # @rbs () -> void
@@ -13,79 +21,80 @@ module Ibex
13
21
  # The single-definition path reuses its accumulated arrays, so a long
14
22
  # acyclic chain remains linear in the size of its final action plan.
15
23
  # @rbs (IR::Production production, Hash[Integer, Array[IR::Production]] definitions) ->
16
- # Array[Hash[Symbol, untyped]]
17
- def expand_inline_production: (IR::Production production, Hash[Integer, Array[IR::Production]] definitions) -> Array[Hash[Symbol, untyped]]
24
+ # Array[inline_variant]
25
+ def expand_inline_production: (IR::Production production, Hash[Integer, Array[IR::Production]] definitions) -> Array[inline_variant]
18
26
 
19
- # @rbs (Array[Hash[Symbol, untyped]] frames, Hash[Integer, Array[IR::Production]] definitions,
20
- # Array[Array[Hash[Symbol, untyped]]] worklist, Array[Hash[Symbol, untyped]] variants,
27
+ # @rbs (Array[inline_frame] frames, Hash[Integer, Array[IR::Production]] definitions,
28
+ # Array[Array[inline_frame]] worklist, Array[inline_variant] variants,
21
29
  # IR::location? location) -> void
22
- def drain_inline_expansion_frames: (Array[Hash[Symbol, untyped]] frames, Hash[Integer, Array[IR::Production]] definitions, Array[Array[Hash[Symbol, untyped]]] worklist, Array[Hash[Symbol, untyped]] variants, IR::location? location) -> void
30
+ def drain_inline_expansion_frames: (Array[inline_frame] frames, Hash[Integer, Array[IR::Production]] definitions, Array[Array[inline_frame]] worklist, Array[inline_variant] variants, IR::location? location) -> void
23
31
 
24
- # @rbs (Array[Hash[Symbol, untyped]] frames, Hash[Integer, Array[IR::Production]] definitions,
25
- # Array[Array[Hash[Symbol, untyped]]] worklist, Array[Hash[Symbol, untyped]] variants,
32
+ # @rbs (Array[inline_frame] frames, Hash[Integer, Array[IR::Production]] definitions,
33
+ # Array[Array[inline_frame]] worklist, Array[inline_variant] variants,
26
34
  # IR::location? location) -> bool
27
- def advance_inline_expansion_frame?: (Array[Hash[Symbol, untyped]] frames, Hash[Integer, Array[IR::Production]] definitions, Array[Array[Hash[Symbol, untyped]]] worklist, Array[Hash[Symbol, untyped]] variants, IR::location? location) -> bool
35
+ def advance_inline_expansion_frame?: (Array[inline_frame] frames, Hash[Integer, Array[IR::Production]] definitions, Array[Array[inline_frame]] worklist, Array[inline_variant] variants, IR::location? location) -> bool
28
36
 
29
- # @rbs (Array[Hash[Symbol, untyped]] frames, Array[IR::Production] choices, Integer symbol_id,
30
- # Array[Array[Hash[Symbol, untyped]]] worklist) -> void
31
- def schedule_inline_choice_branches: (Array[Hash[Symbol, untyped]] frames, Array[IR::Production] choices, Integer symbol_id, Array[Array[Hash[Symbol, untyped]]] worklist) -> void
37
+ # @rbs (Array[inline_frame] frames, Array[IR::Production] choices, Integer symbol_id,
38
+ # Array[Array[inline_frame]] worklist) -> void
39
+ def schedule_inline_choice_branches: (Array[inline_frame] frames, Array[IR::Production] choices, Integer symbol_id, Array[Array[inline_frame]] worklist) -> void
32
40
 
33
- # @rbs (Array[Hash[Symbol, untyped]] frames, Array[Hash[Symbol, untyped]] variants,
34
- # Array[Array[Hash[Symbol, untyped]]] worklist, IR::location? location) -> bool
35
- def complete_inline_expansion_frame?: (Array[Hash[Symbol, untyped]] frames, Array[Hash[Symbol, untyped]] variants, Array[Array[Hash[Symbol, untyped]]] worklist, IR::location? location) -> bool
41
+ # @rbs (Array[inline_frame] frames, Array[inline_variant] variants,
42
+ # Array[Array[inline_frame]] worklist, IR::location? location) -> bool
43
+ def complete_inline_expansion_frame?: (Array[inline_frame] frames, Array[inline_variant] variants, Array[Array[inline_frame]] worklist, IR::location? location) -> bool
36
44
 
37
- # @rbs (IR::Production production, Integer? symbol_id) -> Hash[Symbol, untyped]
38
- def inline_expansion_frame: (IR::Production production, Integer? symbol_id) -> Hash[Symbol, untyped]
45
+ # @rbs (IR::Production production, Integer? symbol_id) -> inline_frame
46
+ def inline_expansion_frame: (IR::Production production, Integer? symbol_id) -> inline_frame
39
47
 
40
- # @rbs (Array[Hash[Symbol, untyped]] frames) -> Array[Hash[Symbol, untyped]]
41
- def clone_inline_expansion_frames: (Array[Hash[Symbol, untyped]] frames) -> Array[Hash[Symbol, untyped]]
48
+ # @rbs (Array[inline_frame] frames) -> Array[inline_frame]
49
+ def clone_inline_expansion_frames: (Array[inline_frame] frames) -> Array[inline_frame]
42
50
 
43
- # @rbs (IR::Production production) -> Hash[Symbol, untyped]
44
- def empty_inline_variant: (IR::Production production) -> Hash[Symbol, untyped]
51
+ # @rbs (IR::Production production) -> inline_variant
52
+ def empty_inline_variant: (IR::Production production) -> inline_variant
45
53
 
46
- # @rbs (Hash[Symbol, untyped] variant, Integer symbol_id) -> Hash[Symbol, untyped]
47
- def append_inline_symbol: (Hash[Symbol, untyped] variant, Integer symbol_id) -> Hash[Symbol, untyped]
54
+ # @rbs (inline_variant variant, Integer symbol_id) -> inline_variant
55
+ def append_inline_symbol: (inline_variant variant, Integer symbol_id) -> inline_variant
48
56
 
49
- # @rbs (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child) -> Hash[Symbol, untyped]
50
- def combine_inline_variant: (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child) -> Hash[Symbol, untyped]
57
+ # @rbs (inline_variant parent, inline_variant child) -> inline_variant
58
+ def combine_inline_variant: (inline_variant parent, inline_variant child) -> inline_variant
51
59
 
52
- # @rbs (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child,
53
- # Integer physical_offset, Integer step_offset) -> Array[Hash[Symbol, untyped]]
54
- def combined_inline_steps: (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child, Integer physical_offset, Integer step_offset) -> Array[Hash[Symbol, untyped]]
60
+ # @rbs (inline_variant parent, inline_variant child,
61
+ # Integer physical_offset, Integer step_offset) -> Array[inline_step]
62
+ def combined_inline_steps: (inline_variant parent, inline_variant child, Integer physical_offset, Integer step_offset) -> Array[inline_step]
55
63
 
56
- # @rbs (Array[untyped] left, Array[untyped] right) -> Array[untyped]
57
- def append_inline_array: (Array[untyped] left, Array[untyped] right) -> Array[untyped]
64
+ # The helper is shared by homogeneous integer and step arrays; callers
65
+ # assert the concrete element type at each use site.
66
+ # @rbs (Array[Object?] left, Array[Object?] right) -> Array[Object?]
67
+ def append_inline_array: (Array[Object?] left, Array[Object?] right) -> Array[Object?]
58
68
 
59
- # @rbs (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child) -> Integer?
60
- def combined_inline_precedence: (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child) -> Integer?
69
+ # @rbs (inline_variant parent, inline_variant child) -> Integer?
70
+ def combined_inline_precedence: (inline_variant parent, inline_variant child) -> Integer?
61
71
 
62
- # @rbs (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child,
63
- # Integer physical_offset, Integer step_offset) -> Array[Hash[Symbol, untyped]]
64
- def remap_inline_steps: (Hash[Symbol, untyped] parent, Hash[Symbol, untyped] child, Integer physical_offset, Integer step_offset) -> Array[Hash[Symbol, untyped]]
72
+ # @rbs (inline_variant parent, inline_variant child,
73
+ # Integer physical_offset, Integer step_offset) -> Array[inline_step]
74
+ def remap_inline_steps: (inline_variant parent, inline_variant child, Integer physical_offset, Integer step_offset) -> Array[inline_step]
65
75
 
66
76
  # @rbs (Array[Symbol | Integer] reference, Integer physical_offset, Integer step_offset) ->
67
77
  # Array[Symbol | Integer]
68
78
  def remap_inline_reference: (Array[Symbol | Integer] reference, Integer physical_offset, Integer step_offset) -> Array[Symbol | Integer]
69
79
 
70
- # @rbs (Hash[Symbol, untyped] variant, IR::Production production) -> Hash[Symbol, untyped]
71
- def finish_inline_precedence: (Hash[Symbol, untyped] variant, IR::Production production) -> Hash[Symbol, untyped]
80
+ # @rbs (inline_variant variant, IR::Production production) -> inline_variant
81
+ def finish_inline_precedence: (inline_variant variant, IR::Production production) -> inline_variant
72
82
 
73
- # @rbs (Hash[Symbol, untyped] variant, IR::Production production, Integer symbol_id) ->
74
- # Hash[Symbol, untyped]
75
- def finish_inline_choice: (Hash[Symbol, untyped] variant, IR::Production production, Integer symbol_id) -> Hash[Symbol, untyped]
83
+ # @rbs (inline_variant variant, IR::Production production, Integer symbol_id) -> inline_variant
84
+ def finish_inline_choice: (inline_variant variant, IR::Production production, Integer symbol_id) -> inline_variant
76
85
 
77
- # @rbs (IR::Production production, Array[Array[Symbol | Integer]] inputs, Integer lookahead,
78
- # Symbol kind, String? rule) -> Hash[Symbol, untyped]
79
- def inline_action_step: (IR::Production production, Array[Array[Symbol | Integer]] inputs, Integer lookahead, Symbol kind, String? rule) -> Hash[Symbol, untyped]
86
+ # @rbs (IR::Production production, Array[inline_reference] inputs, Integer lookahead,
87
+ # :inline | :rule kind, String? rule) -> inline_step
88
+ def inline_action_step: (IR::Production production, Array[inline_reference] inputs, Integer lookahead, :inline | :rule kind, String? rule) -> inline_step
80
89
 
81
- # @rbs (IR::Production production, Hash[Symbol, untyped] variant, Integer id) -> IR::Production
82
- def composed_inline_production: (IR::Production production, Hash[Symbol, untyped] variant, Integer id) -> IR::Production
90
+ # @rbs (IR::Production production, inline_variant variant, Integer id) -> IR::Production
91
+ def composed_inline_production: (IR::Production production, inline_variant variant, Integer id) -> IR::Production
83
92
 
84
- # @rbs (IR::Production production, Integer physical_length, Array[Hash[Symbol, untyped]]) -> IR::Action
85
- def composed_inline_action: (IR::Production production, Integer physical_length, Array[Hash[Symbol, untyped]]) -> IR::Action
93
+ # @rbs (IR::Production production, Integer physical_length, Array[inline_step]) -> IR::Action
94
+ def composed_inline_action: (IR::Production production, Integer physical_length, Array[inline_step]) -> IR::Action
86
95
 
87
- # @rbs (Hash[Symbol, untyped] step, Integer physical_length) -> Hash[Symbol, untyped]
88
- def composition_plan_step: (Hash[Symbol, untyped] step, Integer physical_length) -> Hash[Symbol, untyped]
96
+ # @rbs (inline_step step, Integer physical_length) -> IR::action_composition_step
97
+ def composition_plan_step: (inline_step step, Integer physical_length) -> IR::action_composition_step
89
98
 
90
99
  # @rbs (Array[Symbol | Integer] reference, Integer physical_length) -> Integer
91
100
  def resolve_inline_reference: (Array[Symbol | Integer] reference, Integer physical_length) -> Integer
@@ -96,8 +105,8 @@ module Ibex
96
105
  # @rbs (IR::location location) -> IR::source_provenance
97
106
  def inline_source_provenance: (IR::location location) -> IR::source_provenance
98
107
 
99
- # @rbs (IR::Production production, Hash[Symbol, untyped] variant) -> IR::production_expansion
100
- def inline_production_expansion: (IR::Production production, Hash[Symbol, untyped] variant) -> IR::production_expansion
108
+ # @rbs (IR::Production production, inline_variant variant) -> IR::production_expansion
109
+ def inline_production_expansion: (IR::Production production, inline_variant variant) -> IR::production_expansion
101
110
 
102
111
  # @rbs (IR::Production production, Integer id) -> IR::Production
103
112
  def copy_inline_production: (IR::Production production, Integer id) -> IR::Production
@@ -9,12 +9,12 @@ module Ibex
9
9
  def normalize_lexer: () -> IR::Lexer?
10
10
 
11
11
  # @rbs (Frontend::AST::LexerState definition, Array[String] states, Array[IR::LexerRule] rules,
12
- # Array[Hash[Symbol, untyped]] warnings) -> void
13
- def normalize_lexer_state: (Frontend::AST::LexerState definition, Array[String] states, Array[IR::LexerRule] rules, Array[Hash[Symbol, untyped]] warnings) -> void
12
+ # Array[IR::lexer_warning] warnings) -> void
13
+ def normalize_lexer_state: (Frontend::AST::LexerState definition, Array[String] states, Array[IR::LexerRule] rules, Array[IR::lexer_warning] warnings) -> void
14
14
 
15
15
  # @rbs (Frontend::AST::LexerRule definition, String state, Integer id,
16
- # Array[Hash[Symbol, untyped]] warnings) -> IR::LexerRule
17
- def normalize_lexer_rule: (Frontend::AST::LexerRule definition, String state, Integer id, Array[Hash[Symbol, untyped]] warnings) -> IR::LexerRule
16
+ # Array[IR::lexer_warning] warnings) -> IR::LexerRule
17
+ def normalize_lexer_rule: (Frontend::AST::LexerRule definition, String state, Integer id, Array[IR::lexer_warning] warnings) -> IR::LexerRule
18
18
 
19
19
  # @rbs (Frontend::AST::LexerRule definition) -> void
20
20
  def validate_lexer_token: (Frontend::AST::LexerRule definition) -> void
@@ -5,28 +5,29 @@ module Ibex
5
5
  module NormalizeParameterEbnfLowering
6
6
  private
7
7
 
8
- # @rbs (Hash[Symbol, untyped] frame,
8
+ # @rbs (NormalizeParameters::parameter_frame frame,
9
9
  # Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
10
- def lower_parameter_suffix: (Hash[Symbol, untyped] frame, Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
10
+ def lower_parameter_suffix: (NormalizeParameters::parameter_frame frame, Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
11
11
 
12
- # @rbs (Hash[Symbol, untyped] frame,
12
+ # @rbs (NormalizeParameters::parameter_frame frame,
13
13
  # Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
14
- def finish_parameter_suffix: (Hash[Symbol, untyped] frame, Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
14
+ def finish_parameter_suffix: (NormalizeParameters::parameter_frame frame, Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
15
15
 
16
- # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::SeparatedList item) -> void
17
- def lower_parameter_separated_list: (Hash[Symbol, untyped] frame, Frontend::AST::SeparatedList item) -> void
16
+ # @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::SeparatedList item) -> void
17
+ def lower_parameter_separated_list: (NormalizeParameters::parameter_frame frame, Frontend::AST::SeparatedList item) -> void
18
18
 
19
- # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::SeparatedList item) -> void
20
- def finish_parameter_separated_list: (Hash[Symbol, untyped] frame, Frontend::AST::SeparatedList item) -> void
19
+ # @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::SeparatedList item) -> void
20
+ def finish_parameter_separated_list: (NormalizeParameters::parameter_frame frame, Frontend::AST::SeparatedList item) -> void
21
21
 
22
- # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::Group item) -> void
23
- def lower_parameter_group: (Hash[Symbol, untyped] frame, Frontend::AST::Group item) -> void
22
+ # @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::Group item) -> void
23
+ def lower_parameter_group: (NormalizeParameters::parameter_frame frame, Frontend::AST::Group item) -> void
24
24
 
25
- # @rbs (Hash[Symbol, untyped] frame, String helper, Frontend::AST::Group item,
25
+ # @rbs (NormalizeParameters::parameter_frame frame, String helper, Frontend::AST::Group item,
26
26
  # Array[Frontend::AST::item] alternative) -> void
27
- def start_parameter_group_alternative: (Hash[Symbol, untyped] frame, String helper, Frontend::AST::Group item, Array[Frontend::AST::item] alternative) -> void
27
+ def start_parameter_group_alternative: (NormalizeParameters::parameter_frame frame, String helper, Frontend::AST::Group item, Array[Frontend::AST::item] alternative) -> void
28
28
 
29
- # @rbs (Hash[Symbol, untyped] frame, String helper, Frontend::AST::Group item, Integer length) -> void
30
- def finish_parameter_group_alternative: (Hash[Symbol, untyped] frame, String helper, Frontend::AST::Group item, Integer length) -> void
29
+ # @rbs (NormalizeParameters::parameter_frame frame, String helper,
30
+ # Frontend::AST::Group item, Integer length) -> void
31
+ def finish_parameter_group_alternative: (NormalizeParameters::parameter_frame frame, String helper, Frontend::AST::Group item, Integer length) -> void
31
32
  end
32
33
  end
@@ -5,31 +5,31 @@ module Ibex
5
5
  module NormalizeParameterLowering
6
6
  private
7
7
 
8
- # @rbs (Hash[Symbol, untyped] frame) -> void
9
- def advance_parameter_alternative: (Hash[Symbol, untyped] frame) -> void
8
+ # @rbs (NormalizeParameters::parameter_frame frame) -> void
9
+ def advance_parameter_alternative: (NormalizeParameters::parameter_frame frame) -> void
10
10
 
11
- # @rbs (Hash[Symbol, untyped] frame) { () -> void } -> void
12
- def with_parameter_frame_context: (Hash[Symbol, untyped] frame) { () -> void } -> void
11
+ # @rbs (NormalizeParameters::parameter_frame frame) { () -> void } -> void
12
+ def with_parameter_frame_context: (NormalizeParameters::parameter_frame frame) { () -> void } -> void
13
13
 
14
- # @rbs (Hash[Symbol, untyped] frame) -> bool
15
- def parameter_items_remaining?: (Hash[Symbol, untyped] frame) -> bool
14
+ # @rbs (NormalizeParameters::parameter_frame frame) -> bool
15
+ def parameter_items_remaining?: (NormalizeParameters::parameter_frame frame) -> bool
16
16
 
17
- # @rbs (Hash[Symbol, untyped] frame) -> void
18
- def start_parameter_item: (Hash[Symbol, untyped] frame) -> void
17
+ # @rbs (NormalizeParameters::parameter_frame frame) -> void
18
+ def start_parameter_item: (NormalizeParameters::parameter_frame frame) -> void
19
19
 
20
- # @rbs (Hash[Symbol, untyped] frame, Array[untyped] operation) -> void
21
- def process_parameter_operation: (Hash[Symbol, untyped] frame, Array[untyped] operation) -> void
20
+ # @rbs (NormalizeParameters::parameter_frame frame, NormalizeParameters::parameter_operation operation) -> void
21
+ def process_parameter_operation: (NormalizeParameters::parameter_frame frame, NormalizeParameters::parameter_operation operation) -> void
22
22
 
23
- # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::item item) -> void
24
- def lower_parameter_item: (Hash[Symbol, untyped] frame, Frontend::AST::item item) -> void
23
+ # @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::item item) -> void
24
+ def lower_parameter_item: (NormalizeParameters::parameter_frame frame, Frontend::AST::item item) -> void
25
25
 
26
- # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::ParameterizedReference item) -> void
27
- def lower_parameter_call: (Hash[Symbol, untyped] frame, Frontend::AST::ParameterizedReference item) -> void
26
+ # @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::ParameterizedReference item) -> void
27
+ def lower_parameter_call: (NormalizeParameters::parameter_frame frame, Frontend::AST::ParameterizedReference item) -> void
28
28
 
29
- # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::item item) -> void
30
- def finish_parameter_item: (Hash[Symbol, untyped] frame, Frontend::AST::item item) -> void
29
+ # @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::item item) -> void
30
+ def finish_parameter_item: (NormalizeParameters::parameter_frame frame, Frontend::AST::item item) -> void
31
31
 
32
- # @rbs (Hash[Symbol, untyped] frame) -> void
33
- def finish_parameter_alternative: (Hash[Symbol, untyped] frame) -> void
32
+ # @rbs (NormalizeParameters::parameter_frame frame) -> void
33
+ def finish_parameter_alternative: (NormalizeParameters::parameter_frame frame) -> void
34
34
  end
35
35
  end
@@ -2,7 +2,12 @@
2
2
 
3
3
  module Ibex
4
4
  # Iterative, hygienic specialization of validated parameterized user rules.
5
+ # rubocop:disable Metrics/ModuleLength -- parameter-frame transitions are kept together for auditability.
5
6
  module NormalizeParameters
7
+ type parameter_operation = [ :item | :finish_item, Frontend::AST::item ] | [ :value, String ] | [ :finish_suffix, Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus ] | [ :finish_separated, Frontend::AST::SeparatedList ] | [ :group_alternative, String, Frontend::AST::Group, Array[Frontend::AST::item] ] | [ :finish_group_alternative, String, Frontend::AST::Group, Integer ]
8
+
9
+ type parameter_frame = { reference: Frontend::AST::ParameterizedReference, arguments: Array[Frontend::AST::item], helper: String, bindings: Hash[String, Frontend::AST::item], rendered_arguments: Array[String], templates: Array[Frontend::AST::Rule], template_index: Integer, alternative_index: Integer, current: [ Frontend::AST::Rule, Frontend::AST::Rule, Frontend::AST::Alternative ]?, item_index: Integer, rhs: Array[String], named_refs: Array[IR::named_ref], operations: Array[parameter_operation], values: Array[String] }
10
+
6
11
  private
7
12
 
8
13
  # @rbs (Frontend::AST::ParameterizedReference reference) -> String
@@ -28,19 +33,19 @@ module Ibex
28
33
 
29
34
  # @rbs (Frontend::AST::ParameterizedReference reference, String helper,
30
35
  # Array[Frontend::AST::item] arguments, Array[String] rendered_arguments) ->
31
- # Hash[Symbol, untyped]
32
- def parameter_frame: (Frontend::AST::ParameterizedReference reference, String helper, Array[Frontend::AST::item] arguments, Array[String] rendered_arguments) -> Hash[Symbol, untyped]
36
+ # NormalizeParameters::parameter_frame
37
+ def parameter_frame: (Frontend::AST::ParameterizedReference reference, String helper, Array[Frontend::AST::item] arguments, Array[String] rendered_arguments) -> NormalizeParameters::parameter_frame
33
38
 
34
39
  # @rbs () -> void
35
40
  def drain_parameter_worklist: () -> void
36
41
 
37
- # @rbs (Hash[Symbol, untyped] frame) -> bool
38
- def prepare_parameter_alternative?: (Hash[Symbol, untyped] frame) -> bool
42
+ # @rbs (NormalizeParameters::parameter_frame frame) -> bool
43
+ def prepare_parameter_alternative?: (NormalizeParameters::parameter_frame frame) -> bool
39
44
 
40
- # @rbs (Hash[Symbol, untyped] frame, Frontend::AST::Rule template, Integer index) -> void
41
- def prepare_parameter_alternative_entry: (Hash[Symbol, untyped] frame, Frontend::AST::Rule template, Integer index) -> void
45
+ # @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::Rule template, Integer index) -> void
46
+ def prepare_parameter_alternative_entry: (NormalizeParameters::parameter_frame frame, Frontend::AST::Rule template, Integer index) -> void
42
47
 
43
- # @rbs (Hash[Symbol, untyped] frame) -> void
44
- def clear_parameter_alternative: (Hash[Symbol, untyped] frame) -> void
48
+ # @rbs (NormalizeParameters::parameter_frame frame) -> void
49
+ def clear_parameter_alternative: (NormalizeParameters::parameter_frame frame) -> void
45
50
  end
46
51
  end
@@ -0,0 +1,23 @@
1
+ # Generated from lib/ibex/normalize/parser_configuration.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Converts a root parser declaration into the explicit current Grammar IR contract.
5
+ module NormalizeParserConfiguration
6
+ private
7
+
8
+ # @rbs (Frontend::AST::ParserConfiguration declaration) -> void
9
+ def read_parser_configuration: (Frontend::AST::ParserConfiguration declaration) -> void
10
+
11
+ # @rbs () -> IR::ParserContract?
12
+ def normalized_parser_contract: () -> IR::ParserContract?
13
+
14
+ # @rbs (Frontend::AST::ParserSetting setting) -> Hash[Symbol, Object?]
15
+ def validated_parser_setting_definition: (Frontend::AST::ParserSetting setting) -> Hash[Symbol, Object?]
16
+
17
+ # @rbs (Frontend::AST::ParserConfiguration declaration) -> void
18
+ def validate_isolated_entries: (Frontend::AST::ParserConfiguration declaration) -> void
19
+
20
+ # @rbs (Frontend::AST::ParserSetting setting) -> Location
21
+ def parser_setting_location: (Frontend::AST::ParserSetting setting) -> Location
22
+ end
23
+ end
@@ -5,6 +5,10 @@ module Ibex
5
5
  class Normalizer
6
6
  include NormalizeDeclarations
7
7
 
8
+ include NormalizeParserConfiguration
9
+
10
+ include NormalizeGrammarBuilder
11
+
8
12
  include NormalizeLexer
9
13
 
10
14
  include NormalizeRecoveryDeclarations
@@ -41,6 +45,8 @@ module Ibex
41
45
 
42
46
  @explicit_starts: Array[String]?
43
47
 
48
+ @parser_configuration: Frontend::AST::ParserConfiguration?
49
+
44
50
  @lexer_declaration: Frontend::AST::Lexer?
45
51
 
46
52
  @grammar_tests: Array[IR::grammar_test]
@@ -71,8 +77,6 @@ module Ibex
71
77
 
72
78
  @precedence_locations: Hash[String, IR::location]
73
79
 
74
- @precedence: Hash[String, IR::precedence]
75
-
76
80
  @node_shapes: Hash[String, Array[String]]
77
81
 
78
82
  @inline_expansion_count: Integer
@@ -93,7 +97,7 @@ module Ibex
93
97
 
94
98
  @parameter_worklist_active: bool
95
99
 
96
- @parameter_worklist: Array[Hash[Symbol, untyped]]
100
+ @parameter_worklist: Array[NormalizeParameters::parameter_frame]
97
101
 
98
102
  @parameter_specializations: Hash[[ String, Array[String] ], String]
99
103
 
@@ -107,6 +111,8 @@ module Ibex
107
111
 
108
112
  @start_names: Array[String]
109
113
 
114
+ @precedence: Hash[String, IR::precedence]
115
+
110
116
  @declared_tokens: Hash[String, IR::location]
111
117
 
112
118
  @helper_sequence: Integer
@@ -137,8 +143,8 @@ module Ibex
137
143
 
138
144
  private
139
145
 
140
- # @rbs (Symbol name, untyped value) -> void
141
- def validate_positive_limit!: (Symbol name, untyped value) -> void
146
+ # @rbs (Symbol name, Object value) -> void
147
+ def validate_positive_limit!: (Symbol name, Object value) -> void
142
148
 
143
149
  # @rbs () -> void
144
150
  def intern_reserved_symbols: () -> void
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Ibex
4
4
  module RaccMigration
5
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
6
+
5
7
  # One immutable migration compatibility observation.
6
8
  class Finding
7
9
  SEVERITIES: Array[Symbol]
@@ -20,8 +22,8 @@ module Ibex
20
22
  # suggestion: String) -> void
21
23
  def initialize: (code: String, severity: Symbol, message: String, location: Frontend::Location?, suggestion: String) -> void
22
24
 
23
- # @rbs () -> Hash[String, untyped]
24
- def to_h: () -> Hash[String, untyped]
25
+ # @rbs () -> Hash[String, json_value]
26
+ def to_h: () -> Hash[String, json_value]
25
27
  end
26
28
 
27
29
  # Versioned result of checking one grammar without executing its code.
@@ -40,11 +42,11 @@ module Ibex
40
42
  # @rbs () -> bool
41
43
  def compatible?: () -> bool
42
44
 
43
- # @rbs () -> Hash[String, untyped]
44
- def to_h: () -> Hash[String, untyped]
45
+ # @rbs () -> Hash[String, json_value]
46
+ def to_h: () -> Hash[String, json_value]
45
47
 
46
- # @rbs (*untyped) -> String
47
- def to_json: (*untyped) -> String
48
+ # @rbs (*Object?) -> String
49
+ def to_json: (*Object?) -> String
48
50
 
49
51
  # @rbs () -> String
50
52
  def to_text: () -> String
@@ -43,7 +43,7 @@ module Rake
43
43
 
44
44
  class Task
45
45
  def self.define_task: (Hash[String | Symbol, String | Array[String]]) -> Task
46
- | (Hash[String | Symbol, String | Array[String]]) { (untyped, untyped) -> void } -> Task
46
+ | (Hash[String | Symbol, String | Array[String]]) { (Object?, Object?) -> void } -> Task
47
47
  end
48
48
 
49
49
  class FileTask < Task
data/sig/ibex/samples.rbs CHANGED
@@ -6,8 +6,8 @@ module Ibex
6
6
  DEFAULT_MAX_EXPANSIONS: Integer
7
7
 
8
8
  # @rbs (IR::Grammar grammar, ?seed: Integer, ?max_tokens: Integer, ?max_depth: Integer,
9
- # ?max_expansions: Integer) -> void
10
- def initialize: (IR::Grammar grammar, ?seed: Integer, ?max_tokens: Integer, ?max_depth: Integer, ?max_expansions: Integer) -> void
9
+ # ?max_expansions: Integer, ?strategy: Symbol | String, ?path_length: Integer) -> void
10
+ def initialize: (IR::Grammar grammar, ?seed: Integer, ?max_tokens: Integer, ?max_depth: Integer, ?max_expansions: Integer, ?strategy: Symbol | String, ?path_length: Integer) -> void
11
11
 
12
12
  # @rbs (?count: Integer) -> Array[Array[String]]
13
13
  def generate: (?count: Integer) -> Array[Array[String]]
@@ -36,8 +36,17 @@ module Ibex
36
36
  # @rbs (IR::GrammarSymbol start, Integer remaining_expansions) -> [Array[String], Integer]
37
37
  def expand: (IR::GrammarSymbol start, Integer remaining_expansions) -> [ Array[String], Integer ]
38
38
 
39
- # @rbs (Integer nonterminal_id, Integer budget, Integer depth) -> IR::Production
40
- def choose_production: (Integer nonterminal_id, Integer budget, Integer depth) -> IR::Production
39
+ # @rbs (Integer nonterminal_id, Integer budget, Integer depth, Array[Integer] path) -> IR::Production
40
+ def choose_production: (Integer nonterminal_id, Integer budget, Integer depth, Array[Integer] path) -> IR::Production
41
+
42
+ # @rbs (Integer nonterminal_id, Integer budget) -> Array[IR::Production]
43
+ def bounded_productions: (Integer nonterminal_id, Integer budget) -> Array[IR::Production]
44
+
45
+ # @rbs (Array[IR::Production] candidates) -> Array[IR::Production]
46
+ def minimum_height_productions: (Array[IR::Production] candidates) -> Array[IR::Production]
47
+
48
+ # @rbs (Array[Integer] path, IR::Production production) -> Integer
49
+ def path_count: (Array[Integer] path, IR::Production production) -> Integer
41
50
 
42
51
  # @rbs (Integer symbol_id) -> Integer
43
52
  def minimum_cost!: (Integer symbol_id) -> Integer