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,57 @@
1
+ # Generated from lib/ibex/ir/lexer_ir.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ LEXER_SCHEMA_VERSION: ::Integer
6
+
7
+ SUPPORTED_LEXER_SCHEMA_VERSIONS: Array[Integer]
8
+
9
+ # One normalized, state-scoped lexer rule.
10
+ class LexerRule
11
+ attr_reader id: Integer
12
+
13
+ attr_reader state: String
14
+
15
+ attr_reader kind: Symbol
16
+
17
+ attr_reader token: String?
18
+
19
+ attr_reader pattern: String
20
+
21
+ attr_reader pattern_kind: Symbol
22
+
23
+ attr_reader options: String
24
+
25
+ attr_reader action: String?
26
+
27
+ attr_reader location: location
28
+
29
+ # @rbs (id: Integer, state: String, kind: Symbol, token: String?, pattern: String, pattern_kind: Symbol,
30
+ # options: String, action: String?, location: location) -> void
31
+ def initialize: (id: Integer, state: String, kind: Symbol, token: String?, pattern: String, pattern_kind: Symbol, options: String, action: String?, location: location) -> void
32
+
33
+ # @rbs () -> Hash[Symbol, lexer_rule_document_value]
34
+ def to_h: () -> Hash[Symbol, lexer_rule_document_value]
35
+ end
36
+
37
+ # Independently versioned lexer contract embedded by the current Grammar IR.
38
+ class Lexer
39
+ attr_reader states: Array[String]
40
+
41
+ attr_reader rules: Array[LexerRule]
42
+
43
+ attr_reader warnings: Array[lexer_warning]
44
+
45
+ attr_reader schema_version: Integer
46
+
47
+ attr_reader source_provenance: source_provenance?
48
+
49
+ # @rbs (states: Array[String], rules: Array[LexerRule], warnings: Array[lexer_warning],
50
+ # ?schema_version: Integer, ?source_provenance: source_provenance?) -> void
51
+ def initialize: (states: Array[String], rules: Array[LexerRule], warnings: Array[lexer_warning], ?schema_version: Integer, ?source_provenance: source_provenance?) -> void
52
+
53
+ # @rbs () -> Hash[Symbol, lexer_document_value]
54
+ def to_h: () -> Hash[Symbol, lexer_document_value]
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,69 @@
1
+ # Generated from lib/ibex/ir/parser_contract.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ # Root-owned parser configuration persisted by the current Grammar IR.
6
+ class ParserContract
7
+ type definition = { configuration: String, values: Array[Symbol] }
8
+
9
+ type entry_location = { file: String?, line: Integer, column: Integer }
10
+
11
+ type entry_value = String? | bool | entry_location?
12
+
13
+ DEFINITIONS: Hash[Symbol, definition]
14
+
15
+ # One specified or explicitly unspecified contract field.
16
+ class Entry
17
+ attr_reader key: Symbol
18
+
19
+ attr_reader value: Symbol?
20
+
21
+ attr_reader location: Location?
22
+
23
+ attr_reader explicit: bool
24
+
25
+ # @rbs (Symbol key, ?value: Symbol?, ?location: Location?, ?explicit: bool) -> void
26
+ def initialize: (Symbol key, ?value: Symbol?, ?location: Location?, ?explicit: bool) -> void
27
+
28
+ # @rbs () -> Hash[Symbol, entry_value]
29
+ def to_h: () -> Hash[Symbol, entry_value]
30
+
31
+ private
32
+
33
+ # @rbs (Symbol key, Array[Symbol] allowed, Symbol? value, Location? location, bool explicit) -> void
34
+ def validate_state!: (Symbol key, Array[Symbol] allowed, Symbol? value, Location? location, bool explicit) -> void
35
+
36
+ # @rbs () -> entry_location?
37
+ def serialized_location: () -> entry_location?
38
+ end
39
+
40
+ attr_reader algorithm: Entry
41
+
42
+ attr_reader entries: Entry
43
+
44
+ attr_reader cst_trivia: Entry
45
+
46
+ # @rbs (?algorithm: Entry?, ?entries: Entry?, ?cst_trivia: Entry?) -> void
47
+ def initialize: (?algorithm: Entry?, ?entries: Entry?, ?cst_trivia: Entry?) -> void
48
+
49
+ # @rbs () -> Hash[Symbol, Hash[Symbol, entry_value]]
50
+ def to_h: () -> Hash[Symbol, Hash[Symbol, entry_value]]
51
+
52
+ # Values supplied to the typed resolver; unspecified fields are absent.
53
+ # @rbs () -> Hash[String, Symbol]
54
+ def configuration_values: () -> Hash[String, Symbol]
55
+
56
+ # Source locations supplied to the typed resolver.
57
+ # @rbs () -> Hash[String, Location]
58
+ def configuration_locations: () -> Hash[String, Location]
59
+
60
+ private
61
+
62
+ # @rbs (Symbol key, Entry? entry) -> Entry
63
+ def normalize_entry: (Symbol key, Entry? entry) -> Entry
64
+
65
+ # @rbs () -> Array[Entry]
66
+ def specified_entries: () -> Array[Entry]
67
+ end
68
+ end
69
+ end
@@ -2,49 +2,101 @@
2
2
 
