ibex 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +89 -123
- data/docs/architecture.md +477 -31
- data/docs/bison-import.md +103 -0
- data/docs/comparison-policy.md +127 -0
- data/docs/configuration-model.md +59 -0
- data/docs/configuration-report.md +28 -0
- data/docs/conflict-explanation-reviews/v1/records/README.md +28 -0
- data/docs/conflict-explanation-study.md +62 -0
- data/docs/construction-profiling.md +157 -0
- data/docs/cst-migration.md +106 -0
- data/docs/cst.md +237 -0
- data/docs/decisions/0000-template.md +24 -0
- data/docs/decisions/0001-separate-ir-pipeline.md +34 -0
- data/docs/decisions/0002-opaque-user-code-boundary.md +32 -0
- data/docs/decisions/0003-self-hosted-grammar-frontend.md +32 -0
- data/docs/decisions/0004-shared-semantic-and-lossless-source-model.md +33 -0
- data/docs/decisions/0005-contained-grammar-composition.md +34 -0
- data/docs/decisions/0006-bounded-structural-grammar-lowering.md +32 -0
- data/docs/decisions/0007-shared-parser-construction-pipeline.md +33 -0
- data/docs/decisions/0008-versioned-runtime-package-boundary.md +36 -0
- data/docs/decisions/0009-isolated-parser-sessions.md +34 -0
- data/docs/decisions/0010-committed-runtime-observation.md +34 -0
- data/docs/decisions/0011-versioned-semantic-action-boundary.md +37 -0
- data/docs/decisions/0012-bounded-nonexecuting-analysis.md +37 -0
- data/docs/decisions/0013-transactional-generation-publication.md +37 -0
- data/docs/decisions/0014-versioned-generated-lexer.md +35 -0
- data/docs/decisions/0015-worker-isolated-browser-analysis.md +32 -0
- data/docs/decisions/0016-red-green-concrete-syntax.md +34 -0
- data/docs/decisions/0017-persistent-syntax-artifacts.md +35 -0
- data/docs/decisions/0018-conservative-incremental-syntax-reuse.md +38 -0
- data/docs/decisions/0019-runtime-syntax-session-boundary.md +51 -0
- data/docs/decisions/0020-grammar-ir-parser-contract.md +65 -0
- data/docs/decisions/0021-data-only-parser-table-sidecar.md +50 -0
- data/docs/decisions/0022-manifest-bound-verification-report.md +77 -0
- data/docs/decisions/0023-syntax-only-repair-results.md +48 -0
- data/docs/decisions/0024-direct-ielr-construction.md +42 -0
- data/docs/decisions/README.md +74 -0
- data/docs/declarative-configuration.md +262 -0
- data/docs/development.md +306 -0
- data/docs/direct-ielr-decision.md +120 -0
- data/docs/direct-multi-entry-decision.md +82 -0
- data/docs/editor-setup.md +26 -0
- data/docs/error-ux-review-rubric-v1.md +117 -0
- data/docs/error-ux-reviews/v1/records/README.md +22 -0
- data/docs/error-ux-round2-review-status-v1.json +27 -0
- data/docs/error-ux-round2-reviews/v1/records/README.md +30 -0
- data/docs/error-ux-round2-v1.json +1581 -0
- data/docs/error-ux-round2.md +111 -0
- data/docs/error-ux.md +114 -0
- data/docs/getting-started.md +80 -0
- data/docs/grammar-reference.md +629 -18
- data/docs/ielr-design.md +43 -0
- data/docs/ielr.md +92 -0
- data/docs/ja/bison-import.md +51 -0
- data/docs/ja/stable-api.md +53 -0
- data/docs/lexer-construction-profile.md +109 -0
- data/docs/lexer-migration.md +56 -0
- data/docs/maturity.md +128 -0
- data/docs/project-site-strategy.md +54 -0
- data/docs/racc-migration-evidence.md +45 -0
- data/docs/racc-migration.md +45 -6
- data/docs/release-readiness.md +221 -0
- data/docs/repair-semantics.md +123 -0
- data/docs/runtime-abi-evolution.md +307 -0
- data/docs/stability.md +234 -0
- data/docs/status.md +43 -0
- data/docs/syntax-sessions.md +183 -0
- data/docs/table-artifact.md +125 -0
- data/docs/test-interactions.md +219 -0
- data/docs/verification-report.md +137 -0
- data/docs/verifier-trust-boundary.md +199 -0
- data/docs/workloads.md +132 -0
- data/examples/README.md +60 -0
- data/examples/calculator.y +44 -0
- data/examples/csv.y +32 -0
- data/examples/ini.y +70 -0
- data/examples/json.y +48 -0
- data/examples/tiny_language.y +75 -0
- data/lib/ibex/analysis/digraph.rb +128 -0
- data/lib/ibex/analysis/sets.rb +5 -4
- data/lib/ibex/analysis.rb +1 -0
- data/lib/ibex/artifact_set.rb +63 -0
- data/lib/ibex/bison_import/importer.rb +516 -0
- data/lib/ibex/bison_import/tokenizer.rb +260 -0
- data/lib/ibex/bison_import.rb +200 -0
- data/lib/ibex/bounded_subprocess.rb +171 -0
- data/lib/ibex/cli/ambiguity.rb +75 -0
- data/lib/ibex/cli/analysis.rb +134 -0
- data/lib/ibex/cli/bison_import.rb +121 -0
- data/lib/ibex/cli/config.rb +128 -0
- data/lib/ibex/cli/counterexample_options.rb +6 -2
- data/lib/ibex/cli/coverage.rb +173 -0
- data/lib/ibex/cli/debug.rb +106 -0
- data/lib/ibex/cli/diagnostics.rb +136 -0
- data/lib/ibex/cli/documentation.rb +70 -0
- data/lib/ibex/cli/equiv.rb +169 -0
- data/lib/ibex/cli/error_messages.rb +184 -0
- data/lib/ibex/cli/explain.rb +85 -0
- data/lib/ibex/cli/fix.rb +203 -0
- data/lib/ibex/cli/formatting.rb +387 -0
- data/lib/ibex/cli/fuzz.rb +200 -0
- data/lib/ibex/cli/fuzz_regressions.rb +145 -0
- data/lib/ibex/cli/generation_artifacts.rb +189 -0
- data/lib/ibex/cli/generation_error_messages.rb +39 -0
- data/lib/ibex/cli/grammar_tests.rb +140 -0
- data/lib/ibex/cli/ir_tools.rb +128 -0
- data/lib/ibex/cli/lsp.rb +33 -0
- data/lib/ibex/cli/outputs.rb +133 -23
- data/lib/ibex/cli/racc_migration.rb +87 -0
- data/lib/ibex/cli/reduce.rb +202 -0
- data/lib/ibex/cli/reduce_reporting.rb +71 -0
- data/lib/ibex/cli/samples.rb +118 -0
- data/lib/ibex/cli/verify.rb +116 -0
- data/lib/ibex/cli/watch.rb +104 -0
- data/lib/ibex/cli.rb +825 -55
- data/lib/ibex/codegen/action_locations.rb +103 -0
- data/lib/ibex/codegen/action_method_source.rb +209 -0
- data/lib/ibex/codegen/action_source.rb +119 -0
- data/lib/ibex/codegen/ambiguity.rb +174 -0
- data/lib/ibex/codegen/cst_metadata.rb +171 -0
- data/lib/ibex/codegen/documentation.rb +170 -0
- data/lib/ibex/codegen/explain.rb +380 -0
- data/lib/ibex/codegen/generated_action_abi.rb +293 -0
- data/lib/ibex/codegen/html.rb +94 -10
- data/lib/ibex/codegen/mermaid.rb +43 -0
- data/lib/ibex/codegen/railroad.rb +197 -0
- data/lib/ibex/codegen/railroad_documentation.rb +59 -0
- data/lib/ibex/codegen/rbs.rb +331 -2
- data/lib/ibex/codegen/report.rb +67 -15
- data/lib/ibex/codegen/ruby.rb +305 -66
- data/lib/ibex/codegen/ruby_actions.rb +146 -0
- data/lib/ibex/codegen/ruby_ast.rb +121 -0
- data/lib/ibex/codegen/ruby_error_messages.rb +28 -0
- data/lib/ibex/codegen/ruby_lexer.rb +83 -0
- data/lib/ibex/codegen/ruby_syntax.rb +96 -0
- data/lib/ibex/codegen/ruby_table_metadata.rb +57 -0
- data/lib/ibex/codegen/ruby_value_printers.rb +56 -0
- data/lib/ibex/codegen/symbol_labels.rb +1 -1
- data/lib/ibex/configuration/analysis_grammar.rb +35 -0
- data/lib/ibex/configuration/explanation.rb +421 -0
- data/lib/ibex/configuration/inspector.rb +232 -0
- data/lib/ibex/configuration.rb +580 -0
- data/lib/ibex/coverage/collector.rb +198 -0
- data/lib/ibex/coverage/event_stream.rb +103 -0
- data/lib/ibex/coverage/report.rb +267 -0
- data/lib/ibex/coverage/runtime_event_validator.rb +169 -0
- data/lib/ibex/coverage.rb +13 -0
- data/lib/ibex/delta_reducer.rb +99 -0
- data/lib/ibex/diff.rb +140 -0
- data/lib/ibex/equiv/machine.rb +135 -0
- data/lib/ibex/equiv.rb +373 -0
- data/lib/ibex/error_messages/parser.rb +159 -0
- data/lib/ibex/error_messages/parser_v2.rb +198 -0
- data/lib/ibex/error_messages/renderer.rb +65 -0
- data/lib/ibex/error_messages/sentence_search.rb +196 -0
- data/lib/ibex/error_messages/update.rb +169 -0
- data/lib/ibex/error_messages.rb +165 -0
- data/lib/ibex/fix.rb +557 -0
- data/lib/ibex/frontend/ast.rb +166 -7
- data/lib/ibex/frontend/bootstrap_parser.rb +40 -4
- data/lib/ibex/frontend/diagnostic.rb +81 -0
- data/lib/ibex/frontend/diagnostic_recovery.rb +268 -0
- data/lib/ibex/frontend/dsl.rb +66 -7
- data/lib/ibex/frontend/formatter.rb +453 -0
- data/lib/ibex/frontend/generated_parser.rb +644 -190
- data/lib/ibex/frontend/generated_parser_base.rb +170 -32
- data/lib/ibex/frontend/generated_parser_includes.rb +51 -0
- data/lib/ibex/frontend/generated_parser_metadata.rb +61 -0
- data/lib/ibex/frontend/generated_parser_parameters.rb +60 -0
- data/lib/ibex/frontend/generation.rb +33 -0
- data/lib/ibex/frontend/lexer.rb +162 -10
- data/lib/ibex/frontend/lexer_recovery.rb +84 -0
- data/lib/ibex/frontend/parser/declarations.rb +262 -11
- data/lib/ibex/frontend/parser/parameters.rb +82 -0
- data/lib/ibex/frontend/parser/rules.rb +43 -6
- data/lib/ibex/frontend/parser.rb +182 -4
- data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
- data/lib/ibex/frontend/regenerator.rb +27 -1
- data/lib/ibex/frontend/resolution.rb +70 -0
- data/lib/ibex/frontend/resolver.rb +217 -0
- data/lib/ibex/frontend/rule_documentation.rb +104 -0
- data/lib/ibex/frontend/source_cursor.rb +133 -9
- data/lib/ibex/frontend/source_document.rb +229 -0
- data/lib/ibex/frontend/source_loader.rb +150 -0
- data/lib/ibex/frontend/source_span.rb +89 -0
- data/lib/ibex/frontend/token_adapter/declaration_document_state.rb +47 -0
- data/lib/ibex/frontend/token_adapter/declaration_lexer_state.rb +83 -0
- data/lib/ibex/frontend/token_adapter/declaration_state.rb +244 -22
- data/lib/ibex/frontend/token_adapter/delimiter_tracker.rb +8 -2
- data/lib/ibex/frontend/token_adapter/rule_state.rb +60 -2
- data/lib/ibex/frontend/token_adapter.rb +18 -3
- data/lib/ibex/frontend.rb +14 -2
- data/lib/ibex/fuzz.rb +219 -0
- data/lib/ibex/generation_input.rb +57 -0
- data/lib/ibex/generation_manifest.rb +211 -0
- data/lib/ibex/generation_transaction.rb +261 -0
- data/lib/ibex/generation_transaction_recovery.rb +109 -0
- data/lib/ibex/generation_transaction_validation.rb +196 -0
- data/lib/ibex/grammar_tests.rb +206 -0
- data/lib/ibex/ir/automaton_ir.rb +86 -11
- data/lib/ibex/ir/grammar_ir.rb +170 -26
- data/lib/ibex/ir/lexer_ir.rb +76 -0
- data/lib/ibex/ir/parser_contract.rb +135 -0
- data/lib/ibex/ir/serialize.rb +268 -50
- data/lib/ibex/ir/validator/automaton.rb +375 -0
- data/lib/ibex/ir/validator/base.rb +147 -0
- data/lib/ibex/ir/validator/grammar.rb +634 -0
- data/lib/ibex/ir/validator/lexer.rb +113 -0
- data/lib/ibex/ir/validator.rb +63 -0
- data/lib/ibex/ir.rb +71 -5
- data/lib/ibex/lalr/build_metrics.rb +71 -0
- data/lib/ibex/lalr/builder.rb +514 -52
- data/lib/ibex/lalr/conflict.rb +1 -0
- data/lib/ibex/lalr/conflict_search.rb +26 -9
- data/lib/ibex/lalr/counterexample.rb +38 -18
- data/lib/ibex/lalr/direct_lookaheads.rb +289 -0
- data/lib/ibex/lalr/goto_follows.rb +229 -0
- data/lib/ibex/lalr/ielr/annotator.rb +214 -0
- data/lib/ibex/lalr/ielr/bits.rb +28 -0
- data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
- data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
- data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
- data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
- data/lib/ibex/lalr/ielr/split_state.rb +20 -0
- data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
- data/lib/ibex/lalr/ielr_partition.rb +166 -0
- data/lib/ibex/lalr/inadequacy_report.rb +50 -0
- data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
- data/lib/ibex/lalr/lr0_collection.rb +121 -0
- data/lib/ibex/lalr/on_error_reductions.rb +74 -0
- data/lib/ibex/lalr/unreachable_states.rb +80 -0
- data/lib/ibex/lalr.rb +59 -1
- data/lib/ibex/location.rb +129 -0
- data/lib/ibex/lsp/document_handlers.rb +68 -0
- data/lib/ibex/lsp/document_store.rb +264 -0
- data/lib/ibex/lsp/document_store_diagnostics.rb +44 -0
- data/lib/ibex/lsp/document_store_validation.rb +61 -0
- data/lib/ibex/lsp/initialization_handlers.rb +80 -0
- data/lib/ibex/lsp/navigation_handlers.rb +70 -0
- data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
- data/lib/ibex/lsp/position_codec.rb +113 -0
- data/lib/ibex/lsp/protocol_error.rb +33 -0
- data/lib/ibex/lsp/request_handlers.rb +46 -0
- data/lib/ibex/lsp/request_support.rb +94 -0
- data/lib/ibex/lsp/server.rb +148 -0
- data/lib/ibex/lsp/symbol_index.rb +241 -0
- data/lib/ibex/lsp/symbol_index_builder.rb +277 -0
- data/lib/ibex/lsp/symbol_index_precedence_references.rb +44 -0
- data/lib/ibex/lsp/symbol_index_source_queries.rb +61 -0
- data/lib/ibex/lsp/symbol_occurrence.rb +23 -0
- data/lib/ibex/lsp/transport.rb +128 -0
- data/lib/ibex/lsp/workspace.rb +128 -0
- data/lib/ibex/lsp/workspace_analyzer.rb +199 -0
- data/lib/ibex/lsp.rb +33 -0
- data/lib/ibex/messages/en.yml +28 -0
- data/lib/ibex/messages/ja.yml +28 -0
- data/lib/ibex/messages.rb +68 -0
- data/lib/ibex/metrics.rb +175 -0
- data/lib/ibex/normalize/declarations.rb +142 -7
- data/lib/ibex/normalize/diagnostics.rb +94 -24
- data/lib/ibex/normalize/expander.rb +64 -59
- data/lib/ibex/normalize/expression.rb +63 -40
- data/lib/ibex/normalize/grammar_builder.rb +26 -0
- data/lib/ibex/normalize/inline_expansion.rb +465 -0
- data/lib/ibex/normalize/inline_validation.rb +174 -0
- data/lib/ibex/normalize/lexer.rb +131 -0
- data/lib/ibex/normalize/named_references.rb +60 -0
- data/lib/ibex/normalize/nodes.rb +46 -0
- data/lib/ibex/normalize/parameter_ebnf_lowering.rb +70 -0
- data/lib/ibex/normalize/parameter_lowering.rb +143 -0
- data/lib/ibex/normalize/parameter_substitution.rb +125 -0
- data/lib/ibex/normalize/parameter_validation.rb +140 -0
- data/lib/ibex/normalize/parameters.rb +226 -0
- data/lib/ibex/normalize/parser_configuration.rb +70 -0
- data/lib/ibex/normalize/recovery_declarations.rb +84 -0
- data/lib/ibex/normalize.rb +172 -17
- data/lib/ibex/racc_migration/checker.rb +122 -0
- data/lib/ibex/racc_migration/harness.rb +177 -0
- data/lib/ibex/racc_migration/report.rb +97 -0
- data/lib/ibex/racc_migration.rb +12 -0
- data/lib/ibex/rake_task.rb +116 -0
- data/lib/ibex/samples.rb +216 -0
- data/lib/ibex/table_artifact/builder.rb +266 -0
- data/lib/ibex/table_artifact/cst_projection.rb +70 -0
- data/lib/ibex/table_artifact/document.rb +39 -0
- data/lib/ibex/table_artifact/executor.rb +187 -0
- data/lib/ibex/table_artifact/serializer.rb +57 -0
- data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
- data/lib/ibex/table_artifact/validator/support.rb +86 -0
- data/lib/ibex/table_artifact/validator/tables.rb +238 -0
- data/lib/ibex/table_artifact/validator.rb +253 -0
- data/lib/ibex/table_artifact.rb +88 -0
- data/lib/ibex/table_simulation/result.rb +55 -0
- data/lib/ibex/table_simulation/simulator.rb +253 -0
- data/lib/ibex/table_simulation/step.rb +62 -0
- data/lib/ibex/table_simulation/text.rb +31 -0
- data/lib/ibex/table_simulation.rb +13 -0
- data/lib/ibex/tables.rb +22 -69
- data/lib/ibex/verifiable_generation_bundle.rb +86 -0
- data/lib/ibex/verification_report/builder.rb +159 -0
- data/lib/ibex/verification_report/canonical_ir.rb +123 -0
- data/lib/ibex/verification_report/logical_path.rb +68 -0
- data/lib/ibex/verification_report/validator.rb +329 -0
- data/lib/ibex/verification_report.rb +69 -0
- data/lib/ibex/verify/action_correspondence.rb +138 -0
- data/lib/ibex/verify/language_witness.rb +295 -0
- data/lib/ibex/verify/reference_collection.rb +190 -0
- data/lib/ibex/verify/result.rb +73 -0
- data/lib/ibex/verify/verifier.rb +598 -0
- data/lib/ibex/verify.rb +15 -0
- data/lib/ibex/version.rb +1 -1
- data/lib/ibex/watch/runner.rb +181 -0
- data/lib/ibex/watch/source_snapshot.rb +98 -0
- data/lib/ibex/watch.rb +11 -0
- data/lib/ibex.rb +35 -1
- data/schema/automaton-ir-definitions.schema.json +401 -0
- data/schema/automaton-ir.schema.json +65 -0
- data/schema/benchmark-v1.schema.json +212 -0
- data/schema/benchmark-v2.schema.json +61 -0
- data/schema/bison-import-v1.schema.json +106 -0
- data/schema/conflict-explanation-review-v1.schema.json +196 -0
- data/schema/conflict-explanation-study-v1.schema.json +528 -0
- data/schema/construction-profile-v1.schema.json +779 -0
- data/schema/cst-v1.json +170 -0
- data/schema/diff-v1.schema.json +41 -0
- data/schema/direct-ielr-decision-v1.schema.json +200 -0
- data/schema/equiv-v1.schema.json +64 -0
- data/schema/error-ux-review-v1.schema.json +609 -0
- data/schema/error-ux-round2-review-v1.schema.json +191 -0
- data/schema/error-ux-round2-v1.schema.json +519 -0
- data/schema/error-ux-v1.schema.json +258 -0
- data/schema/explain-v1.schema.json +495 -0
- data/schema/fix-v1.schema.json +64 -0
- data/schema/fix-v2.schema.json +66 -0
- data/schema/fix-v3.schema.json +101 -0
- data/schema/frontend-diagnostics-v1.schema.json +154 -0
- data/schema/fuzz-regression-v1.schema.json +79 -0
- data/schema/fuzz-v1.schema.json +114 -0
- data/schema/generation-manifest-v1.schema.json +115 -0
- data/schema/grammar-ir-extensions.schema.json +734 -0
- data/schema/grammar-ir-foundation.schema.json +426 -0
- data/schema/grammar-ir.schema.json +271 -0
- data/schema/ielr-benchmark-v1.schema.json +85 -0
- data/schema/lexer-ir-v1.schema.json +215 -0
- data/schema/lexer-profile-v1.schema.json +491 -0
- data/schema/metrics-v1.schema.json +60 -0
- data/schema/migration-check-v1.schema.json +60 -0
- data/schema/performance-comparison-v1.schema.json +395 -0
- data/schema/public-performance-comparison-v1.schema.json +506 -0
- data/schema/public-performance-profile-v1.schema.json +360 -0
- data/schema/reduce-v1.schema.json +22 -0
- data/schema/reduce-v2.schema.json +63 -0
- data/schema/runtime-coverage-v1.schema.json +86 -0
- data/schema/runtime-event-v1.schema.json +308 -0
- data/schema/table-artifact-v1.schema.json +377 -0
- data/schema/table-simulation-v1.schema.json +70 -0
- data/schema/verification-report-v1.schema.json +222 -0
- data/schema/verify-v1.schema.json +42 -0
- data/sig/ibex/analysis/digraph.rbs +19 -0
- data/sig/ibex/artifact_set.rbs +37 -0
- data/sig/ibex/bison_import/importer.rbs +140 -0
- data/sig/ibex/bison_import/tokenizer.rbs +91 -0
- data/sig/ibex/bison_import.rbs +95 -0
- data/sig/ibex/bounded_subprocess.rbs +76 -0
- data/sig/ibex/cli/ambiguity.rbs +28 -0
- data/sig/ibex/cli/analysis.rbs +43 -0
- data/sig/ibex/cli/bison_import.rbs +32 -0
- data/sig/ibex/cli/config.rbs +35 -0
- data/sig/ibex/cli/counterexample_options.rbs +2 -0
- data/sig/ibex/cli/coverage.rbs +53 -0
- data/sig/ibex/cli/debug.rbs +28 -0
- data/sig/ibex/cli/diagnostics.rbs +51 -0
- data/sig/ibex/cli/documentation.rbs +29 -0
- data/sig/ibex/cli/equiv.rbs +49 -0
- data/sig/ibex/cli/error_messages.rbs +63 -0
- data/sig/ibex/cli/explain.rbs +31 -0
- data/sig/ibex/cli/fix.rbs +53 -0
- data/sig/ibex/cli/formatting.rbs +107 -0
- data/sig/ibex/cli/fuzz.rbs +47 -0
- data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
- data/sig/ibex/cli/generation_artifacts.rbs +69 -0
- data/sig/ibex/cli/generation_error_messages.rbs +19 -0
- data/sig/ibex/cli/grammar_tests.rbs +48 -0
- data/sig/ibex/cli/ir_tools.rbs +39 -0
- data/sig/ibex/cli/lsp.rbs +14 -0
- data/sig/ibex/cli/outputs.rbs +26 -3
- data/sig/ibex/cli/racc_migration.rbs +30 -0
- data/sig/ibex/cli/reduce.rbs +60 -0
- data/sig/ibex/cli/reduce_reporting.rbs +27 -0
- data/sig/ibex/cli/samples.rbs +38 -0
- data/sig/ibex/cli/verify.rbs +28 -0
- data/sig/ibex/cli/watch.rbs +43 -0
- data/sig/ibex/cli.rbs +182 -9
- data/sig/ibex/codegen/action_locations.rbs +45 -0
- data/sig/ibex/codegen/action_method_source.rbs +65 -0
- data/sig/ibex/codegen/action_source.rbs +50 -0
- data/sig/ibex/codegen/ambiguity.rbs +60 -0
- data/sig/ibex/codegen/cst_metadata.rbs +59 -0
- data/sig/ibex/codegen/documentation.rbs +50 -0
- data/sig/ibex/codegen/explain.rbs +105 -0
- data/sig/ibex/codegen/generated_action_abi.rbs +105 -0
- data/sig/ibex/codegen/html.rbs +18 -2
- data/sig/ibex/codegen/mermaid.rbs +16 -0
- data/sig/ibex/codegen/railroad.rbs +82 -0
- data/sig/ibex/codegen/railroad_documentation.rbs +31 -0
- data/sig/ibex/codegen/rbs.rbs +86 -4
- data/sig/ibex/codegen/report.rbs +16 -8
- data/sig/ibex/codegen/ruby.rbs +105 -28
- data/sig/ibex/codegen/ruby_actions.rbs +54 -0
- data/sig/ibex/codegen/ruby_ast.rbs +34 -0
- data/sig/ibex/codegen/ruby_error_messages.rbs +16 -0
- data/sig/ibex/codegen/ruby_lexer.rbs +25 -0
- data/sig/ibex/codegen/ruby_syntax.rbs +27 -0
- data/sig/ibex/codegen/ruby_table_metadata.rbs +26 -0
- data/sig/ibex/codegen/ruby_value_printers.rbs +28 -0
- data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
- data/sig/ibex/configuration/explanation.rbs +195 -0
- data/sig/ibex/configuration/inspector.rbs +53 -0
- data/sig/ibex/configuration.rbs +242 -0
- data/sig/ibex/coverage/collector.rbs +78 -0
- data/sig/ibex/coverage/event_stream.rbs +44 -0
- data/sig/ibex/coverage/report.rbs +102 -0
- data/sig/ibex/coverage/runtime_event_validator.rbs +70 -0
- data/sig/ibex/coverage.rbs +7 -0
- data/sig/ibex/delta_reducer.rbs +38 -0
- data/sig/ibex/diff.rbs +47 -0
- data/sig/ibex/equiv/machine.rbs +54 -0
- data/sig/ibex/equiv.rbs +129 -0
- data/sig/ibex/error_messages/parser.rbs +58 -0
- data/sig/ibex/error_messages/parser_v2.rbs +67 -0
- data/sig/ibex/error_messages/renderer.rbs +23 -0
- data/sig/ibex/error_messages/sentence_search.rbs +80 -0
- data/sig/ibex/error_messages/update.rbs +43 -0
- data/sig/ibex/error_messages.rbs +85 -0
- data/sig/ibex/fix.rbs +138 -0
- data/sig/ibex/frontend/ast.rbs +237 -22
- data/sig/ibex/frontend/bootstrap_parser.rbs +13 -0
- data/sig/ibex/frontend/diagnostic.rbs +53 -0
- data/sig/ibex/frontend/diagnostic_recovery.rbs +98 -0
- data/sig/ibex/frontend/dsl.rbs +33 -4
- data/sig/ibex/frontend/formatter.rbs +143 -0
- data/sig/ibex/frontend/generated_parser.rbs +228 -68
- data/sig/ibex/frontend/generated_parser_base.rbs +65 -12
- data/sig/ibex/frontend/generated_parser_includes.rbs +23 -0
- data/sig/ibex/frontend/generated_parser_metadata.rbs +23 -0
- data/sig/ibex/frontend/generated_parser_parameters.rbs +24 -0
- data/sig/ibex/frontend/generation.rbs +6 -0
- data/sig/ibex/frontend/lexer.rbs +49 -2
- data/sig/ibex/frontend/lexer_recovery.rbs +25 -0
- data/sig/ibex/frontend/parser/declarations.rbs +57 -0
- data/sig/ibex/frontend/parser/parameters.rbs +28 -0
- data/sig/ibex/frontend/parser/rules.rbs +3 -0
- data/sig/ibex/frontend/parser.rbs +66 -0
- data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
- data/sig/ibex/frontend/regenerator.rbs +11 -0
- data/sig/ibex/frontend/resolution.rbs +34 -0
- data/sig/ibex/frontend/resolver.rbs +91 -0
- data/sig/ibex/frontend/rule_documentation.rbs +42 -0
- data/sig/ibex/frontend/source_cursor.rbs +38 -5
- data/sig/ibex/frontend/source_document.rbs +119 -0
- data/sig/ibex/frontend/source_loader.rbs +66 -0
- data/sig/ibex/frontend/source_span.rbs +56 -0
- data/sig/ibex/frontend/token_adapter/declaration_document_state.rbs +21 -0
- data/sig/ibex/frontend/token_adapter/declaration_lexer_state.rbs +27 -0
- data/sig/ibex/frontend/token_adapter/declaration_state.rbs +83 -3
- data/sig/ibex/frontend/token_adapter/rule_state.rbs +20 -0
- data/sig/ibex/frontend/token_adapter.rbs +11 -2
- data/sig/ibex/frontend.rbs +1 -1
- data/sig/ibex/fuzz.rbs +71 -0
- data/sig/ibex/generation_input.rbs +37 -0
- data/sig/ibex/generation_manifest.rbs +70 -0
- data/sig/ibex/generation_transaction.rbs +82 -0
- data/sig/ibex/generation_transaction_recovery.rbs +36 -0
- data/sig/ibex/generation_transaction_validation.rbs +65 -0
- data/sig/ibex/grammar_tests.rbs +93 -0
- data/sig/ibex/ir/automaton_ir.rbs +35 -10
- data/sig/ibex/ir/grammar_ir.rbs +96 -22
- data/sig/ibex/ir/lexer_ir.rbs +57 -0
- data/sig/ibex/ir/parser_contract.rbs +69 -0
- data/sig/ibex/ir/serialize.rbs +75 -23
- data/sig/ibex/ir/validator/automaton.rbs +112 -0
- data/sig/ibex/ir/validator/base.rbs +69 -0
- data/sig/ibex/ir/validator/grammar.rbs +195 -0
- data/sig/ibex/ir/validator/lexer.rbs +37 -0
- data/sig/ibex/ir/validator.rbs +16 -0
- data/sig/ibex/ir.rbs +45 -5
- data/sig/ibex/lalr/build_metrics.rbs +60 -0
- data/sig/ibex/lalr/builder.rbs +150 -19
- data/sig/ibex/lalr/conflict_search.rbs +12 -5
- data/sig/ibex/lalr/counterexample.rbs +20 -14
- data/sig/ibex/lalr/direct_lookaheads.rbs +93 -0
- data/sig/ibex/lalr/goto_follows.rbs +89 -0
- data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
- data/sig/ibex/lalr/ielr/bits.rbs +14 -0
- data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
- data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
- data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
- data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
- data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
- data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
- data/sig/ibex/lalr/ielr_partition.rbs +71 -0
- data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
- data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
- data/sig/ibex/lalr/lr0_collection.rbs +50 -0
- data/sig/ibex/lalr/on_error_reductions.rbs +22 -0
- data/sig/ibex/lalr/unreachable_states.rbs +25 -0
- data/sig/ibex/lalr.rbs +17 -1
- data/sig/ibex/location.rbs +67 -0
- data/sig/ibex/lsp/document_handlers.rbs +24 -0
- data/sig/ibex/lsp/document_store.rbs +94 -0
- data/sig/ibex/lsp/document_store_diagnostics.rbs +20 -0
- data/sig/ibex/lsp/document_store_validation.rbs +26 -0
- data/sig/ibex/lsp/initialization_handlers.rbs +30 -0
- data/sig/ibex/lsp/navigation_handlers.rbs +33 -0
- data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
- data/sig/ibex/lsp/position_codec.rbs +44 -0
- data/sig/ibex/lsp/protocol_error.rbs +32 -0
- data/sig/ibex/lsp/request_handlers.rbs +26 -0
- data/sig/ibex/lsp/request_support.rbs +40 -0
- data/sig/ibex/lsp/server.rbs +55 -0
- data/sig/ibex/lsp/symbol_index.rbs +77 -0
- data/sig/ibex/lsp/symbol_index_builder.rbs +88 -0
- data/sig/ibex/lsp/symbol_index_precedence_references.rbs +18 -0
- data/sig/ibex/lsp/symbol_index_source_queries.rbs +26 -0
- data/sig/ibex/lsp/symbol_occurrence.rbs +31 -0
- data/sig/ibex/lsp/transport.rbs +47 -0
- data/sig/ibex/lsp/workspace.rbs +42 -0
- data/sig/ibex/lsp/workspace_analyzer.rbs +69 -0
- data/sig/ibex/lsp.rbs +7 -0
- data/sig/ibex/messages.rbs +26 -0
- data/sig/ibex/metrics.rbs +50 -0
- data/sig/ibex/normalize/declarations.rbs +31 -0
- data/sig/ibex/normalize/diagnostics.rbs +13 -4
- data/sig/ibex/normalize/expander.rbs +22 -16
- data/sig/ibex/normalize/expression.rbs +11 -9
- data/sig/ibex/normalize/grammar_builder.rbs +11 -0
- data/sig/ibex/normalize/inline_expansion.rbs +129 -0
- data/sig/ibex/normalize/inline_validation.rbs +40 -0
- data/sig/ibex/normalize/lexer.rbs +37 -0
- data/sig/ibex/normalize/named_references.rbs +20 -0
- data/sig/ibex/normalize/nodes.rbs +14 -0
- data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +33 -0
- data/sig/ibex/normalize/parameter_lowering.rbs +35 -0
- data/sig/ibex/normalize/parameter_substitution.rbs +42 -0
- data/sig/ibex/normalize/parameter_validation.rbs +44 -0
- data/sig/ibex/normalize/parameters.rbs +51 -0
- data/sig/ibex/normalize/parser_configuration.rbs +23 -0
- data/sig/ibex/normalize/recovery_declarations.rbs +24 -0
- data/sig/ibex/normalize.rbs +129 -18
- data/sig/ibex/racc_migration/checker.rbs +36 -0
- data/sig/ibex/racc_migration/harness.rbs +16 -0
- data/sig/ibex/racc_migration/report.rbs +55 -0
- data/sig/ibex/racc_migration.rbs +8 -0
- data/sig/ibex/rake_task.rbs +51 -0
- data/sig/ibex/samples.rbs +60 -0
- data/sig/ibex/table_artifact/builder.rbs +93 -0
- data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
- data/sig/ibex/table_artifact/document.rbs +27 -0
- data/sig/ibex/table_artifact/executor.rbs +66 -0
- data/sig/ibex/table_artifact/serializer.rbs +25 -0
- data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
- data/sig/ibex/table_artifact/validator/support.rbs +46 -0
- data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
- data/sig/ibex/table_artifact/validator.rbs +66 -0
- data/sig/ibex/table_artifact.rbs +32 -0
- data/sig/ibex/table_simulation/result.rbs +36 -0
- data/sig/ibex/table_simulation/simulator.rbs +98 -0
- data/sig/ibex/table_simulation/step.rbs +42 -0
- data/sig/ibex/table_simulation/text.rbs +14 -0
- data/sig/ibex/table_simulation.rbs +7 -0
- data/sig/ibex/tables.rbs +10 -35
- data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
- data/sig/ibex/verification_report/builder.rbs +53 -0
- data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
- data/sig/ibex/verification_report/logical_path.rbs +34 -0
- data/sig/ibex/verification_report/validator.rbs +114 -0
- data/sig/ibex/verification_report.rbs +44 -0
- data/sig/ibex/verify/action_correspondence.rbs +50 -0
- data/sig/ibex/verify/language_witness.rbs +112 -0
- data/sig/ibex/verify/reference_collection.rbs +63 -0
- data/sig/ibex/verify/result.rbs +52 -0
- data/sig/ibex/verify/verifier.rbs +170 -0
- data/sig/ibex/verify.rbs +6 -0
- data/sig/ibex/watch/runner.rbs +58 -0
- data/sig/ibex/watch/source_snapshot.rbs +46 -0
- data/sig/ibex/watch.rbs +7 -0
- data/sig/ibex.rbs +2 -0
- metadata +524 -19
- data/.rubocop.yml +0 -43
- data/CHANGELOG.md +0 -30
- data/Rakefile +0 -25
- data/Steepfile +0 -10
- data/docs/compat-notes.md +0 -37
- data/docs/lexer-coverage.md +0 -14
- data/docs/phase10-extensions.md +0 -27
- data/gemfiles/Gemfile +0 -7
- data/gemfiles/Gemfile.lock +0 -98
- data/lib/ibex/frontend/grammar.y +0 -156
- data/lib/ibex/runtime/parser.rb +0 -360
- data/lib/ibex/runtime.rb +0 -8
- data/sig/ibex/runtime/parser.rbs +0 -167
- data/sig/ibex/runtime.rbs +0 -6
data/sig/ibex/ir.rbs
CHANGED
|
@@ -2,15 +2,53 @@
|
|
|
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 }
|
|
8
10
|
|
|
9
11
|
type named_ref = { name: String, index: Integer }
|
|
10
12
|
|
|
13
|
+
type byte_span = { start: Integer, end: Integer }
|
|
14
|
+
|
|
15
|
+
type source_provenance = { file: String?, root: String?, byte_span: byte_span? }
|
|
16
|
+
|
|
17
|
+
type parser_parameter = { name: String, semantic_type: String? }
|
|
18
|
+
|
|
19
|
+
type value_printer = { symbol: String, code: String, loc: location }
|
|
20
|
+
|
|
21
|
+
type recovery_policy = { sync_tokens: Array[String], on_error_reduce: Array[Array[String]] }
|
|
22
|
+
|
|
23
|
+
type grammar_test = { expectation: :accept | :reject, source: String, loc: location }
|
|
24
|
+
|
|
25
|
+
type node_annotation = { name: String, fields: Array[String], loc: location }
|
|
26
|
+
|
|
27
|
+
type lexer_warning = { type: :redos, rule: Integer, loc: location }
|
|
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
|
+
|
|
33
|
+
type parameter_expansion = { rule: String, arguments: Array[String] }
|
|
34
|
+
|
|
35
|
+
type inline_expansion = { rule: String }
|
|
36
|
+
|
|
37
|
+
type production_expansion = { parameter: parameter_expansion?, inline: inline_expansion?, include_chain: Array[source_provenance] }
|
|
38
|
+
|
|
39
|
+
type action_fragment = { kind: :rule | :inline, source: source_provenance? }
|
|
40
|
+
|
|
41
|
+
type action_composition_step = { kind: :rule | :inline, rule: String?, code: String?, loc: location, named_refs: Array[named_ref], context_length: Integer, inputs: Array[Integer], stack_inputs: Array[Integer], lookahead: Integer?, result_var: bool, result_type: String? }
|
|
42
|
+
|
|
43
|
+
type action_composition_plan = { version: Integer, physical: Integer, steps: Array[action_composition_step] }
|
|
44
|
+
|
|
45
|
+
type action_composition = { strategy: String, fragments: Array[action_fragment], ?plan: action_composition_plan }
|
|
46
|
+
|
|
11
47
|
type user_code_chunks = Hash[String, Array[UserCodeChunk]]
|
|
12
48
|
|
|
13
|
-
type grammar_options = { result_var: bool, omit_action_call: bool }
|
|
49
|
+
type grammar_options = { result_var: bool, omit_action_call: bool, ?cst: bool }
|
|
50
|
+
|
|
51
|
+
type grammar_mode = :default | :extended
|
|
14
52
|
|
|
15
53
|
type grammar_warning = { type: Symbol, ?symbol: String, ?production: Integer, ?original: Integer, loc: location? }
|
|
16
54
|
|
|
@@ -28,15 +66,17 @@ module Ibex
|
|
|
28
66
|
|
|
29
67
|
type conflict_resolution = { by: Symbol, chose: Symbol | Integer, ?associativity: Symbol }
|
|
30
68
|
|
|
31
|
-
type shift_reduce_conflict = { type: :shift_reduce, symbol: String, shift_to: Integer, reduce: Integer, resolution: conflict_resolution }
|
|
69
|
+
type shift_reduce_conflict = { type: :shift_reduce, symbol: String, shift_to: Integer, reduce: Integer, resolution: conflict_resolution, ?midrule_origins: Array[location], ?entries: Array[String], ?composite: bool }
|
|
32
70
|
|
|
33
|
-
type reduce_reduce_conflict = { type: :reduce_reduce, symbol: String, reductions: Array[Integer], resolution: conflict_resolution }
|
|
71
|
+
type reduce_reduce_conflict = { type: :reduce_reduce, symbol: String, reductions: Array[Integer], resolution: conflict_resolution, ?midrule_origins: Array[location], ?entries: Array[String], ?composite: bool }
|
|
34
72
|
|
|
35
73
|
type conflict = shift_reduce_conflict | reduce_reduce_conflict
|
|
36
74
|
|
|
37
|
-
type conflict_summary = { sr: Integer, resolved_sr: Integer, rr: Integer, expected_sr: Integer, expectation_met: bool }
|
|
75
|
+
type conflict_summary = { sr: Integer, resolved_sr: Integer, rr: Integer, expected_sr: Integer, expectation_met: bool, ?expected_rr: Integer, ?rr_expectation_met: bool }
|
|
76
|
+
|
|
77
|
+
type derivation_node = { symbol: String, ?token: String, ?production: Integer, ?children: Array[derivation_node] }
|
|
38
78
|
|
|
39
|
-
type interpretation =
|
|
79
|
+
type interpretation = { kind: Symbol, tree: derivation_node?, ?state: Integer, ?production: Integer }
|
|
40
80
|
|
|
41
81
|
type counterexample = { state: Integer, type: Symbol, symbol_path: Array[String], sentence: Array[String], lookahead_index: Integer, unifying: bool, interpretations: Array[interpretation] }
|
|
42
82
|
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/build_metrics.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
# Optional measurements are kept explicit for schema stability.
|
|
6
|
+
# rubocop:disable Metrics/ParameterLists
|
|
7
|
+
# Immutable structural measurements from one automaton build. These counts
|
|
8
|
+
# are intended for diagnostics and benchmarks, not parser behavior.
|
|
9
|
+
class BuildMetrics
|
|
10
|
+
attr_reader construction_states: Integer
|
|
11
|
+
|
|
12
|
+
attr_reader canonical_states: Integer?
|
|
13
|
+
|
|
14
|
+
attr_reader final_states: Integer
|
|
15
|
+
|
|
16
|
+
attr_reader strategy: Symbol
|
|
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
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
data/sig/ibex/lalr/builder.rbs
CHANGED
|
@@ -2,30 +2,100 @@
|
|
|
2
2
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module LALR
|
|
5
|
-
# Builds
|
|
5
|
+
# Builds deterministic SLR, direct LALR(1), or canonical LR(1) automata.
|
|
6
|
+
# rubocop:disable Metrics/ClassLength -- collection strategies share one action/conflict construction path.
|
|
6
7
|
class Builder
|
|
7
8
|
AUGMENTED_PRODUCTION: Integer
|
|
8
9
|
|
|
9
10
|
ALGORITHMS: Array[Symbol]
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
LALR_STRATEGIES: Array[Symbol]
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
IELR_STRATEGIES: Array[Symbol]
|
|
14
15
|
|
|
15
|
-
@
|
|
16
|
+
@grammar: IR::Grammar
|
|
16
17
|
|
|
17
18
|
@algorithm: Symbol
|
|
18
19
|
|
|
19
|
-
@
|
|
20
|
+
@lalr_strategy: Symbol
|
|
21
|
+
|
|
22
|
+
@ielr_strategy: Symbol
|
|
23
|
+
|
|
24
|
+
@sets: Analysis::Sets
|
|
25
|
+
|
|
26
|
+
@productions_by_lhs: Hash[Integer, Array[IR::Production]]
|
|
27
|
+
|
|
28
|
+
@resolver: ConflictResolver
|
|
29
|
+
|
|
30
|
+
@metrics: BuildMetrics?
|
|
31
|
+
|
|
32
|
+
@start_names: Array[String]
|
|
33
|
+
|
|
34
|
+
@entry_isolation: bool
|
|
35
|
+
|
|
36
|
+
@attribute_entries: bool
|
|
20
37
|
|
|
21
|
-
|
|
22
|
-
|
|
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 ]?
|
|
47
|
+
|
|
48
|
+
attr_reader metrics: BuildMetrics?
|
|
49
|
+
|
|
50
|
+
# @rbs (IR::Grammar grammar, ?algorithm: Symbol | String, ?lalr_strategy: Symbol | String,
|
|
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
|
|
23
55
|
|
|
24
56
|
# @rbs () -> IR::Automaton
|
|
25
57
|
def build: () -> IR::Automaton
|
|
26
58
|
|
|
27
59
|
private
|
|
28
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
|
+
|
|
65
|
+
# @rbs (Array[IR::AutomatonState] states) -> IR::conflict_summary
|
|
66
|
+
def conflict_summary: (Array[IR::AutomatonState] states) -> IR::conflict_summary
|
|
67
|
+
|
|
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
|
|
95
|
+
|
|
96
|
+
# @rbs () -> String
|
|
97
|
+
def algorithm_name: () -> String
|
|
98
|
+
|
|
29
99
|
# @rbs () -> [Array[item_set], transitions]
|
|
30
100
|
def canonical_collection: () -> [ Array[item_set], transitions ]
|
|
31
101
|
|
|
@@ -35,21 +105,21 @@ module Ibex
|
|
|
35
105
|
# @rbs (Array[Integer] suffix, Integer inherited) -> Array[Integer]
|
|
36
106
|
def suffix_lookaheads: (Array[Integer] suffix, Integer inherited) -> Array[Integer]
|
|
37
107
|
|
|
108
|
+
# @rbs (Integer production_id, Integer dot, Integer inherited) -> Array[Integer]
|
|
109
|
+
def canonical_suffix_lookaheads: (Integer production_id, Integer dot, Integer inherited) -> Array[Integer]
|
|
110
|
+
|
|
111
|
+
# @rbs (Integer production_id, Integer dot, Integer lookahead) -> lr_item
|
|
112
|
+
def canonical_item: (Integer production_id, Integer dot, Integer lookahead) -> lr_item
|
|
113
|
+
|
|
38
114
|
# @rbs (item_set items, Array[lr_item] queue, lr_item item) -> void
|
|
39
115
|
def enqueue_item: (item_set items, Array[lr_item] queue, lr_item item) -> void
|
|
40
116
|
|
|
41
|
-
# @rbs (item_set items) ->
|
|
42
|
-
def
|
|
43
|
-
|
|
44
|
-
# @rbs (item_set items, Integer symbol_id) -> item_set
|
|
45
|
-
def go_to: (item_set items, Integer symbol_id) -> item_set
|
|
117
|
+
# @rbs (item_set items) -> Hash[Integer, item_set]
|
|
118
|
+
def shifted_kernels: (item_set items) -> Hash[Integer, item_set]
|
|
46
119
|
|
|
47
120
|
# @rbs (Array[item_set] states, transitions transitions) -> [Array[packed_items], transitions]
|
|
48
121
|
def merge_lalr: (Array[item_set] states, transitions transitions) -> [ Array[packed_items], transitions ]
|
|
49
122
|
|
|
50
|
-
# @rbs (Array[item_set] canonical_states, transitions canonical_transitions) -> [Array[packed_items], transitions]
|
|
51
|
-
def automaton_items: (Array[item_set] canonical_states, transitions canonical_transitions) -> [ Array[packed_items], transitions ]
|
|
52
|
-
|
|
53
123
|
# @rbs (Array[item_set] states) -> Array[packed_items]
|
|
54
124
|
def pack_canonical_items: (Array[item_set] states) -> Array[packed_items]
|
|
55
125
|
|
|
@@ -65,6 +135,11 @@ module Ibex
|
|
|
65
135
|
# @rbs (Integer state_id, Array[IR::AutomatonItem] items, Hash[Integer, Integer] transitions) -> IR::AutomatonState
|
|
66
136
|
def build_state: (Integer state_id, Array[IR::AutomatonItem] items, Hash[Integer, Integer] transitions) -> IR::AutomatonState
|
|
67
137
|
|
|
138
|
+
# Conflict hashes are produced locally immediately before this boundary.
|
|
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
|
|
142
|
+
|
|
68
143
|
# @rbs (Array[IR::AutomatonItem] items, Hash[Integer, Array[IR::parser_action]] candidates) -> void
|
|
69
144
|
def add_completed_actions: (Array[IR::AutomatonItem] items, Hash[Integer, Array[IR::parser_action]] candidates) -> void
|
|
70
145
|
|
|
@@ -75,11 +150,67 @@ module Ibex
|
|
|
75
150
|
# @rbs (Integer production_id) -> Array[Integer]
|
|
76
151
|
def rhs_for: (Integer production_id) -> Array[Integer]
|
|
77
152
|
|
|
78
|
-
# @rbs (
|
|
79
|
-
def
|
|
153
|
+
# @rbs () -> [Integer, Integer, Integer]
|
|
154
|
+
def canonical_key_radices: () -> [ Integer, Integer, Integer ]
|
|
155
|
+
|
|
156
|
+
# @rbs (item_set items) -> Array[Integer]
|
|
157
|
+
def core_key: (item_set items) -> Array[Integer]
|
|
158
|
+
|
|
159
|
+
# @rbs (item_set items) -> Array[Integer]
|
|
160
|
+
def item_key: (item_set items) -> Array[Integer]
|
|
161
|
+
|
|
162
|
+
# @rbs (String name) -> Integer
|
|
163
|
+
def augmented_production: (String name) -> Integer
|
|
164
|
+
|
|
165
|
+
# @rbs (Integer production_id) -> String
|
|
166
|
+
def start_name_for_augmented: (Integer production_id) -> String
|
|
167
|
+
|
|
168
|
+
# @rbs (Array[packed_items] items) -> Hash[String, Integer]
|
|
169
|
+
def entry_states_for: (Array[packed_items] items) -> Hash[String, Integer]
|
|
170
|
+
|
|
171
|
+
# @rbs () -> IR::Automaton
|
|
172
|
+
def build_isolated_automaton: () -> IR::Automaton
|
|
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
|
+
|
|
187
|
+
# @rbs (String name) -> [String, IR::Automaton, BuildMetrics]
|
|
188
|
+
def isolated_entry: (String name) -> [ String, IR::Automaton, BuildMetrics ]
|
|
189
|
+
|
|
190
|
+
# @rbs (IR::AutomatonState state, Integer offset, String entry) -> IR::AutomatonState
|
|
191
|
+
def offset_state: (IR::AutomatonState state, Integer offset, String entry) -> IR::AutomatonState
|
|
192
|
+
|
|
193
|
+
# @rbs (IR::parser_action action, Integer offset) -> IR::parser_action
|
|
194
|
+
def offset_action: (IR::parser_action action, Integer offset) -> IR::parser_action
|
|
195
|
+
|
|
196
|
+
# @rbs (IR::parser_action? action, Integer offset) -> IR::parser_action?
|
|
197
|
+
def offset_default_action: (IR::parser_action? action, Integer offset) -> IR::parser_action?
|
|
198
|
+
|
|
199
|
+
# @rbs (IR::conflict conflict, Integer offset, String entry) -> IR::conflict
|
|
200
|
+
def offset_conflict: (IR::conflict conflict, Integer offset, String entry) -> IR::conflict
|
|
201
|
+
|
|
202
|
+
# @rbs (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) ->
|
|
203
|
+
# Array[IR::AutomatonState]
|
|
204
|
+
def attribute_entry_conflicts: (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[IR::AutomatonState]
|
|
205
|
+
|
|
206
|
+
# @rbs (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[Array[String]]
|
|
207
|
+
def entry_reachability: (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[Array[String]]
|
|
208
|
+
|
|
209
|
+
# @rbs () -> Set[conflict_fingerprint]
|
|
210
|
+
def isolated_conflict_fingerprints: () -> Set[conflict_fingerprint]
|
|
80
211
|
|
|
81
|
-
# @rbs (
|
|
82
|
-
def
|
|
212
|
+
# @rbs (IR::conflict conflict) -> conflict_fingerprint
|
|
213
|
+
def conflict_fingerprint: (IR::conflict conflict) -> conflict_fingerprint
|
|
83
214
|
end
|
|
84
215
|
end
|
|
85
216
|
end
|
|
@@ -20,6 +20,8 @@ module Ibex
|
|
|
20
20
|
| ({ ?states: Array[Integer], ?nodes: Array[derivation_node] }) -> instance
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
+
@initial_state: Integer
|
|
24
|
+
|
|
23
25
|
@input_tokens: Array[Integer]
|
|
24
26
|
|
|
25
27
|
@explored: Integer
|
|
@@ -38,15 +40,23 @@ module Ibex
|
|
|
38
40
|
|
|
39
41
|
@automaton: IR::Automaton
|
|
40
42
|
|
|
43
|
+
attr_reader explored: Integer
|
|
44
|
+
|
|
41
45
|
# @rbs (IR::Automaton automaton, IR::AutomatonState state, IR::conflict conflict,
|
|
42
46
|
# ?max_tokens: Integer, ?max_configurations: Integer) -> void
|
|
43
47
|
def initialize: (IR::Automaton automaton, IR::AutomatonState state, IR::conflict conflict, ?max_tokens: Integer, ?max_configurations: Integer) -> void
|
|
44
48
|
|
|
45
|
-
# @rbs () ->
|
|
46
|
-
def call: () ->
|
|
49
|
+
# @rbs () -> search_outcome
|
|
50
|
+
def call: () -> search_outcome
|
|
51
|
+
|
|
52
|
+
# @rbs () -> bool
|
|
53
|
+
def exhausted?: () -> bool
|
|
47
54
|
|
|
48
55
|
private
|
|
49
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
|
+
|
|
50
60
|
# @rbs (Configuration current) -> Array[Configuration]
|
|
51
61
|
def conflict_configurations: (Configuration current) -> Array[Configuration]
|
|
52
62
|
|
|
@@ -123,9 +133,6 @@ module Ibex
|
|
|
123
133
|
|
|
124
134
|
# @rbs () -> Integer
|
|
125
135
|
def count_configuration: () -> Integer
|
|
126
|
-
|
|
127
|
-
# @rbs () -> bool
|
|
128
|
-
def exhausted?: () -> bool
|
|
129
136
|
end
|
|
130
137
|
end
|
|
131
138
|
end
|
|
@@ -11,22 +11,26 @@ 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
|
+
|
|
17
|
+
# @rbs (Integer state_id, Integer conflict_index) -> search_counterexample
|
|
18
|
+
def for_conflict: (Integer state_id, Integer conflict_index) -> search_counterexample
|
|
16
19
|
|
|
17
20
|
private
|
|
18
21
|
|
|
19
|
-
# @rbs (IR::AutomatonState state, IR::conflict conflict) ->
|
|
20
|
-
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
|
|
21
24
|
|
|
22
|
-
# @rbs (IR::AutomatonState state, IR::conflict conflict,
|
|
23
|
-
|
|
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
|
|
24
28
|
|
|
25
|
-
# @rbs (IR::AutomatonState state, IR::conflict conflict) ->
|
|
26
|
-
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
|
|
27
31
|
|
|
28
|
-
# @rbs (Integer target) -> Array[Integer]
|
|
29
|
-
def shortest_state_path: (Integer target) -> Array[Integer]
|
|
32
|
+
# @rbs (Integer target, IR::conflict conflict) -> Array[Integer]
|
|
33
|
+
def shortest_state_path: (Integer target, IR::conflict conflict) -> Array[Integer]
|
|
30
34
|
|
|
31
35
|
# @rbs () -> Hash[Integer, Array[Integer]]
|
|
32
36
|
def compute_shortest_yields: () -> Hash[Integer, Array[Integer]]
|
|
@@ -37,11 +41,13 @@ module Ibex
|
|
|
37
41
|
# @rbs (IR::conflict conflict) -> Array[IR::interpretation]
|
|
38
42
|
def interpretations: (IR::conflict conflict) -> Array[IR::interpretation]
|
|
39
43
|
|
|
40
|
-
#
|
|
41
|
-
|
|
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
|
|
42
48
|
|
|
43
|
-
# @rbs (Integer production_id) ->
|
|
44
|
-
def reduce_interpretation: (Integer production_id) ->
|
|
49
|
+
# @rbs (Integer production_id) -> untyped
|
|
50
|
+
def reduce_interpretation: (Integer production_id) -> untyped
|
|
45
51
|
|
|
46
52
|
# @rbs (Array[Integer] symbol_ids) -> Array[String]
|
|
47
53
|
def names: (Array[Integer] symbol_ids) -> Array[String]
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/direct_lookaheads.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
# Builds an LR(0) collection and propagates LALR(1) lookaheads directly
|
|
6
|
+
# over item occurrences. Canonical LR(1) states are never materialized.
|
|
7
|
+
class DirectLookaheads
|
|
8
|
+
AUGMENTED_PRODUCTION: Integer
|
|
9
|
+
|
|
10
|
+
EMPTY_PRODUCTIONS: Array[IR::Production]
|
|
11
|
+
|
|
12
|
+
EMPTY_NODES: Array[Integer]
|
|
13
|
+
|
|
14
|
+
attr_reader lr0_state_count: Integer?
|
|
15
|
+
|
|
16
|
+
attr_reader lr0_item_count: Integer?
|
|
17
|
+
|
|
18
|
+
attr_reader propagation_edge_count: Integer?
|
|
19
|
+
|
|
20
|
+
attr_reader states: Array[core_set]
|
|
21
|
+
|
|
22
|
+
attr_reader transitions: transitions
|
|
23
|
+
|
|
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
|
|
26
|
+
|
|
27
|
+
# @rbs () -> [Array[packed_items], transitions]
|
|
28
|
+
def build: () -> [ Array[packed_items], transitions ]
|
|
29
|
+
|
|
30
|
+
# @rbs (Integer index) -> Integer
|
|
31
|
+
def augmented_production: (Integer index) -> Integer
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
# @rbs () -> void
|
|
36
|
+
def initialize_item_encoding: () -> void
|
|
37
|
+
|
|
38
|
+
# @rbs () -> [Array[core_set], transitions]
|
|
39
|
+
def lr0_collection: () -> [ Array[core_set], transitions ]
|
|
40
|
+
|
|
41
|
+
# @rbs (core_set seed) -> core_set
|
|
42
|
+
def closure: (core_set seed) -> core_set
|
|
43
|
+
|
|
44
|
+
# @rbs (core_set items) -> Hash[Integer, core_set]
|
|
45
|
+
def shifted_kernels: (core_set items) -> Hash[Integer, core_set]
|
|
46
|
+
|
|
47
|
+
# @rbs (Array[core_set] states) -> Array[packed_items]
|
|
48
|
+
def empty_lookaheads: (Array[core_set] states) -> Array[packed_items]
|
|
49
|
+
|
|
50
|
+
# @rbs (Array[core_set] states, transitions transitions, Array[packed_items] lookaheads) ->
|
|
51
|
+
# Hash[Integer, Array[Integer]]
|
|
52
|
+
def propagation_graph: (Array[core_set] states, transitions transitions, Array[packed_items] lookaheads) -> Hash[Integer, Array[Integer]]
|
|
53
|
+
|
|
54
|
+
# @rbs (Hash[Integer, Array[Integer]] edges, transitions transitions,
|
|
55
|
+
# Integer state_id, Integer production_id, Integer dot) -> void
|
|
56
|
+
def add_transition_edge: (Hash[Integer, Array[Integer]] edges, transitions transitions, Integer state_id, Integer production_id, Integer dot) -> void
|
|
57
|
+
|
|
58
|
+
# @rbs (Hash[Integer, Array[Integer]] edges, Array[packed_items] lookaheads,
|
|
59
|
+
# Integer state_id, Integer production_id, Integer dot) -> void
|
|
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
|
|
64
|
+
|
|
65
|
+
# @rbs (Array[packed_items] lookaheads, Integer node) -> Set[Integer]
|
|
66
|
+
def node_set: (Array[packed_items] lookaheads, Integer node) -> Set[Integer]
|
|
67
|
+
|
|
68
|
+
# @rbs (Integer state_id, Integer production_id, Integer dot) -> Integer
|
|
69
|
+
def node_id: (Integer state_id, Integer production_id, Integer dot) -> Integer
|
|
70
|
+
|
|
71
|
+
# @rbs (Integer bits) -> Array[Integer]
|
|
72
|
+
def terminal_ids: (Integer bits) -> Array[Integer]
|
|
73
|
+
|
|
74
|
+
# @rbs (Integer production_id) -> Array[Integer]
|
|
75
|
+
def rhs_for: (Integer production_id) -> Array[Integer]
|
|
76
|
+
|
|
77
|
+
# @rbs (Integer production_id, Integer rhs_length) -> Array[item_core]
|
|
78
|
+
def item_cores_for: (Integer production_id, Integer rhs_length) -> Array[item_core]
|
|
79
|
+
|
|
80
|
+
# @rbs (Integer production_id, Integer dot) -> item_core
|
|
81
|
+
def item_core: (Integer production_id, Integer dot) -> item_core
|
|
82
|
+
|
|
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]
|
|
91
|
+
end
|
|
92
|
+
end
|
|
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
|