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.
- checksums.yaml +4 -4
- data/README.md +89 -123
- data/docs/architecture.md +477 -31
- data/docs/bison-import.md +103 -0
- data/docs/comparison-policy.md +127 -0
- data/docs/configuration-model.md +59 -0
- data/docs/configuration-report.md +28 -0
- data/docs/conflict-explanation-reviews/v1/records/README.md +28 -0
- data/docs/conflict-explanation-study.md +62 -0
- data/docs/construction-profiling.md +157 -0
- data/docs/cst-migration.md +106 -0
- data/docs/cst.md +237 -0
- data/docs/decisions/0000-template.md +24 -0
- data/docs/decisions/0001-separate-ir-pipeline.md +34 -0
- data/docs/decisions/0002-opaque-user-code-boundary.md +32 -0
- data/docs/decisions/0003-self-hosted-grammar-frontend.md +32 -0
- data/docs/decisions/0004-shared-semantic-and-lossless-source-model.md +33 -0
- data/docs/decisions/0005-contained-grammar-composition.md +34 -0
- data/docs/decisions/0006-bounded-structural-grammar-lowering.md +32 -0
- data/docs/decisions/0007-shared-parser-construction-pipeline.md +33 -0
- data/docs/decisions/0008-versioned-runtime-package-boundary.md +36 -0
- data/docs/decisions/0009-isolated-parser-sessions.md +34 -0
- data/docs/decisions/0010-committed-runtime-observation.md +34 -0
- data/docs/decisions/0011-versioned-semantic-action-boundary.md +37 -0
- data/docs/decisions/0012-bounded-nonexecuting-analysis.md +37 -0
- data/docs/decisions/0013-transactional-generation-publication.md +37 -0
- data/docs/decisions/0014-versioned-generated-lexer.md +35 -0
- data/docs/decisions/0015-worker-isolated-browser-analysis.md +32 -0
- data/docs/decisions/0016-red-green-concrete-syntax.md +34 -0
- data/docs/decisions/0017-persistent-syntax-artifacts.md +35 -0
- data/docs/decisions/0018-conservative-incremental-syntax-reuse.md +38 -0
- data/docs/decisions/0019-runtime-syntax-session-boundary.md +51 -0
- data/docs/decisions/0020-grammar-ir-parser-contract.md +65 -0
- data/docs/decisions/0021-data-only-parser-table-sidecar.md +50 -0
- data/docs/decisions/0022-manifest-bound-verification-report.md +77 -0
- data/docs/decisions/0023-syntax-only-repair-results.md +48 -0
- data/docs/decisions/0024-direct-ielr-construction.md +42 -0
- data/docs/decisions/README.md +74 -0
- data/docs/declarative-configuration.md +262 -0
- data/docs/development.md +306 -0
- data/docs/direct-ielr-decision.md +120 -0
- data/docs/direct-multi-entry-decision.md +82 -0
- data/docs/editor-setup.md +26 -0
- data/docs/error-ux-review-rubric-v1.md +117 -0
- data/docs/error-ux-reviews/v1/records/README.md +22 -0
- data/docs/error-ux-round2-review-status-v1.json +27 -0
- data/docs/error-ux-round2-reviews/v1/records/README.md +30 -0
- data/docs/error-ux-round2-v1.json +1581 -0
- data/docs/error-ux-round2.md +111 -0
- data/docs/error-ux.md +114 -0
- data/docs/getting-started.md +80 -0
- data/docs/grammar-reference.md +629 -18
- data/docs/ielr-design.md +43 -0
- data/docs/ielr.md +92 -0
- data/docs/ja/bison-import.md +51 -0
- data/docs/ja/stable-api.md +53 -0
- data/docs/lexer-construction-profile.md +109 -0
- data/docs/lexer-migration.md +56 -0
- data/docs/maturity.md +128 -0
- data/docs/project-site-strategy.md +54 -0
- data/docs/racc-migration-evidence.md +45 -0
- data/docs/racc-migration.md +45 -6
- data/docs/release-readiness.md +221 -0
- data/docs/repair-semantics.md +123 -0
- data/docs/runtime-abi-evolution.md +307 -0
- data/docs/stability.md +234 -0
- data/docs/status.md +43 -0
- data/docs/syntax-sessions.md +183 -0
- data/docs/table-artifact.md +125 -0
- data/docs/test-interactions.md +219 -0
- data/docs/verification-report.md +137 -0
- data/docs/verifier-trust-boundary.md +199 -0
- data/docs/workloads.md +132 -0
- data/examples/README.md +60 -0
- data/examples/calculator.y +44 -0
- data/examples/csv.y +32 -0
- data/examples/ini.y +70 -0
- data/examples/json.y +48 -0
- data/examples/tiny_language.y +75 -0
- data/lib/ibex/analysis/digraph.rb +128 -0
- data/lib/ibex/analysis/sets.rb +5 -4
- data/lib/ibex/analysis.rb +1 -0
- data/lib/ibex/artifact_set.rb +63 -0
- data/lib/ibex/bison_import/importer.rb +516 -0
- data/lib/ibex/bison_import/tokenizer.rb +260 -0
- data/lib/ibex/bison_import.rb +200 -0
- data/lib/ibex/bounded_subprocess.rb +171 -0
- data/lib/ibex/cli/ambiguity.rb +75 -0
- data/lib/ibex/cli/analysis.rb +134 -0
- data/lib/ibex/cli/bison_import.rb +121 -0
- data/lib/ibex/cli/config.rb +128 -0
- data/lib/ibex/cli/counterexample_options.rb +6 -2
- data/lib/ibex/cli/coverage.rb +173 -0
- data/lib/ibex/cli/debug.rb +106 -0
- data/lib/ibex/cli/diagnostics.rb +136 -0
- data/lib/ibex/cli/documentation.rb +70 -0
- data/lib/ibex/cli/equiv.rb +169 -0
- data/lib/ibex/cli/error_messages.rb +184 -0
- data/lib/ibex/cli/explain.rb +85 -0
- data/lib/ibex/cli/fix.rb +203 -0
- data/lib/ibex/cli/formatting.rb +387 -0
- data/lib/ibex/cli/fuzz.rb +200 -0
- data/lib/ibex/cli/fuzz_regressions.rb +145 -0
- data/lib/ibex/cli/generation_artifacts.rb +189 -0
- data/lib/ibex/cli/generation_error_messages.rb +39 -0
- data/lib/ibex/cli/grammar_tests.rb +140 -0
- data/lib/ibex/cli/ir_tools.rb +128 -0
- data/lib/ibex/cli/lsp.rb +33 -0
- data/lib/ibex/cli/outputs.rb +133 -23
- data/lib/ibex/cli/racc_migration.rb +87 -0
- data/lib/ibex/cli/reduce.rb +202 -0
- data/lib/ibex/cli/reduce_reporting.rb +71 -0
- data/lib/ibex/cli/samples.rb +118 -0
- data/lib/ibex/cli/verify.rb +116 -0
- data/lib/ibex/cli/watch.rb +104 -0
- data/lib/ibex/cli.rb +825 -55
- data/lib/ibex/codegen/action_locations.rb +103 -0
- data/lib/ibex/codegen/action_method_source.rb +209 -0
- data/lib/ibex/codegen/action_source.rb +119 -0
- data/lib/ibex/codegen/ambiguity.rb +174 -0
- data/lib/ibex/codegen/cst_metadata.rb +171 -0
- data/lib/ibex/codegen/documentation.rb +170 -0
- data/lib/ibex/codegen/explain.rb +380 -0
- data/lib/ibex/codegen/generated_action_abi.rb +293 -0
- data/lib/ibex/codegen/html.rb +94 -10
- data/lib/ibex/codegen/mermaid.rb +43 -0
- data/lib/ibex/codegen/railroad.rb +197 -0
- data/lib/ibex/codegen/railroad_documentation.rb +59 -0
- data/lib/ibex/codegen/rbs.rb +331 -2
- data/lib/ibex/codegen/report.rb +67 -15
- data/lib/ibex/codegen/ruby.rb +305 -66
- data/lib/ibex/codegen/ruby_actions.rb +146 -0
- data/lib/ibex/codegen/ruby_ast.rb +121 -0
- data/lib/ibex/codegen/ruby_error_messages.rb +28 -0
- data/lib/ibex/codegen/ruby_lexer.rb +83 -0
- data/lib/ibex/codegen/ruby_syntax.rb +96 -0
- data/lib/ibex/codegen/ruby_table_metadata.rb +57 -0
- data/lib/ibex/codegen/ruby_value_printers.rb +56 -0
- data/lib/ibex/codegen/symbol_labels.rb +1 -1
- data/lib/ibex/configuration/analysis_grammar.rb +35 -0
- data/lib/ibex/configuration/explanation.rb +421 -0
- data/lib/ibex/configuration/inspector.rb +232 -0
- data/lib/ibex/configuration.rb +580 -0
- data/lib/ibex/coverage/collector.rb +198 -0
- data/lib/ibex/coverage/event_stream.rb +103 -0
- data/lib/ibex/coverage/report.rb +267 -0
- data/lib/ibex/coverage/runtime_event_validator.rb +169 -0
- data/lib/ibex/coverage.rb +13 -0
- data/lib/ibex/delta_reducer.rb +99 -0
- data/lib/ibex/diff.rb +140 -0
- data/lib/ibex/equiv/machine.rb +135 -0
- data/lib/ibex/equiv.rb +373 -0
- data/lib/ibex/error_messages/parser.rb +159 -0
- data/lib/ibex/error_messages/parser_v2.rb +198 -0
- data/lib/ibex/error_messages/renderer.rb +65 -0
- data/lib/ibex/error_messages/sentence_search.rb +196 -0
- data/lib/ibex/error_messages/update.rb +169 -0
- data/lib/ibex/error_messages.rb +165 -0
- data/lib/ibex/fix.rb +557 -0
- data/lib/ibex/frontend/ast.rb +166 -7
- data/lib/ibex/frontend/bootstrap_parser.rb +40 -4
- data/lib/ibex/frontend/diagnostic.rb +81 -0
- data/lib/ibex/frontend/diagnostic_recovery.rb +268 -0
- data/lib/ibex/frontend/dsl.rb +66 -7
- data/lib/ibex/frontend/formatter.rb +453 -0
- data/lib/ibex/frontend/generated_parser.rb +644 -190
- data/lib/ibex/frontend/generated_parser_base.rb +170 -32
- data/lib/ibex/frontend/generated_parser_includes.rb +51 -0
- data/lib/ibex/frontend/generated_parser_metadata.rb +61 -0
- data/lib/ibex/frontend/generated_parser_parameters.rb +60 -0
- data/lib/ibex/frontend/generation.rb +33 -0
- data/lib/ibex/frontend/lexer.rb +162 -10
- data/lib/ibex/frontend/lexer_recovery.rb +84 -0
- data/lib/ibex/frontend/parser/declarations.rb +262 -11
- data/lib/ibex/frontend/parser/parameters.rb +82 -0
- data/lib/ibex/frontend/parser/rules.rb +43 -6
- data/lib/ibex/frontend/parser.rb +182 -4
- data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
- data/lib/ibex/frontend/regenerator.rb +27 -1
- data/lib/ibex/frontend/resolution.rb +70 -0
- data/lib/ibex/frontend/resolver.rb +217 -0
- data/lib/ibex/frontend/rule_documentation.rb +104 -0
- data/lib/ibex/frontend/source_cursor.rb +133 -9
- data/lib/ibex/frontend/source_document.rb +229 -0
- data/lib/ibex/frontend/source_loader.rb +150 -0
- data/lib/ibex/frontend/source_span.rb +89 -0
- data/lib/ibex/frontend/token_adapter/declaration_document_state.rb +47 -0
- data/lib/ibex/frontend/token_adapter/declaration_lexer_state.rb +83 -0
- data/lib/ibex/frontend/token_adapter/declaration_state.rb +244 -22
- data/lib/ibex/frontend/token_adapter/delimiter_tracker.rb +8 -2
- data/lib/ibex/frontend/token_adapter/rule_state.rb +60 -2
- data/lib/ibex/frontend/token_adapter.rb +18 -3
- data/lib/ibex/frontend.rb +14 -2
- data/lib/ibex/fuzz.rb +219 -0
- data/lib/ibex/generation_input.rb +57 -0
- data/lib/ibex/generation_manifest.rb +211 -0
- data/lib/ibex/generation_transaction.rb +261 -0
- data/lib/ibex/generation_transaction_recovery.rb +109 -0
- data/lib/ibex/generation_transaction_validation.rb +196 -0
- data/lib/ibex/grammar_tests.rb +206 -0
- data/lib/ibex/ir/automaton_ir.rb +86 -11
- data/lib/ibex/ir/grammar_ir.rb +170 -26
- data/lib/ibex/ir/lexer_ir.rb +76 -0
- data/lib/ibex/ir/parser_contract.rb +135 -0
- data/lib/ibex/ir/serialize.rb +268 -50
- data/lib/ibex/ir/validator/automaton.rb +375 -0
- data/lib/ibex/ir/validator/base.rb +147 -0
- data/lib/ibex/ir/validator/grammar.rb +634 -0
- data/lib/ibex/ir/validator/lexer.rb +113 -0
- data/lib/ibex/ir/validator.rb +63 -0
- data/lib/ibex/ir.rb +71 -5
- data/lib/ibex/lalr/build_metrics.rb +71 -0
- data/lib/ibex/lalr/builder.rb +514 -52
- data/lib/ibex/lalr/conflict.rb +1 -0
- data/lib/ibex/lalr/conflict_search.rb +26 -9
- data/lib/ibex/lalr/counterexample.rb +38 -18
- data/lib/ibex/lalr/direct_lookaheads.rb +289 -0
- data/lib/ibex/lalr/goto_follows.rb +229 -0
- data/lib/ibex/lalr/ielr/annotator.rb +214 -0
- data/lib/ibex/lalr/ielr/bits.rb +28 -0
- data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
- data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
- data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
- data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
- data/lib/ibex/lalr/ielr/split_state.rb +20 -0
- data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
- data/lib/ibex/lalr/ielr_partition.rb +166 -0
- data/lib/ibex/lalr/inadequacy_report.rb +50 -0
- data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
- data/lib/ibex/lalr/lr0_collection.rb +121 -0
- data/lib/ibex/lalr/on_error_reductions.rb +74 -0
- data/lib/ibex/lalr/unreachable_states.rb +80 -0
- data/lib/ibex/lalr.rb +59 -1
- data/lib/ibex/location.rb +129 -0
- data/lib/ibex/lsp/document_handlers.rb +68 -0
- data/lib/ibex/lsp/document_store.rb +264 -0
- data/lib/ibex/lsp/document_store_diagnostics.rb +44 -0
- data/lib/ibex/lsp/document_store_validation.rb +61 -0
- data/lib/ibex/lsp/initialization_handlers.rb +80 -0
- data/lib/ibex/lsp/navigation_handlers.rb +70 -0
- data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
- data/lib/ibex/lsp/position_codec.rb +113 -0
- data/lib/ibex/lsp/protocol_error.rb +33 -0
- data/lib/ibex/lsp/request_handlers.rb +46 -0
- data/lib/ibex/lsp/request_support.rb +94 -0
- data/lib/ibex/lsp/server.rb +148 -0
- data/lib/ibex/lsp/symbol_index.rb +241 -0
- data/lib/ibex/lsp/symbol_index_builder.rb +277 -0
- data/lib/ibex/lsp/symbol_index_precedence_references.rb +44 -0
- data/lib/ibex/lsp/symbol_index_source_queries.rb +61 -0
- data/lib/ibex/lsp/symbol_occurrence.rb +23 -0
- data/lib/ibex/lsp/transport.rb +128 -0
- data/lib/ibex/lsp/workspace.rb +128 -0
- data/lib/ibex/lsp/workspace_analyzer.rb +199 -0
- data/lib/ibex/lsp.rb +33 -0
- data/lib/ibex/messages/en.yml +28 -0
- data/lib/ibex/messages/ja.yml +28 -0
- data/lib/ibex/messages.rb +68 -0
- data/lib/ibex/metrics.rb +175 -0
- data/lib/ibex/normalize/declarations.rb +142 -7
- data/lib/ibex/normalize/diagnostics.rb +94 -24
- data/lib/ibex/normalize/expander.rb +64 -59
- data/lib/ibex/normalize/expression.rb +63 -40
- data/lib/ibex/normalize/grammar_builder.rb +26 -0
- data/lib/ibex/normalize/inline_expansion.rb +465 -0
- data/lib/ibex/normalize/inline_validation.rb +174 -0
- data/lib/ibex/normalize/lexer.rb +131 -0
- data/lib/ibex/normalize/named_references.rb +60 -0
- data/lib/ibex/normalize/nodes.rb +46 -0
- data/lib/ibex/normalize/parameter_ebnf_lowering.rb +70 -0
- data/lib/ibex/normalize/parameter_lowering.rb +143 -0
- data/lib/ibex/normalize/parameter_substitution.rb +125 -0
- data/lib/ibex/normalize/parameter_validation.rb +140 -0
- data/lib/ibex/normalize/parameters.rb +226 -0
- data/lib/ibex/normalize/parser_configuration.rb +70 -0
- data/lib/ibex/normalize/recovery_declarations.rb +84 -0
- data/lib/ibex/normalize.rb +172 -17
- data/lib/ibex/racc_migration/checker.rb +122 -0
- data/lib/ibex/racc_migration/harness.rb +177 -0
- data/lib/ibex/racc_migration/report.rb +97 -0
- data/lib/ibex/racc_migration.rb +12 -0
- data/lib/ibex/rake_task.rb +116 -0
- data/lib/ibex/samples.rb +216 -0
- data/lib/ibex/table_artifact/builder.rb +266 -0
- data/lib/ibex/table_artifact/cst_projection.rb +70 -0
- data/lib/ibex/table_artifact/document.rb +39 -0
- data/lib/ibex/table_artifact/executor.rb +187 -0
- data/lib/ibex/table_artifact/serializer.rb +57 -0
- data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
- data/lib/ibex/table_artifact/validator/support.rb +86 -0
- data/lib/ibex/table_artifact/validator/tables.rb +238 -0
- data/lib/ibex/table_artifact/validator.rb +253 -0
- data/lib/ibex/table_artifact.rb +88 -0
- data/lib/ibex/table_simulation/result.rb +55 -0
- data/lib/ibex/table_simulation/simulator.rb +253 -0
- data/lib/ibex/table_simulation/step.rb +62 -0
- data/lib/ibex/table_simulation/text.rb +31 -0
- data/lib/ibex/table_simulation.rb +13 -0
- data/lib/ibex/tables.rb +22 -69
- data/lib/ibex/verifiable_generation_bundle.rb +86 -0
- data/lib/ibex/verification_report/builder.rb +159 -0
- data/lib/ibex/verification_report/canonical_ir.rb +123 -0
- data/lib/ibex/verification_report/logical_path.rb +68 -0
- data/lib/ibex/verification_report/validator.rb +329 -0
- data/lib/ibex/verification_report.rb +69 -0
- data/lib/ibex/verify/action_correspondence.rb +138 -0
- data/lib/ibex/verify/language_witness.rb +295 -0
- data/lib/ibex/verify/reference_collection.rb +190 -0
- data/lib/ibex/verify/result.rb +73 -0
- data/lib/ibex/verify/verifier.rb +598 -0
- data/lib/ibex/verify.rb +15 -0
- data/lib/ibex/version.rb +1 -1
- data/lib/ibex/watch/runner.rb +181 -0
- data/lib/ibex/watch/source_snapshot.rb +98 -0
- data/lib/ibex/watch.rb +11 -0
- data/lib/ibex.rb +35 -1
- data/schema/automaton-ir-definitions.schema.json +401 -0
- data/schema/automaton-ir.schema.json +65 -0
- data/schema/benchmark-v1.schema.json +212 -0
- data/schema/benchmark-v2.schema.json +61 -0
- data/schema/bison-import-v1.schema.json +106 -0
- data/schema/conflict-explanation-review-v1.schema.json +196 -0
- data/schema/conflict-explanation-study-v1.schema.json +528 -0
- data/schema/construction-profile-v1.schema.json +779 -0
- data/schema/cst-v1.json +170 -0
- data/schema/diff-v1.schema.json +41 -0
- data/schema/direct-ielr-decision-v1.schema.json +200 -0
- data/schema/equiv-v1.schema.json +64 -0
- data/schema/error-ux-review-v1.schema.json +609 -0
- data/schema/error-ux-round2-review-v1.schema.json +191 -0
- data/schema/error-ux-round2-v1.schema.json +519 -0
- data/schema/error-ux-v1.schema.json +258 -0
- data/schema/explain-v1.schema.json +495 -0
- data/schema/fix-v1.schema.json +64 -0
- data/schema/fix-v2.schema.json +66 -0
- data/schema/fix-v3.schema.json +101 -0
- data/schema/frontend-diagnostics-v1.schema.json +154 -0
- data/schema/fuzz-regression-v1.schema.json +79 -0
- data/schema/fuzz-v1.schema.json +114 -0
- data/schema/generation-manifest-v1.schema.json +115 -0
- data/schema/grammar-ir-extensions.schema.json +734 -0
- data/schema/grammar-ir-foundation.schema.json +426 -0
- data/schema/grammar-ir.schema.json +271 -0
- data/schema/ielr-benchmark-v1.schema.json +85 -0
- data/schema/lexer-ir-v1.schema.json +215 -0
- data/schema/lexer-profile-v1.schema.json +491 -0
- data/schema/metrics-v1.schema.json +60 -0
- data/schema/migration-check-v1.schema.json +60 -0
- data/schema/performance-comparison-v1.schema.json +395 -0
- data/schema/public-performance-comparison-v1.schema.json +506 -0
- data/schema/public-performance-profile-v1.schema.json +360 -0
- data/schema/reduce-v1.schema.json +22 -0
- data/schema/reduce-v2.schema.json +63 -0
- data/schema/runtime-coverage-v1.schema.json +86 -0
- data/schema/runtime-event-v1.schema.json +308 -0
- data/schema/table-artifact-v1.schema.json +377 -0
- data/schema/table-simulation-v1.schema.json +70 -0
- data/schema/verification-report-v1.schema.json +222 -0
- data/schema/verify-v1.schema.json +42 -0
- data/sig/ibex/analysis/digraph.rbs +19 -0
- data/sig/ibex/artifact_set.rbs +37 -0
- data/sig/ibex/bison_import/importer.rbs +140 -0
- data/sig/ibex/bison_import/tokenizer.rbs +91 -0
- data/sig/ibex/bison_import.rbs +95 -0
- data/sig/ibex/bounded_subprocess.rbs +76 -0
- data/sig/ibex/cli/ambiguity.rbs +28 -0
- data/sig/ibex/cli/analysis.rbs +43 -0
- data/sig/ibex/cli/bison_import.rbs +32 -0
- data/sig/ibex/cli/config.rbs +35 -0
- data/sig/ibex/cli/counterexample_options.rbs +2 -0
- data/sig/ibex/cli/coverage.rbs +53 -0
- data/sig/ibex/cli/debug.rbs +28 -0
- data/sig/ibex/cli/diagnostics.rbs +51 -0
- data/sig/ibex/cli/documentation.rbs +29 -0
- data/sig/ibex/cli/equiv.rbs +49 -0
- data/sig/ibex/cli/error_messages.rbs +63 -0
- data/sig/ibex/cli/explain.rbs +31 -0
- data/sig/ibex/cli/fix.rbs +53 -0
- data/sig/ibex/cli/formatting.rbs +107 -0
- data/sig/ibex/cli/fuzz.rbs +47 -0
- data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
- data/sig/ibex/cli/generation_artifacts.rbs +69 -0
- data/sig/ibex/cli/generation_error_messages.rbs +19 -0
- data/sig/ibex/cli/grammar_tests.rbs +48 -0
- data/sig/ibex/cli/ir_tools.rbs +39 -0
- data/sig/ibex/cli/lsp.rbs +14 -0
- data/sig/ibex/cli/outputs.rbs +26 -3
- data/sig/ibex/cli/racc_migration.rbs +30 -0
- data/sig/ibex/cli/reduce.rbs +60 -0
- data/sig/ibex/cli/reduce_reporting.rbs +27 -0
- data/sig/ibex/cli/samples.rbs +38 -0
- data/sig/ibex/cli/verify.rbs +28 -0
- data/sig/ibex/cli/watch.rbs +43 -0
- data/sig/ibex/cli.rbs +182 -9
- data/sig/ibex/codegen/action_locations.rbs +45 -0
- data/sig/ibex/codegen/action_method_source.rbs +65 -0
- data/sig/ibex/codegen/action_source.rbs +50 -0
- data/sig/ibex/codegen/ambiguity.rbs +60 -0
- data/sig/ibex/codegen/cst_metadata.rbs +59 -0
- data/sig/ibex/codegen/documentation.rbs +50 -0
- data/sig/ibex/codegen/explain.rbs +105 -0
- data/sig/ibex/codegen/generated_action_abi.rbs +105 -0
- data/sig/ibex/codegen/html.rbs +18 -2
- data/sig/ibex/codegen/mermaid.rbs +16 -0
- data/sig/ibex/codegen/railroad.rbs +82 -0
- data/sig/ibex/codegen/railroad_documentation.rbs +31 -0
- data/sig/ibex/codegen/rbs.rbs +86 -4
- data/sig/ibex/codegen/report.rbs +16 -8
- data/sig/ibex/codegen/ruby.rbs +105 -28
- data/sig/ibex/codegen/ruby_actions.rbs +54 -0
- data/sig/ibex/codegen/ruby_ast.rbs +34 -0
- data/sig/ibex/codegen/ruby_error_messages.rbs +16 -0
- data/sig/ibex/codegen/ruby_lexer.rbs +25 -0
- data/sig/ibex/codegen/ruby_syntax.rbs +27 -0
- data/sig/ibex/codegen/ruby_table_metadata.rbs +26 -0
- data/sig/ibex/codegen/ruby_value_printers.rbs +28 -0
- data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
- data/sig/ibex/configuration/explanation.rbs +195 -0
- data/sig/ibex/configuration/inspector.rbs +53 -0
- data/sig/ibex/configuration.rbs +242 -0
- data/sig/ibex/coverage/collector.rbs +78 -0
- data/sig/ibex/coverage/event_stream.rbs +44 -0
- data/sig/ibex/coverage/report.rbs +102 -0
- data/sig/ibex/coverage/runtime_event_validator.rbs +70 -0
- data/sig/ibex/coverage.rbs +7 -0
- data/sig/ibex/delta_reducer.rbs +38 -0
- data/sig/ibex/diff.rbs +47 -0
- data/sig/ibex/equiv/machine.rbs +54 -0
- data/sig/ibex/equiv.rbs +129 -0
- data/sig/ibex/error_messages/parser.rbs +58 -0
- data/sig/ibex/error_messages/parser_v2.rbs +67 -0
- data/sig/ibex/error_messages/renderer.rbs +23 -0
- data/sig/ibex/error_messages/sentence_search.rbs +80 -0
- data/sig/ibex/error_messages/update.rbs +43 -0
- data/sig/ibex/error_messages.rbs +85 -0
- data/sig/ibex/fix.rbs +138 -0
- data/sig/ibex/frontend/ast.rbs +237 -22
- data/sig/ibex/frontend/bootstrap_parser.rbs +13 -0
- data/sig/ibex/frontend/diagnostic.rbs +53 -0
- data/sig/ibex/frontend/diagnostic_recovery.rbs +98 -0
- data/sig/ibex/frontend/dsl.rbs +33 -4
- data/sig/ibex/frontend/formatter.rbs +143 -0
- data/sig/ibex/frontend/generated_parser.rbs +228 -68
- data/sig/ibex/frontend/generated_parser_base.rbs +65 -12
- data/sig/ibex/frontend/generated_parser_includes.rbs +23 -0
- data/sig/ibex/frontend/generated_parser_metadata.rbs +23 -0
- data/sig/ibex/frontend/generated_parser_parameters.rbs +24 -0
- data/sig/ibex/frontend/generation.rbs +6 -0
- data/sig/ibex/frontend/lexer.rbs +49 -2
- data/sig/ibex/frontend/lexer_recovery.rbs +25 -0
- data/sig/ibex/frontend/parser/declarations.rbs +57 -0
- data/sig/ibex/frontend/parser/parameters.rbs +28 -0
- data/sig/ibex/frontend/parser/rules.rbs +3 -0
- data/sig/ibex/frontend/parser.rbs +66 -0
- data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
- data/sig/ibex/frontend/regenerator.rbs +11 -0
- data/sig/ibex/frontend/resolution.rbs +34 -0
- data/sig/ibex/frontend/resolver.rbs +91 -0
- data/sig/ibex/frontend/rule_documentation.rbs +42 -0
- data/sig/ibex/frontend/source_cursor.rbs +38 -5
- data/sig/ibex/frontend/source_document.rbs +119 -0
- data/sig/ibex/frontend/source_loader.rbs +66 -0
- data/sig/ibex/frontend/source_span.rbs +56 -0
- data/sig/ibex/frontend/token_adapter/declaration_document_state.rbs +21 -0
- data/sig/ibex/frontend/token_adapter/declaration_lexer_state.rbs +27 -0
- data/sig/ibex/frontend/token_adapter/declaration_state.rbs +83 -3
- data/sig/ibex/frontend/token_adapter/rule_state.rbs +20 -0
- data/sig/ibex/frontend/token_adapter.rbs +11 -2
- data/sig/ibex/frontend.rbs +1 -1
- data/sig/ibex/fuzz.rbs +71 -0
- data/sig/ibex/generation_input.rbs +37 -0
- data/sig/ibex/generation_manifest.rbs +70 -0
- data/sig/ibex/generation_transaction.rbs +82 -0
- data/sig/ibex/generation_transaction_recovery.rbs +36 -0
- data/sig/ibex/generation_transaction_validation.rbs +65 -0
- data/sig/ibex/grammar_tests.rbs +93 -0
- data/sig/ibex/ir/automaton_ir.rbs +35 -10
- data/sig/ibex/ir/grammar_ir.rbs +96 -22
- data/sig/ibex/ir/lexer_ir.rbs +57 -0
- data/sig/ibex/ir/parser_contract.rbs +69 -0
- data/sig/ibex/ir/serialize.rbs +75 -23
- data/sig/ibex/ir/validator/automaton.rbs +112 -0
- data/sig/ibex/ir/validator/base.rbs +69 -0
- data/sig/ibex/ir/validator/grammar.rbs +195 -0
- data/sig/ibex/ir/validator/lexer.rbs +37 -0
- data/sig/ibex/ir/validator.rbs +16 -0
- data/sig/ibex/ir.rbs +45 -5
- data/sig/ibex/lalr/build_metrics.rbs +60 -0
- data/sig/ibex/lalr/builder.rbs +150 -19
- data/sig/ibex/lalr/conflict_search.rbs +12 -5
- data/sig/ibex/lalr/counterexample.rbs +20 -14
- data/sig/ibex/lalr/direct_lookaheads.rbs +93 -0
- data/sig/ibex/lalr/goto_follows.rbs +89 -0
- data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
- data/sig/ibex/lalr/ielr/bits.rbs +14 -0
- data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
- data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
- data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
- data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
- data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
- data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
- data/sig/ibex/lalr/ielr_partition.rbs +71 -0
- data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
- data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
- data/sig/ibex/lalr/lr0_collection.rbs +50 -0
- data/sig/ibex/lalr/on_error_reductions.rbs +22 -0
- data/sig/ibex/lalr/unreachable_states.rbs +25 -0
- data/sig/ibex/lalr.rbs +17 -1
- data/sig/ibex/location.rbs +67 -0
- data/sig/ibex/lsp/document_handlers.rbs +24 -0
- data/sig/ibex/lsp/document_store.rbs +94 -0
- data/sig/ibex/lsp/document_store_diagnostics.rbs +20 -0
- data/sig/ibex/lsp/document_store_validation.rbs +26 -0
- data/sig/ibex/lsp/initialization_handlers.rbs +30 -0
- data/sig/ibex/lsp/navigation_handlers.rbs +33 -0
- data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
- data/sig/ibex/lsp/position_codec.rbs +44 -0
- data/sig/ibex/lsp/protocol_error.rbs +32 -0
- data/sig/ibex/lsp/request_handlers.rbs +26 -0
- data/sig/ibex/lsp/request_support.rbs +40 -0
- data/sig/ibex/lsp/server.rbs +55 -0
- data/sig/ibex/lsp/symbol_index.rbs +77 -0
- data/sig/ibex/lsp/symbol_index_builder.rbs +88 -0
- data/sig/ibex/lsp/symbol_index_precedence_references.rbs +18 -0
- data/sig/ibex/lsp/symbol_index_source_queries.rbs +26 -0
- data/sig/ibex/lsp/symbol_occurrence.rbs +31 -0
- data/sig/ibex/lsp/transport.rbs +47 -0
- data/sig/ibex/lsp/workspace.rbs +42 -0
- data/sig/ibex/lsp/workspace_analyzer.rbs +69 -0
- data/sig/ibex/lsp.rbs +7 -0
- data/sig/ibex/messages.rbs +26 -0
- data/sig/ibex/metrics.rbs +50 -0
- data/sig/ibex/normalize/declarations.rbs +31 -0
- data/sig/ibex/normalize/diagnostics.rbs +13 -4
- data/sig/ibex/normalize/expander.rbs +22 -16
- data/sig/ibex/normalize/expression.rbs +11 -9
- data/sig/ibex/normalize/grammar_builder.rbs +11 -0
- data/sig/ibex/normalize/inline_expansion.rbs +129 -0
- data/sig/ibex/normalize/inline_validation.rbs +40 -0
- data/sig/ibex/normalize/lexer.rbs +37 -0
- data/sig/ibex/normalize/named_references.rbs +20 -0
- data/sig/ibex/normalize/nodes.rbs +14 -0
- data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +33 -0
- data/sig/ibex/normalize/parameter_lowering.rbs +35 -0
- data/sig/ibex/normalize/parameter_substitution.rbs +42 -0
- data/sig/ibex/normalize/parameter_validation.rbs +44 -0
- data/sig/ibex/normalize/parameters.rbs +51 -0
- data/sig/ibex/normalize/parser_configuration.rbs +23 -0
- data/sig/ibex/normalize/recovery_declarations.rbs +24 -0
- data/sig/ibex/normalize.rbs +129 -18
- data/sig/ibex/racc_migration/checker.rbs +36 -0
- data/sig/ibex/racc_migration/harness.rbs +16 -0
- data/sig/ibex/racc_migration/report.rbs +55 -0
- data/sig/ibex/racc_migration.rbs +8 -0
- data/sig/ibex/rake_task.rbs +51 -0
- data/sig/ibex/samples.rbs +60 -0
- data/sig/ibex/table_artifact/builder.rbs +93 -0
- data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
- data/sig/ibex/table_artifact/document.rbs +27 -0
- data/sig/ibex/table_artifact/executor.rbs +66 -0
- data/sig/ibex/table_artifact/serializer.rbs +25 -0
- data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
- data/sig/ibex/table_artifact/validator/support.rbs +46 -0
- data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
- data/sig/ibex/table_artifact/validator.rbs +66 -0
- data/sig/ibex/table_artifact.rbs +32 -0
- data/sig/ibex/table_simulation/result.rbs +36 -0
- data/sig/ibex/table_simulation/simulator.rbs +98 -0
- data/sig/ibex/table_simulation/step.rbs +42 -0
- data/sig/ibex/table_simulation/text.rbs +14 -0
- data/sig/ibex/table_simulation.rbs +7 -0
- data/sig/ibex/tables.rbs +10 -35
- data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
- data/sig/ibex/verification_report/builder.rbs +53 -0
- data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
- data/sig/ibex/verification_report/logical_path.rbs +34 -0
- data/sig/ibex/verification_report/validator.rbs +114 -0
- data/sig/ibex/verification_report.rbs +44 -0
- data/sig/ibex/verify/action_correspondence.rbs +50 -0
- data/sig/ibex/verify/language_witness.rbs +112 -0
- data/sig/ibex/verify/reference_collection.rbs +63 -0
- data/sig/ibex/verify/result.rbs +52 -0
- data/sig/ibex/verify/verifier.rbs +170 -0
- data/sig/ibex/verify.rbs +6 -0
- data/sig/ibex/watch/runner.rbs +58 -0
- data/sig/ibex/watch/source_snapshot.rbs +46 -0
- data/sig/ibex/watch.rbs +7 -0
- data/sig/ibex.rbs +2 -0
- metadata +524 -19
- data/.rubocop.yml +0 -43
- data/CHANGELOG.md +0 -30
- data/Rakefile +0 -25
- data/Steepfile +0 -10
- data/docs/compat-notes.md +0 -37
- data/docs/lexer-coverage.md +0 -14
- data/docs/phase10-extensions.md +0 -27
- data/gemfiles/Gemfile +0 -7
- data/gemfiles/Gemfile.lock +0 -98
- data/lib/ibex/frontend/grammar.y +0 -156
- data/lib/ibex/runtime/parser.rb +0 -360
- data/lib/ibex/runtime.rb +0 -8
- data/sig/ibex/runtime/parser.rbs +0 -167
- data/sig/ibex/runtime.rbs +0 -6
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Generated from lib/ibex/table_simulation/simulator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module TableSimulation
|
|
5
|
+
# Deterministic, semantic-action-free table interpreter.
|
|
6
|
+
class Simulator
|
|
7
|
+
DEFAULT_MAX_STEPS: Integer
|
|
8
|
+
|
|
9
|
+
DEFAULT_MAX_STACK: Integer
|
|
10
|
+
|
|
11
|
+
EOF_NAME: String
|
|
12
|
+
|
|
13
|
+
ERROR_NAME: String
|
|
14
|
+
|
|
15
|
+
IMPLICIT_ERROR: IR::error_action
|
|
16
|
+
|
|
17
|
+
attr_reader automaton: IR::Automaton
|
|
18
|
+
|
|
19
|
+
attr_reader max_steps: Integer
|
|
20
|
+
|
|
21
|
+
attr_reader max_stack: Integer
|
|
22
|
+
|
|
23
|
+
attr_reader eof: IR::GrammarSymbol
|
|
24
|
+
|
|
25
|
+
# @rbs (IR::Automaton automaton, ?max_steps: Integer, ?max_stack: Integer) -> void
|
|
26
|
+
def initialize: (IR::Automaton automaton, ?max_steps: Integer, ?max_stack: Integer) -> void
|
|
27
|
+
|
|
28
|
+
# @rbs () -> Session
|
|
29
|
+
def start: () -> Session
|
|
30
|
+
|
|
31
|
+
# @rbs (Array[String] tokens) -> Result
|
|
32
|
+
def simulate: (Array[String] tokens) -> Result
|
|
33
|
+
|
|
34
|
+
# @rbs (String spelling) -> IR::GrammarSymbol
|
|
35
|
+
def terminal: (String spelling) -> IR::GrammarSymbol
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
# @rbs (Array[IR::GrammarSymbol] terminals) -> Hash[String, Array[IR::GrammarSymbol]]
|
|
40
|
+
def terminal_aliases: (Array[IR::GrammarSymbol] terminals) -> Hash[String, Array[IR::GrammarSymbol]]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Stateful token-at-a-time table simulation session.
|
|
44
|
+
class Session
|
|
45
|
+
@tokens: Array[String]
|
|
46
|
+
|
|
47
|
+
@steps: Array[Step]
|
|
48
|
+
|
|
49
|
+
attr_reader status: Symbol?
|
|
50
|
+
|
|
51
|
+
# @rbs (Simulator simulator) -> void
|
|
52
|
+
def initialize: (Simulator simulator) -> void
|
|
53
|
+
|
|
54
|
+
# @rbs (String spelling) -> Array[Step]
|
|
55
|
+
def push: (String spelling) -> Array[Step]
|
|
56
|
+
|
|
57
|
+
# @rbs () -> Array[Step]
|
|
58
|
+
def steps: () -> Array[Step]
|
|
59
|
+
|
|
60
|
+
# @rbs () -> Array[String]
|
|
61
|
+
def tokens: () -> Array[String]
|
|
62
|
+
|
|
63
|
+
# @rbs () -> Result
|
|
64
|
+
def finish: () -> Result
|
|
65
|
+
|
|
66
|
+
private
|
|
67
|
+
|
|
68
|
+
# @rbs (IR::GrammarSymbol terminal, eof: bool) -> Array[Step]
|
|
69
|
+
def process: (IR::GrammarSymbol terminal, eof: bool) -> Array[Step]
|
|
70
|
+
|
|
71
|
+
# @rbs (IR::AutomatonState state, Integer token_id) -> [IR::parser_action, String]
|
|
72
|
+
def action_for: (IR::AutomatonState state, Integer token_id) -> [ IR::parser_action, String ]
|
|
73
|
+
|
|
74
|
+
# @rbs (IR::AutomatonState state, IR::GrammarSymbol terminal, IR::parser_action action, String source) -> void
|
|
75
|
+
def record_shift: (IR::AutomatonState state, IR::GrammarSymbol terminal, IR::parser_action action, String source) -> void
|
|
76
|
+
|
|
77
|
+
# @rbs (IR::AutomatonState state, IR::GrammarSymbol terminal, IR::parser_action action, String source) -> void
|
|
78
|
+
def record_reduce: (IR::AutomatonState state, IR::GrammarSymbol terminal, IR::parser_action action, String source) -> void
|
|
79
|
+
|
|
80
|
+
# @rbs (IR::AutomatonState state, IR::GrammarSymbol terminal, String action, String source) -> void
|
|
81
|
+
def record_terminal: (IR::AutomatonState state, IR::GrammarSymbol terminal, String action, String source) -> void
|
|
82
|
+
|
|
83
|
+
# @rbs (IR::AutomatonState state, IR::GrammarSymbol terminal, String action, String source,
|
|
84
|
+
# before: Integer, ?production_id: Integer?, ?lhs: String?, ?rhs_length: Integer?,
|
|
85
|
+
# ?target_state: Integer?) -> void
|
|
86
|
+
def append_step: (IR::AutomatonState state, IR::GrammarSymbol terminal, String action, String source, before: Integer, ?production_id: Integer?, ?lhs: String?, ?rhs_length: Integer?, ?target_state: Integer?) -> void
|
|
87
|
+
|
|
88
|
+
# @rbs () -> IR::AutomatonState
|
|
89
|
+
def current_state: () -> IR::AutomatonState
|
|
90
|
+
|
|
91
|
+
# @rbs () -> void
|
|
92
|
+
def enforce_stack_budget!: () -> void
|
|
93
|
+
|
|
94
|
+
# @rbs () -> void
|
|
95
|
+
def ensure_active!: () -> void
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Generated from lib/ibex/table_simulation/step.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module TableSimulation
|
|
5
|
+
# One immutable parser-table action.
|
|
6
|
+
class Step
|
|
7
|
+
type document_value = String | Integer | nil
|
|
8
|
+
|
|
9
|
+
attr_reader sequence: Integer
|
|
10
|
+
|
|
11
|
+
attr_reader state: Integer
|
|
12
|
+
|
|
13
|
+
attr_reader token_id: Integer
|
|
14
|
+
|
|
15
|
+
attr_reader token: String
|
|
16
|
+
|
|
17
|
+
attr_reader action: String
|
|
18
|
+
|
|
19
|
+
attr_reader action_source: String
|
|
20
|
+
|
|
21
|
+
attr_reader production_id: Integer?
|
|
22
|
+
|
|
23
|
+
attr_reader lhs: String?
|
|
24
|
+
|
|
25
|
+
attr_reader rhs_length: Integer?
|
|
26
|
+
|
|
27
|
+
attr_reader target_state: Integer?
|
|
28
|
+
|
|
29
|
+
attr_reader stack_depth_before: Integer
|
|
30
|
+
|
|
31
|
+
attr_reader stack_depth_after: Integer
|
|
32
|
+
|
|
33
|
+
# @rbs (sequence: Integer, state: Integer, token_id: Integer, token: String, action: String,
|
|
34
|
+
# action_source: String, production_id: Integer?, lhs: String?, rhs_length: Integer?,
|
|
35
|
+
# target_state: Integer?, stack_depth_before: Integer, stack_depth_after: Integer) -> void
|
|
36
|
+
def initialize: (sequence: Integer, state: Integer, token_id: Integer, token: String, action: String, action_source: String, production_id: Integer?, lhs: String?, rhs_length: Integer?, target_state: Integer?, stack_depth_before: Integer, stack_depth_after: Integer) -> void
|
|
37
|
+
|
|
38
|
+
# @rbs () -> Hash[String, document_value]
|
|
39
|
+
def to_h: () -> Hash[String, document_value]
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Generated from lib/ibex/table_simulation/text.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module TableSimulation
|
|
5
|
+
# Stable one-line renderer for simulation steps.
|
|
6
|
+
module Text
|
|
7
|
+
# @rbs (Step step) -> String
|
|
8
|
+
def self.render_step: (Step step) -> String
|
|
9
|
+
|
|
10
|
+
# @rbs (Result result) -> String
|
|
11
|
+
def self.render: (Result result) -> String
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
data/sig/ibex/tables.rbs
CHANGED
|
@@ -3,45 +3,20 @@
|
|
|
3
3
|
module Ibex
|
|
4
4
|
# Parser table construction and row-displacement compression.
|
|
5
5
|
module Tables
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
private def self.runtime_action: (IR::parser_action action) -> IR::runtime_action
|
|
9
|
-
|
|
10
|
-
class TableSet < Struct[untyped]
|
|
11
|
-
attr_accessor actions(): untyped
|
|
12
|
-
|
|
13
|
-
attr_accessor gotos(): untyped
|
|
14
|
-
|
|
15
|
-
attr_accessor default_actions(): untyped
|
|
16
|
-
|
|
17
|
-
def self.new: (?actions: untyped, ?gotos: untyped, ?default_actions: untyped) -> instance
|
|
18
|
-
| ({ ?actions: untyped, ?gotos: untyped, ?default_actions: untyped }) -> instance
|
|
19
|
-
end
|
|
6
|
+
type action_table = Array[Hash[Integer, IR::runtime_action]] | CompactActions
|
|
20
7
|
|
|
21
|
-
|
|
22
|
-
class Compact
|
|
23
|
-
attr_reader offsets: Array[Integer]
|
|
8
|
+
type goto_table = Array[Hash[Integer, Integer]] | Compact
|
|
24
9
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
attr_reader checks: Array[Integer?]
|
|
28
|
-
|
|
29
|
-
attr_reader row_count: Integer
|
|
30
|
-
|
|
31
|
-
# @rbs (Array[Hash[Integer, untyped]] rows) -> Compact
|
|
32
|
-
def self.build: (Array[Hash[Integer, untyped]] rows) -> Compact
|
|
33
|
-
|
|
34
|
-
# @rbs (Array[Integer] columns, Array[Integer?] checks) -> Integer
|
|
35
|
-
private def self.find_offset: (Array[Integer] columns, Array[Integer?] checks) -> Integer
|
|
36
|
-
|
|
37
|
-
# @rbs (offsets: Array[Integer], values: Array[untyped], checks: Array[Integer?], row_count: Integer) -> void
|
|
38
|
-
def initialize: (offsets: Array[Integer], values: Array[untyped], checks: Array[Integer?], row_count: Integer) -> void
|
|
10
|
+
private def runtime_action: (IR::parser_action action) -> IR::runtime_action
|
|
39
11
|
|
|
40
|
-
|
|
41
|
-
def lookup: (Integer row, Integer column) -> untyped
|
|
12
|
+
private def self.runtime_action: (IR::parser_action action) -> IR::runtime_action
|
|
42
13
|
|
|
43
|
-
|
|
44
|
-
|
|
14
|
+
class TableSet < Struct[Object?]
|
|
15
|
+
attr_accessor actions: action_table
|
|
16
|
+
attr_accessor gotos: goto_table
|
|
17
|
+
attr_accessor default_actions: Array[IR::runtime_action?]
|
|
18
|
+
def self.new: (?actions: action_table, ?gotos: goto_table, ?default_actions: Array[IR::runtime_action?]) -> instance
|
|
19
|
+
| ({ ?actions: action_table, ?gotos: goto_table, ?default_actions: Array[IR::runtime_action?] }) -> instance
|
|
45
20
|
end
|
|
46
21
|
|
|
47
22
|
# @rbs (IR::Automaton automaton, ?format: Symbol | String) -> TableSet
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generated from lib/ibex/verifiable_generation_bundle.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
# Explicitly renders and publishes one manifest-bound verification bundle.
|
|
5
|
+
class VerifiableGenerationBundle
|
|
6
|
+
# rubocop:disable Metrics/ParameterLists -- persisted artifact paths and verification bounds are explicit inputs.
|
|
7
|
+
# @rbs (IR::Automaton automaton, wrapper_path: String, wrapper_source: String,
|
|
8
|
+
# table_path: String, report_path: String, manifest_path: String,
|
|
9
|
+
# source_records: Array[GenerationInput], ?manifest_options: Hash[String, Object?],
|
|
10
|
+
# ?wrapper_mode: Integer?, ?representation: Symbol | String, ?cst_trivia: Symbol | String?,
|
|
11
|
+
# ?omit_action_call: bool?, ?strict: bool, ?max_states: Integer, ?max_items: Integer) -> void
|
|
12
|
+
def initialize: (IR::Automaton automaton, wrapper_path: String, wrapper_source: String, table_path: String, report_path: String, manifest_path: String, source_records: Array[GenerationInput], ?manifest_options: Hash[String, Object?], ?wrapper_mode: Integer?, ?representation: Symbol | String, ?cst_trivia: Symbol | String?, ?omit_action_call: bool?, ?strict: bool, ?max_states: Integer, ?max_items: Integer) -> void
|
|
13
|
+
|
|
14
|
+
# Render table, wrapper, and report before the non-cyclic manifest marker.
|
|
15
|
+
# @rbs () -> ArtifactSet
|
|
16
|
+
def render: () -> ArtifactSet
|
|
17
|
+
|
|
18
|
+
# @rbs (?warning: ^(String) -> void, ?stability_check: ^() -> bool) -> ArtifactSet
|
|
19
|
+
def publish: (?warning: ^(String) -> void, ?stability_check: ^() -> bool) -> ArtifactSet
|
|
20
|
+
|
|
21
|
+
# @rbs (String manifest_path) -> Hash[String, VerificationReport::Validator::json_value]
|
|
22
|
+
def self.validate_file: (String manifest_path) -> Hash[String, VerificationReport::Validator::json_value]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Generated from lib/ibex/verification_report/builder.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module VerificationReport
|
|
5
|
+
# Builds deterministic evidence from an Automaton IR verification run.
|
|
6
|
+
class Builder
|
|
7
|
+
type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
|
|
8
|
+
|
|
9
|
+
# @rbs (IR::Automaton automaton, table: TableArtifact::Document,
|
|
10
|
+
# source_records: Array[GenerationInput], table_path: String, strict: bool,
|
|
11
|
+
# max_states: Integer, max_items: Integer) -> void
|
|
12
|
+
def initialize: (IR::Automaton automaton, table: TableArtifact::Document, source_records: Array[GenerationInput], table_path: String, strict: bool, max_states: Integer, max_items: Integer) -> void
|
|
13
|
+
|
|
14
|
+
# @rbs () -> String
|
|
15
|
+
def render: () -> String
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
# @rbs () -> Hash[Symbol, Integer]
|
|
20
|
+
def bounds: () -> Hash[Symbol, Integer]
|
|
21
|
+
|
|
22
|
+
# @rbs () -> Array[String]
|
|
23
|
+
def requested_checks: () -> Array[String]
|
|
24
|
+
|
|
25
|
+
# @rbs () -> Hash[String, json_value]
|
|
26
|
+
def verification_outcome: () -> Hash[String, json_value]
|
|
27
|
+
|
|
28
|
+
# @rbs () -> Hash[String, json_value]
|
|
29
|
+
def input_identity: () -> Hash[String, json_value]
|
|
30
|
+
|
|
31
|
+
# @rbs () -> Hash[String, json_value]
|
|
32
|
+
def ir_identity: () -> Hash[String, json_value]
|
|
33
|
+
|
|
34
|
+
# @rbs () -> Hash[String, json_value]
|
|
35
|
+
def table_identity: () -> Hash[String, json_value]
|
|
36
|
+
|
|
37
|
+
# @rbs () -> void
|
|
38
|
+
def validate_table_identity!: () -> void
|
|
39
|
+
|
|
40
|
+
# @rbs () -> String
|
|
41
|
+
def grammar_digest: () -> String
|
|
42
|
+
|
|
43
|
+
# @rbs () -> String
|
|
44
|
+
def automaton_digest: () -> String
|
|
45
|
+
|
|
46
|
+
# @rbs (String digest) -> String
|
|
47
|
+
def prefixed_digest: (String digest) -> String
|
|
48
|
+
|
|
49
|
+
# @rbs (Hash[Symbol, String] value) -> Hash[String, String]
|
|
50
|
+
def stringify_keys: (Hash[Symbol, String] value) -> Hash[String, String]
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Generated from lib/ibex/verification_report/canonical_ir.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module VerificationReport
|
|
5
|
+
# Rebuilds immutable IR with source locations expressed as report logical identities.
|
|
6
|
+
class CanonicalIR
|
|
7
|
+
type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[json_value, json_value]
|
|
8
|
+
|
|
9
|
+
LOGICAL_ROOT: String
|
|
10
|
+
|
|
11
|
+
# @rbs (IR::Automaton automaton, source_records: Array[GenerationInput]) -> void
|
|
12
|
+
def initialize: (IR::Automaton automaton, source_records: Array[GenerationInput]) -> void
|
|
13
|
+
|
|
14
|
+
# @rbs () -> IR::Automaton
|
|
15
|
+
def build: () -> IR::Automaton
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
# @rbs (json_value value) -> json_value
|
|
20
|
+
def normalize_source_identity!: (json_value value) -> json_value
|
|
21
|
+
|
|
22
|
+
# @rbs (json_value value) -> String
|
|
23
|
+
def generate_json: (json_value value) -> String
|
|
24
|
+
|
|
25
|
+
# @rbs (json_value value) -> json_value
|
|
26
|
+
def normalize_for_json: (json_value value) -> json_value
|
|
27
|
+
|
|
28
|
+
# @rbs (String file) -> String
|
|
29
|
+
def logical_file: (String file) -> String
|
|
30
|
+
|
|
31
|
+
# @rbs (GenerationInput record, String file) -> bool
|
|
32
|
+
def record_matches?: (GenerationInput record, String file) -> bool
|
|
33
|
+
|
|
34
|
+
# @rbs (String file) -> bool
|
|
35
|
+
def absolute_file?: (String file) -> bool
|
|
36
|
+
|
|
37
|
+
# @rbs (IR::Grammar grammar) -> String
|
|
38
|
+
def digest: (IR::Grammar grammar) -> String
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Generated from lib/ibex/verification_report/logical_path.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module VerificationReport
|
|
5
|
+
# Closed logical identities used by version 1 verification reports.
|
|
6
|
+
module LogicalPath
|
|
7
|
+
MAX_INPUT_FILES: Integer
|
|
8
|
+
|
|
9
|
+
BASENAME: Regexp
|
|
10
|
+
|
|
11
|
+
INPUT: Regexp
|
|
12
|
+
|
|
13
|
+
TABLE: Regexp
|
|
14
|
+
|
|
15
|
+
# @rbs (String path, Integer index) -> String
|
|
16
|
+
def self?.input: (String path, Integer index) -> String
|
|
17
|
+
|
|
18
|
+
# @rbs (String path) -> String
|
|
19
|
+
def self?.table: (String path) -> String
|
|
20
|
+
|
|
21
|
+
# @rbs (Object? value, Integer index) -> bool
|
|
22
|
+
def self?.canonical_input?: (Object? value, Integer index) -> bool
|
|
23
|
+
|
|
24
|
+
# @rbs (Object? value) -> bool
|
|
25
|
+
def self?.canonical_table?: (Object? value) -> bool
|
|
26
|
+
|
|
27
|
+
# @rbs (String path) -> String
|
|
28
|
+
def self?.basename: (String path) -> String
|
|
29
|
+
|
|
30
|
+
# @rbs (String value) -> bool
|
|
31
|
+
def self?.usable_basename?: (String value) -> bool
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Generated from lib/ibex/verification_report/validator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module VerificationReport
|
|
5
|
+
# Validates a report and its cross-artifact manifest/table bindings.
|
|
6
|
+
# rubocop:disable Metrics/ClassLength -- closed report and cross-artifact invariants form one validator contract.
|
|
7
|
+
class Validator
|
|
8
|
+
type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
|
|
9
|
+
|
|
10
|
+
ROOT_KEYS: Array[String]
|
|
11
|
+
|
|
12
|
+
CHECKER_KEYS: Array[String]
|
|
13
|
+
|
|
14
|
+
BOUNDS_KEYS: Array[String]
|
|
15
|
+
|
|
16
|
+
INPUT_KEYS: Array[String]
|
|
17
|
+
|
|
18
|
+
INPUT_FILE_KEYS: Array[String]
|
|
19
|
+
|
|
20
|
+
IR_KEYS: Array[String]
|
|
21
|
+
|
|
22
|
+
GRAMMAR_KEYS: Array[String]
|
|
23
|
+
|
|
24
|
+
AUTOMATON_KEYS: Array[String]
|
|
25
|
+
|
|
26
|
+
TABLE_KEYS: Array[String]
|
|
27
|
+
|
|
28
|
+
OUTCOME_KEYS: Array[String]
|
|
29
|
+
|
|
30
|
+
VIOLATION_KEYS: Array[String]
|
|
31
|
+
|
|
32
|
+
EXHAUSTION_KEYS: Array[String]
|
|
33
|
+
|
|
34
|
+
DIGEST: Regexp
|
|
35
|
+
|
|
36
|
+
ALGORITHMS: Array[String]
|
|
37
|
+
|
|
38
|
+
# @rbs (String source) -> Hash[String, json_value]
|
|
39
|
+
def validate: (String source) -> Hash[String, json_value]
|
|
40
|
+
|
|
41
|
+
# @rbs (manifest_source: String, report_source: String, table_source: String) -> Hash[String, json_value]
|
|
42
|
+
def validate_bundle: (manifest_source: String, report_source: String, table_source: String) -> Hash[String, json_value]
|
|
43
|
+
|
|
44
|
+
# @rbs (String manifest_path) -> Hash[String, json_value]
|
|
45
|
+
def validate_bundle_file: (String manifest_path) -> Hash[String, json_value]
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
# @rbs (json_value document) -> void
|
|
50
|
+
def validate_document: (json_value document) -> void
|
|
51
|
+
|
|
52
|
+
# @rbs (json_value value) -> void
|
|
53
|
+
def validate_checker: (json_value value) -> void
|
|
54
|
+
|
|
55
|
+
# @rbs (json_value value) -> void
|
|
56
|
+
def validate_bounds: (json_value value) -> void
|
|
57
|
+
|
|
58
|
+
# @rbs (json_value value) -> void
|
|
59
|
+
def validate_input: (json_value value) -> void
|
|
60
|
+
|
|
61
|
+
# @rbs (json_value value) -> void
|
|
62
|
+
def validate_ir: (json_value value) -> void
|
|
63
|
+
|
|
64
|
+
# @rbs (json_value value) -> void
|
|
65
|
+
def validate_table: (json_value value) -> void
|
|
66
|
+
|
|
67
|
+
# @rbs (json_value value, String profile) -> void
|
|
68
|
+
def validate_outcome: (json_value value, String profile) -> void
|
|
69
|
+
|
|
70
|
+
# @rbs (json_value value, Array[String] requested) -> Array[json_value]
|
|
71
|
+
def validate_violations: (json_value value, Array[String] requested) -> Array[json_value]
|
|
72
|
+
|
|
73
|
+
# @rbs (Hash[String, json_value] manifest, String kind) -> Hash[String, json_value]
|
|
74
|
+
def unique_artifact: (Hash[String, json_value] manifest, String kind) -> Hash[String, json_value]
|
|
75
|
+
|
|
76
|
+
# @rbs (Hash[String, json_value] entry, String source, String label) -> void
|
|
77
|
+
def validate_manifest_bytes!: (Hash[String, json_value] entry, String source, String label) -> void
|
|
78
|
+
|
|
79
|
+
# @rbs (Hash[String, json_value] manifest, Hash[String, json_value] report) -> void
|
|
80
|
+
def validate_inputs!: (Hash[String, json_value] manifest, Hash[String, json_value] report) -> void
|
|
81
|
+
|
|
82
|
+
# @rbs (Hash[String, json_value] report, TableArtifact::Document table,
|
|
83
|
+
# Hash[String, json_value] table_entry) -> void
|
|
84
|
+
def validate_table_binding!: (Hash[String, json_value] report, TableArtifact::Document table, Hash[String, json_value] table_entry) -> void
|
|
85
|
+
|
|
86
|
+
# @rbs (json_value value, String path) -> Array[String]
|
|
87
|
+
def checks: (json_value value, String path) -> Array[String]
|
|
88
|
+
|
|
89
|
+
# @rbs (json_value value, Array[String] keys, String path) -> Hash[String, json_value]
|
|
90
|
+
def object: (json_value value, Array[String] keys, String path) -> Hash[String, json_value]
|
|
91
|
+
|
|
92
|
+
# @rbs (json_value value, String path) -> Array[json_value]
|
|
93
|
+
def array: (json_value value, String path) -> Array[json_value]
|
|
94
|
+
|
|
95
|
+
# @rbs (json_value value, String path, ?allow_empty: bool) -> String
|
|
96
|
+
def string: (json_value value, String path, ?allow_empty: bool) -> String
|
|
97
|
+
|
|
98
|
+
# @rbs (json_value value, String path) -> String
|
|
99
|
+
def digest: (json_value value, String path) -> String
|
|
100
|
+
|
|
101
|
+
# @rbs (json_value value, String path) -> Integer
|
|
102
|
+
def positive_integer: (json_value value, String path) -> Integer
|
|
103
|
+
|
|
104
|
+
# @rbs (json_value value, String path) -> Integer
|
|
105
|
+
def nonnegative_integer: (json_value value, String path) -> Integer
|
|
106
|
+
|
|
107
|
+
# @rbs [T] (T value, Array[T] values, String path) -> T
|
|
108
|
+
def enum: [T] (T value, Array[T] values, String path) -> T
|
|
109
|
+
|
|
110
|
+
# @rbs (json_value actual, json_value expected, String path) -> void
|
|
111
|
+
def equal: (json_value actual, json_value expected, String path) -> void
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Generated from lib/ibex/verification_report.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
# A versioned, scoped report that binds bounded verification to input and
|
|
5
|
+
# data-only parser table identities without claiming to verify opaque code.
|
|
6
|
+
module VerificationReport
|
|
7
|
+
IDENTIFIER: String
|
|
8
|
+
|
|
9
|
+
SCHEMA_VERSION: Integer
|
|
10
|
+
|
|
11
|
+
IR_IDENTITY_SCOPE: String
|
|
12
|
+
|
|
13
|
+
DEFAULT_MAX_STATES: Integer
|
|
14
|
+
|
|
15
|
+
DEFAULT_MAX_ITEMS: Integer
|
|
16
|
+
|
|
17
|
+
EXCLUDED_TRUST: Array[String]
|
|
18
|
+
|
|
19
|
+
class ValidationError < Ibex::Error
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Rebuild the supplied Automaton IR with path-neutral source locations for one bundle.
|
|
23
|
+
# @rbs (IR::Automaton automaton, source_records: Array[GenerationInput]) -> IR::Automaton
|
|
24
|
+
def self?.canonical_automaton: (IR::Automaton automaton, source_records: Array[GenerationInput]) -> IR::Automaton
|
|
25
|
+
|
|
26
|
+
# @rbs (IR::Automaton automaton, table: TableArtifact::Document,
|
|
27
|
+
# source_records: Array[GenerationInput], table_path: String, ?strict: bool,
|
|
28
|
+
# ?max_states: Integer, ?max_items: Integer) -> String
|
|
29
|
+
def self?.render: (IR::Automaton automaton, table: TableArtifact::Document, source_records: Array[GenerationInput], table_path: String, ?strict: bool, ?max_states: Integer, ?max_items: Integer) -> String
|
|
30
|
+
|
|
31
|
+
# Validate the closed report shape and its canonical evidence digest.
|
|
32
|
+
# @rbs (String source) -> Hash[String, VerificationReport::Validator::json_value]
|
|
33
|
+
def self?.validate: (String source) -> Hash[String, VerificationReport::Validator::json_value]
|
|
34
|
+
|
|
35
|
+
# Validate report, table, and manifest bytes as one non-cyclic bundle.
|
|
36
|
+
# @rbs (manifest_source: String, report_source: String, table_source: String) -> Hash[String, VerificationReport::Validator::json_value]
|
|
37
|
+
def self?.validate_bundle: (manifest_source: String, report_source: String, table_source: String) -> Hash[String, VerificationReport::Validator::json_value]
|
|
38
|
+
|
|
39
|
+
# Resolve the report and table through a manifest and validate every
|
|
40
|
+
# published artifact before checking the cross-artifact identities.
|
|
41
|
+
# @rbs (String manifest_path) -> Hash[String, VerificationReport::Validator::json_value]
|
|
42
|
+
def self?.validate_bundle_file: (String manifest_path) -> Hash[String, VerificationReport::Validator::json_value]
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Generated from lib/ibex/verify/action_correspondence.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Verify
|
|
5
|
+
type correspondence_action = IR::parser_action
|
|
6
|
+
|
|
7
|
+
# Compares resolved ACTION/GOTO behavior over all paired viable prefixes.
|
|
8
|
+
class ActionCorrespondence
|
|
9
|
+
class Difference < Struct[Symbol | Integer? | correspondence_action?]
|
|
10
|
+
attr_accessor kind: Symbol
|
|
11
|
+
attr_accessor canonical_state: Integer
|
|
12
|
+
attr_accessor target_state: Integer
|
|
13
|
+
attr_accessor symbol: Integer?
|
|
14
|
+
attr_accessor canonical: correspondence_action?
|
|
15
|
+
attr_accessor target: correspondence_action?
|
|
16
|
+
def self.new: (kind: Symbol, canonical_state: Integer, target_state: Integer, symbol: Integer?, canonical: correspondence_action?, target: correspondence_action?) -> instance
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class Result < Struct[Array[Difference] | Integer | bool]
|
|
20
|
+
attr_accessor differences: Array[Difference]
|
|
21
|
+
attr_accessor explored: Integer
|
|
22
|
+
attr_accessor truncated: bool
|
|
23
|
+
def self.new: (differences: Array[Difference], explored: Integer, truncated: bool) -> instance
|
|
24
|
+
def ok?: () -> bool
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @rbs (IR::Automaton canonical, IR::Automaton target, ?max_pairs: Integer) -> void
|
|
28
|
+
def initialize: (IR::Automaton canonical, IR::Automaton target, ?max_pairs: Integer) -> void
|
|
29
|
+
|
|
30
|
+
# @rbs () -> Result
|
|
31
|
+
def verify: () -> Result
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
# @rbs (Integer, Integer, IR::AutomatonState, IR::AutomatonState,
|
|
36
|
+
# Array[Difference], Array[Array[Integer]]) -> void
|
|
37
|
+
def compare_terminals: (Integer, Integer, IR::AutomatonState, IR::AutomatonState, Array[Difference], Array[Array[Integer]]) -> void
|
|
38
|
+
|
|
39
|
+
# @rbs (Integer, Integer, IR::AutomatonState, IR::AutomatonState,
|
|
40
|
+
# Array[Difference], Array[Array[Integer]]) -> void
|
|
41
|
+
def compare_gotos: (Integer, Integer, IR::AutomatonState, IR::AutomatonState, Array[Difference], Array[Array[Integer]]) -> void
|
|
42
|
+
|
|
43
|
+
# @rbs (IR::AutomatonState, Integer) -> IR::parser_action
|
|
44
|
+
def effective_action: (IR::AutomatonState, Integer) -> IR::parser_action
|
|
45
|
+
|
|
46
|
+
# @rbs (IR::parser_action) -> Array[Object]
|
|
47
|
+
def action_signature: (IR::parser_action) -> Array[Object]
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|