3
3
  module Ibex
4
4
  module IR
5
- # Stable JSON serialization for versioned pipeline IR.
5
+ # Stable JSON serialization for the current pipeline IR.
6
+ # rubocop:disable Metrics/ModuleLength -- explicit fields keep serialization changes auditable.
7
+ # rubocop:disable Lint/SelfAssignment -- RBS inline assertions narrow schema-decoded values in place.
6
8
  module Serialize
7
- private def validate_version: (untyped data) -> untyped
9
+ private def validate_version: (Hash[String, IR::serialized_value] data) -> void
8
10
 
9
- private def self.validate_version: (untyped data) -> untyped
11
+ private def self.validate_version: (Hash[String, IR::serialized_value] data) -> void
10
12
 
11
- private def load_grammar: (untyped data) -> untyped
13
+ private def load_grammar: (Hash[String, IR::serialized_value] data) -> Grammar
12
14
 
13
- private def self.load_grammar: (untyped data) -> untyped
15
+ private def self.load_grammar: (Hash[String, IR::serialized_value] data) -> Grammar
14
16
 
15
- private def load_automaton: (untyped data) -> untyped
17
+ private def load_symbols: (Hash[String, IR::serialized_value] data) -> Array[GrammarSymbol]
16
18
 
17
- private def self.load_automaton: (untyped data) -> untyped
19
+ private def self.load_symbols: (Hash[String, IR::serialized_value] data) -> Array[GrammarSymbol]
18
20
 
19
- private def load_state: (untyped state, untyped grammar) -> untyped
21
+ private def load_productions: (Hash[String, IR::serialized_value] data) -> Array[Production]
20
22
 
21
- private def self.load_state: (untyped state, untyped grammar) -> untyped
23
+ private def self.load_productions: (Hash[String, IR::serialized_value] data) -> Array[Production]
22
24
 
23
- private def symbol_keyed: (untyped values, untyped grammar, ?actions: untyped) -> untyped
25
+ private def empty_chunks: () -> Hash[String, IR::serialized_value]
24
26
 
25
- private def self.symbol_keyed: (untyped values, untyped grammar, ?actions: untyped) -> untyped
27
+ private def self.empty_chunks: () -> Hash[String, IR::serialized_value]
26
28
 
27
- private def normalize_action: (untyped value) -> untyped
29
+ private def empty_parameters: () -> Array[IR::serialized_value]
28
30
 
29
- private def self.normalize_action: (untyped value) -> untyped
31
+ private def self.empty_parameters: () -> Array[IR::serialized_value]
30
32
 
31
- private def load_production: (untyped production) -> untyped
33
+ private def empty_printers: () -> Array[IR::serialized_value]
32
34
 
33
- private def self.load_production: (untyped production) -> untyped
35
+ private def self.empty_printers: () -> Array[IR::serialized_value]
34
36
 
35
- private def load_user_code_chunks: (untyped chunks) -> untyped
37
+ private def empty_tests: () -> Array[IR::serialized_value]
36
38
 
