ibex 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +95 -272
- data/docs/architecture.md +187 -35
- 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 +3 -4
- data/docs/cst.md +24 -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 +179 -2
- data/docs/direct-ielr-decision.md +120 -0
- data/docs/direct-multi-entry-decision.md +82 -0
- data/docs/editor-setup.md +2 -1
- 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 +54 -0
- data/docs/getting-started.md +80 -0
- data/docs/grammar-reference.md +184 -13
- 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 +5 -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 +11 -0
- data/docs/release-readiness.md +126 -68
- data/docs/repair-semantics.md +123 -0
- data/docs/runtime-abi-evolution.md +307 -0
- data/docs/stability.md +144 -34
- 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/lib/ibex/analysis/digraph.rb +128 -0
- data/lib/ibex/analysis.rb +1 -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 +14 -5
- 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/diagnostics.rb +31 -11
- data/lib/ibex/cli/documentation.rb +11 -8
- data/lib/ibex/cli/equiv.rb +169 -0
- data/lib/ibex/cli/error_messages.rb +11 -4
- data/lib/ibex/cli/explain.rb +14 -5
- data/lib/ibex/cli/fix.rb +203 -0
- data/lib/ibex/cli/formatting.rb +11 -10
- data/lib/ibex/cli/fuzz.rb +200 -0
- data/lib/ibex/cli/fuzz_regressions.rb +145 -0
- data/lib/ibex/cli/generation_artifacts.rb +53 -2
- data/lib/ibex/cli/generation_error_messages.rb +1 -1
- data/lib/ibex/cli/grammar_tests.rb +32 -14
- data/lib/ibex/cli/ir_tools.rb +5 -61
- data/lib/ibex/cli/outputs.rb +60 -33
- data/lib/ibex/cli/reduce.rb +202 -0
- data/lib/ibex/cli/reduce_reporting.rb +71 -0
- data/lib/ibex/cli/samples.rb +49 -23
- data/lib/ibex/cli/verify.rb +116 -0
- data/lib/ibex/cli/watch.rb +6 -5
- data/lib/ibex/cli.rb +357 -56
- data/lib/ibex/codegen/action_locations.rb +1 -1
- data/lib/ibex/codegen/action_method_source.rb +5 -6
- data/lib/ibex/codegen/action_source.rb +3 -2
- data/lib/ibex/codegen/ambiguity.rb +5 -4
- data/lib/ibex/codegen/explain.rb +123 -55
- data/lib/ibex/codegen/generated_action_abi.rb +10 -5
- data/lib/ibex/codegen/rbs.rb +15 -7
- data/lib/ibex/codegen/report.rb +25 -13
- data/lib/ibex/codegen/ruby.rb +28 -64
- data/lib/ibex/codegen/ruby_actions.rb +9 -6
- data/lib/ibex/codegen/ruby_syntax.rb +15 -9
- 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 +21 -11
- data/lib/ibex/coverage/event_stream.rb +13 -7
- data/lib/ibex/coverage/report.rb +26 -18
- data/lib/ibex/coverage/runtime_event_validator.rb +30 -21
- 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/fix.rb +557 -0
- data/lib/ibex/frontend/ast.rb +22 -2
- data/lib/ibex/frontend/bootstrap_parser.rb +6 -13
- data/lib/ibex/frontend/diagnostic.rb +1 -1
- data/lib/ibex/frontend/formatter.rb +72 -26
- data/lib/ibex/frontend/generated_parser.rb +147 -117
- data/lib/ibex/frontend/generated_parser_base.rb +7 -3
- data/lib/ibex/frontend/generated_parser_includes.rb +1 -11
- data/lib/ibex/frontend/generation.rb +1 -1
- data/lib/ibex/frontend/parser/declarations.rb +17 -2
- data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
- data/lib/ibex/frontend/regenerator.rb +1 -0
- data/lib/ibex/frontend/resolution.rb +2 -1
- data/lib/ibex/frontend/resolver.rb +1 -1
- data/lib/ibex/frontend/rule_documentation.rb +2 -1
- data/lib/ibex/frontend/source_cursor.rb +2 -2
- data/lib/ibex/frontend/source_span.rb +9 -1
- data/lib/ibex/frontend/token_adapter/declaration_state.rb +38 -6
- data/lib/ibex/frontend/token_adapter.rb +10 -0
- data/lib/ibex/frontend.rb +1 -0
- data/lib/ibex/fuzz.rb +219 -0
- data/lib/ibex/generation_input.rb +1 -1
- data/lib/ibex/generation_manifest.rb +36 -25
- data/lib/ibex/generation_transaction.rb +1 -1
- data/lib/ibex/generation_transaction_recovery.rb +4 -4
- data/lib/ibex/generation_transaction_validation.rb +2 -2
- data/lib/ibex/grammar_tests.rb +1 -1
- data/lib/ibex/ir/automaton_ir.rb +61 -19
- data/lib/ibex/ir/grammar_ir.rb +76 -45
- data/lib/ibex/ir/lexer_ir.rb +5 -5
- data/lib/ibex/ir/parser_contract.rb +135 -0
- data/lib/ibex/ir/serialize.rb +203 -76
- data/lib/ibex/ir/validator/automaton.rb +64 -34
- data/lib/ibex/ir/validator/base.rb +51 -33
- data/lib/ibex/ir/validator/grammar.rb +113 -83
- data/lib/ibex/ir/validator/lexer.rb +2 -2
- data/lib/ibex/ir/validator.rb +2 -1
- data/lib/ibex/ir.rb +16 -3
- data/lib/ibex/lalr/build_metrics.rb +50 -2
- data/lib/ibex/lalr/builder.rb +191 -56
- data/lib/ibex/lalr/conflict_search.rb +15 -4
- data/lib/ibex/lalr/counterexample.rb +19 -14
- data/lib/ibex/lalr/direct_lookaheads.rb +110 -57
- 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 +22 -8
- 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/unreachable_states.rb +80 -0
- data/lib/ibex/lalr.rb +52 -1
- data/lib/ibex/location.rb +3 -3
- data/lib/ibex/lsp/document_handlers.rb +9 -7
- data/lib/ibex/lsp/initialization_handlers.rb +9 -7
- data/lib/ibex/lsp/navigation_handlers.rb +25 -11
- data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
- data/lib/ibex/lsp/position_codec.rb +6 -2
- data/lib/ibex/lsp/request_handlers.rb +3 -2
- data/lib/ibex/lsp/request_support.rb +14 -7
- data/lib/ibex/lsp/server.rb +13 -11
- data/lib/ibex/lsp/symbol_index.rb +13 -13
- data/lib/ibex/lsp/symbol_index_builder.rb +30 -20
- data/lib/ibex/lsp/symbol_occurrence.rb +8 -2
- data/lib/ibex/lsp/transport.rb +13 -3
- data/lib/ibex/lsp/workspace.rb +5 -4
- data/lib/ibex/lsp/workspace_analyzer.rb +1 -1
- data/lib/ibex/lsp.rb +1 -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 +2 -0
- data/lib/ibex/normalize/diagnostics.rb +63 -38
- data/lib/ibex/normalize/expander.rb +5 -4
- data/lib/ibex/normalize/expression.rb +8 -6
- data/lib/ibex/normalize/grammar_builder.rb +26 -0
- data/lib/ibex/normalize/inline_expansion.rb +100 -49
- data/lib/ibex/normalize/lexer.rb +3 -3
- data/lib/ibex/normalize/parameter_ebnf_lowering.rb +11 -10
- data/lib/ibex/normalize/parameter_lowering.rb +40 -23
- data/lib/ibex/normalize/parameters.rb +31 -4
- data/lib/ibex/normalize/parser_configuration.rb +70 -0
- data/lib/ibex/normalize.rb +10 -20
- data/lib/ibex/racc_migration/report.rb +6 -3
- data/lib/ibex/rake_task.rb +1 -1
- data/lib/ibex/samples.rb +43 -13
- 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 +6 -2
- data/lib/ibex/table_simulation/step.rb +3 -1
- data/lib/ibex/tables.rb +14 -0
- 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 +10 -1
- data/lib/ibex/watch/source_snapshot.rb +13 -8
- data/lib/ibex.rb +10 -0
- data/schema/{automaton-ir-v1.schema.json → automaton-ir-definitions.schema.json} +6 -6
- data/schema/{automaton-ir-v2.schema.json → automaton-ir.schema.json} +14 -7
- 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/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/explain-v1.schema.json +63 -1
- 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/fuzz-regression-v1.schema.json +79 -0
- data/schema/fuzz-v1.schema.json +114 -0
- data/schema/{grammar-ir-v2.schema.json → grammar-ir-extensions.schema.json} +20 -65
- data/schema/{grammar-ir-v1.schema.json → grammar-ir-foundation.schema.json} +3 -3
- data/schema/grammar-ir.schema.json +271 -0
- data/schema/ielr-benchmark-v1.schema.json +85 -0
- data/schema/lexer-profile-v1.schema.json +491 -0
- data/schema/metrics-v1.schema.json +60 -0
- data/schema/reduce-v1.schema.json +22 -0
- data/schema/reduce-v2.schema.json +63 -0
- data/schema/table-artifact-v1.schema.json +377 -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/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 +6 -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/diagnostics.rbs +16 -3
- data/sig/ibex/cli/documentation.rbs +5 -1
- data/sig/ibex/cli/equiv.rbs +49 -0
- data/sig/ibex/cli/error_messages.rbs +6 -0
- data/sig/ibex/cli/explain.rbs +6 -0
- data/sig/ibex/cli/fix.rbs +53 -0
- data/sig/ibex/cli/formatting.rbs +5 -1
- data/sig/ibex/cli/fuzz.rbs +47 -0
- data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
- data/sig/ibex/cli/generation_artifacts.rbs +21 -2
- data/sig/ibex/cli/generation_error_messages.rbs +2 -2
- data/sig/ibex/cli/grammar_tests.rbs +15 -3
- data/sig/ibex/cli/ir_tools.rbs +7 -19
- data/sig/ibex/cli/outputs.rbs +9 -3
- data/sig/ibex/cli/reduce.rbs +60 -0
- data/sig/ibex/cli/reduce_reporting.rbs +27 -0
- data/sig/ibex/cli/samples.rbs +8 -0
- data/sig/ibex/cli/verify.rbs +28 -0
- data/sig/ibex/cli/watch.rbs +2 -2
- data/sig/ibex/cli.rbs +79 -5
- data/sig/ibex/codegen/action_method_source.rbs +4 -4
- data/sig/ibex/codegen/explain.rbs +45 -25
- data/sig/ibex/codegen/generated_action_abi.rbs +14 -10
- data/sig/ibex/codegen/rbs.rbs +12 -10
- data/sig/ibex/codegen/report.rbs +12 -12
- data/sig/ibex/codegen/ruby.rbs +18 -15
- data/sig/ibex/codegen/ruby_actions.rbs +6 -6
- data/sig/ibex/codegen/ruby_syntax.rbs +10 -8
- 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 +16 -14
- data/sig/ibex/coverage/event_stream.rbs +12 -10
- data/sig/ibex/coverage/report.rbs +20 -18
- data/sig/ibex/coverage/runtime_event_validator.rbs +38 -36
- 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/fix.rbs +138 -0
- data/sig/ibex/frontend/ast.rbs +33 -7
- data/sig/ibex/frontend/bootstrap_parser.rbs +2 -0
- data/sig/ibex/frontend/diagnostic.rbs +2 -2
- data/sig/ibex/frontend/formatter.rbs +38 -30
- data/sig/ibex/frontend/generated_parser.rbs +87 -77
- data/sig/ibex/frontend/generated_parser_base.rbs +4 -2
- data/sig/ibex/frontend/parser/declarations.rbs +3 -0
- data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
- data/sig/ibex/frontend/resolution.rbs +3 -2
- data/sig/ibex/frontend/source_cursor.rbs +2 -2
- data/sig/ibex/frontend/source_span.rbs +5 -2
- data/sig/ibex/frontend/token_adapter/declaration_state.rbs +13 -1
- data/sig/ibex/frontend/token_adapter.rbs +6 -0
- data/sig/ibex/fuzz.rbs +71 -0
- data/sig/ibex/generation_input.rbs +2 -2
- data/sig/ibex/generation_manifest.rbs +35 -32
- data/sig/ibex/generation_transaction_recovery.rbs +2 -2
- data/sig/ibex/generation_transaction_validation.rbs +2 -2
- data/sig/ibex/grammar_tests.rbs +2 -2
- data/sig/ibex/ir/automaton_ir.rbs +30 -11
- data/sig/ibex/ir/grammar_ir.rbs +41 -27
- data/sig/ibex/ir/lexer_ir.rbs +8 -8
- data/sig/ibex/ir/parser_contract.rbs +69 -0
- data/sig/ibex/ir/serialize.rbs +63 -28
- data/sig/ibex/ir/validator/automaton.rbs +47 -44
- data/sig/ibex/ir/validator/base.rbs +35 -31
- data/sig/ibex/ir/validator/grammar.rbs +78 -67
- data/sig/ibex/ir/validator/lexer.rbs +4 -4
- data/sig/ibex/ir.rbs +9 -3
- data/sig/ibex/lalr/build_metrics.rbs +42 -2
- data/sig/ibex/lalr/builder.rbs +75 -24
- data/sig/ibex/lalr/conflict_search.rbs +5 -2
- data/sig/ibex/lalr/counterexample.rbs +17 -14
- data/sig/ibex/lalr/direct_lookaheads.rbs +35 -28
- 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 +17 -5
- 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/unreachable_states.rbs +25 -0
- data/sig/ibex/lalr.rbs +11 -1
- data/sig/ibex/location.rbs +6 -6
- data/sig/ibex/lsp/document_handlers.rbs +8 -8
- data/sig/ibex/lsp/initialization_handlers.rbs +12 -12
- data/sig/ibex/lsp/navigation_handlers.rbs +15 -12
- data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
- data/sig/ibex/lsp/position_codec.rbs +8 -4
- data/sig/ibex/lsp/request_handlers.rbs +4 -4
- data/sig/ibex/lsp/request_support.rbs +8 -8
- data/sig/ibex/lsp/server.rbs +16 -16
- data/sig/ibex/lsp/symbol_index.rbs +20 -21
- data/sig/ibex/lsp/symbol_index_builder.rbs +9 -8
- data/sig/ibex/lsp/symbol_occurrence.rbs +11 -5
- data/sig/ibex/lsp/transport.rbs +18 -6
- data/sig/ibex/lsp/workspace.rbs +3 -2
- data/sig/ibex/lsp/workspace_analyzer.rbs +1 -1
- data/sig/ibex/messages.rbs +26 -0
- data/sig/ibex/metrics.rbs +50 -0
- data/sig/ibex/normalize/diagnostics.rbs +4 -4
- data/sig/ibex/normalize/expander.rbs +2 -2
- data/sig/ibex/normalize/expression.rbs +10 -8
- data/sig/ibex/normalize/grammar_builder.rbs +11 -0
- data/sig/ibex/normalize/inline_expansion.rbs +59 -50
- data/sig/ibex/normalize/lexer.rbs +4 -4
- data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +15 -14
- data/sig/ibex/normalize/parameter_lowering.rbs +18 -18
- data/sig/ibex/normalize/parameters.rbs +13 -8
- data/sig/ibex/normalize/parser_configuration.rbs +23 -0
- data/sig/ibex/normalize.rbs +11 -5
- data/sig/ibex/racc_migration/report.rbs +8 -6
- data/sig/ibex/rake_task.rbs +1 -1
- data/sig/ibex/samples.rbs +13 -4
- 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 +8 -4
- data/sig/ibex/table_simulation/step.rbs +4 -2
- data/sig/ibex/tables.rbs +10 -9
- 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 +12 -2
- data/sig/ibex/watch/source_snapshot.rbs +13 -9
- metadata +232 -12
- data/lib/ibex/ir/migration.rb +0 -120
- data/sig/ibex/ir/migration.rbs +0 -34
|
@@ -3,56 +3,60 @@
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module IR
|
|
5
5
|
module Validator
|
|
6
|
-
|
|
6
|
+
type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
|
|
7
|
+
|
|
8
|
+
type json_object = Hash[String, json_value]
|
|
9
|
+
|
|
10
|
+
# Shared JSON-shape checks for current IR documents.
|
|
7
11
|
class Base
|
|
8
12
|
POSITION: ::String
|
|
9
13
|
|
|
10
14
|
private
|
|
11
15
|
|
|
12
|
-
# @rbs (
|
|
13
|
-
def record: (
|
|
16
|
+
# @rbs (json_value value, String path, Array[String] required, ?Array[String] optional) -> json_object
|
|
17
|
+
def record: (json_value value, String path, Array[String] required, ?Array[String] optional) -> json_object
|
|
14
18
|
|
|
15
|
-
# @rbs (
|
|
16
|
-
def object: (
|
|
19
|
+
# @rbs (json_value value, String path) -> json_object
|
|
20
|
+
def object: (json_value value, String path) -> json_object
|
|
17
21
|
|
|
18
|
-
# @rbs (
|
|
19
|
-
def array: (
|
|
22
|
+
# @rbs (json_value value, String path) -> Array[json_value]
|
|
23
|
+
def array: (json_value value, String path) -> Array[json_value]
|
|
20
24
|
|
|
21
|
-
# @rbs (
|
|
22
|
-
def string: (
|
|
25
|
+
# @rbs (json_value value, String path) -> String
|
|
26
|
+
def string: (json_value value, String path) -> String
|
|
23
27
|
|
|
24
|
-
# @rbs (
|
|
25
|
-
def nonempty_string: (
|
|
28
|
+
# @rbs (json_value value, String path) -> String
|
|
29
|
+
def nonempty_string: (json_value value, String path) -> String
|
|
26
30
|
|
|
27
|
-
# @rbs (
|
|
28
|
-
def integer: (
|
|
31
|
+
# @rbs (json_value value, String path) -> Integer
|
|
32
|
+
def integer: (json_value value, String path) -> Integer
|
|
29
33
|
|
|
30
|
-
# @rbs (
|
|
31
|
-
def nonnegative_integer: (
|
|
34
|
+
# @rbs (json_value value, String path) -> Integer
|
|
35
|
+
def nonnegative_integer: (json_value value, String path) -> Integer
|
|
32
36
|
|
|
33
|
-
# @rbs (
|
|
34
|
-
def boolean: (
|
|
37
|
+
# @rbs (json_value value, String path) -> bool
|
|
38
|
+
def boolean: (json_value value, String path) -> bool
|
|
35
39
|
|
|
36
|
-
# @rbs (
|
|
37
|
-
def literal: (
|
|
40
|
+
# @rbs (json_value value, String path, json_value expected) -> void
|
|
41
|
+
def literal: (json_value value, String path, json_value expected) -> void
|
|
38
42
|
|
|
39
|
-
# @rbs (
|
|
40
|
-
def enum: (
|
|
43
|
+
# @rbs (json_value value, String path, Array[String] values) -> String
|
|
44
|
+
def enum: (json_value value, String path, Array[String] values) -> String
|
|
41
45
|
|
|
42
|
-
# @rbs (
|
|
43
|
-
def location: (
|
|
46
|
+
# @rbs (json_value value, String path, ?nullable: bool) -> void
|
|
47
|
+
def location: (json_value value, String path, ?nullable: bool) -> void
|
|
44
48
|
|
|
45
|
-
# @rbs (
|
|
46
|
-
def positive_integer: (
|
|
49
|
+
# @rbs (json_value value, String path) -> Integer
|
|
50
|
+
def positive_integer: (json_value value, String path) -> Integer
|
|
47
51
|
|
|
48
|
-
# @rbs (
|
|
49
|
-
def nullable_string: (
|
|
52
|
+
# @rbs (json_value value, String path) -> String?
|
|
53
|
+
def nullable_string: (json_value value, String path) -> String?
|
|
50
54
|
|
|
51
|
-
# @rbs (
|
|
52
|
-
def metadata: (
|
|
55
|
+
# @rbs (json_value value, String path) -> void
|
|
56
|
+
def metadata: (json_value value, String path) -> void
|
|
53
57
|
|
|
54
|
-
# @rbs (
|
|
55
|
-
def field: (
|
|
58
|
+
# @rbs (json_object value, String key, String path) -> json_value
|
|
59
|
+
def field: (json_object value, String key, String path) -> json_value
|
|
56
60
|
|
|
57
61
|
# @rbs (String path, String key) -> String
|
|
58
62
|
def child_path: (String path, String key) -> String
|
|
@@ -3,53 +3,61 @@
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module IR
|
|
5
5
|
module Validator
|
|
6
|
-
# Structural and referential validation for a
|
|
6
|
+
# Structural and referential validation for a current Grammar IR JSON object.
|
|
7
7
|
# rubocop:disable Metrics/ClassLength -- inline type contracts accompany one cohesive document validator.
|
|
8
8
|
class GrammarDocument < Base
|
|
9
9
|
ROOT_REQUIRED: Array[String]
|
|
10
10
|
|
|
11
11
|
ROOT_OPTIONAL: Array[String]
|
|
12
12
|
|
|
13
|
-
V2_ROOT_REQUIRED: Array[String]
|
|
14
|
-
|
|
15
|
-
V2_ROOT_OPTIONAL: Array[String]
|
|
16
|
-
|
|
17
13
|
SYMBOL_REQUIRED: Array[String]
|
|
18
14
|
|
|
19
15
|
SYMBOL_OPTIONAL: Array[String]
|
|
20
16
|
|
|
21
|
-
|
|
17
|
+
SYMBOL_METADATA_REQUIRED: Array[String]
|
|
22
18
|
|
|
23
19
|
PRODUCTION_REQUIRED: Array[String]
|
|
24
20
|
|
|
25
|
-
|
|
21
|
+
PRODUCTION_METADATA_REQUIRED: Array[String]
|
|
26
22
|
|
|
27
|
-
|
|
23
|
+
ACTION_COMPOSITION_REQUIRED: Array[String]
|
|
28
24
|
|
|
29
25
|
ORIGIN_KINDS: Array[String]
|
|
30
26
|
|
|
31
27
|
RUBY_KEYWORDS: Array[String]
|
|
32
28
|
|
|
33
|
-
attr_reader symbols_by_id: Hash[Integer,
|
|
29
|
+
attr_reader symbols_by_id: Hash[Integer, json_object]
|
|
34
30
|
|
|
35
|
-
attr_reader symbols_by_name: Hash[String,
|
|
31
|
+
attr_reader symbols_by_name: Hash[String, json_object]
|
|
36
32
|
|
|
37
|
-
attr_reader productions_by_id: Hash[Integer,
|
|
33
|
+
attr_reader productions_by_id: Hash[Integer, json_object]
|
|
38
34
|
|
|
39
35
|
@version: Integer
|
|
40
36
|
|
|
41
37
|
@path: String
|
|
42
38
|
|
|
43
|
-
@data:
|
|
39
|
+
@data: json_object
|
|
44
40
|
|
|
45
|
-
# @rbs (
|
|
46
|
-
def initialize: (
|
|
41
|
+
# @rbs (json_object data, ?path: String, ?version: Integer) -> void
|
|
42
|
+
def initialize: (json_object data, ?path: String, ?version: Integer) -> void
|
|
47
43
|
|
|
48
44
|
# @rbs () -> self
|
|
49
45
|
def validate: () -> self
|
|
50
46
|
|
|
51
47
|
private
|
|
52
48
|
|
|
49
|
+
# @rbs () -> void
|
|
50
|
+
def validate_root_record: () -> void
|
|
51
|
+
|
|
52
|
+
# @rbs () -> void
|
|
53
|
+
def validate_optional_parser_metadata: () -> void
|
|
54
|
+
|
|
55
|
+
# @rbs () -> void
|
|
56
|
+
def validate_parser_parameters_if_present: () -> void
|
|
57
|
+
|
|
58
|
+
# @rbs () -> void
|
|
59
|
+
def validate_optional_source_metadata: () -> void
|
|
60
|
+
|
|
53
61
|
# @rbs () -> void
|
|
54
62
|
def validate_envelope: () -> void
|
|
55
63
|
|
|
@@ -71,11 +79,11 @@ module Ibex
|
|
|
71
79
|
# @rbs () -> void
|
|
72
80
|
def validate_symbols: () -> void
|
|
73
81
|
|
|
74
|
-
# @rbs (
|
|
75
|
-
def validate_symbol: (
|
|
82
|
+
# @rbs (json_value value, Integer index) -> void
|
|
83
|
+
def validate_symbol: (json_value value, Integer index) -> void
|
|
76
84
|
|
|
77
|
-
# @rbs (
|
|
78
|
-
def validate_precedence: (
|
|
85
|
+
# @rbs (json_value value, String path) -> void
|
|
86
|
+
def validate_precedence: (json_value value, String path) -> void
|
|
79
87
|
|
|
80
88
|
# @rbs () -> void
|
|
81
89
|
def validate_reserved_symbols: () -> void
|
|
@@ -92,53 +100,53 @@ module Ibex
|
|
|
92
100
|
# @rbs () -> void
|
|
93
101
|
def validate_recovery: () -> void
|
|
94
102
|
|
|
95
|
-
# @rbs (
|
|
96
|
-
def validate_recovery_symbols: (
|
|
103
|
+
# @rbs (json_value values, String path, kind: String) -> void
|
|
104
|
+
def validate_recovery_symbols: (json_value values, String path, kind: String) -> void
|
|
97
105
|
|
|
98
|
-
# @rbs (
|
|
99
|
-
def validate_recovery_symbol: (
|
|
106
|
+
# @rbs (json_value value, String path, kind: String, seen: Hash[String, bool]) -> void
|
|
107
|
+
def validate_recovery_symbol: (json_value value, String path, kind: String, seen: Hash[String, bool]) -> void
|
|
100
108
|
|
|
101
109
|
# @rbs () -> void
|
|
102
110
|
def validate_productions: () -> void
|
|
103
111
|
|
|
104
|
-
# @rbs (
|
|
105
|
-
def validate_production: (
|
|
112
|
+
# @rbs (json_value value, Integer index) -> void
|
|
113
|
+
def validate_production: (json_value value, Integer index) -> void
|
|
106
114
|
|
|
107
|
-
# @rbs (
|
|
108
|
-
def validate_node_annotation: (
|
|
115
|
+
# @rbs (json_value value, String path, rhs_length: Integer) -> void
|
|
116
|
+
def validate_node_annotation: (json_value value, String path, rhs_length: Integer) -> void
|
|
109
117
|
|
|
110
|
-
# @rbs (
|
|
111
|
-
def validate_lhs: (
|
|
118
|
+
# @rbs (json_value value, String path) -> void
|
|
119
|
+
def validate_lhs: (json_value value, String path) -> void
|
|
112
120
|
|
|
113
|
-
# @rbs (
|
|
114
|
-
def validate_rhs: (
|
|
121
|
+
# @rbs (json_value value, String path) -> void
|
|
122
|
+
def validate_rhs: (json_value value, String path) -> void
|
|
115
123
|
|
|
116
|
-
# @rbs (
|
|
117
|
-
def validate_action: (
|
|
124
|
+
# @rbs (json_value value, String path, rhs_length: Integer) -> void
|
|
125
|
+
def validate_action: (json_value value, String path, rhs_length: Integer) -> void
|
|
118
126
|
|
|
119
|
-
# @rbs (
|
|
120
|
-
def validate_named_refs: (
|
|
127
|
+
# @rbs (json_value value, String path, limit: Integer) -> void
|
|
128
|
+
def validate_named_refs: (json_value value, String path, limit: Integer) -> void
|
|
121
129
|
|
|
122
|
-
# @rbs (
|
|
123
|
-
def validate_precedence_override: (
|
|
130
|
+
# @rbs (json_value value, String path) -> void
|
|
131
|
+
def validate_precedence_override: (json_value value, String path) -> void
|
|
124
132
|
|
|
125
|
-
# @rbs (
|
|
126
|
-
def validate_origin: (
|
|
133
|
+
# @rbs (json_value value, String path) -> void
|
|
134
|
+
def validate_origin: (json_value value, String path) -> void
|
|
127
135
|
|
|
128
|
-
# @rbs (
|
|
129
|
-
def validate_string_map: (
|
|
136
|
+
# @rbs (json_value value, String path) -> void
|
|
137
|
+
def validate_string_map: (json_value value, String path) -> void
|
|
130
138
|
|
|
131
139
|
# @rbs () -> void
|
|
132
140
|
def validate_warnings: () -> void
|
|
133
141
|
|
|
134
|
-
# @rbs (
|
|
135
|
-
def validate_warning: (
|
|
142
|
+
# @rbs (json_value value, String path) -> void
|
|
143
|
+
def validate_warning: (json_value value, String path) -> void
|
|
136
144
|
|
|
137
|
-
# @rbs (
|
|
138
|
-
def validate_warning_symbol: (
|
|
145
|
+
# @rbs (json_object warning, String path) -> void
|
|
146
|
+
def validate_warning_symbol: (json_object warning, String path) -> void
|
|
139
147
|
|
|
140
|
-
# @rbs (
|
|
141
|
-
def validate_warning_production: (
|
|
148
|
+
# @rbs (json_object warning, String field_name, String path) -> void
|
|
149
|
+
def validate_warning_production: (json_object warning, String field_name, String path) -> void
|
|
142
150
|
|
|
143
151
|
# @rbs () -> void
|
|
144
152
|
def validate_lexer: () -> void
|
|
@@ -146,38 +154,41 @@ module Ibex
|
|
|
146
154
|
# @rbs () -> void
|
|
147
155
|
def validate_user_code_chunks: () -> void
|
|
148
156
|
|
|
149
|
-
# @rbs (
|
|
150
|
-
def validate_source_provenance: (
|
|
157
|
+
# @rbs (json_value value, String path, ?nullable: bool) -> void
|
|
158
|
+
def validate_source_provenance: (json_value value, String path, ?nullable: bool) -> void
|
|
151
159
|
|
|
152
|
-
# @rbs (
|
|
153
|
-
def validate_byte_span: (
|
|
160
|
+
# @rbs (json_value value, String path) -> void
|
|
161
|
+
def validate_byte_span: (json_value value, String path) -> void
|
|
154
162
|
|
|
155
163
|
# @rbs () -> void
|
|
156
|
-
def
|
|
164
|
+
def validate_parser_contract: () -> void
|
|
165
|
+
|
|
166
|
+
# @rbs (untyped value, String, Array[String]) -> Hash[String, untyped]
|
|
167
|
+
def validate_contract_entry: (untyped value, String, Array[String]) -> Hash[String, untyped]
|
|
157
168
|
|
|
158
|
-
# @rbs (
|
|
159
|
-
def validate_expansion: (
|
|
169
|
+
# @rbs (json_value value, String path) -> void
|
|
170
|
+
def validate_expansion: (json_value value, String path) -> void
|
|
160
171
|
|
|
161
|
-
# @rbs (
|
|
162
|
-
def validate_parameter_expansion: (
|
|
172
|
+
# @rbs (json_value value, String path) -> void
|
|
173
|
+
def validate_parameter_expansion: (json_value value, String path) -> void
|
|
163
174
|
|
|
164
|
-
# @rbs (
|
|
165
|
-
def validate_inline_expansion: (
|
|
175
|
+
# @rbs (json_value value, String path) -> void
|
|
176
|
+
def validate_inline_expansion: (json_value value, String path) -> void
|
|
166
177
|
|
|
167
|
-
# @rbs (
|
|
168
|
-
def validate_action_composition: (
|
|
178
|
+
# @rbs (json_value value, String path, rhs_length: Integer) -> void
|
|
179
|
+
def validate_action_composition: (json_value value, String path, rhs_length: Integer) -> void
|
|
169
180
|
|
|
170
|
-
# @rbs (
|
|
171
|
-
def validate_action_composition_plan: (
|
|
181
|
+
# @rbs (json_value value, String path, Integer rhs_length, Array[json_value] fragments) -> void
|
|
182
|
+
def validate_action_composition_plan: (json_value value, String path, Integer rhs_length, Array[json_value] fragments) -> void
|
|
172
183
|
|
|
173
|
-
# @rbs (
|
|
174
|
-
def validate_action_composition_step: (
|
|
184
|
+
# @rbs (json_value value, String path, Integer physical, Integer step_index) -> void
|
|
185
|
+
def validate_action_composition_step: (json_value value, String path, Integer physical, Integer step_index) -> void
|
|
175
186
|
|
|
176
|
-
# @rbs (Array[
|
|
177
|
-
def validate_action_slots: (Array[
|
|
187
|
+
# @rbs (Array[json_value] inputs, String path, Integer limit) -> void
|
|
188
|
+
def validate_action_slots: (Array[json_value] inputs, String path, Integer limit) -> void
|
|
178
189
|
|
|
179
|
-
# @rbs (
|
|
180
|
-
def validate_action_lookahead: (
|
|
190
|
+
# @rbs (json_value value, String path, Integer physical) -> void
|
|
191
|
+
def validate_action_lookahead: (json_value value, String path, Integer physical) -> void
|
|
181
192
|
end
|
|
182
193
|
end
|
|
183
194
|
end
|
|
@@ -9,8 +9,8 @@ module Ibex
|
|
|
9
9
|
|
|
10
10
|
RULE_REQUIRED: Array[String]
|
|
11
11
|
|
|
12
|
-
# @rbs (
|
|
13
|
-
def initialize: (
|
|
12
|
+
# @rbs (json_object data, ?path: String) -> void
|
|
13
|
+
def initialize: (json_object data, ?path: String) -> void
|
|
14
14
|
|
|
15
15
|
# @rbs () -> self
|
|
16
16
|
def validate: () -> self
|
|
@@ -23,8 +23,8 @@ module Ibex
|
|
|
23
23
|
# @rbs () -> void
|
|
24
24
|
def validate_rules: () -> void
|
|
25
25
|
|
|
26
|
-
# @rbs (
|
|
27
|
-
def validate_pattern: (
|
|
26
|
+
# @rbs (json_object rule, String path, String options) -> void
|
|
27
|
+
def validate_pattern: (json_object rule, String path, String options) -> void
|
|
28
28
|
|
|
29
29
|
# @rbs () -> void
|
|
30
30
|
def validate_warnings: () -> void
|
data/sig/ibex/ir.rbs
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module IR
|
|
5
|
+
type serialized_value = untyped
|
|
6
|
+
|
|
5
7
|
type location = { file: String, line: Integer, column: Integer }
|
|
6
8
|
|
|
7
9
|
type precedence = { associativity: Symbol, level: Integer }
|
|
@@ -24,6 +26,10 @@ module Ibex
|
|
|
24
26
|
|
|
25
27
|
type lexer_warning = { type: :redos, rule: Integer, loc: location }
|
|
26
28
|
|
|
29
|
+
type lexer_rule_document_value = Integer | String | Symbol | nil | location
|
|
30
|
+
|
|
31
|
+
type lexer_document_value = String | Integer | Array[String] | Array[Hash[Symbol, lexer_rule_document_value]] | Array[lexer_warning] | source_provenance?
|
|
32
|
+
|
|
27
33
|
type parameter_expansion = { rule: String, arguments: Array[String] }
|
|
28
34
|
|
|
29
35
|
type inline_expansion = { rule: String }
|
|
@@ -38,8 +44,6 @@ module Ibex
|
|
|
38
44
|
|
|
39
45
|
type action_composition = { strategy: String, fragments: Array[action_fragment], ?plan: action_composition_plan }
|
|
40
46
|
|
|
41
|
-
type migration_metadata = { from_schema_version: Integer, unavailable: Array[String] }
|
|
42
|
-
|
|
43
47
|
type user_code_chunks = Hash[String, Array[UserCodeChunk]]
|
|
44
48
|
|
|
45
49
|
type grammar_options = { result_var: bool, omit_action_call: bool, ?cst: bool }
|
|
@@ -70,7 +74,9 @@ module Ibex
|
|
|
70
74
|
|
|
71
75
|
type conflict_summary = { sr: Integer, resolved_sr: Integer, rr: Integer, expected_sr: Integer, expectation_met: bool, ?expected_rr: Integer, ?rr_expectation_met: bool }
|
|
72
76
|
|
|
73
|
-
type
|
|
77
|
+
type derivation_node = { symbol: String, ?token: String, ?production: Integer, ?children: Array[derivation_node] }
|
|
78
|
+
|
|
79
|
+
type interpretation = { kind: Symbol, tree: derivation_node?, ?state: Integer, ?production: Integer }
|
|
74
80
|
|
|
75
81
|
type counterexample = { state: Integer, type: Symbol, symbol_path: Array[String], sentence: Array[String], lookahead_index: Integer, unifying: bool, interpretations: Array[interpretation] }
|
|
76
82
|
end
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module LALR
|
|
5
|
+
# Optional measurements are kept explicit for schema stability.
|
|
6
|
+
# rubocop:disable Metrics/ParameterLists
|
|
5
7
|
# Immutable structural measurements from one automaton build. These counts
|
|
6
8
|
# are intended for diagnostics and benchmarks, not parser behavior.
|
|
7
9
|
class BuildMetrics
|
|
@@ -13,8 +15,46 @@ module Ibex
|
|
|
13
15
|
|
|
14
16
|
attr_reader strategy: Symbol
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
attr_reader lr0_states: Integer?
|
|
19
|
+
|
|
20
|
+
attr_reader lr0_items: Integer?
|
|
21
|
+
|
|
22
|
+
attr_reader canonical_items: Integer?
|
|
23
|
+
|
|
24
|
+
attr_reader final_items: Integer?
|
|
25
|
+
|
|
26
|
+
attr_reader final_lookahead_items: Integer?
|
|
27
|
+
|
|
28
|
+
attr_reader propagation_edges: Integer?
|
|
29
|
+
|
|
30
|
+
attr_reader ielr_initial_partitions: Integer?
|
|
31
|
+
|
|
32
|
+
attr_reader ielr_final_partitions: Integer?
|
|
33
|
+
|
|
34
|
+
attr_reader ielr_annotations: Integer?
|
|
35
|
+
|
|
36
|
+
attr_reader ielr_annotated_states: Integer?
|
|
37
|
+
|
|
38
|
+
attr_reader ielr_inadequacies: Integer?
|
|
39
|
+
|
|
40
|
+
attr_reader ielr_split_stable_discarded: Integer?
|
|
41
|
+
|
|
42
|
+
attr_reader ielr_lalr_states: Integer?
|
|
43
|
+
|
|
44
|
+
attr_reader ielr_split_states: Integer?
|
|
45
|
+
|
|
46
|
+
attr_reader ielr_unreachable_removed: Integer?
|
|
47
|
+
|
|
48
|
+
attr_reader ielr_remergeable_candidates: Integer?
|
|
49
|
+
|
|
50
|
+
# @rbs (construction_states: Integer, canonical_states: Integer?, final_states: Integer, strategy: Symbol,
|
|
51
|
+
# ?lr0_states: Integer?, ?lr0_items: Integer?, ?canonical_items: Integer?, ?final_items: Integer?,
|
|
52
|
+
# ?final_lookahead_items: Integer?, ?propagation_edges: Integer?, ?ielr_initial_partitions: Integer?,
|
|
53
|
+
# ?ielr_final_partitions: Integer?, ?ielr_annotations: Integer?, ?ielr_annotated_states: Integer?,
|
|
54
|
+
# ?ielr_inadequacies: Integer?, ?ielr_split_stable_discarded: Integer?, ?ielr_lalr_states: Integer?,
|
|
55
|
+
# ?ielr_split_states: Integer?, ?ielr_unreachable_removed: Integer?,
|
|
56
|
+
# ?ielr_remergeable_candidates: Integer?) -> void
|
|
57
|
+
def initialize: (construction_states: Integer, canonical_states: Integer?, final_states: Integer, strategy: Symbol, ?lr0_states: Integer?, ?lr0_items: Integer?, ?canonical_items: Integer?, ?final_items: Integer?, ?final_lookahead_items: Integer?, ?propagation_edges: Integer?, ?ielr_initial_partitions: Integer?, ?ielr_final_partitions: Integer?, ?ielr_annotations: Integer?, ?ielr_annotated_states: Integer?, ?ielr_inadequacies: Integer?, ?ielr_split_stable_discarded: Integer?, ?ielr_lalr_states: Integer?, ?ielr_split_states: Integer?, ?ielr_unreachable_removed: Integer?, ?ielr_remergeable_candidates: Integer?) -> void
|
|
18
58
|
end
|
|
19
59
|
end
|
|
20
60
|
end
|
data/sig/ibex/lalr/builder.rbs
CHANGED
|
@@ -11,48 +11,87 @@ module Ibex
|
|
|
11
11
|
|
|
12
12
|
LALR_STRATEGIES: Array[Symbol]
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
IELR_STRATEGIES: Array[Symbol]
|
|
15
15
|
|
|
16
|
-
@
|
|
16
|
+
@grammar: IR::Grammar
|
|
17
17
|
|
|
18
|
-
@
|
|
18
|
+
@algorithm: Symbol
|
|
19
19
|
|
|
20
|
-
@
|
|
20
|
+
@lalr_strategy: Symbol
|
|
21
21
|
|
|
22
|
-
@
|
|
22
|
+
@ielr_strategy: Symbol
|
|
23
23
|
|
|
24
|
-
@
|
|
24
|
+
@sets: Analysis::Sets
|
|
25
25
|
|
|
26
|
-
@
|
|
26
|
+
@productions_by_lhs: Hash[Integer, Array[IR::Production]]
|
|
27
27
|
|
|
28
28
|
@resolver: ConflictResolver
|
|
29
29
|
|
|
30
|
-
@
|
|
30
|
+
@metrics: BuildMetrics?
|
|
31
31
|
|
|
32
|
-
@
|
|
32
|
+
@start_names: Array[String]
|
|
33
33
|
|
|
34
|
-
@
|
|
34
|
+
@entry_isolation: bool
|
|
35
35
|
|
|
36
|
-
@
|
|
36
|
+
@attribute_entries: bool
|
|
37
37
|
|
|
38
|
-
@
|
|
38
|
+
@profile: bool
|
|
39
|
+
|
|
40
|
+
@remove_unreachable: bool
|
|
41
|
+
|
|
42
|
+
@canonical_suffix_lookahead_cache: Hash[Integer, Hash[Integer, Hash[Integer, Array[Integer]]]]
|
|
43
|
+
|
|
44
|
+
@canonical_item_cache: Hash[Integer, Array[Array[lr_item?]?]]?
|
|
45
|
+
|
|
46
|
+
@canonical_key_radices: [ Integer, Integer, Integer ]?
|
|
39
47
|
|
|
40
48
|
attr_reader metrics: BuildMetrics?
|
|
41
49
|
|
|
42
50
|
# @rbs (IR::Grammar grammar, ?algorithm: Symbol | String, ?lalr_strategy: Symbol | String,
|
|
43
|
-
# ?
|
|
44
|
-
|
|
51
|
+
# ?ielr_strategy: Symbol | String,
|
|
52
|
+
# ?entry_isolation: bool, ?starts: Array[String]?, ?attribute_entries: bool, ?profile: bool,
|
|
53
|
+
# ?remove_unreachable: bool) -> void
|
|
54
|
+
def initialize: (IR::Grammar grammar, ?algorithm: Symbol | String, ?lalr_strategy: Symbol | String, ?ielr_strategy: Symbol | String, ?entry_isolation: bool, ?starts: Array[String]?, ?attribute_entries: bool, ?profile: bool, ?remove_unreachable: bool) -> void
|
|
45
55
|
|
|
46
56
|
# @rbs () -> IR::Automaton
|
|
47
57
|
def build: () -> IR::Automaton
|
|
48
58
|
|
|
49
59
|
private
|
|
50
60
|
|
|
61
|
+
# @rbs (states: Array[IR::AutomatonState], conflict_summary: IR::conflict_summary,
|
|
62
|
+
# entry_states: Hash[String, Integer]) -> IR::Automaton
|
|
63
|
+
def build_output_automaton: (states: Array[IR::AutomatonState], conflict_summary: IR::conflict_summary, entry_states: Hash[String, Integer]) -> IR::Automaton
|
|
64
|
+
|
|
51
65
|
# @rbs (Array[IR::AutomatonState] states) -> IR::conflict_summary
|
|
52
66
|
def conflict_summary: (Array[IR::AutomatonState] states) -> IR::conflict_summary
|
|
53
67
|
|
|
54
|
-
# @rbs () -> [Array[packed_items], transitions,
|
|
55
|
-
def automaton_collection: () -> [ Array[packed_items], transitions,
|
|
68
|
+
# @rbs () -> [Array[packed_items], transitions, build_collection]
|
|
69
|
+
def automaton_collection: () -> [ Array[packed_items], transitions, build_collection ]
|
|
70
|
+
|
|
71
|
+
# @rbs () -> [Array[packed_items], transitions, build_collection]
|
|
72
|
+
def ielr_collection: () -> [ Array[packed_items], transitions, build_collection ]
|
|
73
|
+
|
|
74
|
+
# @rbs () -> [Array[packed_items], transitions, build_collection]
|
|
75
|
+
def ielr_direct_collection: () -> [ Array[packed_items], transitions, build_collection ]
|
|
76
|
+
|
|
77
|
+
# @rbs () -> [Array[packed_items], transitions, build_collection]
|
|
78
|
+
def canonical_lr1_collection: () -> [ Array[packed_items], transitions, build_collection ]
|
|
79
|
+
|
|
80
|
+
# @rbs (Symbol strategy) -> [Array[packed_items], transitions, build_collection]
|
|
81
|
+
def merged_canonical_collection: (Symbol strategy) -> [ Array[packed_items], transitions, build_collection ]
|
|
82
|
+
|
|
83
|
+
# @rbs () -> untyped
|
|
84
|
+
def direct_collection: () -> untyped
|
|
85
|
+
|
|
86
|
+
# @rbs (Array[item_set] states, strategy: Symbol) -> build_collection
|
|
87
|
+
def canonical_profile: (Array[item_set] states, strategy: Symbol) -> build_collection
|
|
88
|
+
|
|
89
|
+
# @rbs (Array[packed_items] items) -> [Integer?, Integer?]
|
|
90
|
+
def profiled_final_item_counts: (Array[packed_items] items) -> [ Integer?, Integer? ]
|
|
91
|
+
|
|
92
|
+
# @rbs (build_collection collection, Integer final_states, Integer? final_items,
|
|
93
|
+
# Integer? final_lookahead_items) -> BuildMetrics
|
|
94
|
+
def build_metrics: (build_collection collection, Integer final_states, Integer? final_items, Integer? final_lookahead_items) -> BuildMetrics
|
|
56
95
|
|
|
57
96
|
# @rbs () -> String
|
|
58
97
|
def algorithm_name: () -> String
|
|
@@ -97,10 +136,9 @@ module Ibex
|
|
|
97
136
|
def build_state: (Integer state_id, Array[IR::AutomatonItem] items, Hash[Integer, Integer] transitions) -> IR::AutomatonState
|
|
98
137
|
|
|
99
138
|
# Conflict hashes are produced locally immediately before this boundary.
|
|
100
|
-
#
|
|
101
|
-
#
|
|
102
|
-
|
|
103
|
-
def attribute_midrule_conflict: (untyped conflict) -> IR::conflict
|
|
139
|
+
# Both conflict variants carry the same optional midrule provenance field.
|
|
140
|
+
# @rbs (IR::conflict conflict) -> IR::conflict
|
|
141
|
+
def attribute_midrule_conflict: (IR::conflict conflict) -> IR::conflict
|
|
104
142
|
|
|
105
143
|
# @rbs (Array[IR::AutomatonItem] items, Hash[Integer, Array[IR::parser_action]] candidates) -> void
|
|
106
144
|
def add_completed_actions: (Array[IR::AutomatonItem] items, Hash[Integer, Array[IR::parser_action]] candidates) -> void
|
|
@@ -133,6 +171,19 @@ module Ibex
|
|
|
133
171
|
# @rbs () -> IR::Automaton
|
|
134
172
|
def build_isolated_automaton: () -> IR::Automaton
|
|
135
173
|
|
|
174
|
+
# @rbs (Array[[String, IR::Automaton, BuildMetrics]] entries, Integer construction_states,
|
|
175
|
+
# Integer? canonical_states, Integer final_states) -> BuildMetrics
|
|
176
|
+
def isolated_metrics: (Array[[ String, IR::Automaton, BuildMetrics ]] entries, Integer construction_states, Integer? canonical_states, Integer final_states) -> BuildMetrics
|
|
177
|
+
|
|
178
|
+
# @rbs (Array[[String, IR::Automaton, BuildMetrics]] entries, Symbol method) -> Integer?
|
|
179
|
+
def sum_optional_metric: (Array[[ String, IR::Automaton, BuildMetrics ]] entries, Symbol method) -> Integer?
|
|
180
|
+
|
|
181
|
+
# @rbs () -> Integer
|
|
182
|
+
def output_schema_version: () -> Integer
|
|
183
|
+
|
|
184
|
+
# @rbs () -> String?
|
|
185
|
+
def output_entry_construction: () -> String?
|
|
186
|
+
|
|
136
187
|
# @rbs (String name) -> [String, IR::Automaton, BuildMetrics]
|
|
137
188
|
def isolated_entry: (String name) -> [ String, IR::Automaton, BuildMetrics ]
|
|
138
189
|
|
|
@@ -155,11 +206,11 @@ module Ibex
|
|
|
155
206
|
# @rbs (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[Array[String]]
|
|
156
207
|
def entry_reachability: (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[Array[String]]
|
|
157
208
|
|
|
158
|
-
# @rbs () -> Set[
|
|
159
|
-
def isolated_conflict_fingerprints: () -> Set[
|
|
209
|
+
# @rbs () -> Set[conflict_fingerprint]
|
|
210
|
+
def isolated_conflict_fingerprints: () -> Set[conflict_fingerprint]
|
|
160
211
|
|
|
161
|
-
# @rbs (IR::conflict conflict) ->
|
|
162
|
-
def conflict_fingerprint: (IR::conflict conflict) ->
|
|
212
|
+
# @rbs (IR::conflict conflict) -> conflict_fingerprint
|
|
213
|
+
def conflict_fingerprint: (IR::conflict conflict) -> conflict_fingerprint
|
|
163
214
|
end
|
|
164
215
|
end
|
|
165
216
|
end
|
|
@@ -46,14 +46,17 @@ module Ibex
|
|
|
46
46
|
# ?max_tokens: Integer, ?max_configurations: Integer) -> void
|
|
47
47
|
def initialize: (IR::Automaton automaton, IR::AutomatonState state, IR::conflict conflict, ?max_tokens: Integer, ?max_configurations: Integer) -> void
|
|
48
48
|
|
|
49
|
-
# @rbs () ->
|
|
50
|
-
def call: () ->
|
|
49
|
+
# @rbs () -> search_outcome
|
|
50
|
+
def call: () -> search_outcome
|
|
51
51
|
|
|
52
52
|
# @rbs () -> bool
|
|
53
53
|
def exhausted?: () -> bool
|
|
54
54
|
|
|
55
55
|
private
|
|
56
56
|
|
|
57
|
+
# @rbs (:found | :not_found | :exhausted status, ?search_result? result) -> search_outcome
|
|
58
|
+
def outcome: (:found | :not_found | :exhausted status, ?search_result? result) -> search_outcome
|
|
59
|
+
|
|
57
60
|
# @rbs (Configuration current) -> Array[Configuration]
|
|
58
61
|
def conflict_configurations: (Configuration current) -> Array[Configuration]
|
|
59
62
|
|