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
|
@@ -11,22 +11,23 @@ module Ibex
|
|
|
11
11
|
# @rbs (IR::Automaton automaton, ?max_tokens: Integer, ?max_configurations: Integer) -> void
|
|
12
12
|
def initialize: (IR::Automaton automaton, ?max_tokens: Integer, ?max_configurations: Integer) -> void
|
|
13
13
|
|
|
14
|
-
# @rbs () -> Array[
|
|
15
|
-
def all: () -> Array[
|
|
14
|
+
# @rbs () -> Array[search_counterexample]
|
|
15
|
+
def all: () -> Array[search_counterexample]
|
|
16
16
|
|
|
17
|
-
# @rbs (Integer state_id, Integer conflict_index) ->
|
|
18
|
-
def for_conflict: (Integer state_id, Integer conflict_index) ->
|
|
17
|
+
# @rbs (Integer state_id, Integer conflict_index) -> search_counterexample
|
|
18
|
+
def for_conflict: (Integer state_id, Integer conflict_index) -> search_counterexample
|
|
19
19
|
|
|
20
20
|
private
|
|
21
21
|
|
|
22
|
-
# @rbs (IR::AutomatonState state, IR::conflict conflict) ->
|
|
23
|
-
def build_example: (IR::AutomatonState state, IR::conflict conflict) ->
|
|
22
|
+
# @rbs (IR::AutomatonState state, IR::conflict conflict) -> search_counterexample
|
|
23
|
+
def build_example: (IR::AutomatonState state, IR::conflict conflict) -> search_counterexample
|
|
24
24
|
|
|
25
|
-
# @rbs (IR::AutomatonState state, IR::conflict conflict,
|
|
26
|
-
|
|
25
|
+
# @rbs (IR::AutomatonState state, IR::conflict conflict, search_outcome outcome,
|
|
26
|
+
# search_result result) -> search_counterexample
|
|
27
|
+
def unifying_example: (IR::AutomatonState state, IR::conflict conflict, search_outcome outcome, search_result result) -> search_counterexample
|
|
27
28
|
|
|
28
|
-
# @rbs (IR::AutomatonState state, IR::conflict conflict) ->
|
|
29
|
-
def reachability_example: (IR::AutomatonState state, IR::conflict conflict) ->
|
|
29
|
+
# @rbs (IR::AutomatonState state, IR::conflict conflict, search_outcome outcome) -> search_counterexample
|
|
30
|
+
def reachability_example: (IR::AutomatonState state, IR::conflict conflict, search_outcome outcome) -> search_counterexample
|
|
30
31
|
|
|
31
32
|
# @rbs (Integer target, IR::conflict conflict) -> Array[Integer]
|
|
32
33
|
def shortest_state_path: (Integer target, IR::conflict conflict) -> Array[Integer]
|
|
@@ -40,11 +41,13 @@ module Ibex
|
|
|
40
41
|
# @rbs (IR::conflict conflict) -> Array[IR::interpretation]
|
|
41
42
|
def interpretations: (IR::conflict conflict) -> Array[IR::interpretation]
|
|
42
43
|
|
|
43
|
-
#
|
|
44
|
-
|
|
44
|
+
# The compact counterexample tree intentionally uses a lightweight shape
|
|
45
|
+
# whose children are symbol names rather than recursively expanded nodes.
|
|
46
|
+
# @rbs (IR::shift_reduce_conflict conflict) -> untyped
|
|
47
|
+
def shift_interpretation: (IR::shift_reduce_conflict conflict) -> untyped
|
|
45
48
|
|
|
46
|
-
# @rbs (Integer production_id) ->
|
|
47
|
-
def reduce_interpretation: (Integer production_id) ->
|
|
49
|
+
# @rbs (Integer production_id) -> untyped
|
|
50
|
+
def reduce_interpretation: (Integer production_id) -> untyped
|
|
48
51
|
|
|
49
52
|
# @rbs (Array[Integer] symbol_ids) -> Array[String]
|
|
50
53
|
def names: (Array[Integer] symbol_ids) -> Array[String]
|
|
@@ -9,34 +9,32 @@ module Ibex
|
|
|
9
9
|
|
|
10
10
|
EMPTY_PRODUCTIONS: Array[IR::Production]
|
|
11
11
|
|
|
12
|
-
EMPTY_NODES: Array[
|
|
12
|
+
EMPTY_NODES: Array[Integer]
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
attr_reader lr0_state_count: Integer?
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
attr_reader lr0_item_count: Integer?
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
attr_reader propagation_edge_count: Integer?
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
attr_reader states: Array[core_set]
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
attr_reader transitions: transitions
|
|
23
23
|
|
|
24
|
-
@
|
|
25
|
-
|
|
26
|
-
@productions_by_lhs: Hash[Integer, Array[IR::Production]]
|
|
27
|
-
|
|
28
|
-
@sets: Analysis::Sets
|
|
29
|
-
|
|
30
|
-
@grammar: IR::Grammar
|
|
31
|
-
|
|
32
|
-
# @rbs (IR::Grammar grammar, Analysis::Sets sets) -> void
|
|
33
|
-
def initialize: (IR::Grammar grammar, Analysis::Sets sets) -> void
|
|
24
|
+
# @rbs (IR::Grammar grammar, Analysis::Sets sets, ?starts: Array[String]?, ?profile: bool) -> void
|
|
25
|
+
def initialize: (IR::Grammar grammar, Analysis::Sets sets, ?starts: Array[String]?, ?profile: bool) -> void
|
|
34
26
|
|
|
35
27
|
# @rbs () -> [Array[packed_items], transitions]
|
|
36
28
|
def build: () -> [ Array[packed_items], transitions ]
|
|
37
29
|
|
|
30
|
+
# @rbs (Integer index) -> Integer
|
|
31
|
+
def augmented_production: (Integer index) -> Integer
|
|
32
|
+
|
|
38
33
|
private
|
|
39
34
|
|
|
35
|
+
# @rbs () -> void
|
|
36
|
+
def initialize_item_encoding: () -> void
|
|
37
|
+
|
|
40
38
|
# @rbs () -> [Array[core_set], transitions]
|
|
41
39
|
def lr0_collection: () -> [ Array[core_set], transitions ]
|
|
42
40
|
|
|
@@ -50,22 +48,25 @@ module Ibex
|
|
|
50
48
|
def empty_lookaheads: (Array[core_set] states) -> Array[packed_items]
|
|
51
49
|
|
|
52
50
|
# @rbs (Array[core_set] states, transitions transitions, Array[packed_items] lookaheads) ->
|
|
53
|
-
# Hash[
|
|
54
|
-
def propagation_graph: (Array[core_set] states, transitions transitions, Array[packed_items] lookaheads) -> Hash[
|
|
51
|
+
# Hash[Integer, Array[Integer]]
|
|
52
|
+
def propagation_graph: (Array[core_set] states, transitions transitions, Array[packed_items] lookaheads) -> Hash[Integer, Array[Integer]]
|
|
55
53
|
|
|
56
|
-
# @rbs (Hash[
|
|
54
|
+
# @rbs (Hash[Integer, Array[Integer]] edges, transitions transitions,
|
|
57
55
|
# Integer state_id, Integer production_id, Integer dot) -> void
|
|
58
|
-
def add_transition_edge: (Hash[
|
|
56
|
+
def add_transition_edge: (Hash[Integer, Array[Integer]] edges, transitions transitions, Integer state_id, Integer production_id, Integer dot) -> void
|
|
59
57
|
|
|
60
|
-
# @rbs (Hash[
|
|
58
|
+
# @rbs (Hash[Integer, Array[Integer]] edges, Array[packed_items] lookaheads,
|
|
61
59
|
# Integer state_id, Integer production_id, Integer dot) -> void
|
|
62
|
-
def add_closure_relations: (Hash[
|
|
60
|
+
def add_closure_relations: (Hash[Integer, Array[Integer]] edges, Array[packed_items] lookaheads, Integer state_id, Integer production_id, Integer dot) -> void
|
|
61
|
+
|
|
62
|
+
# @rbs (Array[packed_items] lookaheads, Hash[Integer, Array[Integer]] edges) -> void
|
|
63
|
+
def propagate: (Array[packed_items] lookaheads, Hash[Integer, Array[Integer]] edges) -> void
|
|
63
64
|
|
|
64
|
-
# @rbs (Array[packed_items] lookaheads,
|
|
65
|
-
def
|
|
65
|
+
# @rbs (Array[packed_items] lookaheads, Integer node) -> Set[Integer]
|
|
66
|
+
def node_set: (Array[packed_items] lookaheads, Integer node) -> Set[Integer]
|
|
66
67
|
|
|
67
|
-
# @rbs (
|
|
68
|
-
def
|
|
68
|
+
# @rbs (Integer state_id, Integer production_id, Integer dot) -> Integer
|
|
69
|
+
def node_id: (Integer state_id, Integer production_id, Integer dot) -> Integer
|
|
69
70
|
|
|
70
71
|
# @rbs (Integer bits) -> Array[Integer]
|
|
71
72
|
def terminal_ids: (Integer bits) -> Array[Integer]
|
|
@@ -79,8 +80,14 @@ module Ibex
|
|
|
79
80
|
# @rbs (Integer production_id, Integer dot) -> item_core
|
|
80
81
|
def item_core: (Integer production_id, Integer dot) -> item_core
|
|
81
82
|
|
|
82
|
-
# @rbs (core_set items) -> Array[
|
|
83
|
-
def item_key: (core_set items) -> Array[
|
|
83
|
+
# @rbs (core_set items) -> Array[Integer]
|
|
84
|
+
def item_key: (core_set items) -> Array[Integer]
|
|
85
|
+
|
|
86
|
+
# @rbs (String name) -> Integer
|
|
87
|
+
def start_index: (String name) -> Integer
|
|
88
|
+
|
|
89
|
+
# @rbs () -> Array[String]
|
|
90
|
+
def grammar_starts: () -> Array[String]
|
|
84
91
|
end
|
|
85
92
|
end
|
|
86
93
|
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/goto_follows.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
# Computes DeRemer–Pennello goto-follow sets over an LR(0) collection.
|
|
6
|
+
# The three dependency closures are kept separately because IELR relies on
|
|
7
|
+
# the distinction between stable (successor/internal) and predecessor
|
|
8
|
+
# dependencies when a state is split.
|
|
9
|
+
class GotoFollows
|
|
10
|
+
@kernel_cores: Array[Array[item_core]]
|
|
11
|
+
|
|
12
|
+
@transitions: transitions
|
|
13
|
+
|
|
14
|
+
@states: Array[core_set]
|
|
15
|
+
|
|
16
|
+
@sets: Analysis::Sets
|
|
17
|
+
|
|
18
|
+
@grammar: IR::Grammar
|
|
19
|
+
|
|
20
|
+
attr_reader from_state: Array[Integer]
|
|
21
|
+
|
|
22
|
+
attr_reader to_state: Array[Integer]
|
|
23
|
+
|
|
24
|
+
attr_reader goto_index: Hash[[ Integer, Integer ], Integer]
|
|
25
|
+
|
|
26
|
+
attr_reader direct_reads: Array[Integer]
|
|
27
|
+
|
|
28
|
+
attr_reader successor_edges: Array[Array[Integer]]
|
|
29
|
+
|
|
30
|
+
attr_reader internal_edges: Array[Array[Integer]]
|
|
31
|
+
|
|
32
|
+
attr_reader includes_edges: Array[Array[Integer]]
|
|
33
|
+
|
|
34
|
+
attr_reader predecessors: Array[Array[Integer]]
|
|
35
|
+
|
|
36
|
+
attr_reader successor_follows: Array[Integer]
|
|
37
|
+
|
|
38
|
+
attr_reader always_follows: Array[Integer]
|
|
39
|
+
|
|
40
|
+
attr_reader goto_follows: Array[Integer]
|
|
41
|
+
|
|
42
|
+
attr_reader follow_kernel_items: Array[Integer]
|
|
43
|
+
|
|
44
|
+
attr_reader kernel_cores: Array[Array[item_core]]
|
|
45
|
+
|
|
46
|
+
# @rbs (IR::Grammar grammar, Analysis::Sets sets, Array[core_set] states, transitions transitions,
|
|
47
|
+
# Array[Integer] start_states, ?start_names: Array[String]?) -> void
|
|
48
|
+
def initialize: (IR::Grammar grammar, Analysis::Sets sets, Array[core_set] states, transitions transitions, Array[Integer] start_states, ?start_names: Array[String]?) -> void
|
|
49
|
+
|
|
50
|
+
# @rbs (Integer state_id, Integer nonterminal_id) -> Integer?
|
|
51
|
+
def goto_for: (Integer state_id, Integer nonterminal_id) -> Integer?
|
|
52
|
+
|
|
53
|
+
# @rbs () -> Array[Hash[Integer, Integer]]
|
|
54
|
+
def reduction_lookaheads: () -> Array[Hash[Integer, Integer]]
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
# @rbs () -> void
|
|
59
|
+
def build_gotos: () -> void
|
|
60
|
+
|
|
61
|
+
# @rbs () -> void
|
|
62
|
+
def build_dependencies: () -> void
|
|
63
|
+
|
|
64
|
+
# @rbs () -> void
|
|
65
|
+
def build_follow_sets: () -> void
|
|
66
|
+
|
|
67
|
+
# @rbs (Array[Array[Integer]], Array[Array[Integer]]) -> Array[Array[Integer]]
|
|
68
|
+
def merged_edges: (Array[Array[Integer]], Array[Array[Integer]]) -> Array[Array[Integer]]
|
|
69
|
+
|
|
70
|
+
# @rbs (Integer goto_id) -> Integer
|
|
71
|
+
def compute_follow_kernel_items: (Integer goto_id) -> Integer
|
|
72
|
+
|
|
73
|
+
# @rbs (core_set items) -> Array[item_core]
|
|
74
|
+
def kernel_items: (core_set items) -> Array[item_core]
|
|
75
|
+
|
|
76
|
+
# @rbs (Integer goto_id) -> Integer
|
|
77
|
+
def symbol_for_goto: (Integer goto_id) -> Integer
|
|
78
|
+
|
|
79
|
+
# @rbs (Integer state_id, Array[Integer]) -> Integer?
|
|
80
|
+
def advance: (Integer state_id, Array[Integer]) -> Integer?
|
|
81
|
+
|
|
82
|
+
# @rbs (Integer production_id) -> Array[Integer]
|
|
83
|
+
def rhs_for: (Integer production_id) -> Array[Integer]
|
|
84
|
+
|
|
85
|
+
# @rbs () -> Integer
|
|
86
|
+
def eof_id: () -> Integer
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/ielr/annotator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
module IELR
|
|
6
|
+
# Finds grammar-relative inadequacies and traces their possible
|
|
7
|
+
# manifestations through predecessor states.
|
|
8
|
+
class Annotator
|
|
9
|
+
attr_reader annotation_lists: Array[Array[Annotation]]
|
|
10
|
+
|
|
11
|
+
attr_reader inadequacies: Array[Array[Inadequacy]]
|
|
12
|
+
|
|
13
|
+
attr_reader item_lookaheads: ItemLookaheads
|
|
14
|
+
|
|
15
|
+
attr_reader split_stable_discarded: Integer
|
|
16
|
+
|
|
17
|
+
# @rbs (IR::Grammar grammar, Array[core_set] states, transitions transitions,
|
|
18
|
+
# Array[packed_items] items, GotoFollows goto_follows, ?resolver: ConflictResolver?) -> void
|
|
19
|
+
def initialize: (IR::Grammar grammar, Array[core_set] states, transitions transitions, Array[packed_items] items, GotoFollows goto_follows, ?resolver: ConflictResolver?) -> void
|
|
20
|
+
|
|
21
|
+
# @rbs () -> Array[Array[Annotation]]
|
|
22
|
+
def build: () -> Array[Array[Annotation]]
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
# @rbs (Integer state_id) -> Array[Inadequacy]
|
|
27
|
+
def build_inadequacies: (Integer state_id) -> Array[Inadequacy]
|
|
28
|
+
|
|
29
|
+
# @rbs (Integer state_id, Integer token_id) -> Array[[Symbol, Integer?]]
|
|
30
|
+
def contributions_for: (Integer state_id, Integer token_id) -> Array[[ Symbol, Integer? ]]
|
|
31
|
+
|
|
32
|
+
# @rbs (Integer state_id, Inadequacy inadequacy) -> Annotation
|
|
33
|
+
def annotate_manifestation: (Integer state_id, Inadequacy inadequacy) -> Annotation
|
|
34
|
+
|
|
35
|
+
# @rbs (Integer state_id, Integer successor_id, Annotation annotation) -> Annotation
|
|
36
|
+
def annotate_predecessor: (Integer state_id, Integer successor_id, Annotation annotation) -> Annotation
|
|
37
|
+
|
|
38
|
+
# @rbs (Integer state_id, Array[item_core], Integer, Integer) -> bool
|
|
39
|
+
def always_via_lhs?: (Integer state_id, Array[item_core], Integer, Integer) -> bool
|
|
40
|
+
|
|
41
|
+
# @rbs (Integer state_id, Array[item_core], Integer, Integer) -> Integer
|
|
42
|
+
def project_row: (Integer state_id, Array[item_core], Integer, Integer) -> Integer
|
|
43
|
+
|
|
44
|
+
# @rbs (Integer state_id, Integer production_id, Integer length) -> Integer
|
|
45
|
+
def completed_kernel_mask: (Integer state_id, Integer production_id, Integer length) -> Integer
|
|
46
|
+
|
|
47
|
+
# @rbs (Integer state_id, Integer lhs_id, Integer token_id) -> Integer?
|
|
48
|
+
def compute_lhs_contributions: (Integer state_id, Integer lhs_id, Integer token_id) -> Integer?
|
|
49
|
+
|
|
50
|
+
# @rbs (Integer state_id, Annotation annotation) -> bool
|
|
51
|
+
def register?: (Integer state_id, Annotation annotation) -> bool
|
|
52
|
+
|
|
53
|
+
# @rbs (Integer state_id, Integer production_id) -> Integer
|
|
54
|
+
def lhs_for: (Integer state_id, Integer production_id) -> Integer
|
|
55
|
+
|
|
56
|
+
# @rbs (Integer production_id) -> Array[Integer]
|
|
57
|
+
def rhs_for: (Integer production_id) -> Array[Integer]
|
|
58
|
+
|
|
59
|
+
# @rbs (core_set items) -> Array[item_core]
|
|
60
|
+
def kernel_items: (core_set items) -> Array[item_core]
|
|
61
|
+
|
|
62
|
+
# @rbs (Integer state_id, Integer production_id, Integer dot) -> Integer?
|
|
63
|
+
def kernel_index_of: (Integer state_id, Integer production_id, Integer dot) -> Integer?
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/ielr/bits.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
module IELR
|
|
6
|
+
module Bits
|
|
7
|
+
# @rbs (Integer bits) { (Integer) -> void } -> void
|
|
8
|
+
# @rbs (Integer bits) -> Enumerator[Integer, void]
|
|
9
|
+
def self?.each_set_bit: (Integer bits) { (Integer) -> void } -> void
|
|
10
|
+
| (Integer bits) -> Enumerator[Integer, void]
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/ielr/inadequacy.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
module IELR
|
|
6
|
+
type contribution = [ Symbol, Integer? ]
|
|
7
|
+
|
|
8
|
+
class Inadequacy < Struct[Integer | Array[contribution]]
|
|
9
|
+
attr_accessor state: Integer
|
|
10
|
+
attr_accessor token: Integer
|
|
11
|
+
attr_accessor contributions: Array[contribution]
|
|
12
|
+
attr_accessor id: Integer
|
|
13
|
+
def self.new: (state: Integer, token: Integer, contributions: Array[contribution], id: Integer) -> instance
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class Annotation < Struct[Inadequacy | Array[Integer?]]
|
|
17
|
+
attr_accessor inadequacy: Inadequacy
|
|
18
|
+
attr_accessor matrix: Array[Integer?]
|
|
19
|
+
def self.new: (inadequacy: Inadequacy, matrix: Array[Integer?]) -> instance
|
|
20
|
+
def key: () -> [ Integer, Array[Integer?] ]
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/ielr/item_lookaheads.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
module IELR
|
|
6
|
+
# Lazily derives the lookahead of a kernel item from predecessor states
|
|
7
|
+
# and goto-follow sets. Memoisation is important: predecessor paths can
|
|
8
|
+
# share exponentially many suffixes in a real grammar.
|
|
9
|
+
class ItemLookaheads
|
|
10
|
+
@memo: Hash[Integer, Integer]
|
|
11
|
+
|
|
12
|
+
# @rbs (IR::Grammar grammar, GotoFollows goto_follows, Array[Array[item_core]] kernel_cores,
|
|
13
|
+
# Array[Array[Integer]] predecessors, ?start_states: Array[Integer]?) -> void
|
|
14
|
+
def initialize: (IR::Grammar grammar, GotoFollows goto_follows, Array[Array[item_core]] kernel_cores, Array[Array[Integer]] predecessors, ?start_states: Array[Integer]?) -> void
|
|
15
|
+
|
|
16
|
+
# @rbs (Integer state_id, Integer kernel_index) -> Integer
|
|
17
|
+
def fetch: (Integer state_id, Integer kernel_index) -> Integer
|
|
18
|
+
|
|
19
|
+
# @rbs () -> Integer
|
|
20
|
+
def size: () -> Integer
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
# @rbs (Integer state_id, Integer kernel_index) -> Integer
|
|
25
|
+
def compute: (Integer state_id, Integer kernel_index) -> Integer
|
|
26
|
+
|
|
27
|
+
# @rbs (Integer state_id, Integer production_id) -> Integer
|
|
28
|
+
def goto_follows_for: (Integer state_id, Integer production_id) -> Integer
|
|
29
|
+
|
|
30
|
+
# @rbs (Integer production_id) -> Integer
|
|
31
|
+
def start_seed: (Integer production_id) -> Integer
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/ielr/pipeline.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
module IELR
|
|
6
|
+
# Coordinates the canonical-free direct IELR phases. The returned
|
|
7
|
+
# profile deliberately reports canonical metrics as unavailable.
|
|
8
|
+
class Pipeline
|
|
9
|
+
# @rbs (IR::Grammar grammar, Analysis::Sets sets, ?starts: Array[String]?, ?profile: bool) -> void
|
|
10
|
+
def initialize: (IR::Grammar grammar, Analysis::Sets sets, ?starts: Array[String]?, ?profile: bool) -> void
|
|
11
|
+
|
|
12
|
+
# @rbs () -> [Array[packed_items], transitions, LALR::build_collection]
|
|
13
|
+
def build: () -> [ Array[packed_items], transitions, LALR::build_collection ]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/ielr/split_stability.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
module IELR
|
|
6
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
7
|
+
module SplitStability
|
|
8
|
+
MAX_ENUMERATED_POTENTIALS: ::Integer
|
|
9
|
+
|
|
10
|
+
# @rbs (Annotation) -> bool
|
|
11
|
+
def self?.simple?: (Annotation) -> bool
|
|
12
|
+
|
|
13
|
+
# @rbs (Annotation, ConflictResolver) -> bool
|
|
14
|
+
def self?.split_stable?: (Annotation, ConflictResolver) -> bool
|
|
15
|
+
|
|
16
|
+
# @rbs (ConflictResolver, Integer, Array[Object]) -> Object?
|
|
17
|
+
def self?.resolve: (ConflictResolver, Integer, Array[Object]) -> Object?
|
|
18
|
+
|
|
19
|
+
# @rbs (Object?) -> Object?
|
|
20
|
+
def self?.normalize: (Object?) -> Object?
|
|
21
|
+
|
|
22
|
+
# @rbs (Array[Integer]) -> Array[Array[Integer]]
|
|
23
|
+
def self?.subsets: (Array[Integer]) -> Array[Array[Integer]]
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/ielr/split_state.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
module IELR
|
|
6
|
+
class SplitState < Struct[Array[item_core] | Array[[ Integer, Integer ]] | Integer]
|
|
7
|
+
attr_accessor core: Array[item_core]
|
|
8
|
+
attr_accessor transitions: Array[[ Integer, Integer ]]
|
|
9
|
+
attr_accessor lalr_isocore: Integer
|
|
10
|
+
def self.new: (core: Array[item_core], transitions: Array[[ Integer, Integer ]], lalr_isocore: Integer) -> instance
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/ielr/state_splitter.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
module IELR
|
|
6
|
+
# Splits LR(0) isocores only where an inadequacy would change the
|
|
7
|
+
# resolved action. New states copy their transition arrays; no mutable
|
|
8
|
+
# transition table is shared between isocores.
|
|
9
|
+
class StateSplitter
|
|
10
|
+
attr_reader annotations: Array[Array[Annotation]]
|
|
11
|
+
|
|
12
|
+
attr_reader states: Array[SplitState]
|
|
13
|
+
|
|
14
|
+
attr_reader lalr_isocores: Array[Integer]
|
|
15
|
+
|
|
16
|
+
attr_reader split_states: Integer
|
|
17
|
+
|
|
18
|
+
attr_reader inadequacies: Array[Array[Inadequacy]]
|
|
19
|
+
|
|
20
|
+
attr_reader split_stable_discarded: Integer
|
|
21
|
+
|
|
22
|
+
# @rbs (IR::Grammar grammar, Array[core_set] states, transitions transitions,
|
|
23
|
+
# Array[packed_items] items, GotoFollows goto_follows, ?resolver: ConflictResolver?) -> void
|
|
24
|
+
# rubocop:disable Metrics/AbcSize -- initialization wires the phase tables once.
|
|
25
|
+
def initialize: (IR::Grammar grammar, Array[core_set] states, transitions transitions, Array[packed_items] items, GotoFollows goto_follows, ?resolver: ConflictResolver?) -> void
|
|
26
|
+
|
|
27
|
+
# @rbs () -> [Array[packed_items], transitions]
|
|
28
|
+
def build: () -> [ Array[packed_items], transitions ]
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
# @rbs (Integer from_id, Integer to_id, Integer transition_index) -> void
|
|
33
|
+
def compute_state: (Integer from_id, Integer to_id, Integer transition_index) -> void
|
|
34
|
+
|
|
35
|
+
# @rbs (Integer from_id, Integer to_id) -> Array[Integer]
|
|
36
|
+
def propagate_lookaheads: (Integer from_id, Integer to_id) -> Array[Integer]
|
|
37
|
+
|
|
38
|
+
# @rbs (Integer state_id, Integer nonterminal_id) -> Integer
|
|
39
|
+
def compute_goto_follow_set: (Integer state_id, Integer nonterminal_id) -> Integer
|
|
40
|
+
|
|
41
|
+
# @rbs (Integer state_id) -> Array[Integer]
|
|
42
|
+
def lookahead_set_filters: (Integer state_id) -> Array[Integer]
|
|
43
|
+
|
|
44
|
+
# @rbs (Integer state_id, Array[Integer]) -> bool
|
|
45
|
+
def compatible?: (Integer state_id, Array[Integer]) -> bool
|
|
46
|
+
|
|
47
|
+
# @rbs (Annotation, Array[Integer]) -> Object?
|
|
48
|
+
def dominant_contribution: (Annotation, Array[Integer]) -> Object?
|
|
49
|
+
|
|
50
|
+
# @rbs (Integer after_id, Array[Integer]) -> Integer
|
|
51
|
+
def append_isocore: (Integer after_id, Array[Integer]) -> Integer
|
|
52
|
+
|
|
53
|
+
# @rbs (Integer state_id, Array[Integer]) -> void
|
|
54
|
+
def merge_lookaheads: (Integer state_id, Array[Integer]) -> void
|
|
55
|
+
|
|
56
|
+
# @rbs () -> Array[packed_items]
|
|
57
|
+
def pack_items: () -> Array[packed_items]
|
|
58
|
+
|
|
59
|
+
# @rbs () -> transitions
|
|
60
|
+
def packed_transitions: () -> transitions
|
|
61
|
+
|
|
62
|
+
# @rbs (core_set items) -> Array[item_core]
|
|
63
|
+
def kernel_items: (core_set items) -> Array[item_core]
|
|
64
|
+
|
|
65
|
+
# @rbs (Integer state_id, Integer production_id, Integer dot) -> Integer?
|
|
66
|
+
def kernel_index_of: (Integer state_id, Integer production_id, Integer dot) -> Integer?
|
|
67
|
+
|
|
68
|
+
# @rbs (Integer production_id) -> Integer
|
|
69
|
+
def lhs_for: (Integer production_id) -> Integer
|
|
70
|
+
|
|
71
|
+
# @rbs (Integer production_id) -> Array[Integer]
|
|
72
|
+
def rhs_for: (Integer production_id) -> Array[Integer]
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -5,9 +5,17 @@ module Ibex
|
|
|
5
5
|
# Deterministically merges compatible canonical LR(1) states and splits
|
|
6
6
|
# partitions until their outgoing transitions are congruent.
|
|
7
7
|
class IELRPartition
|
|
8
|
+
type contribution_action = [ :shift ] | [ :reduce, Integer ] | [ :accept ]
|
|
9
|
+
|
|
8
10
|
AUGMENTED_PRODUCTION: Integer
|
|
9
11
|
|
|
10
|
-
@
|
|
12
|
+
@profile: bool
|
|
13
|
+
|
|
14
|
+
@final_partition_count: Integer?
|
|
15
|
+
|
|
16
|
+
@initial_partition_count: Integer?
|
|
17
|
+
|
|
18
|
+
@contributions: Array[Hash[Integer, Set[contribution_action]]]
|
|
11
19
|
|
|
12
20
|
@transitions: transitions
|
|
13
21
|
|
|
@@ -15,8 +23,12 @@ module Ibex
|
|
|
15
23
|
|
|
16
24
|
@grammar: IR::Grammar
|
|
17
25
|
|
|
18
|
-
|
|
19
|
-
|
|
26
|
+
attr_reader initial_partition_count: Integer?
|
|
27
|
+
|
|
28
|
+
attr_reader final_partition_count: Integer?
|
|
29
|
+
|
|
30
|
+
# @rbs (IR::Grammar grammar, Array[item_set] states, transitions transitions, ?profile: bool) -> void
|
|
31
|
+
def initialize: (IR::Grammar grammar, Array[item_set] states, transitions transitions, ?profile: bool) -> void
|
|
20
32
|
|
|
21
33
|
# @rbs () -> [Array[packed_items], transitions]
|
|
22
34
|
def build: () -> [ Array[packed_items], transitions ]
|
|
@@ -46,8 +58,8 @@ module Ibex
|
|
|
46
58
|
# @rbs (state_partition members) -> packed_items
|
|
47
59
|
def merge_items: (state_partition members) -> packed_items
|
|
48
60
|
|
|
49
|
-
# @rbs (Integer state_id) -> Hash[Integer, Set[
|
|
50
|
-
def action_contributions: (Integer state_id) -> Hash[Integer, Set[
|
|
61
|
+
# @rbs (Integer state_id) -> Hash[Integer, Set[contribution_action]]
|
|
62
|
+
def action_contributions: (Integer state_id) -> Hash[Integer, Set[contribution_action]]
|
|
51
63
|
|
|
52
64
|
# @rbs (Integer production_id) -> Array[Integer]
|
|
53
65
|
def rhs_for: (Integer production_id) -> Array[Integer]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/inadequacy_report.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
type report_value = String | Symbol | Integer | bool | nil | IR::parser_action | Array[report_value] | Hash[Symbol, report_value]
|
|
6
|
+
|
|
7
|
+
# Diagnostic-only report for canonical-vs-LALR action differences. It is
|
|
8
|
+
# intentionally separate from normal construction because it enumerates a
|
|
9
|
+
# canonical LR(1) reference.
|
|
10
|
+
class InadequacyReport
|
|
11
|
+
# @rbs (IR::Automaton canonical, IR::Automaton target, ?max_pairs: Integer) -> void
|
|
12
|
+
def initialize: (IR::Automaton canonical, IR::Automaton target, ?max_pairs: Integer) -> void
|
|
13
|
+
|
|
14
|
+
# @rbs () -> Hash[Symbol, report_value]
|
|
15
|
+
def to_h: () -> Hash[Symbol, report_value]
|
|
16
|
+
|
|
17
|
+
# @rbs () -> String
|
|
18
|
+
def to_json: () -> String
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/lookahead_propagation.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
# Recomputes item lookaheads on an already-built LR(0) automaton. This is
|
|
6
|
+
# Phase 4 of direct IELR and is also useful as an independent cross-check
|
|
7
|
+
# for DirectLookaheads.
|
|
8
|
+
class LookaheadPropagation
|
|
9
|
+
EMPTY: Array[Integer]
|
|
10
|
+
|
|
11
|
+
attr_reader propagation_edge_count: Integer
|
|
12
|
+
|
|
13
|
+
# @rbs (IR::Grammar grammar, Analysis::Sets sets, Array[core_set] states, transitions transitions,
|
|
14
|
+
# seeds: Array[[Integer, item_core, Integer]]) -> Array[packed_items]
|
|
15
|
+
def initialize: (IR::Grammar grammar, Analysis::Sets sets, Array[core_set] states, transitions transitions, seeds: Array[[ Integer, item_core, Integer ]]) -> Array[packed_items]
|
|
16
|
+
|
|
17
|
+
# @rbs () -> Array[packed_items]
|
|
18
|
+
def build: () -> Array[packed_items]
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
# @rbs (Hash[Object, Array[Object]], Integer, Integer, Integer) -> void
|
|
23
|
+
def add_transition: (Hash[Object, Array[Object]], Integer, Integer, Integer) -> void
|
|
24
|
+
|
|
25
|
+
# @rbs (Hash[Object, Array[Object]], Array[packed_items], Integer, Integer, Integer) -> void
|
|
26
|
+
def add_closure: (Hash[Object, Array[Object]], Array[packed_items], Integer, Integer, Integer) -> void
|
|
27
|
+
|
|
28
|
+
# @rbs (Array[packed_items], Hash[Object, Array[Object]]) -> void
|
|
29
|
+
def propagate: (Array[packed_items], Hash[Object, Array[Object]]) -> void
|
|
30
|
+
|
|
31
|
+
# @rbs (Integer bits) -> Array[Integer]
|
|
32
|
+
def terminal_ids: (Integer bits) -> Array[Integer]
|
|
33
|
+
|
|
34
|
+
# @rbs (Integer production_id) -> Array[Integer]
|
|
35
|
+
def rhs_for: (Integer production_id) -> Array[Integer]
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|