37
- private def self.load_user_code_chunks: (untyped chunks) -> untyped
39
+ private def self.empty_tests: () -> Array[IR::serialized_value]
38
40
 
39
- private def symbolize: (untyped value) -> untyped
41
+ private def empty_recovery: () -> Hash[String, IR::serialized_value]
40
42
 
41
- private def self.symbolize: (untyped value) -> untyped
43
+ private def self.empty_recovery: () -> Hash[String, IR::serialized_value]
42
44
 
43
- # @rbs (Grammar | Automaton value) -> String
44
- def self?.dump: (Grammar | Automaton value) -> String
45
+ private def load_automaton: (Hash[String, IR::serialized_value] data) -> Automaton
45
46
 
46
- # @rbs (String source) -> (Grammar | Automaton)
47
- def self?.load: (String source) -> (Grammar | Automaton)
47
+ private def self.load_automaton: (Hash[String, IR::serialized_value] data) -> Automaton
48
+
49
+ private def load_lexer: (Hash[String, IR::serialized_value] data) -> Lexer
50
+
51
+ private def self.load_lexer: (Hash[String, IR::serialized_value] data) -> Lexer
52
+
53
+ private def load_state: (Hash[String, IR::serialized_value] state, Grammar grammar) -> AutomatonState
54
+
55
+ private def self.load_state: (Hash[String, IR::serialized_value] state, Grammar grammar) -> AutomatonState
56
+
57
+ private def symbol_keyed: (Hash[String, IR::serialized_value] values, Grammar grammar, ?actions: bool) -> Hash[Integer, IR::serialized_value]
58
+
59
+ private def self.symbol_keyed: (Hash[String, IR::serialized_value] values, Grammar grammar, ?actions: bool) -> Hash[Integer, IR::serialized_value]
60
+
61
+ private def normalize_action: (Hash[String, IR::serialized_value] value) -> parser_action?
62
+
63
+ private def self.normalize_action: (Hash[String, IR::serialized_value] value) -> parser_action?
64
+
65
+ private def load_production: (Hash[String, IR::serialized_value] production) -> Production
66
+
67
+ private def self.load_production: (Hash[String, IR::serialized_value] production) -> Production
68
+
69
+ private def load_user_code_chunks: (Hash[String, Array[Hash[String, IR::serialized_value]]] chunks) -> user_code_chunks
70
+
71
+ private def self.load_user_code_chunks: (Hash[String, Array[Hash[String, IR::serialized_value]]] chunks) -> user_code_chunks
72
+
73
+ private def load_symbol_metadata: (Hash[String, IR::serialized_value] symbol, String field) -> String?
74
+
75
+ private def self.load_symbol_metadata: (Hash[String, IR::serialized_value] symbol, String field) -> String?
76
+
77
+ private def load_grammar_tests: (Array[Hash[String, IR::serialized_value]] tests) -> Array[grammar_test]
78
+
79
+ private def self.load_grammar_tests: (Array[Hash[String, IR::serialized_value]] tests) -> Array[grammar_test]
80
+
81
+ private def symbol_source_position: (Hash[String, IR::serialized_value] symbol) -> String
82
+
83
+ private def self.symbol_source_position: (Hash[String, IR::serialized_value] symbol) -> String
84
+
85
+ private def load_parser_contract: (IR::serialized_value value) -> IR::serialized_value
86
+
87
+ private def self.load_parser_contract: (IR::serialized_value value) -> IR::serialized_value
88
+
89
+ private def symbolize: (IR::serialized_value value) -> IR::serialized_value
90
+
91
+ private def self.symbolize: (IR::serialized_value value) -> IR::serialized_value
92
+
93
+ # @rbs (Grammar | Automaton | Lexer value) -> String
94
+ def self?.dump: (Grammar | Automaton | Lexer value) -> String
95
+
96
+ # @rbs (String source) -> (Grammar | Automaton | Lexer)
97
+ def self?.load: (String source) -> (Grammar | Automaton | Lexer)
98
+
99
+ private
48
100
  end
49
101
  end
50
102
  end
