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,70 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://raw.githubusercontent.com/ydah/ibex/main/schema/table-simulation-v1.schema.json",
4
+ "title": "Ibex table simulation v1",
5
+ "type": "object",
6
+ "required": [
7
+ "ibex_table_simulation",
8
+ "schema_version",
9
+ "grammar_digest",
10
+ "algorithm",
11
+ "tokens",
12
+ "status",
13
+ "steps"
14
+ ],
15
+ "properties": {
16
+ "ibex_table_simulation": { "const": "table-simulation" },
17
+ "schema_version": { "const": 1 },
18
+ "grammar_digest": {
19
+ "type": "string",
20
+ "pattern": "^sha256:[0-9a-f]{64}$"
21
+ },
22
+ "algorithm": { "enum": ["slr", "lalr1", "ielr1", "lr1"] },
23
+ "tokens": {
24
+ "type": "array",
25
+ "items": { "type": "string" },
26
+ "maxItems": 100000
27
+ },
28
+ "status": { "enum": ["accepted", "error"] },
29
+ "steps": {
30
+ "type": "array",
31
+ "maxItems": 100000,
32
+ "items": { "$ref": "#/$defs/step" }
33
+ }
34
+ },
35
+ "additionalProperties": false,
36
+ "$defs": {
37
+ "step": {
38
+ "type": "object",
39
+ "required": [
40
+ "sequence",
41
+ "state",
42
+ "token_id",
43
+ "token",
44
+ "action",
45
+ "action_source",
46
+ "production_id",
47
+ "lhs",
48
+ "rhs_length",
49
+ "target_state",
50
+ "stack_depth_before",
51
+ "stack_depth_after"
52
+ ],
53
+ "properties": {
54
+ "sequence": { "type": "integer", "minimum": 1 },
55
+ "state": { "type": "integer", "minimum": 0 },
56
+ "token_id": { "type": "integer", "minimum": 0 },
57
+ "token": { "type": "string" },
58
+ "action": { "enum": ["shift", "reduce", "accept", "error"] },
59
+ "action_source": { "enum": ["explicit", "default", "implicit"] },
60
+ "production_id": { "type": ["integer", "null"], "minimum": 0 },
61
+ "lhs": { "type": ["string", "null"] },
62
+ "rhs_length": { "type": ["integer", "null"], "minimum": 0 },
63
+ "target_state": { "type": ["integer", "null"], "minimum": 0 },
64
+ "stack_depth_before": { "type": "integer", "minimum": 1 },
65
+ "stack_depth_after": { "type": "integer", "minimum": 1 }
66
+ },
67
+ "additionalProperties": false
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,222 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://raw.githubusercontent.com/ydah/ibex/main/schema/verification-report-v1.schema.json",
4
+ "title": "Ibex scoped generation verification report version 1",
5
+ "type": "object",
6
+ "required": [
7
+ "ibex_report",
8
+ "schema_version",
9
+ "checker",
10
+ "profile",
11
+ "bounds",
12
+ "input",
13
+ "ir",
14
+ "table",
15
+ "outcome",
16
+ "excluded_trust",
17
+ "evidence_digest"
18
+ ],
19
+ "properties": {
20
+ "ibex_report": { "const": "scoped_verification" },
21
+ "schema_version": { "const": 1 },
22
+ "checker": { "$ref": "#/$defs/checker" },
23
+ "profile": { "enum": ["default", "strict"] },
24
+ "bounds": { "$ref": "#/$defs/bounds" },
25
+ "input": { "$ref": "#/$defs/input" },
26
+ "ir": { "$ref": "#/$defs/ir" },
27
+ "table": { "$ref": "#/$defs/table" },
28
+ "outcome": { "$ref": "#/$defs/outcome" },
29
+ "excluded_trust": {
30
+ "const": [
31
+ "source_to_ir",
32
+ "table_semantic_derivation",
33
+ "generated_wrapper",
34
+ "semantic_actions",
35
+ "lexer_actions",
36
+ "runtime",
37
+ "application_hooks",
38
+ "grammar_unambiguity"
39
+ ]
40
+ },
41
+ "evidence_digest": { "$ref": "#/$defs/digest" }
42
+ },
43
+ "additionalProperties": false,
44
+ "$defs": {
45
+ "digest": {
46
+ "type": "string",
47
+ "pattern": "^sha256:[0-9a-f]{64}$"
48
+ },
49
+ "checker": {
50
+ "type": "object",
51
+ "required": ["name", "version"],
52
+ "properties": {
53
+ "name": { "const": "ibex.verify" },
54
+ "version": { "type": "string", "minLength": 1 }
55
+ },
56
+ "additionalProperties": false
57
+ },
58
+ "bounds": {
59
+ "type": "object",
60
+ "required": ["max_states", "max_items"],
61
+ "properties": {
62
+ "max_states": { "type": "integer", "minimum": 1 },
63
+ "max_items": { "type": "integer", "minimum": 1 }
64
+ },
65
+ "additionalProperties": false
66
+ },
67
+ "input_file": {
68
+ "type": "object",
69
+ "required": ["logical_path", "sha256", "bytesize"],
70
+ "properties": {
71
+ "logical_path": {
72
+ "type": "string",
73
+ "pattern": "^input/[0-9]{4}/(?!(?:\\.|\\.\\.)$)[^/\\\\\\u0000-\\u001f\\u007f]+$(?![\\s\\S])"
74
+ },
75
+ "sha256": { "$ref": "#/$defs/digest" },
76
+ "bytesize": { "type": "integer", "minimum": 0 }
77
+ },
78
+ "additionalProperties": false
79
+ },
80
+ "input": {
81
+ "type": "object",
82
+ "required": ["digest", "files"],
83
+ "properties": {
84
+ "digest": { "$ref": "#/$defs/digest" },
85
+ "files": {
86
+ "type": "array",
87
+ "minItems": 1,
88
+ "maxItems": 10000,
89
+ "items": { "$ref": "#/$defs/input_file" }
90
+ }
91
+ },
92
+ "additionalProperties": false
93
+ },
94
+ "grammar_ir": {
95
+ "type": "object",
96
+ "required": ["schema_version", "digest"],
97
+ "properties": {
98
+ "schema_version": { "type": "integer", "minimum": 1 },
99
+ "digest": { "$ref": "#/$defs/digest" }
100
+ },
101
+ "additionalProperties": false
102
+ },
103
+ "automaton_ir": {
104
+ "type": "object",
105
+ "required": ["schema_version", "algorithm", "digest"],
106
+ "properties": {
107
+ "schema_version": { "type": "integer", "minimum": 1 },
108
+ "algorithm": { "enum": ["slr", "lalr1", "ielr1", "lr1"] },
109
+ "digest": { "$ref": "#/$defs/digest" }
110
+ },
111
+ "additionalProperties": false
112
+ },
113
+ "ir": {
114
+ "type": "object",
115
+ "description": "Digests of Automaton IR rebuilt with source-logical-v1 location identities; raw diagnostic paths are not hashed in this scope.",
116
+ "required": ["identity_scope", "grammar", "automaton"],
117
+ "properties": {
118
+ "identity_scope": { "const": "source-logical-v1" },
119
+ "grammar": { "$ref": "#/$defs/grammar_ir" },
120
+ "automaton": { "$ref": "#/$defs/automaton_ir" }
121
+ },
122
+ "additionalProperties": false
123
+ },
124
+ "table": {
125
+ "type": "object",
126
+ "required": [
127
+ "logical_path",
128
+ "artifact_type",
129
+ "schema_version",
130
+ "representation",
131
+ "artifact_digest",
132
+ "payload_digest"
133
+ ],
134
+ "properties": {
135
+ "logical_path": {
136
+ "type": "string",
137
+ "pattern": "^table/(?!(?:\\.|\\.\\.)$)[^/\\\\\\u0000-\\u001f\\u007f]+$(?![\\s\\S])"
138
+ },
139
+ "artifact_type": { "const": "ibex.parser-table" },
140
+ "schema_version": { "const": 1 },
141
+ "representation": { "enum": ["plain", "compact"] },
142
+ "artifact_digest": { "$ref": "#/$defs/digest" },
143
+ "payload_digest": { "$ref": "#/$defs/digest" }
144
+ },
145
+ "additionalProperties": false
146
+ },
147
+ "checks": {
148
+ "type": "array",
149
+ "items": { "enum": ["V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9"] },
150
+ "uniqueItems": true
151
+ },
152
+ "violation": {
153
+ "type": "object",
154
+ "required": ["id", "location", "message"],
155
+ "properties": {
156
+ "id": { "enum": ["V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9"] },
157
+ "location": { "type": "string" },
158
+ "message": { "type": "string", "minLength": 1 }
159
+ },
160
+ "additionalProperties": false
161
+ },
162
+ "exhaustion": {
163
+ "type": "object",
164
+ "required": ["kind", "message"],
165
+ "properties": {
166
+ "kind": { "const": "reference_collection_budget" },
167
+ "message": { "type": "string", "minLength": 1 }
168
+ },
169
+ "additionalProperties": false
170
+ },
171
+ "outcome": {
172
+ "type": "object",
173
+ "required": ["status", "requested_checks", "executed_checks", "violations", "exhaustion"],
174
+ "properties": {
175
+ "status": { "enum": ["pass", "violations", "exhausted"] },
176
+ "requested_checks": { "$ref": "#/$defs/checks" },
177
+ "executed_checks": { "$ref": "#/$defs/checks" },
178
+ "violations": {
179
+ "type": "array",
180
+ "items": { "$ref": "#/$defs/violation" }
181
+ },
182
+ "exhaustion": {
183
+ "oneOf": [
184
+ { "type": "null" },
185
+ { "$ref": "#/$defs/exhaustion" }
186
+ ]
187
+ }
188
+ },
189
+ "allOf": [
190
+ {
191
+ "if": { "properties": { "status": { "const": "pass" } } },
192
+ "then": {
193
+ "properties": {
194
+ "violations": { "maxItems": 0 },
195
+ "exhaustion": { "type": "null" }
196
+ }
197
+ }
198
+ },
199
+ {
200
+ "if": { "properties": { "status": { "const": "violations" } } },
201
+ "then": {
202
+ "properties": {
203
+ "violations": { "minItems": 1 },
204
+ "exhaustion": { "type": "null" }
205
+ }
206
+ }
207
+ },
208
+ {
209
+ "if": { "properties": { "status": { "const": "exhausted" } } },
210
+ "then": {
211
+ "properties": {
212
+ "executed_checks": { "maxItems": 0 },
213
+ "violations": { "maxItems": 0 },
214
+ "exhaustion": { "$ref": "#/$defs/exhaustion" }
215
+ }
216
+ }
217
+ }
218
+ ],
219
+ "additionalProperties": false
220
+ }
221
+ }
222
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://raw.githubusercontent.com/ydah/ibex/main/schema/verify-v1.schema.json",
4
+ "title": "Ibex independent verification report v1",
5
+ "type": "object",
6
+ "required": ["ibex_report", "schema_version", "result", "strict", "bounds", "violations"],
7
+ "properties": {
8
+ "ibex_report": { "const": "verify" },
9
+ "schema_version": { "const": 1 },
10
+ "algorithm": { "enum": ["slr", "lalr1", "ielr1", "lr1"] },
11
+ "strict": { "type": "boolean" },
12
+ "checks": {
13
+ "type": "array",
14
+ "items": { "enum": ["V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9"] },
15
+ "uniqueItems": true
16
+ },
17
+ "bounds": {
18
+ "type": "object",
19
+ "required": ["max_states", "max_items"],
20
+ "properties": {
21
+ "max_states": { "type": "integer", "minimum": 1 },
22
+ "max_items": { "type": "integer", "minimum": 1 }
23
+ },
24
+ "additionalProperties": false
25
+ },
26
+ "result": { "enum": ["valid", "invalid", "budget_exhausted"] },
27
+ "violations": {
28
+ "type": "array",
29
+ "items": {
30
+ "type": "object",
31
+ "required": ["id", "location", "message"],
32
+ "properties": {
33
+ "id": { "enum": ["V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9"] },
34
+ "location": { "type": "string" },
35
+ "message": { "type": "string" }
36
+ },
37
+ "additionalProperties": false
38
+ }
39
+ }
40
+ },
41
+ "additionalProperties": false
42
+ }
@@ -0,0 +1,19 @@
1
+ # Generated from lib/ibex/analysis/digraph.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Analysis
5
+ # Computes the transitive bit-set closure used by the LR lookahead
6
+ # algorithms. The implementation is iterative so a large grammar cannot
7
+ # exhaust Ruby's call stack merely because its dependency graph is deep.
8
+ module Digraph
9
+ # @rbs (Array[Integer] initial, Array[Array[Integer]] edges) -> Array[Integer]
10
+ def self?.closure: (Array[Integer] initial, Array[Array[Integer]] edges) -> Array[Integer]
11
+
12
+ # @rbs (Array[Array[Integer]] edges) -> Array[Array[Integer]]
13
+ def self?.strongly_connected_components: (Array[Array[Integer]] edges) -> Array[Array[Integer]]
14
+
15
+ # @rbs (Array[Array[Integer]]) -> Array[Integer]
16
+ def self?.topological_order: (Array[Array[Integer]]) -> Array[Integer]
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,37 @@
1
+ # Generated from lib/ibex/artifact_set.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # One fully rendered file in a parser generation.
5
+ class Artifact
6
+ attr_reader kind: Symbol
7
+
8
+ attr_reader path: String
9
+
10
+ attr_reader content: String
11
+
12
+ attr_reader mode: Integer?
13
+
14
+ # @rbs (kind: Symbol, path: String, content: String, ?mode: Integer?) -> void
15
+ def initialize: (kind: Symbol, path: String, content: String, ?mode: Integer?) -> void
16
+ end
17
+
18
+ # A generation's rendered outputs before any target is changed.
19
+ class ArtifactSet
20
+ include Enumerable[Artifact]
21
+
22
+ # @rbs () -> void
23
+ def initialize: () -> void
24
+
25
+ # @rbs (kind: Symbol, path: String, content: String, ?mode: Integer?) -> Artifact
26
+ def add: (kind: Symbol, path: String, content: String, ?mode: Integer?) -> Artifact
27
+
28
+ def each: () -> Enumerator[Artifact, ArtifactSet]
29
+ | () { (Artifact) -> void } -> ArtifactSet
30
+
31
+ # @rbs () -> Array[Artifact]
32
+ def to_a: () -> Array[Artifact]
33
+
34
+ # @rbs () -> bool
35
+ def empty?: () -> bool
36
+ end
37
+ end
@@ -0,0 +1,140 @@
1
+ # Generated from lib/ibex/bison_import/importer.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module BisonImport
5
+ # Converts Bison declarations and productions into analysis-only Ibex
6
+ # source without parsing or executing C.
7
+ # rubocop:disable Metrics/ClassLength -- declaration and rule recovery share one positioned directive report.
8
+ class Importer
9
+ type alternative = { items: Array[String], precedence: String? }
10
+
11
+ type rule = { lhs: String, alternatives: Array[alternative] }
12
+
13
+ DEFAULT_MAX_BYTES: Integer
14
+
15
+ DEFAULT_MAX_TOKENS: Integer
16
+
17
+ DEFAULT_MAX_RULES: Integer
18
+
19
+ DEFAULT_MAX_ACTIONS: Integer
20
+
21
+ # @rbs (String source, file: String, ?class_name: String?, ?max_bytes: Integer,
22
+ # ?max_tokens: Integer, ?max_rules: Integer, ?max_actions: Integer) -> void
23
+ def initialize: (String source, file: String, ?class_name: String?, ?max_bytes: Integer, ?max_tokens: Integer, ?max_rules: Integer, ?max_actions: Integer) -> void
24
+
25
+ # @rbs () -> Result
26
+ def run: () -> Result
27
+
28
+ private
29
+
30
+ # @rbs () -> void
31
+ def validate_source: () -> void
32
+
33
+ # @rbs () -> [String, String, Integer]
34
+ def split_sections: () -> [ String, String, Integer ]
35
+
36
+ # @rbs (String source) -> void
37
+ def parse_declarations: (String source) -> void
38
+
39
+ # @rbs (String source) -> Array[{ name: String, detail: String, line: Integer, column: Integer }]
40
+ def declaration_chunks: (String source) -> Array[{ name: String, detail: String, line: Integer, column: Integer }]
41
+
42
+ # @rbs (String detail) -> void
43
+ def parse_token_declaration: (String detail) -> void
44
+
45
+ # @rbs (String association, String detail) -> void
46
+ def parse_precedence: (String association, String detail) -> void
47
+
48
+ # @rbs (String detail) -> void
49
+ def parse_start: (String detail) -> void
50
+
51
+ # @rbs (Array[Tokenizer::Token] tokens) -> Array[rule]
52
+ def parse_rules: (Array[Tokenizer::Token] tokens) -> Array[rule]
53
+
54
+ # @rbs (Array[Tokenizer::Token] tokens) -> void
55
+ def register_nonterminals: (Array[Tokenizer::Token] tokens) -> void
56
+
57
+ # @rbs (Array[Tokenizer::Token] tokens, Integer cursor) -> [Integer, Integer]?
58
+ def next_lhs: (Array[Tokenizer::Token] tokens, Integer cursor) -> [ Integer, Integer ]?
59
+
60
+ # Bison permits a named reference between an LHS and its colon:
61
+ # `expression[result]: ...`.
62
+ # @rbs (Array[Tokenizer::Token] tokens, Integer cursor) -> [Integer, Integer]?
63
+ def lhs_definition_at: (Array[Tokenizer::Token] tokens, Integer cursor) -> [ Integer, Integer ]?
64
+
65
+ # @rbs (Array[Tokenizer::Token] tokens, Integer cursor) -> [Array[alternative], Integer]
66
+ def parse_alternatives: (Array[Tokenizer::Token] tokens, Integer cursor) -> [ Array[alternative], Integer ]
67
+
68
+ # @rbs (Array[Tokenizer::Token] tokens, Integer cursor, alternative alternative) -> Integer
69
+ def consume_rule_directive: (Array[Tokenizer::Token] tokens, Integer cursor, alternative alternative) -> Integer
70
+
71
+ # @rbs (Tokenizer::Token token) -> String
72
+ def render_symbol: (Tokenizer::Token token) -> String
73
+
74
+ # @rbs (Tokenizer::Token token) -> String
75
+ def render_action: (Tokenizer::Token token) -> String
76
+
77
+ # @rbs (String code) -> String
78
+ def transform_action: (String code) -> String
79
+
80
+ # @rbs (Array[rule] rules) -> String
81
+ def render_source: (Array[rule] rules) -> String
82
+
83
+ # @rbs () -> String
84
+ def structural_status: () -> String
85
+
86
+ # @rbs (Array[String] lines) -> void
87
+ def render_precedence: (Array[String] lines) -> void
88
+
89
+ # @rbs (Array[String] lines, rule rule) -> void
90
+ def render_rule: (Array[String] lines, rule rule) -> void
91
+
92
+ # @rbs (String name, Integer line, Integer column, String detail) -> void
93
+ def record_directive: (String name, Integer line, Integer column, String detail) -> void
94
+
95
+ # @rbs (String detail) -> Array[String]
96
+ def declaration_atoms: (String detail) -> Array[String]
97
+
98
+ # @rbs (String source) -> String
99
+ def strip_declaration_comments: (String source) -> String
100
+
101
+ # @rbs (String value) -> bool
102
+ def identifier_atom?: (String value) -> bool
103
+
104
+ # @rbs (String value) -> bool
105
+ def literal_atom?: (String value) -> bool
106
+
107
+ # @rbs (String value) -> String
108
+ def sanitize_symbol: (String value) -> String
109
+
110
+ # @rbs (String value) -> String
111
+ def terminal_name: (String value) -> String
112
+
113
+ # All imported nonterminals receive a lowercase namespace. This avoids
114
+ # Ibex's terminal-by-case convention and declaration keyword collisions.
115
+ # @rbs (String value) -> String
116
+ def nonterminal_name: (String value) -> String
117
+
118
+ # @rbs () -> String
119
+ def resolved_class_name: () -> String
120
+
121
+ # @rbs (String value) -> String
122
+ def sanitize_class_name: (String value) -> String
123
+
124
+ # @rbs (String value) -> Integer?
125
+ def first_integer: (String value) -> Integer?
126
+
127
+ # @rbs (Integer count) -> void
128
+ def check_rule_budget: (Integer count) -> void
129
+
130
+ # @rbs (Integer count, Tokenizer::Token token) -> void
131
+ def check_action_budget: (Integer count, Tokenizer::Token token) -> void
132
+
133
+ # @rbs (Integer value, Symbol name) -> Integer
134
+ def positive_limit: (Integer value, Symbol name) -> Integer
135
+
136
+ # @rbs () -> Hash[Symbol, Integer]
137
+ def bounds: () -> Hash[Symbol, Integer]
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,91 @@
1
+ # Generated from lib/ibex/bison_import/tokenizer.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module BisonImport
5
+ # Iterative scanner for the punctuation needed to recover Bison rules.
6
+ class Tokenizer
7
+ # One structural token with a byte-oriented source position.
8
+ class Token
9
+ attr_reader type: Symbol
10
+
11
+ attr_reader value: String
12
+
13
+ attr_reader line: Integer
14
+
15
+ attr_reader column: Integer
16
+
17
+ # @rbs (type: Symbol, value: String, line: Integer, column: Integer) -> void
18
+ def initialize: (type: Symbol, value: String, line: Integer, column: Integer) -> void
19
+ end
20
+
21
+ IDENTIFIER_START: Regexp
22
+
23
+ IDENTIFIER_CONTINUE: Regexp
24
+
25
+ # @rbs (String source, start_line: Integer, max_tokens: Integer) -> void
26
+ def initialize: (String source, start_line: Integer, max_tokens: Integer) -> void
27
+
28
+ # @rbs () -> Array[Token]
29
+ def tokenize: () -> Array[Token]
30
+
31
+ private
32
+
33
+ # @rbs () -> Token
34
+ def scan_token: () -> Token
35
+
36
+ # @rbs () -> void
37
+ def skip_ignored: () -> void
38
+
39
+ # @rbs () -> String
40
+ def scan_identifier: () -> String
41
+
42
+ # @rbs () -> String
43
+ def scan_directive: () -> String
44
+
45
+ # @rbs (Integer quote) -> String
46
+ def scan_quoted: (Integer quote) -> String
47
+
48
+ # @rbs () -> String
49
+ def scan_action: () -> String
50
+
51
+ # @rbs (Integer? byte) -> bool
52
+ def skip_action_opaque?: (Integer? byte) -> bool
53
+
54
+ # @rbs (Integer opener, Integer closer) -> String
55
+ def scan_delimited: (Integer opener, Integer closer) -> String
56
+
57
+ # @rbs () -> void
58
+ def skip_block_comment: () -> void
59
+
60
+ # @rbs () -> void
61
+ def skip_line: () -> void
62
+
63
+ # @rbs (String value) -> Symbol
64
+ def punctuation_type: (String value) -> Symbol
65
+
66
+ # @rbs (Integer? byte) -> bool
67
+ def identifier_start?: (Integer? byte) -> bool
68
+
69
+ # @rbs (Integer? byte) -> bool
70
+ def identifier_continue?: (Integer? byte) -> bool
71
+
72
+ # @rbs (Integer? byte) -> bool
73
+ def whitespace?: (Integer? byte) -> bool
74
+
75
+ # @rbs (Integer count) -> void
76
+ def check_token_budget: (Integer count) -> void
77
+
78
+ # @rbs () -> Integer?
79
+ def current_byte: () -> Integer?
80
+
81
+ # @rbs () -> Integer?
82
+ def peek_byte: () -> Integer?
83
+
84
+ # @rbs () -> bool
85
+ def eof?: () -> bool
86
+
87
+ # @rbs () -> void
88
+ def advance: () -> void
89
+ end
90
+ end
91
+ end