ibex 0.2.0 → 0.4.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 +100 -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 +274 -0
- data/docs/development.md +196 -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 +1617 -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/impact.md +101 -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 +129 -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 +310 -0
- data/docs/stability.md +145 -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/sets.rb +14 -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/impact.rb +393 -0
- 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 +362 -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 +141 -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/impact/action_impact.rb +148 -0
- data/lib/ibex/impact/automaton_impact.rb +57 -0
- data/lib/ibex/impact/coverage_impact.rb +53 -0
- data/lib/ibex/impact/graph.rb +132 -0
- data/lib/ibex/impact/propagation.rb +147 -0
- data/lib/ibex/impact/report.rb +273 -0
- data/lib/ibex/impact/seeds.rb +69 -0
- data/lib/ibex/impact/severity.rb +139 -0
- data/lib/ibex/impact.rb +16 -0
- 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 +11 -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/impact-v1.schema.json +208 -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/analysis/sets.rbs +10 -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/impact.rbs +95 -0
- 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/impact/action_impact.rbs +58 -0
- data/sig/ibex/impact/automaton_impact.rbs +37 -0
- data/sig/ibex/impact/coverage_impact.rbs +28 -0
- data/sig/ibex/impact/graph.rbs +67 -0
- data/sig/ibex/impact/propagation.rbs +56 -0
- data/sig/ibex/impact/report.rbs +107 -0
- data/sig/ibex/impact/seeds.rbs +36 -0
- data/sig/ibex/impact/severity.rbs +55 -0
- data/sig/ibex/impact.rbs +6 -0
- 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 +254 -12
- data/lib/ibex/ir/migration.rb +0 -120
- data/sig/ibex/ir/migration.rbs +0 -34
|
@@ -3,19 +3,21 @@
|
|
|
3
3
|
module Ibex
|
|
4
4
|
# Deterministically renders frontend EBNF items for production origin metadata.
|
|
5
5
|
module NormalizeExpression
|
|
6
|
+
type pending_item = String | Frontend::AST::item
|
|
7
|
+
|
|
6
8
|
# @rbs (Frontend::AST::item item) -> String
|
|
7
9
|
def self.render: (Frontend::AST::item item) -> String
|
|
8
10
|
|
|
9
|
-
# @rbs (Array[
|
|
10
|
-
private def self.push_render_item: (Array[
|
|
11
|
+
# @rbs (Array[pending_item] pending, Frontend::AST::item item) -> void
|
|
12
|
+
private def self.push_render_item: (Array[pending_item] pending, Frontend::AST::item item) -> void
|
|
11
13
|
|
|
12
|
-
# @rbs (Array[
|
|
13
|
-
private def self.push_render_parameterized_reference: (Array[
|
|
14
|
+
# @rbs (Array[pending_item] pending, Frontend::AST::ParameterizedReference item) -> void
|
|
15
|
+
private def self.push_render_parameterized_reference: (Array[pending_item] pending, Frontend::AST::ParameterizedReference item) -> void
|
|
14
16
|
|
|
15
|
-
# @rbs (Array[
|
|
16
|
-
private def self.push_render_group: (Array[
|
|
17
|
+
# @rbs (Array[pending_item] pending, Frontend::AST::Group item) -> void
|
|
18
|
+
private def self.push_render_group: (Array[pending_item] pending, Frontend::AST::Group item) -> void
|
|
17
19
|
|
|
18
|
-
# @rbs (Array[
|
|
19
|
-
private def self.push_render_items: (Array[
|
|
20
|
+
# @rbs (Array[pending_item] pending, Array[Frontend::AST::item] items, String separator) -> void
|
|
21
|
+
private def self.push_render_items: (Array[pending_item] pending, Array[Frontend::AST::item] items, String separator) -> void
|
|
20
22
|
end
|
|
21
23
|
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Generated from lib/ibex/normalize/grammar_builder.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
# Builds the single current Grammar IR format for every normalized source.
|
|
5
|
+
module NormalizeGrammarBuilder
|
|
6
|
+
private
|
|
7
|
+
|
|
8
|
+
# @rbs (IR::ParserContract? parser_contract) -> IR::Grammar
|
|
9
|
+
def build_grammar: (IR::ParserContract? parser_contract) -> IR::Grammar
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -4,6 +4,14 @@ module Ibex
|
|
|
4
4
|
# Deterministically substitutes inline-rule productions before LR construction.
|
|
5
5
|
# rubocop:disable Metrics/ModuleLength -- expansion, action plans, and id remapping share one invariant.
|
|
6
6
|
module NormalizeInlineExpansion
|
|
7
|
+
type inline_reference = [ :physical | :step, Integer ]
|
|
8
|
+
|
|
9
|
+
type inline_step = { kind: :inline | :rule, rule: String?, code: String?, loc: IR::location, named_refs: Array[IR::named_ref], context_length: Integer, inputs: Array[inline_reference], stack_inputs: Array[inline_reference], lookahead: Integer, result_var: bool, result_type: String? }
|
|
10
|
+
|
|
11
|
+
type inline_variant = { rhs: Array[Integer], steps: Array[inline_step], logical_refs: Array[inline_reference], output_ref: inline_reference?, inline_used: bool, inline_rule: String?, precedence_override: Integer?, precedence_contributes: bool, parameter: IR::parameter_expansion? }
|
|
12
|
+
|
|
13
|
+
type inline_frame = { production: IR::Production, symbol_id: Integer?, index: Integer, variant: inline_variant }
|
|
14
|
+
|
|
7
15
|
private
|
|
8
16
|
|
|
9
17
|
# @rbs () -> void
|
|
@@ -13,79 +21,80 @@ module Ibex
|
|
|
13
21
|
# The single-definition path reuses its accumulated arrays, so a long
|
|
14
22
|
# acyclic chain remains linear in the size of its final action plan.
|
|
15
23
|
# @rbs (IR::Production production, Hash[Integer, Array[IR::Production]] definitions) ->
|
|
16
|
-
# Array[
|
|
17
|
-
def expand_inline_production: (IR::Production production, Hash[Integer, Array[IR::Production]] definitions) -> Array[
|
|
24
|
+
# Array[inline_variant]
|
|
25
|
+
def expand_inline_production: (IR::Production production, Hash[Integer, Array[IR::Production]] definitions) -> Array[inline_variant]
|
|
18
26
|
|
|
19
|
-
# @rbs (Array[
|
|
20
|
-
# Array[Array[
|
|
27
|
+
# @rbs (Array[inline_frame] frames, Hash[Integer, Array[IR::Production]] definitions,
|
|
28
|
+
# Array[Array[inline_frame]] worklist, Array[inline_variant] variants,
|
|
21
29
|
# IR::location? location) -> void
|
|
22
|
-
def drain_inline_expansion_frames: (Array[
|
|
30
|
+
def drain_inline_expansion_frames: (Array[inline_frame] frames, Hash[Integer, Array[IR::Production]] definitions, Array[Array[inline_frame]] worklist, Array[inline_variant] variants, IR::location? location) -> void
|
|
23
31
|
|
|
24
|
-
# @rbs (Array[
|
|
25
|
-
# Array[Array[
|
|
32
|
+
# @rbs (Array[inline_frame] frames, Hash[Integer, Array[IR::Production]] definitions,
|
|
33
|
+
# Array[Array[inline_frame]] worklist, Array[inline_variant] variants,
|
|
26
34
|
# IR::location? location) -> bool
|
|
27
|
-
def advance_inline_expansion_frame?: (Array[
|
|
35
|
+
def advance_inline_expansion_frame?: (Array[inline_frame] frames, Hash[Integer, Array[IR::Production]] definitions, Array[Array[inline_frame]] worklist, Array[inline_variant] variants, IR::location? location) -> bool
|
|
28
36
|
|
|
29
|
-
# @rbs (Array[
|
|
30
|
-
# Array[Array[
|
|
31
|
-
def schedule_inline_choice_branches: (Array[
|
|
37
|
+
# @rbs (Array[inline_frame] frames, Array[IR::Production] choices, Integer symbol_id,
|
|
38
|
+
# Array[Array[inline_frame]] worklist) -> void
|
|
39
|
+
def schedule_inline_choice_branches: (Array[inline_frame] frames, Array[IR::Production] choices, Integer symbol_id, Array[Array[inline_frame]] worklist) -> void
|
|
32
40
|
|
|
33
|
-
# @rbs (Array[
|
|
34
|
-
# Array[Array[
|
|
35
|
-
def complete_inline_expansion_frame?: (Array[
|
|
41
|
+
# @rbs (Array[inline_frame] frames, Array[inline_variant] variants,
|
|
42
|
+
# Array[Array[inline_frame]] worklist, IR::location? location) -> bool
|
|
43
|
+
def complete_inline_expansion_frame?: (Array[inline_frame] frames, Array[inline_variant] variants, Array[Array[inline_frame]] worklist, IR::location? location) -> bool
|
|
36
44
|
|
|
37
|
-
# @rbs (IR::Production production, Integer? symbol_id) ->
|
|
38
|
-
def inline_expansion_frame: (IR::Production production, Integer? symbol_id) ->
|
|
45
|
+
# @rbs (IR::Production production, Integer? symbol_id) -> inline_frame
|
|
46
|
+
def inline_expansion_frame: (IR::Production production, Integer? symbol_id) -> inline_frame
|
|
39
47
|
|
|
40
|
-
# @rbs (Array[
|
|
41
|
-
def clone_inline_expansion_frames: (Array[
|
|
48
|
+
# @rbs (Array[inline_frame] frames) -> Array[inline_frame]
|
|
49
|
+
def clone_inline_expansion_frames: (Array[inline_frame] frames) -> Array[inline_frame]
|
|
42
50
|
|
|
43
|
-
# @rbs (IR::Production production) ->
|
|
44
|
-
def empty_inline_variant: (IR::Production production) ->
|
|
51
|
+
# @rbs (IR::Production production) -> inline_variant
|
|
52
|
+
def empty_inline_variant: (IR::Production production) -> inline_variant
|
|
45
53
|
|
|
46
|
-
# @rbs (
|
|
47
|
-
def append_inline_symbol: (
|
|
54
|
+
# @rbs (inline_variant variant, Integer symbol_id) -> inline_variant
|
|
55
|
+
def append_inline_symbol: (inline_variant variant, Integer symbol_id) -> inline_variant
|
|
48
56
|
|
|
49
|
-
# @rbs (
|
|
50
|
-
def combine_inline_variant: (
|
|
57
|
+
# @rbs (inline_variant parent, inline_variant child) -> inline_variant
|
|
58
|
+
def combine_inline_variant: (inline_variant parent, inline_variant child) -> inline_variant
|
|
51
59
|
|
|
52
|
-
# @rbs (
|
|
53
|
-
# Integer physical_offset, Integer step_offset) -> Array[
|
|
54
|
-
def combined_inline_steps: (
|
|
60
|
+
# @rbs (inline_variant parent, inline_variant child,
|
|
61
|
+
# Integer physical_offset, Integer step_offset) -> Array[inline_step]
|
|
62
|
+
def combined_inline_steps: (inline_variant parent, inline_variant child, Integer physical_offset, Integer step_offset) -> Array[inline_step]
|
|
55
63
|
|
|
56
|
-
#
|
|
57
|
-
|
|
64
|
+
# The helper is shared by homogeneous integer and step arrays; callers
|
|
65
|
+
# assert the concrete element type at each use site.
|
|
66
|
+
# @rbs (Array[Object?] left, Array[Object?] right) -> Array[Object?]
|
|
67
|
+
def append_inline_array: (Array[Object?] left, Array[Object?] right) -> Array[Object?]
|
|
58
68
|
|
|
59
|
-
# @rbs (
|
|
60
|
-
def combined_inline_precedence: (
|
|
69
|
+
# @rbs (inline_variant parent, inline_variant child) -> Integer?
|
|
70
|
+
def combined_inline_precedence: (inline_variant parent, inline_variant child) -> Integer?
|
|
61
71
|
|
|
62
|
-
# @rbs (
|
|
63
|
-
# Integer physical_offset, Integer step_offset) -> Array[
|
|
64
|
-
def remap_inline_steps: (
|
|
72
|
+
# @rbs (inline_variant parent, inline_variant child,
|
|
73
|
+
# Integer physical_offset, Integer step_offset) -> Array[inline_step]
|
|
74
|
+
def remap_inline_steps: (inline_variant parent, inline_variant child, Integer physical_offset, Integer step_offset) -> Array[inline_step]
|
|
65
75
|
|
|
66
76
|
# @rbs (Array[Symbol | Integer] reference, Integer physical_offset, Integer step_offset) ->
|
|
67
77
|
# Array[Symbol | Integer]
|
|
68
78
|
def remap_inline_reference: (Array[Symbol | Integer] reference, Integer physical_offset, Integer step_offset) -> Array[Symbol | Integer]
|
|
69
79
|
|
|
70
|
-
# @rbs (
|
|
71
|
-
def finish_inline_precedence: (
|
|
80
|
+
# @rbs (inline_variant variant, IR::Production production) -> inline_variant
|
|
81
|
+
def finish_inline_precedence: (inline_variant variant, IR::Production production) -> inline_variant
|
|
72
82
|
|
|
73
|
-
# @rbs (
|
|
74
|
-
|
|
75
|
-
def finish_inline_choice: (Hash[Symbol, untyped] variant, IR::Production production, Integer symbol_id) -> Hash[Symbol, untyped]
|
|
83
|
+
# @rbs (inline_variant variant, IR::Production production, Integer symbol_id) -> inline_variant
|
|
84
|
+
def finish_inline_choice: (inline_variant variant, IR::Production production, Integer symbol_id) -> inline_variant
|
|
76
85
|
|
|
77
|
-
# @rbs (IR::Production production, Array[
|
|
78
|
-
#
|
|
79
|
-
def inline_action_step: (IR::Production production, Array[
|
|
86
|
+
# @rbs (IR::Production production, Array[inline_reference] inputs, Integer lookahead,
|
|
87
|
+
# :inline | :rule kind, String? rule) -> inline_step
|
|
88
|
+
def inline_action_step: (IR::Production production, Array[inline_reference] inputs, Integer lookahead, :inline | :rule kind, String? rule) -> inline_step
|
|
80
89
|
|
|
81
|
-
# @rbs (IR::Production production,
|
|
82
|
-
def composed_inline_production: (IR::Production production,
|
|
90
|
+
# @rbs (IR::Production production, inline_variant variant, Integer id) -> IR::Production
|
|
91
|
+
def composed_inline_production: (IR::Production production, inline_variant variant, Integer id) -> IR::Production
|
|
83
92
|
|
|
84
|
-
# @rbs (IR::Production production, Integer physical_length, Array[
|
|
85
|
-
def composed_inline_action: (IR::Production production, Integer physical_length, Array[
|
|
93
|
+
# @rbs (IR::Production production, Integer physical_length, Array[inline_step]) -> IR::Action
|
|
94
|
+
def composed_inline_action: (IR::Production production, Integer physical_length, Array[inline_step]) -> IR::Action
|
|
86
95
|
|
|
87
|
-
# @rbs (
|
|
88
|
-
def composition_plan_step: (
|
|
96
|
+
# @rbs (inline_step step, Integer physical_length) -> IR::action_composition_step
|
|
97
|
+
def composition_plan_step: (inline_step step, Integer physical_length) -> IR::action_composition_step
|
|
89
98
|
|
|
90
99
|
# @rbs (Array[Symbol | Integer] reference, Integer physical_length) -> Integer
|
|
91
100
|
def resolve_inline_reference: (Array[Symbol | Integer] reference, Integer physical_length) -> Integer
|
|
@@ -96,8 +105,8 @@ module Ibex
|
|
|
96
105
|
# @rbs (IR::location location) -> IR::source_provenance
|
|
97
106
|
def inline_source_provenance: (IR::location location) -> IR::source_provenance
|
|
98
107
|
|
|
99
|
-
# @rbs (IR::Production production,
|
|
100
|
-
def inline_production_expansion: (IR::Production production,
|
|
108
|
+
# @rbs (IR::Production production, inline_variant variant) -> IR::production_expansion
|
|
109
|
+
def inline_production_expansion: (IR::Production production, inline_variant variant) -> IR::production_expansion
|
|
101
110
|
|
|
102
111
|
# @rbs (IR::Production production, Integer id) -> IR::Production
|
|
103
112
|
def copy_inline_production: (IR::Production production, Integer id) -> IR::Production
|
|
@@ -9,12 +9,12 @@ module Ibex
|
|
|
9
9
|
def normalize_lexer: () -> IR::Lexer?
|
|
10
10
|
|
|
11
11
|
# @rbs (Frontend::AST::LexerState definition, Array[String] states, Array[IR::LexerRule] rules,
|
|
12
|
-
# Array[
|
|
13
|
-
def normalize_lexer_state: (Frontend::AST::LexerState definition, Array[String] states, Array[IR::LexerRule] rules, Array[
|
|
12
|
+
# Array[IR::lexer_warning] warnings) -> void
|
|
13
|
+
def normalize_lexer_state: (Frontend::AST::LexerState definition, Array[String] states, Array[IR::LexerRule] rules, Array[IR::lexer_warning] warnings) -> void
|
|
14
14
|
|
|
15
15
|
# @rbs (Frontend::AST::LexerRule definition, String state, Integer id,
|
|
16
|
-
# Array[
|
|
17
|
-
def normalize_lexer_rule: (Frontend::AST::LexerRule definition, String state, Integer id, Array[
|
|
16
|
+
# Array[IR::lexer_warning] warnings) -> IR::LexerRule
|
|
17
|
+
def normalize_lexer_rule: (Frontend::AST::LexerRule definition, String state, Integer id, Array[IR::lexer_warning] warnings) -> IR::LexerRule
|
|
18
18
|
|
|
19
19
|
# @rbs (Frontend::AST::LexerRule definition) -> void
|
|
20
20
|
def validate_lexer_token: (Frontend::AST::LexerRule definition) -> void
|
|
@@ -5,28 +5,29 @@ module Ibex
|
|
|
5
5
|
module NormalizeParameterEbnfLowering
|
|
6
6
|
private
|
|
7
7
|
|
|
8
|
-
# @rbs (
|
|
8
|
+
# @rbs (NormalizeParameters::parameter_frame frame,
|
|
9
9
|
# Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
|
|
10
|
-
def lower_parameter_suffix: (
|
|
10
|
+
def lower_parameter_suffix: (NormalizeParameters::parameter_frame frame, Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
|
|
11
11
|
|
|
12
|
-
# @rbs (
|
|
12
|
+
# @rbs (NormalizeParameters::parameter_frame frame,
|
|
13
13
|
# Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
|
|
14
|
-
def finish_parameter_suffix: (
|
|
14
|
+
def finish_parameter_suffix: (NormalizeParameters::parameter_frame frame, Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus item) -> void
|
|
15
15
|
|
|
16
|
-
# @rbs (
|
|
17
|
-
def lower_parameter_separated_list: (
|
|
16
|
+
# @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::SeparatedList item) -> void
|
|
17
|
+
def lower_parameter_separated_list: (NormalizeParameters::parameter_frame frame, Frontend::AST::SeparatedList item) -> void
|
|
18
18
|
|
|
19
|
-
# @rbs (
|
|
20
|
-
def finish_parameter_separated_list: (
|
|
19
|
+
# @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::SeparatedList item) -> void
|
|
20
|
+
def finish_parameter_separated_list: (NormalizeParameters::parameter_frame frame, Frontend::AST::SeparatedList item) -> void
|
|
21
21
|
|
|
22
|
-
# @rbs (
|
|
23
|
-
def lower_parameter_group: (
|
|
22
|
+
# @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::Group item) -> void
|
|
23
|
+
def lower_parameter_group: (NormalizeParameters::parameter_frame frame, Frontend::AST::Group item) -> void
|
|
24
24
|
|
|
25
|
-
# @rbs (
|
|
25
|
+
# @rbs (NormalizeParameters::parameter_frame frame, String helper, Frontend::AST::Group item,
|
|
26
26
|
# Array[Frontend::AST::item] alternative) -> void
|
|
27
|
-
def start_parameter_group_alternative: (
|
|
27
|
+
def start_parameter_group_alternative: (NormalizeParameters::parameter_frame frame, String helper, Frontend::AST::Group item, Array[Frontend::AST::item] alternative) -> void
|
|
28
28
|
|
|
29
|
-
# @rbs (
|
|
30
|
-
|
|
29
|
+
# @rbs (NormalizeParameters::parameter_frame frame, String helper,
|
|
30
|
+
# Frontend::AST::Group item, Integer length) -> void
|
|
31
|
+
def finish_parameter_group_alternative: (NormalizeParameters::parameter_frame frame, String helper, Frontend::AST::Group item, Integer length) -> void
|
|
31
32
|
end
|
|
32
33
|
end
|
|
@@ -5,31 +5,31 @@ module Ibex
|
|
|
5
5
|
module NormalizeParameterLowering
|
|
6
6
|
private
|
|
7
7
|
|
|
8
|
-
# @rbs (
|
|
9
|
-
def advance_parameter_alternative: (
|
|
8
|
+
# @rbs (NormalizeParameters::parameter_frame frame) -> void
|
|
9
|
+
def advance_parameter_alternative: (NormalizeParameters::parameter_frame frame) -> void
|
|
10
10
|
|
|
11
|
-
# @rbs (
|
|
12
|
-
def with_parameter_frame_context: (
|
|
11
|
+
# @rbs (NormalizeParameters::parameter_frame frame) { () -> void } -> void
|
|
12
|
+
def with_parameter_frame_context: (NormalizeParameters::parameter_frame frame) { () -> void } -> void
|
|
13
13
|
|
|
14
|
-
# @rbs (
|
|
15
|
-
def parameter_items_remaining?: (
|
|
14
|
+
# @rbs (NormalizeParameters::parameter_frame frame) -> bool
|
|
15
|
+
def parameter_items_remaining?: (NormalizeParameters::parameter_frame frame) -> bool
|
|
16
16
|
|
|
17
|
-
# @rbs (
|
|
18
|
-
def start_parameter_item: (
|
|
17
|
+
# @rbs (NormalizeParameters::parameter_frame frame) -> void
|
|
18
|
+
def start_parameter_item: (NormalizeParameters::parameter_frame frame) -> void
|
|
19
19
|
|
|
20
|
-
# @rbs (
|
|
21
|
-
def process_parameter_operation: (
|
|
20
|
+
# @rbs (NormalizeParameters::parameter_frame frame, NormalizeParameters::parameter_operation operation) -> void
|
|
21
|
+
def process_parameter_operation: (NormalizeParameters::parameter_frame frame, NormalizeParameters::parameter_operation operation) -> void
|
|
22
22
|
|
|
23
|
-
# @rbs (
|
|
24
|
-
def lower_parameter_item: (
|
|
23
|
+
# @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::item item) -> void
|
|
24
|
+
def lower_parameter_item: (NormalizeParameters::parameter_frame frame, Frontend::AST::item item) -> void
|
|
25
25
|
|
|
26
|
-
# @rbs (
|
|
27
|
-
def lower_parameter_call: (
|
|
26
|
+
# @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::ParameterizedReference item) -> void
|
|
27
|
+
def lower_parameter_call: (NormalizeParameters::parameter_frame frame, Frontend::AST::ParameterizedReference item) -> void
|
|
28
28
|
|
|
29
|
-
# @rbs (
|
|
30
|
-
def finish_parameter_item: (
|
|
29
|
+
# @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::item item) -> void
|
|
30
|
+
def finish_parameter_item: (NormalizeParameters::parameter_frame frame, Frontend::AST::item item) -> void
|
|
31
31
|
|
|
32
|
-
# @rbs (
|
|
33
|
-
def finish_parameter_alternative: (
|
|
32
|
+
# @rbs (NormalizeParameters::parameter_frame frame) -> void
|
|
33
|
+
def finish_parameter_alternative: (NormalizeParameters::parameter_frame frame) -> void
|
|
34
34
|
end
|
|
35
35
|
end
|
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
module Ibex
|
|
4
4
|
# Iterative, hygienic specialization of validated parameterized user rules.
|
|
5
|
+
# rubocop:disable Metrics/ModuleLength -- parameter-frame transitions are kept together for auditability.
|
|
5
6
|
module NormalizeParameters
|
|
7
|
+
type parameter_operation = [ :item | :finish_item, Frontend::AST::item ] | [ :value, String ] | [ :finish_suffix, Frontend::AST::Optional | Frontend::AST::Star | Frontend::AST::Plus ] | [ :finish_separated, Frontend::AST::SeparatedList ] | [ :group_alternative, String, Frontend::AST::Group, Array[Frontend::AST::item] ] | [ :finish_group_alternative, String, Frontend::AST::Group, Integer ]
|
|
8
|
+
|
|
9
|
+
type parameter_frame = { reference: Frontend::AST::ParameterizedReference, arguments: Array[Frontend::AST::item], helper: String, bindings: Hash[String, Frontend::AST::item], rendered_arguments: Array[String], templates: Array[Frontend::AST::Rule], template_index: Integer, alternative_index: Integer, current: [ Frontend::AST::Rule, Frontend::AST::Rule, Frontend::AST::Alternative ]?, item_index: Integer, rhs: Array[String], named_refs: Array[IR::named_ref], operations: Array[parameter_operation], values: Array[String] }
|
|
10
|
+
|
|
6
11
|
private
|
|
7
12
|
|
|
8
13
|
# @rbs (Frontend::AST::ParameterizedReference reference) -> String
|
|
@@ -28,19 +33,19 @@ module Ibex
|
|
|
28
33
|
|
|
29
34
|
# @rbs (Frontend::AST::ParameterizedReference reference, String helper,
|
|
30
35
|
# Array[Frontend::AST::item] arguments, Array[String] rendered_arguments) ->
|
|
31
|
-
#
|
|
32
|
-
def parameter_frame: (Frontend::AST::ParameterizedReference reference, String helper, Array[Frontend::AST::item] arguments, Array[String] rendered_arguments) ->
|
|
36
|
+
# NormalizeParameters::parameter_frame
|
|
37
|
+
def parameter_frame: (Frontend::AST::ParameterizedReference reference, String helper, Array[Frontend::AST::item] arguments, Array[String] rendered_arguments) -> NormalizeParameters::parameter_frame
|
|
33
38
|
|
|
34
39
|
# @rbs () -> void
|
|
35
40
|
def drain_parameter_worklist: () -> void
|
|
36
41
|
|
|
37
|
-
# @rbs (
|
|
38
|
-
def prepare_parameter_alternative?: (
|
|
42
|
+
# @rbs (NormalizeParameters::parameter_frame frame) -> bool
|
|
43
|
+
def prepare_parameter_alternative?: (NormalizeParameters::parameter_frame frame) -> bool
|
|
39
44
|
|
|
40
|
-
# @rbs (
|
|
41
|
-
def prepare_parameter_alternative_entry: (
|
|
45
|
+
# @rbs (NormalizeParameters::parameter_frame frame, Frontend::AST::Rule template, Integer index) -> void
|
|
46
|
+
def prepare_parameter_alternative_entry: (NormalizeParameters::parameter_frame frame, Frontend::AST::Rule template, Integer index) -> void
|
|
42
47
|
|
|
43
|
-
# @rbs (
|
|
44
|
-
def clear_parameter_alternative: (
|
|
48
|
+
# @rbs (NormalizeParameters::parameter_frame frame) -> void
|
|
49
|
+
def clear_parameter_alternative: (NormalizeParameters::parameter_frame frame) -> void
|
|
45
50
|
end
|
|
46
51
|
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated from lib/ibex/normalize/parser_configuration.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
# Converts a root parser declaration into the explicit current Grammar IR contract.
|
|
5
|
+
module NormalizeParserConfiguration
|
|
6
|
+
private
|
|
7
|
+
|
|
8
|
+
# @rbs (Frontend::AST::ParserConfiguration declaration) -> void
|
|
9
|
+
def read_parser_configuration: (Frontend::AST::ParserConfiguration declaration) -> void
|
|
10
|
+
|
|
11
|
+
# @rbs () -> IR::ParserContract?
|
|
12
|
+
def normalized_parser_contract: () -> IR::ParserContract?
|
|
13
|
+
|
|
14
|
+
# @rbs (Frontend::AST::ParserSetting setting) -> Hash[Symbol, Object?]
|
|
15
|
+
def validated_parser_setting_definition: (Frontend::AST::ParserSetting setting) -> Hash[Symbol, Object?]
|
|
16
|
+
|
|
17
|
+
# @rbs (Frontend::AST::ParserConfiguration declaration) -> void
|
|
18
|
+
def validate_isolated_entries: (Frontend::AST::ParserConfiguration declaration) -> void
|
|
19
|
+
|
|
20
|
+
# @rbs (Frontend::AST::ParserSetting setting) -> Location
|
|
21
|
+
def parser_setting_location: (Frontend::AST::ParserSetting setting) -> Location
|
|
22
|
+
end
|
|
23
|
+
end
|
data/sig/ibex/normalize.rbs
CHANGED
|
@@ -5,6 +5,10 @@ module Ibex
|
|
|
5
5
|
class Normalizer
|
|
6
6
|
include NormalizeDeclarations
|
|
7
7
|
|
|
8
|
+
include NormalizeParserConfiguration
|
|
9
|
+
|
|
10
|
+
include NormalizeGrammarBuilder
|
|
11
|
+
|
|
8
12
|
include NormalizeLexer
|
|
9
13
|
|
|
10
14
|
include NormalizeRecoveryDeclarations
|
|
@@ -41,6 +45,8 @@ module Ibex
|
|
|
41
45
|
|
|
42
46
|
@explicit_starts: Array[String]?
|
|
43
47
|
|
|
48
|
+
@parser_configuration: Frontend::AST::ParserConfiguration?
|
|
49
|
+
|
|
44
50
|
@lexer_declaration: Frontend::AST::Lexer?
|
|
45
51
|
|
|
46
52
|
@grammar_tests: Array[IR::grammar_test]
|
|
@@ -71,8 +77,6 @@ module Ibex
|
|
|
71
77
|
|
|
72
78
|
@precedence_locations: Hash[String, IR::location]
|
|
73
79
|
|
|
74
|
-
@precedence: Hash[String, IR::precedence]
|
|
75
|
-
|
|
76
80
|
@node_shapes: Hash[String, Array[String]]
|
|
77
81
|
|
|
78
82
|
@inline_expansion_count: Integer
|
|
@@ -93,7 +97,7 @@ module Ibex
|
|
|
93
97
|
|
|
94
98
|
@parameter_worklist_active: bool
|
|
95
99
|
|
|
96
|
-
@parameter_worklist: Array[
|
|
100
|
+
@parameter_worklist: Array[NormalizeParameters::parameter_frame]
|
|
97
101
|
|
|
98
102
|
@parameter_specializations: Hash[[ String, Array[String] ], String]
|
|
99
103
|
|
|
@@ -107,6 +111,8 @@ module Ibex
|
|
|
107
111
|
|
|
108
112
|
@start_names: Array[String]
|
|
109
113
|
|
|
114
|
+
@precedence: Hash[String, IR::precedence]
|
|
115
|
+
|
|
110
116
|
@declared_tokens: Hash[String, IR::location]
|
|
111
117
|
|
|
112
118
|
@helper_sequence: Integer
|
|
@@ -137,8 +143,8 @@ module Ibex
|
|
|
137
143
|
|
|
138
144
|
private
|
|
139
145
|
|
|
140
|
-
# @rbs (Symbol name,
|
|
141
|
-
def validate_positive_limit!: (Symbol name,
|
|
146
|
+
# @rbs (Symbol name, Object value) -> void
|
|
147
|
+
def validate_positive_limit!: (Symbol name, Object value) -> void
|
|
142
148
|
|
|
143
149
|
# @rbs () -> void
|
|
144
150
|
def intern_reserved_symbols: () -> void
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module RaccMigration
|
|
5
|
+
type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
|
|
6
|
+
|
|
5
7
|
# One immutable migration compatibility observation.
|
|
6
8
|
class Finding
|
|
7
9
|
SEVERITIES: Array[Symbol]
|
|
@@ -20,8 +22,8 @@ module Ibex
|
|
|
20
22
|
# suggestion: String) -> void
|
|
21
23
|
def initialize: (code: String, severity: Symbol, message: String, location: Frontend::Location?, suggestion: String) -> void
|
|
22
24
|
|
|
23
|
-
# @rbs () -> Hash[String,
|
|
24
|
-
def to_h: () -> Hash[String,
|
|
25
|
+
# @rbs () -> Hash[String, json_value]
|
|
26
|
+
def to_h: () -> Hash[String, json_value]
|
|
25
27
|
end
|
|
26
28
|
|
|
27
29
|
# Versioned result of checking one grammar without executing its code.
|
|
@@ -40,11 +42,11 @@ module Ibex
|
|
|
40
42
|
# @rbs () -> bool
|
|
41
43
|
def compatible?: () -> bool
|
|
42
44
|
|
|
43
|
-
# @rbs () -> Hash[String,
|
|
44
|
-
def to_h: () -> Hash[String,
|
|
45
|
+
# @rbs () -> Hash[String, json_value]
|
|
46
|
+
def to_h: () -> Hash[String, json_value]
|
|
45
47
|
|
|
46
|
-
# @rbs (*
|
|
47
|
-
def to_json: (*
|
|
48
|
+
# @rbs (*Object?) -> String
|
|
49
|
+
def to_json: (*Object?) -> String
|
|
48
50
|
|
|
49
51
|
# @rbs () -> String
|
|
50
52
|
def to_text: () -> String
|
data/sig/ibex/rake_task.rbs
CHANGED
|
@@ -43,7 +43,7 @@ module Rake
|
|
|
43
43
|
|
|
44
44
|
class Task
|
|
45
45
|
def self.define_task: (Hash[String | Symbol, String | Array[String]]) -> Task
|
|
46
|
-
| (Hash[String | Symbol, String | Array[String]]) { (
|
|
46
|
+
| (Hash[String | Symbol, String | Array[String]]) { (Object?, Object?) -> void } -> Task
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
class FileTask < Task
|
data/sig/ibex/samples.rbs
CHANGED
|
@@ -6,8 +6,8 @@ module Ibex
|
|
|
6
6
|
DEFAULT_MAX_EXPANSIONS: Integer
|
|
7
7
|
|
|
8
8
|
# @rbs (IR::Grammar grammar, ?seed: Integer, ?max_tokens: Integer, ?max_depth: Integer,
|
|
9
|
-
# ?max_expansions: Integer) -> void
|
|
10
|
-
def initialize: (IR::Grammar grammar, ?seed: Integer, ?max_tokens: Integer, ?max_depth: Integer, ?max_expansions: Integer) -> void
|
|
9
|
+
# ?max_expansions: Integer, ?strategy: Symbol | String, ?path_length: Integer) -> void
|
|
10
|
+
def initialize: (IR::Grammar grammar, ?seed: Integer, ?max_tokens: Integer, ?max_depth: Integer, ?max_expansions: Integer, ?strategy: Symbol | String, ?path_length: Integer) -> void
|
|
11
11
|
|
|
12
12
|
# @rbs (?count: Integer) -> Array[Array[String]]
|
|
13
13
|
def generate: (?count: Integer) -> Array[Array[String]]
|
|
@@ -36,8 +36,17 @@ module Ibex
|
|
|
36
36
|
# @rbs (IR::GrammarSymbol start, Integer remaining_expansions) -> [Array[String], Integer]
|
|
37
37
|
def expand: (IR::GrammarSymbol start, Integer remaining_expansions) -> [ Array[String], Integer ]
|
|
38
38
|
|
|
39
|
-
# @rbs (Integer nonterminal_id, Integer budget, Integer depth) -> IR::Production
|
|
40
|
-
def choose_production: (Integer nonterminal_id, Integer budget, Integer depth) -> IR::Production
|
|
39
|
+
# @rbs (Integer nonterminal_id, Integer budget, Integer depth, Array[Integer] path) -> IR::Production
|
|
40
|
+
def choose_production: (Integer nonterminal_id, Integer budget, Integer depth, Array[Integer] path) -> IR::Production
|
|
41
|
+
|
|
42
|
+
# @rbs (Integer nonterminal_id, Integer budget) -> Array[IR::Production]
|
|
43
|
+
def bounded_productions: (Integer nonterminal_id, Integer budget) -> Array[IR::Production]
|
|
44
|
+
|
|
45
|
+
# @rbs (Array[IR::Production] candidates) -> Array[IR::Production]
|
|
46
|
+
def minimum_height_productions: (Array[IR::Production] candidates) -> Array[IR::Production]
|
|
47
|
+
|
|
48
|
+
# @rbs (Array[Integer] path, IR::Production production) -> Integer
|
|
49
|
+
def path_count: (Array[Integer] path, IR::Production production) -> Integer
|
|
41
50
|
|
|
42
51
|
# @rbs (Integer symbol_id) -> Integer
|
|
43
52
|
def minimum_cost!: (Integer symbol_id) -> Integer
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Generated from lib/ibex/table_artifact/builder.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module TableArtifact
|
|
5
|
+
# Projects validated Automaton IR into an action-free executable sidecar.
|
|
6
|
+
class Builder
|
|
7
|
+
type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
|
|
8
|
+
|
|
9
|
+
type json_hash = Hash[String, untyped]
|
|
10
|
+
|
|
11
|
+
type action_rows = Array[Hash[Integer, IR::runtime_action]]
|
|
12
|
+
|
|
13
|
+
type action_table = action_rows | Tables::CompactActions
|
|
14
|
+
|
|
15
|
+
type goto_rows = Array[Hash[Integer, Integer]]
|
|
16
|
+
|
|
17
|
+
type goto_table = goto_rows | Tables::Compact
|
|
18
|
+
|
|
19
|
+
include CSTProjection
|
|
20
|
+
|
|
21
|
+
REPRESENTATIONS: Array[Symbol]
|
|
22
|
+
|
|
23
|
+
# @rbs (IR::Automaton automaton, ?representation: Symbol | String, ?cst_trivia: Symbol | String?,
|
|
24
|
+
# ?omit_action_call: bool?) -> void
|
|
25
|
+
def initialize: (IR::Automaton automaton, ?representation: Symbol | String, ?cst_trivia: Symbol | String?, ?omit_action_call: bool?) -> void
|
|
26
|
+
|
|
27
|
+
# @rbs () -> Document
|
|
28
|
+
def build: () -> Document
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
# @rbs (Hash[String, String] source_identity) -> json_hash
|
|
33
|
+
def build_payload: (Hash[String, String] source_identity) -> json_hash
|
|
34
|
+
|
|
35
|
+
# @rbs () -> String
|
|
36
|
+
def automaton_digest: () -> String
|
|
37
|
+
|
|
38
|
+
# @rbs () -> json_hash
|
|
39
|
+
def table_format: () -> json_hash
|
|
40
|
+
|
|
41
|
+
# @rbs () -> Array[json_hash]
|
|
42
|
+
def symbols: () -> Array[json_hash]
|
|
43
|
+
|
|
44
|
+
# @rbs () -> Array[json_hash]
|
|
45
|
+
def tokens: () -> Array[json_hash]
|
|
46
|
+
|
|
47
|
+
# @rbs () -> Array[json_hash]
|
|
48
|
+
def entry_states: () -> Array[json_hash]
|
|
49
|
+
|
|
50
|
+
# @rbs () -> json_hash
|
|
51
|
+
def tables: () -> json_hash
|
|
52
|
+
|
|
53
|
+
# @rbs (action_table table) -> json_hash
|
|
54
|
+
def action_table: (action_table table) -> json_hash
|
|
55
|
+
|
|
56
|
+
# @rbs (Tables::CompactActions table) -> json_hash
|
|
57
|
+
def compact_action_table: (Tables::CompactActions table) -> json_hash
|
|
58
|
+
|
|
59
|
+
# @rbs (goto_table table) -> json_hash
|
|
60
|
+
def goto_table: (goto_table table) -> json_hash
|
|
61
|
+
|
|
62
|
+
# @rbs (Tables::Compact table) -> json_hash
|
|
63
|
+
def compact_goto_table: (Tables::Compact table) -> json_hash
|
|
64
|
+
|
|
65
|
+
# @rbs () -> Array[json_hash]
|
|
66
|
+
def productions: () -> Array[json_hash]
|
|
67
|
+
|
|
68
|
+
# @rbs (IR::Production production) -> bool
|
|
69
|
+
def action_slot?: (IR::Production production) -> bool
|
|
70
|
+
|
|
71
|
+
# @rbs () -> json_hash
|
|
72
|
+
def semantic_actions: () -> json_hash
|
|
73
|
+
|
|
74
|
+
# @rbs () -> json_hash
|
|
75
|
+
def recovery: () -> json_hash
|
|
76
|
+
|
|
77
|
+
# @rbs (json_hash payload) -> json_hash
|
|
78
|
+
def build_cost: (json_hash payload) -> json_hash
|
|
79
|
+
|
|
80
|
+
# @rbs (json_hash table, String values_key) -> Integer
|
|
81
|
+
def occupied_cells: (json_hash table, String values_key) -> Integer
|
|
82
|
+
|
|
83
|
+
# @rbs () -> String
|
|
84
|
+
def lookup_cost: () -> String
|
|
85
|
+
|
|
86
|
+
# @rbs () -> String
|
|
87
|
+
def recognition_cost: () -> String
|
|
88
|
+
|
|
89
|
+
# @rbs (Symbol | String? requested) -> Symbol
|
|
90
|
+
def effective_cst_trivia: (Symbol | String? requested) -> Symbol
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Generated from lib/ibex/table_artifact/cst_projection.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module TableArtifact
|
|
5
|
+
# Converts code-generation CST metadata into closed JSON records.
|
|
6
|
+
module CSTProjection
|
|
7
|
+
private def cst: () -> Hash[String, Builder::json_value]?
|
|
8
|
+
|
|
9
|
+
private def normalize_cst: (Codegen::CSTMetadata::metadata metadata) -> Hash[String, Builder::json_value]
|
|
10
|
+
|
|
11
|
+
private def normalize_cst_kinds: (Codegen::CSTMetadata::kinds kinds) -> Hash[String, Builder::json_value]
|
|
12
|
+
|
|
13
|
+
private def named_kinds: (Hash[String, Integer] values) -> Array[Hash[String, String | Integer]]
|
|
14
|
+
|
|
15
|
+
private def normalize_cst_slot: (Integer production_id, Codegen::CSTMetadata::slot slot) -> Hash[String, Builder::json_value]
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|