@@ -0,0 +1,112 @@
1
+ # Generated from lib/ibex/ir/validator/automaton.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ module Validator
6
+ # Structural and referential validation for a current Automaton IR JSON object.
7
+ # rubocop:disable Metrics/ClassLength -- inline type contracts accompany one cohesive document validator.
8
+ class AutomatonDocument < Base
9
+ ROOT_REQUIRED: Array[String]
10
+
11
+ ROOT_OPTIONAL: Array[String]
12
+
13
+ STATE_REQUIRED: Array[String]
14
+
15
+ ACTION_TYPES: Array[String]
16
+
17
+ RESOLUTION_KINDS: Array[String]
18
+
19
+ @version: Integer
20
+
21
+ @grammar: GrammarDocument
22
+
23
+ @states_by_id: Hash[Integer, json_object]
24
+
25
+ @data: json_object
26
+
27
+ # @rbs (json_object data, ?version: Integer) -> void
28
+ def initialize: (json_object data, ?version: Integer) -> void
29
+
30
+ # @rbs () -> self
31
+ def validate: () -> self
32
+
33
+ private
34
+
35
+ # @rbs () -> void
36
+ def validate_entry_states: () -> void
37
+
38
+ # @rbs (Hash[String, untyped] grammar) -> void
39
+ def validate_construction_contract: (Hash[String, untyped] grammar) -> void
40
+
41
+ # @rbs () -> void
42
+ def validate_digest: () -> void
43
+
44
+ # @rbs () -> void
45
+ def validate_state_records: () -> void
46
+
47
+ # @rbs () -> void
48
+ def validate_state_contents: () -> void
49
+
50
+ # @rbs (json_value value, String path) -> void
51
+ def validate_items: (json_value value, String path) -> void
52
+
53
+ # @rbs (Integer production_id, json_value dot_value, String path) -> void
54
+ def validate_item_production: (Integer production_id, json_value dot_value, String path) -> void
55
+
56
+ # @rbs (json_value value, String path) -> void
57
+ def validate_lookaheads: (json_value value, String path) -> void
58
+
59
+ # @rbs (json_value value, String path) -> void
60
+ def validate_transitions: (json_value value, String path) -> void
61
+
62
+ # @rbs (json_value value, String path) -> void
63
+ def validate_actions: (json_value value, String path) -> void
64
+
65
+ # @rbs (json_value value, String path) -> void
66
+ def validate_gotos: (json_value value, String path) -> void
67
+
68
+ # @rbs (json_value value, String path, ?kind: String?) { (json_value, String, json_object) -> void } -> void
69
+ def symbol_map: (json_value value, String path, ?kind: String?) { (json_value, String, json_object) -> void } -> void
70
+
71
+ # @rbs (json_value value, String path) -> void
72
+ def validate_state_reference: (json_value value, String path) -> void
73
+
74
+ # @rbs (json_value value, String path, ?nullable: bool) -> void
75
+ def validate_parser_action: (json_value value, String path, ?nullable: bool) -> void
76
+
77
+ # @rbs (json_value value, String path) -> void
78
+ def validate_production_reference: (json_value value, String path) -> void
79
+
80
+ # @rbs (json_value value, String path) -> void
81
+ def validate_conflicts: (json_value value, String path) -> void
82
+
83
+ # @rbs (json_object conflict, String path) -> void
84
+ def validate_shift_reduce: (json_object conflict, String path) -> void
85
+
86
+ # @rbs (json_object conflict, String path) -> void
87
+ def validate_reduce_reduce: (json_object conflict, String path) -> void
88
+
89
+ # @rbs (json_object conflict, String path) -> void
90
+ def validate_conflict_entries: (json_object conflict, String path) -> void
91
+
92
+ # @rbs (json_value value, String path) -> void
93
+ def validate_midrule_origins: (json_value value, String path) -> void
94
+
95
+ # @rbs (json_value value, String path) -> void
96
+ def validate_conflict_symbol: (json_value value, String path) -> void
97
+
98
+ # @rbs (json_value value, String path, ?reductions: Array[Integer]?) -> void
99
+ def validate_resolution: (json_value value, String path, ?reductions: Array[Integer]?) -> void
100
+
101
+ # @rbs () -> void
102
+ def validate_conflict_summary: () -> void
103
+
104
+ # @rbs (json_object summary, String path) -> void
105
+ def validate_conflict_counts: (json_object summary, String path) -> void
106
+
107
+ # @rbs (json_object summary, String path) -> void
108
+ def validate_expectation: (json_object summary, String path) -> void
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,69 @@
1
+ # Generated from lib/ibex/ir/validator/base.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ module Validator
6
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
7
+
8
+ type json_object = Hash[String, json_value]
9
+
10
+ # Shared JSON-shape checks for current IR documents.
11
+ class Base
12
+ POSITION: ::String
13
+
14
+ private
15
+
16
+ # @rbs (json_value value, String path, Array[String] required, ?Array[String] optional) -> json_object
17
+ def record: (json_value value, String path, Array[String] required, ?Array[String] optional) -> json_object
18
+
19
+ # @rbs (json_value value, String path) -> json_object
20
+ def object: (json_value value, String path) -> json_object
21
+
22
+ # @rbs (json_value value, String path) -> Array[json_value]
23
+ def array: (json_value value, String path) -> Array[json_value]
24
+
25
+ # @rbs (json_value value, String path) -> String
26
+ def string: (json_value value, String path) -> String
27
+
28
+ # @rbs (json_value value, String path) -> String
29
+ def nonempty_string: (json_value value, String path) -> String
30
+
31
+ # @rbs (json_value value, String path) -> Integer
32
+ def integer: (json_value value, String path) -> Integer
33
+
34
+ # @rbs (json_value value, String path) -> Integer
35
+ def nonnegative_integer: (json_value value, String path) -> Integer
36
+
37
+ # @rbs (json_value value, String path) -> bool
38
+ def boolean: (json_value value, String path) -> bool
39
+
40
+ # @rbs (json_value value, String path, json_value expected) -> void
41
+ def literal: (json_value value, String path, json_value expected) -> void
42
+
43
+ # @rbs (json_value value, String path, Array[String] values) -> String
44
+ def enum: (json_value value, String path, Array[String] values) -> String
45
+
46
+ # @rbs (json_value value, String path, ?nullable: bool) -> void
47
+ def location: (json_value value, String path, ?nullable: bool) -> void
48
+
49
+ # @rbs (json_value value, String path) -> Integer
50
+ def positive_integer: (json_value value, String path) -> Integer
51
+
52
+ # @rbs (json_value value, String path) -> String?
53
+ def nullable_string: (json_value value, String path) -> String?
54
+
55
+ # @rbs (json_value value, String path) -> void
56
+ def metadata: (json_value value, String path) -> void
57
+
58
+ # @rbs (json_object value, String key, String path) -> json_value
59
+ def field: (json_object value, String key, String path) -> json_value
60
+
61
+ # @rbs (String path, String key) -> String
62
+ def child_path: (String path, String key) -> String
63
+
64
+ # @rbs (String path, String message) -> bot
65
+ def invalid: (String path, String message) -> bot
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,195 @@
1
+ # Generated from lib/ibex/ir/validator/grammar.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ module Validator
6
+ # Structural and referential validation for a current Grammar IR JSON object.
7
+ # rubocop:disable Metrics/ClassLength -- inline type contracts accompany one cohesive document validator.
8
+ class GrammarDocument < Base
9
+ ROOT_REQUIRED: Array[String]
10
+
11
+ ROOT_OPTIONAL: Array[String]
12
+
13
+ SYMBOL_REQUIRED: Array[String]
14
+
15
+ SYMBOL_OPTIONAL: Array[String]
16
+
17
+ SYMBOL_METADATA_REQUIRED: Array[String]
18
+
19
+ PRODUCTION_REQUIRED: Array[String]
20
+
21
+ PRODUCTION_METADATA_REQUIRED: Array[String]
22
+
23
+ ACTION_COMPOSITION_REQUIRED: Array[String]
24
+
25
+ ORIGIN_KINDS: Array[String]
26
+
27
+ RUBY_KEYWORDS: Array[String]
28
+
29
+ attr_reader symbols_by_id: Hash[Integer, json_object]
30
+
31
+ attr_reader symbols_by_name: Hash[String, json_object]
32
+
33
+ attr_reader productions_by_id: Hash[Integer, json_object]
34
+
35
+ @version: Integer
36
+
37
+ @path: String
38
+
39
+ @data: json_object
40
+
41
+ # @rbs (json_object data, ?path: String, ?version: Integer) -> void
42
+ def initialize: (json_object data, ?path: String, ?version: Integer) -> void
43
+
44
+ # @rbs () -> self
45
+ def validate: () -> self
46
+
47
+ private
48
+
49
+ # @rbs () -> void
50
+ def validate_root_record: () -> void
51
+
52
+ # @rbs () -> void
53
+ def validate_optional_parser_metadata: () -> void
54
+
55
+ # @rbs () -> void
56
+ def validate_parser_parameters_if_present: () -> void
57
+
58
+ # @rbs () -> void
59
+ def validate_optional_source_metadata: () -> void
60
+
61
+ # @rbs () -> void
62
+ def validate_envelope: () -> void
63
+
64
+ # @rbs () -> void
65
+ def validate_header: () -> void
66
+
67
+ # @rbs () -> void
68
+ def validate_options: () -> void
69
+
70
+ # @rbs () -> void
71
+ def validate_parser_parameters: () -> void
72
+
73
+ # @rbs () -> void
74
+ def validate_value_printers: () -> void
75
+
76
+ # @rbs () -> void
77
+ def validate_grammar_tests: () -> void
78
+
79
+ # @rbs () -> void
80
+ def validate_symbols: () -> void
81
+
82
+ # @rbs (json_value value, Integer index) -> void
83
+ def validate_symbol: (json_value value, Integer index) -> void
84
+
85
+ # @rbs (json_value value, String path) -> void
86
+ def validate_precedence: (json_value value, String path) -> void
87
+
88
+ # @rbs () -> void
89
+ def validate_reserved_symbols: () -> void
90
+
91
+ # @rbs (Integer id, String name) -> void
92
+ def validate_reserved_symbol: (Integer id, String name) -> void
93
+
94
+ # @rbs () -> void
95
+ def validate_start: () -> void
96
+
97
+ # @rbs (String start) -> void
98
+ def validate_multiple_starts: (String start) -> void
99
+
100
+ # @rbs () -> void
101
+ def validate_recovery: () -> void
102
+
103
+ # @rbs (json_value values, String path, kind: String) -> void
104
+ def validate_recovery_symbols: (json_value values, String path, kind: String) -> void
105
+
106
+ # @rbs (json_value value, String path, kind: String, seen: Hash[String, bool]) -> void
107
+ def validate_recovery_symbol: (json_value value, String path, kind: String, seen: Hash[String, bool]) -> void
108
+
109
+ # @rbs () -> void
110
+ def validate_productions: () -> void
111
+
112
+ # @rbs (json_value value, Integer index) -> void
113
+ def validate_production: (json_value value, Integer index) -> void
114
+
115
+ # @rbs (json_value value, String path, rhs_length: Integer) -> void
116
+ def validate_node_annotation: (json_value value, String path, rhs_length: Integer) -> void
117
+
118
+ # @rbs (json_value value, String path) -> void
119
+ def validate_lhs: (json_value value, String path) -> void
120
+
121
+ # @rbs (json_value value, String path) -> void
122
+ def validate_rhs: (json_value value, String path) -> void
123
+
124
+ # @rbs (json_value value, String path, rhs_length: Integer) -> void
125
+ def validate_action: (json_value value, String path, rhs_length: Integer) -> void
126
+
127
+ # @rbs (json_value value, String path, limit: Integer) -> void
128
+ def validate_named_refs: (json_value value, String path, limit: Integer) -> void
129
+
130
+ # @rbs (json_value value, String path) -> void
131
+ def validate_precedence_override: (json_value value, String path) -> void
132
+
133
+ # @rbs (json_value value, String path) -> void
134
+ def validate_origin: (json_value value, String path) -> void
135
+
136
+ # @rbs (json_value value, String path) -> void
137
+ def validate_string_map: (json_value value, String path) -> void
138
+
139
+ # @rbs () -> void
140
+ def validate_warnings: () -> void
141
+
142
+ # @rbs (json_value value, String path) -> void
143
+ def validate_warning: (json_value value, String path) -> void
144
+
145
+ # @rbs (json_object warning, String path) -> void
146
+ def validate_warning_symbol: (json_object warning, String path) -> void
147
+
148
+ # @rbs (json_object warning, String field_name, String path) -> void
149
+ def validate_warning_production: (json_object warning, String field_name, String path) -> void
150
+
151
+ # @rbs () -> void
152
+ def validate_lexer: () -> void
153
+
154
+ # @rbs () -> void
155
+ def validate_user_code_chunks: () -> void
156
+
157
+ # @rbs (json_value value, String path, ?nullable: bool) -> void
158
+ def validate_source_provenance: (json_value value, String path, ?nullable: bool) -> void
159
+
160
+ # @rbs (json_value value, String path) -> void
161
+ def validate_byte_span: (json_value value, String path) -> void
162
+
163
+ # @rbs () -> void
164
+ def validate_parser_contract: () -> void
165
+
166
+ # @rbs (untyped value, String, Array[String]) -> Hash[String, untyped]
167
+ def validate_contract_entry: (untyped value, String, Array[String]) -> Hash[String, untyped]
168
+
169
+ # @rbs (json_value value, String path) -> void
170
+ def validate_expansion: (json_value value, String path) -> void
171
+
172
+ # @rbs (json_value value, String path) -> void
173
+ def validate_parameter_expansion: (json_value value, String path) -> void
174
+
175
+ # @rbs (json_value value, String path) -> void
176
+ def validate_inline_expansion: (json_value value, String path) -> void
177
+
178
+ # @rbs (json_value value, String path, rhs_length: Integer) -> void
179
+ def validate_action_composition: (json_value value, String path, rhs_length: Integer) -> void
180
+
181
+ # @rbs (json_value value, String path, Integer rhs_length, Array[json_value] fragments) -> void
182
+ def validate_action_composition_plan: (json_value value, String path, Integer rhs_length, Array[json_value] fragments) -> void
183
+
184
+ # @rbs (json_value value, String path, Integer physical, Integer step_index) -> void
185
+ def validate_action_composition_step: (json_value value, String path, Integer physical, Integer step_index) -> void
186
+
187
+ # @rbs (Array[json_value] inputs, String path, Integer limit) -> void
188
+ def validate_action_slots: (Array[json_value] inputs, String path, Integer limit) -> void
189
+
190
+ # @rbs (json_value value, String path, Integer physical) -> void
191
+ def validate_action_lookahead: (json_value value, String path, Integer physical) -> void
192
+ end
193
+ end
194
+ end
195
+ end
@@ -0,0 +1,37 @@
1
+ # Generated from lib/ibex/ir/validator/lexer.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ module Validator
6
+ # Structural validation for the independently versioned Lexer IR.
7
+ class LexerDocument < Base
8
+ ROOT_REQUIRED: Array[String]
9
+
10
+ RULE_REQUIRED: Array[String]
11
+
12
+ # @rbs (json_object data, ?path: String) -> void
13
+ def initialize: (json_object data, ?path: String) -> void
14
+
15
+ # @rbs () -> self
16
+ def validate: () -> self
17
+
18
+ private
19
+
20
+ # @rbs () -> void
21
+ def validate_states: () -> void
22
+
23
+ # @rbs () -> void
24
+ def validate_rules: () -> void
25
+
26
+ # @rbs (json_object rule, String path, String options) -> void
27
+ def validate_pattern: (json_object rule, String path, String options) -> void
28
+
29
+ # @rbs () -> void
30
+ def validate_warnings: () -> void
31
+
32
+ # @rbs () -> void
33
+ def validate_source_provenance: () -> void
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,16 @@
1
+ # Generated from lib/ibex/ir/validator.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ # Validates a serialized public IR document before constructing immutable IR objects.
6
+ module Validator
7
+ POSITION: ::String
8
+
9
+ # @rbs (String source) -> (Grammar | Automaton | Lexer)
10
+ def self?.validate: (String source) -> (Grammar | Automaton | Lexer)
11
+
12
+ # @rbs (Automaton automaton) -> void
13
+ def self?.validate_automaton_digest: (Automaton automaton) -> void
14
+ end
15
+ end
16
+ end