ibex 0.1.0 → 0.2.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 +247 -104
- data/docs/architecture.md +322 -28
- data/docs/cst-migration.md +107 -0
- data/docs/cst.md +213 -0
- data/docs/development.md +129 -0
- data/docs/editor-setup.md +25 -0
- data/docs/error-ux.md +60 -0
- data/docs/grammar-reference.md +458 -18
- data/docs/lexer-migration.md +51 -0
- data/docs/racc-migration.md +34 -6
- data/docs/release-readiness.md +163 -0
- data/docs/stability.md +124 -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/sets.rb +5 -4
- data/lib/ibex/artifact_set.rb +63 -0
- data/lib/ibex/cli/ambiguity.rb +66 -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 +116 -0
- data/lib/ibex/cli/documentation.rb +67 -0
- data/lib/ibex/cli/error_messages.rb +177 -0
- data/lib/ibex/cli/explain.rb +76 -0
- data/lib/ibex/cli/formatting.rb +386 -0
- data/lib/ibex/cli/generation_artifacts.rb +138 -0
- data/lib/ibex/cli/generation_error_messages.rb +39 -0
- data/lib/ibex/cli/grammar_tests.rb +122 -0
- data/lib/ibex/cli/ir_tools.rb +184 -0
- data/lib/ibex/cli/lsp.rb +33 -0
- data/lib/ibex/cli/outputs.rb +91 -8
- data/lib/ibex/cli/racc_migration.rb +87 -0
- data/lib/ibex/cli/samples.rb +92 -0
- data/lib/ibex/cli/watch.rb +103 -0
- data/lib/ibex/cli.rb +506 -37
- data/lib/ibex/codegen/action_locations.rb +103 -0
- data/lib/ibex/codegen/action_method_source.rb +210 -0
- data/lib/ibex/codegen/action_source.rb +118 -0
- data/lib/ibex/codegen/ambiguity.rb +173 -0
- data/lib/ibex/codegen/cst_metadata.rb +171 -0
- data/lib/ibex/codegen/documentation.rb +170 -0
- data/lib/ibex/codegen/explain.rb +312 -0
- data/lib/ibex/codegen/generated_action_abi.rb +288 -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 +323 -2
- data/lib/ibex/codegen/report.rb +46 -6
- data/lib/ibex/codegen/ruby.rb +334 -59
- data/lib/ibex/codegen/ruby_actions.rb +143 -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 +90 -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/coverage/collector.rb +188 -0
- data/lib/ibex/coverage/event_stream.rb +97 -0
- data/lib/ibex/coverage/report.rb +259 -0
- data/lib/ibex/coverage/runtime_event_validator.rb +160 -0
- data/lib/ibex/coverage.rb +13 -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/frontend/ast.rb +145 -6
- data/lib/ibex/frontend/bootstrap_parser.rb +47 -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 +407 -0
- data/lib/ibex/frontend/generated_parser.rb +614 -190
- data/lib/ibex/frontend/generated_parser_base.rb +164 -30
- data/lib/ibex/frontend/generated_parser_includes.rb +61 -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 +247 -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/regenerator.rb +26 -1
- data/lib/ibex/frontend/resolution.rb +69 -0
- data/lib/ibex/frontend/resolver.rb +217 -0
- data/lib/ibex/frontend/rule_documentation.rb +103 -0
- data/lib/ibex/frontend/source_cursor.rb +132 -8
- 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 +81 -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 +216 -26
- 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 +8 -3
- data/lib/ibex/frontend.rb +13 -2
- data/lib/ibex/generation_input.rb +57 -0
- data/lib/ibex/generation_manifest.rb +200 -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 +38 -5
- data/lib/ibex/ir/grammar_ir.rb +137 -24
- data/lib/ibex/ir/lexer_ir.rb +76 -0
- data/lib/ibex/ir/migration.rb +120 -0
- data/lib/ibex/ir/serialize.rb +110 -19
- data/lib/ibex/ir/validator/automaton.rb +345 -0
- data/lib/ibex/ir/validator/base.rb +129 -0
- data/lib/ibex/ir/validator/grammar.rb +604 -0
- data/lib/ibex/ir/validator/lexer.rb +113 -0
- data/lib/ibex/ir/validator.rb +62 -0
- data/lib/ibex/ir.rb +57 -4
- data/lib/ibex/lalr/build_metrics.rb +23 -0
- data/lib/ibex/lalr/builder.rb +379 -52
- data/lib/ibex/lalr/conflict.rb +1 -0
- data/lib/ibex/lalr/conflict_search.rb +11 -5
- data/lib/ibex/lalr/counterexample.rb +20 -5
- data/lib/ibex/lalr/direct_lookaheads.rb +236 -0
- data/lib/ibex/lalr/ielr_partition.rb +152 -0
- data/lib/ibex/lalr/on_error_reductions.rb +74 -0
- data/lib/ibex/lalr.rb +7 -0
- data/lib/ibex/location.rb +129 -0
- data/lib/ibex/lsp/document_handlers.rb +66 -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 +78 -0
- data/lib/ibex/lsp/navigation_handlers.rb +56 -0
- data/lib/ibex/lsp/position_codec.rb +109 -0
- data/lib/ibex/lsp/protocol_error.rb +33 -0
- data/lib/ibex/lsp/request_handlers.rb +45 -0
- data/lib/ibex/lsp/request_support.rb +87 -0
- data/lib/ibex/lsp/server.rb +146 -0
- data/lib/ibex/lsp/symbol_index.rb +241 -0
- data/lib/ibex/lsp/symbol_index_builder.rb +267 -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 +17 -0
- data/lib/ibex/lsp/transport.rb +118 -0
- data/lib/ibex/lsp/workspace.rb +127 -0
- data/lib/ibex/lsp/workspace_analyzer.rb +199 -0
- data/lib/ibex/lsp.rb +32 -0
- data/lib/ibex/normalize/declarations.rb +140 -7
- data/lib/ibex/normalize/diagnostics.rb +50 -5
- data/lib/ibex/normalize/expander.rb +59 -55
- data/lib/ibex/normalize/expression.rb +60 -39
- data/lib/ibex/normalize/inline_expansion.rb +414 -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 +69 -0
- data/lib/ibex/normalize/parameter_lowering.rb +126 -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 +199 -0
- data/lib/ibex/normalize/recovery_declarations.rb +84 -0
- data/lib/ibex/normalize.rb +179 -14
- 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 +94 -0
- data/lib/ibex/racc_migration.rb +12 -0
- data/lib/ibex/rake_task.rb +116 -0
- data/lib/ibex/samples.rb +186 -0
- data/lib/ibex/table_simulation/result.rb +51 -0
- data/lib/ibex/table_simulation/simulator.rb +253 -0
- data/lib/ibex/table_simulation/step.rb +60 -0
- data/lib/ibex/table_simulation/text.rb +31 -0
- data/lib/ibex/table_simulation.rb +13 -0
- data/lib/ibex/tables.rb +9 -70
- data/lib/ibex/version.rb +1 -1
- data/lib/ibex/watch/runner.rb +172 -0
- data/lib/ibex/watch/source_snapshot.rb +93 -0
- data/lib/ibex/watch.rb +11 -0
- data/lib/ibex.rb +25 -1
- data/schema/automaton-ir-v1.schema.json +401 -0
- data/schema/automaton-ir-v2.schema.json +58 -0
- data/schema/benchmark-v1.schema.json +212 -0
- data/schema/benchmark-v2.schema.json +61 -0
- data/schema/cst-v1.json +170 -0
- data/schema/error-ux-v1.schema.json +258 -0
- data/schema/explain-v1.schema.json +433 -0
- data/schema/frontend-diagnostics-v1.schema.json +154 -0
- data/schema/generation-manifest-v1.schema.json +115 -0
- data/schema/grammar-ir-v1.schema.json +426 -0
- data/schema/grammar-ir-v2.schema.json +779 -0
- data/schema/lexer-ir-v1.schema.json +215 -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/runtime-coverage-v1.schema.json +86 -0
- data/schema/runtime-event-v1.schema.json +308 -0
- data/schema/table-simulation-v1.schema.json +70 -0
- data/sig/ibex/artifact_set.rbs +37 -0
- data/sig/ibex/cli/ambiguity.rbs +22 -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 +38 -0
- data/sig/ibex/cli/documentation.rbs +25 -0
- data/sig/ibex/cli/error_messages.rbs +57 -0
- data/sig/ibex/cli/explain.rbs +25 -0
- data/sig/ibex/cli/formatting.rbs +103 -0
- data/sig/ibex/cli/generation_artifacts.rbs +50 -0
- data/sig/ibex/cli/generation_error_messages.rbs +19 -0
- data/sig/ibex/cli/grammar_tests.rbs +36 -0
- data/sig/ibex/cli/ir_tools.rbs +51 -0
- data/sig/ibex/cli/lsp.rbs +14 -0
- data/sig/ibex/cli/outputs.rbs +17 -0
- data/sig/ibex/cli/racc_migration.rbs +30 -0
- data/sig/ibex/cli/samples.rbs +30 -0
- data/sig/ibex/cli/watch.rbs +43 -0
- data/sig/ibex/cli.rbs +104 -5
- 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 +85 -0
- data/sig/ibex/codegen/generated_action_abi.rbs +101 -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 +84 -4
- data/sig/ibex/codegen/report.rbs +8 -0
- data/sig/ibex/codegen/ruby.rbs +97 -23
- 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 +25 -0
- data/sig/ibex/codegen/ruby_table_metadata.rbs +26 -0
- data/sig/ibex/codegen/ruby_value_printers.rbs +28 -0
- data/sig/ibex/coverage/collector.rbs +76 -0
- data/sig/ibex/coverage/event_stream.rbs +42 -0
- data/sig/ibex/coverage/report.rbs +100 -0
- data/sig/ibex/coverage/runtime_event_validator.rbs +68 -0
- data/sig/ibex/coverage.rbs +7 -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/frontend/ast.rbs +208 -19
- data/sig/ibex/frontend/bootstrap_parser.rbs +11 -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 +135 -0
- data/sig/ibex/frontend/generated_parser.rbs +218 -68
- data/sig/ibex/frontend/generated_parser_base.rbs +61 -10
- 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 +54 -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/regenerator.rbs +11 -0
- data/sig/ibex/frontend/resolution.rbs +33 -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 +36 -3
- 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 +53 -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 +73 -5
- data/sig/ibex/frontend/token_adapter/rule_state.rbs +20 -0
- data/sig/ibex/frontend/token_adapter.rbs +5 -2
- data/sig/ibex/frontend.rbs +1 -1
- data/sig/ibex/generation_input.rbs +37 -0
- data/sig/ibex/generation_manifest.rbs +67 -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 +8 -2
- data/sig/ibex/ir/grammar_ir.rbs +75 -15
- data/sig/ibex/ir/lexer_ir.rbs +57 -0
- data/sig/ibex/ir/migration.rbs +34 -0
- data/sig/ibex/ir/serialize.rbs +23 -6
- data/sig/ibex/ir/validator/automaton.rbs +109 -0
- data/sig/ibex/ir/validator/base.rbs +65 -0
- data/sig/ibex/ir/validator/grammar.rbs +184 -0
- data/sig/ibex/ir/validator/lexer.rbs +37 -0
- data/sig/ibex/ir/validator.rbs +16 -0
- data/sig/ibex/ir.rbs +38 -4
- data/sig/ibex/lalr/build_metrics.rbs +20 -0
- data/sig/ibex/lalr/builder.rbs +95 -15
- data/sig/ibex/lalr/conflict_search.rbs +7 -3
- data/sig/ibex/lalr/counterexample.rbs +5 -2
- data/sig/ibex/lalr/direct_lookaheads.rbs +86 -0
- data/sig/ibex/lalr/ielr_partition.rbs +59 -0
- data/sig/ibex/lalr/on_error_reductions.rbs +22 -0
- data/sig/ibex/lalr.rbs +6 -0
- 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 +30 -0
- data/sig/ibex/lsp/position_codec.rbs +40 -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 +78 -0
- data/sig/ibex/lsp/symbol_index_builder.rbs +87 -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 +25 -0
- data/sig/ibex/lsp/transport.rbs +35 -0
- data/sig/ibex/lsp/workspace.rbs +41 -0
- data/sig/ibex/lsp/workspace_analyzer.rbs +69 -0
- data/sig/ibex/lsp.rbs +7 -0
- data/sig/ibex/normalize/declarations.rbs +31 -0
- data/sig/ibex/normalize/diagnostics.rbs +9 -0
- data/sig/ibex/normalize/expander.rbs +20 -14
- data/sig/ibex/normalize/expression.rbs +10 -10
- data/sig/ibex/normalize/inline_expansion.rbs +120 -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 +32 -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 +46 -0
- data/sig/ibex/normalize/recovery_declarations.rbs +24 -0
- data/sig/ibex/normalize.rbs +123 -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 +53 -0
- data/sig/ibex/racc_migration.rbs +8 -0
- data/sig/ibex/rake_task.rbs +51 -0
- data/sig/ibex/samples.rbs +51 -0
- data/sig/ibex/table_simulation/result.rbs +32 -0
- data/sig/ibex/table_simulation/simulator.rbs +98 -0
- data/sig/ibex/table_simulation/step.rbs +40 -0
- data/sig/ibex/table_simulation/text.rbs +14 -0
- data/sig/ibex/table_simulation.rbs +7 -0
- data/sig/ibex/tables.rbs +0 -26
- data/sig/ibex/watch/runner.rbs +48 -0
- data/sig/ibex/watch/source_snapshot.rbs +42 -0
- data/sig/ibex/watch.rbs +7 -0
- data/sig/ibex.rbs +2 -0
- metadata +301 -16
- data/.rubocop.yml +0 -43
- data/CHANGELOG.md +0 -30
- data/Rakefile +0 -25
- data/Steepfile +0 -10
- data/docs/compat-notes.md +0 -37
- data/docs/lexer-coverage.md +0 -14
- data/docs/phase10-extensions.md +0 -27
- data/gemfiles/Gemfile +0 -7
- data/gemfiles/Gemfile.lock +0 -98
- data/lib/ibex/frontend/grammar.y +0 -156
- data/lib/ibex/runtime/parser.rb +0 -360
- data/lib/ibex/runtime.rb +0 -8
- data/sig/ibex/runtime/parser.rbs +0 -167
- data/sig/ibex/runtime.rbs +0 -6
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Generated from lib/ibex/ir/validator/base.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module IR
|
|
5
|
+
module Validator
|
|
6
|
+
# Shared JSON-shape checks for the two version-1 IR documents.
|
|
7
|
+
class Base
|
|
8
|
+
POSITION: ::String
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
# @rbs (untyped value, String path, Array[String] required, ?Array[String] optional) -> Hash[String, untyped]
|
|
13
|
+
def record: (untyped value, String path, Array[String] required, ?Array[String] optional) -> Hash[String, untyped]
|
|
14
|
+
|
|
15
|
+
# @rbs (untyped value, String path) -> Hash[String, untyped]
|
|
16
|
+
def object: (untyped value, String path) -> Hash[String, untyped]
|
|
17
|
+
|
|
18
|
+
# @rbs (untyped value, String path) -> Array[untyped]
|
|
19
|
+
def array: (untyped value, String path) -> Array[untyped]
|
|
20
|
+
|
|
21
|
+
# @rbs (untyped value, String path) -> String
|
|
22
|
+
def string: (untyped value, String path) -> String
|
|
23
|
+
|
|
24
|
+
# @rbs (untyped value, String path) -> String
|
|
25
|
+
def nonempty_string: (untyped value, String path) -> String
|
|
26
|
+
|
|
27
|
+
# @rbs (untyped value, String path) -> Integer
|
|
28
|
+
def integer: (untyped value, String path) -> Integer
|
|
29
|
+
|
|
30
|
+
# @rbs (untyped value, String path) -> Integer
|
|
31
|
+
def nonnegative_integer: (untyped value, String path) -> Integer
|
|
32
|
+
|
|
33
|
+
# @rbs (untyped value, String path) -> bool
|
|
34
|
+
def boolean: (untyped value, String path) -> bool
|
|
35
|
+
|
|
36
|
+
# @rbs (untyped value, String path, untyped expected) -> void
|
|
37
|
+
def literal: (untyped value, String path, untyped expected) -> void
|
|
38
|
+
|
|
39
|
+
# @rbs (untyped value, String path, Array[String] values) -> String
|
|
40
|
+
def enum: (untyped value, String path, Array[String] values) -> String
|
|
41
|
+
|
|
42
|
+
# @rbs (untyped value, String path, ?nullable: bool) -> void
|
|
43
|
+
def location: (untyped value, String path, ?nullable: bool) -> void
|
|
44
|
+
|
|
45
|
+
# @rbs (untyped value, String path) -> Integer
|
|
46
|
+
def positive_integer: (untyped value, String path) -> Integer
|
|
47
|
+
|
|
48
|
+
# @rbs (untyped value, String path) -> String?
|
|
49
|
+
def nullable_string: (untyped value, String path) -> String?
|
|
50
|
+
|
|
51
|
+
# @rbs (untyped value, String path) -> void
|
|
52
|
+
def metadata: (untyped value, String path) -> void
|
|
53
|
+
|
|
54
|
+
# @rbs (Hash[String, untyped] value, String key, String path) -> untyped
|
|
55
|
+
def field: (Hash[String, untyped] value, String key, String path) -> untyped
|
|
56
|
+
|
|
57
|
+
# @rbs (String path, String key) -> String
|
|
58
|
+
def child_path: (String path, String key) -> String
|
|
59
|
+
|
|
60
|
+
# @rbs (String path, String message) -> bot
|
|
61
|
+
def invalid: (String path, String message) -> bot
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# Generated from lib/ibex/ir/validator/grammar.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module IR
|
|
5
|
+
module Validator
|
|
6
|
+
# Structural and referential validation for a versioned Grammar IR JSON object.
|
|
7
|
+
# rubocop:disable Metrics/ClassLength -- inline type contracts accompany one cohesive document validator.
|
|
8
|
+
class GrammarDocument < Base
|
|
9
|
+
ROOT_REQUIRED: Array[String]
|
|
10
|
+
|
|
11
|
+
ROOT_OPTIONAL: Array[String]
|
|
12
|
+
|
|
13
|
+
V2_ROOT_REQUIRED: Array[String]
|
|
14
|
+
|
|
15
|
+
V2_ROOT_OPTIONAL: Array[String]
|
|
16
|
+
|
|
17
|
+
SYMBOL_REQUIRED: Array[String]
|
|
18
|
+
|
|
19
|
+
SYMBOL_OPTIONAL: Array[String]
|
|
20
|
+
|
|
21
|
+
V2_SYMBOL_REQUIRED: Array[String]
|
|
22
|
+
|
|
23
|
+
PRODUCTION_REQUIRED: Array[String]
|
|
24
|
+
|
|
25
|
+
V2_PRODUCTION_REQUIRED: Array[String]
|
|
26
|
+
|
|
27
|
+
V2_ACTION_REQUIRED: Array[String]
|
|
28
|
+
|
|
29
|
+
ORIGIN_KINDS: Array[String]
|
|
30
|
+
|
|
31
|
+
RUBY_KEYWORDS: Array[String]
|
|
32
|
+
|
|
33
|
+
attr_reader symbols_by_id: Hash[Integer, Hash[String, untyped]]
|
|
34
|
+
|
|
35
|
+
attr_reader symbols_by_name: Hash[String, Hash[String, untyped]]
|
|
36
|
+
|
|
37
|
+
attr_reader productions_by_id: Hash[Integer, Hash[String, untyped]]
|
|
38
|
+
|
|
39
|
+
@version: Integer
|
|
40
|
+
|
|
41
|
+
@path: String
|
|
42
|
+
|
|
43
|
+
@data: Hash[String, untyped]
|
|
44
|
+
|
|
45
|
+
# @rbs (Hash[String, untyped] data, ?path: String, ?version: Integer) -> void
|
|
46
|
+
def initialize: (Hash[String, untyped] data, ?path: String, ?version: Integer) -> void
|
|
47
|
+
|
|
48
|
+
# @rbs () -> self
|
|
49
|
+
def validate: () -> self
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
# @rbs () -> void
|
|
54
|
+
def validate_envelope: () -> void
|
|
55
|
+
|
|
56
|
+
# @rbs () -> void
|
|
57
|
+
def validate_header: () -> void
|
|
58
|
+
|
|
59
|
+
# @rbs () -> void
|
|
60
|
+
def validate_options: () -> void
|
|
61
|
+
|
|
62
|
+
# @rbs () -> void
|
|
63
|
+
def validate_parser_parameters: () -> void
|
|
64
|
+
|
|
65
|
+
# @rbs () -> void
|
|
66
|
+
def validate_value_printers: () -> void
|
|
67
|
+
|
|
68
|
+
# @rbs () -> void
|
|
69
|
+
def validate_grammar_tests: () -> void
|
|
70
|
+
|
|
71
|
+
# @rbs () -> void
|
|
72
|
+
def validate_symbols: () -> void
|
|
73
|
+
|
|
74
|
+
# @rbs (untyped value, Integer index) -> void
|
|
75
|
+
def validate_symbol: (untyped value, Integer index) -> void
|
|
76
|
+
|
|
77
|
+
# @rbs (untyped value, String path) -> void
|
|
78
|
+
def validate_precedence: (untyped value, String path) -> void
|
|
79
|
+
|
|
80
|
+
# @rbs () -> void
|
|
81
|
+
def validate_reserved_symbols: () -> void
|
|
82
|
+
|
|
83
|
+
# @rbs (Integer id, String name) -> void
|
|
84
|
+
def validate_reserved_symbol: (Integer id, String name) -> void
|
|
85
|
+
|
|
86
|
+
# @rbs () -> void
|
|
87
|
+
def validate_start: () -> void
|
|
88
|
+
|
|
89
|
+
# @rbs (String start) -> void
|
|
90
|
+
def validate_multiple_starts: (String start) -> void
|
|
91
|
+
|
|
92
|
+
# @rbs () -> void
|
|
93
|
+
def validate_recovery: () -> void
|
|
94
|
+
|
|
95
|
+
# @rbs (untyped values, String path, kind: String) -> void
|
|
96
|
+
def validate_recovery_symbols: (untyped values, String path, kind: String) -> void
|
|
97
|
+
|
|
98
|
+
# @rbs (untyped value, String path, kind: String, seen: Hash[String, bool]) -> void
|
|
99
|
+
def validate_recovery_symbol: (untyped value, String path, kind: String, seen: Hash[String, bool]) -> void
|
|
100
|
+
|
|
101
|
+
# @rbs () -> void
|
|
102
|
+
def validate_productions: () -> void
|
|
103
|
+
|
|
104
|
+
# @rbs (untyped value, Integer index) -> void
|
|
105
|
+
def validate_production: (untyped value, Integer index) -> void
|
|
106
|
+
|
|
107
|
+
# @rbs (untyped value, String path, rhs_length: Integer) -> void
|
|
108
|
+
def validate_node_annotation: (untyped value, String path, rhs_length: Integer) -> void
|
|
109
|
+
|
|
110
|
+
# @rbs (untyped value, String path) -> void
|
|
111
|
+
def validate_lhs: (untyped value, String path) -> void
|
|
112
|
+
|
|
113
|
+
# @rbs (untyped value, String path) -> void
|
|
114
|
+
def validate_rhs: (untyped value, String path) -> void
|
|
115
|
+
|
|
116
|
+
# @rbs (untyped value, String path, rhs_length: Integer) -> void
|
|
117
|
+
def validate_action: (untyped value, String path, rhs_length: Integer) -> void
|
|
118
|
+
|
|
119
|
+
# @rbs (untyped value, String path, limit: Integer) -> void
|
|
120
|
+
def validate_named_refs: (untyped value, String path, limit: Integer) -> void
|
|
121
|
+
|
|
122
|
+
# @rbs (untyped value, String path) -> void
|
|
123
|
+
def validate_precedence_override: (untyped value, String path) -> void
|
|
124
|
+
|
|
125
|
+
# @rbs (untyped value, String path) -> void
|
|
126
|
+
def validate_origin: (untyped value, String path) -> void
|
|
127
|
+
|
|
128
|
+
# @rbs (untyped value, String path) -> void
|
|
129
|
+
def validate_string_map: (untyped value, String path) -> void
|
|
130
|
+
|
|
131
|
+
# @rbs () -> void
|
|
132
|
+
def validate_warnings: () -> void
|
|
133
|
+
|
|
134
|
+
# @rbs (untyped value, String path) -> void
|
|
135
|
+
def validate_warning: (untyped value, String path) -> void
|
|
136
|
+
|
|
137
|
+
# @rbs (Hash[String, untyped] warning, String path) -> void
|
|
138
|
+
def validate_warning_symbol: (Hash[String, untyped] warning, String path) -> void
|
|
139
|
+
|
|
140
|
+
# @rbs (Hash[String, untyped] warning, String field_name, String path) -> void
|
|
141
|
+
def validate_warning_production: (Hash[String, untyped] warning, String field_name, String path) -> void
|
|
142
|
+
|
|
143
|
+
# @rbs () -> void
|
|
144
|
+
def validate_lexer: () -> void
|
|
145
|
+
|
|
146
|
+
# @rbs () -> void
|
|
147
|
+
def validate_user_code_chunks: () -> void
|
|
148
|
+
|
|
149
|
+
# @rbs (untyped value, String path, ?nullable: bool) -> void
|
|
150
|
+
def validate_source_provenance: (untyped value, String path, ?nullable: bool) -> void
|
|
151
|
+
|
|
152
|
+
# @rbs (untyped value, String path) -> void
|
|
153
|
+
def validate_byte_span: (untyped value, String path) -> void
|
|
154
|
+
|
|
155
|
+
# @rbs () -> void
|
|
156
|
+
def validate_migration: () -> void
|
|
157
|
+
|
|
158
|
+
# @rbs (untyped value, String path) -> void
|
|
159
|
+
def validate_expansion: (untyped value, String path) -> void
|
|
160
|
+
|
|
161
|
+
# @rbs (untyped value, String path) -> void
|
|
162
|
+
def validate_parameter_expansion: (untyped value, String path) -> void
|
|
163
|
+
|
|
164
|
+
# @rbs (untyped value, String path) -> void
|
|
165
|
+
def validate_inline_expansion: (untyped value, String path) -> void
|
|
166
|
+
|
|
167
|
+
# @rbs (untyped value, String path, rhs_length: Integer) -> void
|
|
168
|
+
def validate_action_composition: (untyped value, String path, rhs_length: Integer) -> void
|
|
169
|
+
|
|
170
|
+
# @rbs (untyped value, String path, Integer rhs_length, Array[untyped] fragments) -> void
|
|
171
|
+
def validate_action_composition_plan: (untyped value, String path, Integer rhs_length, Array[untyped] fragments) -> void
|
|
172
|
+
|
|
173
|
+
# @rbs (untyped value, String path, Integer physical, Integer step_index) -> void
|
|
174
|
+
def validate_action_composition_step: (untyped value, String path, Integer physical, Integer step_index) -> void
|
|
175
|
+
|
|
176
|
+
# @rbs (Array[untyped] inputs, String path, Integer limit) -> void
|
|
177
|
+
def validate_action_slots: (Array[untyped] inputs, String path, Integer limit) -> void
|
|
178
|
+
|
|
179
|
+
# @rbs (untyped value, String path, Integer physical) -> void
|
|
180
|
+
def validate_action_lookahead: (untyped value, String path, Integer physical) -> void
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Generated from lib/ibex/ir/validator/lexer.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module IR
|
|
5
|
+
module Validator
|
|
6
|
+
# Structural validation for the independently versioned Lexer IR.
|
|
7
|
+
class LexerDocument < Base
|
|
8
|
+
ROOT_REQUIRED: Array[String]
|
|
9
|
+
|
|
10
|
+
RULE_REQUIRED: Array[String]
|
|
11
|
+
|
|
12
|
+
# @rbs (Hash[String, untyped] data, ?path: String) -> void
|
|
13
|
+
def initialize: (Hash[String, untyped] data, ?path: String) -> void
|
|
14
|
+
|
|
15
|
+
# @rbs () -> self
|
|
16
|
+
def validate: () -> self
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
# @rbs () -> void
|
|
21
|
+
def validate_states: () -> void
|
|
22
|
+
|
|
23
|
+
# @rbs () -> void
|
|
24
|
+
def validate_rules: () -> void
|
|
25
|
+
|
|
26
|
+
# @rbs (Hash[String, untyped] rule, String path, String options) -> void
|
|
27
|
+
def validate_pattern: (Hash[String, untyped] rule, String path, String options) -> void
|
|
28
|
+
|
|
29
|
+
# @rbs () -> void
|
|
30
|
+
def validate_warnings: () -> void
|
|
31
|
+
|
|
32
|
+
# @rbs () -> void
|
|
33
|
+
def validate_source_provenance: () -> void
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Generated from lib/ibex/ir/validator.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module IR
|
|
5
|
+
# Validates a serialized public IR document before constructing immutable IR objects.
|
|
6
|
+
module Validator
|
|
7
|
+
POSITION: ::String
|
|
8
|
+
|
|
9
|
+
# @rbs (String source) -> (Grammar | Automaton | Lexer)
|
|
10
|
+
def self?.validate: (String source) -> (Grammar | Automaton | Lexer)
|
|
11
|
+
|
|
12
|
+
# @rbs (Automaton automaton) -> void
|
|
13
|
+
def self?.validate_automaton_digest: (Automaton automaton) -> void
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
data/sig/ibex/ir.rbs
CHANGED
|
@@ -8,9 +8,43 @@ module Ibex
|
|
|
8
8
|
|
|
9
9
|
type named_ref = { name: String, index: Integer }
|
|
10
10
|
|
|
11
|
+
type byte_span = { start: Integer, end: Integer }
|
|
12
|
+
|
|
13
|
+
type source_provenance = { file: String?, root: String?, byte_span: byte_span? }
|
|
14
|
+
|
|
15
|
+
type parser_parameter = { name: String, semantic_type: String? }
|
|
16
|
+
|
|
17
|
+
type value_printer = { symbol: String, code: String, loc: location }
|
|
18
|
+
|
|
19
|
+
type recovery_policy = { sync_tokens: Array[String], on_error_reduce: Array[Array[String]] }
|
|
20
|
+
|
|
21
|
+
type grammar_test = { expectation: :accept | :reject, source: String, loc: location }
|
|
22
|
+
|
|
23
|
+
type node_annotation = { name: String, fields: Array[String], loc: location }
|
|
24
|
+
|
|
25
|
+
type lexer_warning = { type: :redos, rule: Integer, loc: location }
|
|
26
|
+
|
|
27
|
+
type parameter_expansion = { rule: String, arguments: Array[String] }
|
|
28
|
+
|
|
29
|
+
type inline_expansion = { rule: String }
|
|
30
|
+
|
|
31
|
+
type production_expansion = { parameter: parameter_expansion?, inline: inline_expansion?, include_chain: Array[source_provenance] }
|
|
32
|
+
|
|
33
|
+
type action_fragment = { kind: :rule | :inline, source: source_provenance? }
|
|
34
|
+
|
|
35
|
+
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? }
|
|
36
|
+
|
|
37
|
+
type action_composition_plan = { version: Integer, physical: Integer, steps: Array[action_composition_step] }
|
|
38
|
+
|
|
39
|
+
type action_composition = { strategy: String, fragments: Array[action_fragment], ?plan: action_composition_plan }
|
|
40
|
+
|
|
41
|
+
type migration_metadata = { from_schema_version: Integer, unavailable: Array[String] }
|
|
42
|
+
|
|
11
43
|
type user_code_chunks = Hash[String, Array[UserCodeChunk]]
|
|
12
44
|
|
|
13
|
-
type grammar_options = { result_var: bool, omit_action_call: bool }
|
|
45
|
+
type grammar_options = { result_var: bool, omit_action_call: bool, ?cst: bool }
|
|
46
|
+
|
|
47
|
+
type grammar_mode = :default | :extended
|
|
14
48
|
|
|
15
49
|
type grammar_warning = { type: Symbol, ?symbol: String, ?production: Integer, ?original: Integer, loc: location? }
|
|
16
50
|
|
|
@@ -28,13 +62,13 @@ module Ibex
|
|
|
28
62
|
|
|
29
63
|
type conflict_resolution = { by: Symbol, chose: Symbol | Integer, ?associativity: Symbol }
|
|
30
64
|
|
|
31
|
-
type shift_reduce_conflict = { type: :shift_reduce, symbol: String, shift_to: Integer, reduce: Integer, resolution: conflict_resolution }
|
|
65
|
+
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
66
|
|
|
33
|
-
type reduce_reduce_conflict = { type: :reduce_reduce, symbol: String, reductions: Array[Integer], resolution: conflict_resolution }
|
|
67
|
+
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
68
|
|
|
35
69
|
type conflict = shift_reduce_conflict | reduce_reduce_conflict
|
|
36
70
|
|
|
37
|
-
type conflict_summary = { sr: Integer, resolved_sr: Integer, rr: Integer, expected_sr: Integer, expectation_met: bool }
|
|
71
|
+
type conflict_summary = { sr: Integer, resolved_sr: Integer, rr: Integer, expected_sr: Integer, expectation_met: bool, ?expected_rr: Integer, ?rr_expectation_met: bool }
|
|
38
72
|
|
|
39
73
|
type interpretation = Hash[Symbol, untyped]
|
|
40
74
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Generated from lib/ibex/lalr/build_metrics.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module LALR
|
|
5
|
+
# Immutable structural measurements from one automaton build. These counts
|
|
6
|
+
# are intended for diagnostics and benchmarks, not parser behavior.
|
|
7
|
+
class BuildMetrics
|
|
8
|
+
attr_reader construction_states: Integer
|
|
9
|
+
|
|
10
|
+
attr_reader canonical_states: Integer?
|
|
11
|
+
|
|
12
|
+
attr_reader final_states: Integer
|
|
13
|
+
|
|
14
|
+
attr_reader strategy: Symbol
|
|
15
|
+
|
|
16
|
+
# @rbs (construction_states: Integer, canonical_states: Integer?, final_states: Integer, strategy: Symbol) -> void
|
|
17
|
+
def initialize: (construction_states: Integer, canonical_states: Integer?, final_states: Integer, strategy: Symbol) -> void
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
data/sig/ibex/lalr/builder.rbs
CHANGED
|
@@ -2,30 +2,61 @@
|
|
|
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
|
|
|
12
|
+
LALR_STRATEGIES: Array[Symbol]
|
|
13
|
+
|
|
14
|
+
@canonical_key_radices: [ Integer, Integer, Integer ]?
|
|
15
|
+
|
|
16
|
+
@canonical_item_cache: Hash[Integer, Array[Array[lr_item?]?]]?
|
|
17
|
+
|
|
18
|
+
@canonical_suffix_lookahead_cache: Hash[Integer, Hash[Integer, Hash[Integer, Array[Integer]]]]
|
|
19
|
+
|
|
20
|
+
@attribute_entries: bool
|
|
21
|
+
|
|
22
|
+
@entry_isolation: bool
|
|
23
|
+
|
|
24
|
+
@start_names: Array[String]
|
|
25
|
+
|
|
26
|
+
@metrics: BuildMetrics?
|
|
27
|
+
|
|
11
28
|
@resolver: ConflictResolver
|
|
12
29
|
|
|
13
30
|
@productions_by_lhs: Hash[Integer, Array[IR::Production]]
|
|
14
31
|
|
|
15
32
|
@sets: Analysis::Sets
|
|
16
33
|
|
|
34
|
+
@lalr_strategy: Symbol
|
|
35
|
+
|
|
17
36
|
@algorithm: Symbol
|
|
18
37
|
|
|
19
38
|
@grammar: IR::Grammar
|
|
20
39
|
|
|
21
|
-
|
|
22
|
-
|
|
40
|
+
attr_reader metrics: BuildMetrics?
|
|
41
|
+
|
|
42
|
+
# @rbs (IR::Grammar grammar, ?algorithm: Symbol | String, ?lalr_strategy: Symbol | String,
|
|
43
|
+
# ?entry_isolation: bool, ?starts: Array[String]?, ?attribute_entries: bool) -> void
|
|
44
|
+
def initialize: (IR::Grammar grammar, ?algorithm: Symbol | String, ?lalr_strategy: Symbol | String, ?entry_isolation: bool, ?starts: Array[String]?, ?attribute_entries: bool) -> void
|
|
23
45
|
|
|
24
46
|
# @rbs () -> IR::Automaton
|
|
25
47
|
def build: () -> IR::Automaton
|
|
26
48
|
|
|
27
49
|
private
|
|
28
50
|
|
|
51
|
+
# @rbs (Array[IR::AutomatonState] states) -> IR::conflict_summary
|
|
52
|
+
def conflict_summary: (Array[IR::AutomatonState] states) -> IR::conflict_summary
|
|
53
|
+
|
|
54
|
+
# @rbs () -> [Array[packed_items], transitions, Integer, Integer?, Symbol]
|
|
55
|
+
def automaton_collection: () -> [ Array[packed_items], transitions, Integer, Integer?, Symbol ]
|
|
56
|
+
|
|
57
|
+
# @rbs () -> String
|
|
58
|
+
def algorithm_name: () -> String
|
|
59
|
+
|
|
29
60
|
# @rbs () -> [Array[item_set], transitions]
|
|
30
61
|
def canonical_collection: () -> [ Array[item_set], transitions ]
|
|
31
62
|
|
|
@@ -35,21 +66,21 @@ module Ibex
|
|
|
35
66
|
# @rbs (Array[Integer] suffix, Integer inherited) -> Array[Integer]
|
|
36
67
|
def suffix_lookaheads: (Array[Integer] suffix, Integer inherited) -> Array[Integer]
|
|
37
68
|
|
|
69
|
+
# @rbs (Integer production_id, Integer dot, Integer inherited) -> Array[Integer]
|
|
70
|
+
def canonical_suffix_lookaheads: (Integer production_id, Integer dot, Integer inherited) -> Array[Integer]
|
|
71
|
+
|
|
72
|
+
# @rbs (Integer production_id, Integer dot, Integer lookahead) -> lr_item
|
|
73
|
+
def canonical_item: (Integer production_id, Integer dot, Integer lookahead) -> lr_item
|
|
74
|
+
|
|
38
75
|
# @rbs (item_set items, Array[lr_item] queue, lr_item item) -> void
|
|
39
76
|
def enqueue_item: (item_set items, Array[lr_item] queue, lr_item item) -> void
|
|
40
77
|
|
|
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
|
|
78
|
+
# @rbs (item_set items) -> Hash[Integer, item_set]
|
|
79
|
+
def shifted_kernels: (item_set items) -> Hash[Integer, item_set]
|
|
46
80
|
|
|
47
81
|
# @rbs (Array[item_set] states, transitions transitions) -> [Array[packed_items], transitions]
|
|
48
82
|
def merge_lalr: (Array[item_set] states, transitions transitions) -> [ Array[packed_items], transitions ]
|
|
49
83
|
|
|
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
84
|
# @rbs (Array[item_set] states) -> Array[packed_items]
|
|
54
85
|
def pack_canonical_items: (Array[item_set] states) -> Array[packed_items]
|
|
55
86
|
|
|
@@ -65,6 +96,12 @@ module Ibex
|
|
|
65
96
|
# @rbs (Integer state_id, Array[IR::AutomatonItem] items, Hash[Integer, Integer] transitions) -> IR::AutomatonState
|
|
66
97
|
def build_state: (Integer state_id, Array[IR::AutomatonItem] items, Hash[Integer, Integer] transitions) -> IR::AutomatonState
|
|
67
98
|
|
|
99
|
+
# Conflict hashes are produced locally immediately before this boundary.
|
|
100
|
+
# Keeping the parameter untyped avoids duplicating both discriminated
|
|
101
|
+
# hash variants solely to add their common optional provenance field.
|
|
102
|
+
# @rbs (untyped conflict) -> IR::conflict
|
|
103
|
+
def attribute_midrule_conflict: (untyped conflict) -> IR::conflict
|
|
104
|
+
|
|
68
105
|
# @rbs (Array[IR::AutomatonItem] items, Hash[Integer, Array[IR::parser_action]] candidates) -> void
|
|
69
106
|
def add_completed_actions: (Array[IR::AutomatonItem] items, Hash[Integer, Array[IR::parser_action]] candidates) -> void
|
|
70
107
|
|
|
@@ -75,11 +112,54 @@ module Ibex
|
|
|
75
112
|
# @rbs (Integer production_id) -> Array[Integer]
|
|
76
113
|
def rhs_for: (Integer production_id) -> Array[Integer]
|
|
77
114
|
|
|
78
|
-
# @rbs (
|
|
79
|
-
def
|
|
115
|
+
# @rbs () -> [Integer, Integer, Integer]
|
|
116
|
+
def canonical_key_radices: () -> [ Integer, Integer, Integer ]
|
|
117
|
+
|
|
118
|
+
# @rbs (item_set items) -> Array[Integer]
|
|
119
|
+
def core_key: (item_set items) -> Array[Integer]
|
|
120
|
+
|
|
121
|
+
# @rbs (item_set items) -> Array[Integer]
|
|
122
|
+
def item_key: (item_set items) -> Array[Integer]
|
|
123
|
+
|
|
124
|
+
# @rbs (String name) -> Integer
|
|
125
|
+
def augmented_production: (String name) -> Integer
|
|
126
|
+
|
|
127
|
+
# @rbs (Integer production_id) -> String
|
|
128
|
+
def start_name_for_augmented: (Integer production_id) -> String
|
|
129
|
+
|
|
130
|
+
# @rbs (Array[packed_items] items) -> Hash[String, Integer]
|
|
131
|
+
def entry_states_for: (Array[packed_items] items) -> Hash[String, Integer]
|
|
132
|
+
|
|
133
|
+
# @rbs () -> IR::Automaton
|
|
134
|
+
def build_isolated_automaton: () -> IR::Automaton
|
|
135
|
+
|
|
136
|
+
# @rbs (String name) -> [String, IR::Automaton, BuildMetrics]
|
|
137
|
+
def isolated_entry: (String name) -> [ String, IR::Automaton, BuildMetrics ]
|
|
138
|
+
|
|
139
|
+
# @rbs (IR::AutomatonState state, Integer offset, String entry) -> IR::AutomatonState
|
|
140
|
+
def offset_state: (IR::AutomatonState state, Integer offset, String entry) -> IR::AutomatonState
|
|
141
|
+
|
|
142
|
+
# @rbs (IR::parser_action action, Integer offset) -> IR::parser_action
|
|
143
|
+
def offset_action: (IR::parser_action action, Integer offset) -> IR::parser_action
|
|
144
|
+
|
|
145
|
+
# @rbs (IR::parser_action? action, Integer offset) -> IR::parser_action?
|
|
146
|
+
def offset_default_action: (IR::parser_action? action, Integer offset) -> IR::parser_action?
|
|
147
|
+
|
|
148
|
+
# @rbs (IR::conflict conflict, Integer offset, String entry) -> IR::conflict
|
|
149
|
+
def offset_conflict: (IR::conflict conflict, Integer offset, String entry) -> IR::conflict
|
|
150
|
+
|
|
151
|
+
# @rbs (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) ->
|
|
152
|
+
# Array[IR::AutomatonState]
|
|
153
|
+
def attribute_entry_conflicts: (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[IR::AutomatonState]
|
|
154
|
+
|
|
155
|
+
# @rbs (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[Array[String]]
|
|
156
|
+
def entry_reachability: (Array[IR::AutomatonState] states, Hash[String, Integer] entry_states) -> Array[Array[String]]
|
|
157
|
+
|
|
158
|
+
# @rbs () -> Set[Array[untyped]]
|
|
159
|
+
def isolated_conflict_fingerprints: () -> Set[Array[untyped]]
|
|
80
160
|
|
|
81
|
-
# @rbs (
|
|
82
|
-
def
|
|
161
|
+
# @rbs (IR::conflict conflict) -> Array[untyped]
|
|
162
|
+
def conflict_fingerprint: (IR::conflict conflict) -> Array[untyped]
|
|
83
163
|
end
|
|
84
164
|
end
|
|
85
165
|
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,6 +40,8 @@ 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
|
|
@@ -45,6 +49,9 @@ module Ibex
|
|
|
45
49
|
# @rbs () -> search_result?
|
|
46
50
|
def call: () -> search_result?
|
|
47
51
|
|
|
52
|
+
# @rbs () -> bool
|
|
53
|
+
def exhausted?: () -> bool
|
|
54
|
+
|
|
48
55
|
private
|
|
49
56
|
|
|
50
57
|
# @rbs (Configuration current) -> Array[Configuration]
|
|
@@ -123,9 +130,6 @@ module Ibex
|
|
|
123
130
|
|
|
124
131
|
# @rbs () -> Integer
|
|
125
132
|
def count_configuration: () -> Integer
|
|
126
|
-
|
|
127
|
-
# @rbs () -> bool
|
|
128
|
-
def exhausted?: () -> bool
|
|
129
133
|
end
|
|
130
134
|
end
|
|
131
135
|
end
|
|
@@ -14,6 +14,9 @@ module Ibex
|
|
|
14
14
|
# @rbs () -> Array[IR::counterexample]
|
|
15
15
|
def all: () -> Array[IR::counterexample]
|
|
16
16
|
|
|
17
|
+
# @rbs (Integer state_id, Integer conflict_index) -> IR::counterexample
|
|
18
|
+
def for_conflict: (Integer state_id, Integer conflict_index) -> IR::counterexample
|
|
19
|
+
|
|
17
20
|
private
|
|
18
21
|
|
|
19
22
|
# @rbs (IR::AutomatonState state, IR::conflict conflict) -> IR::counterexample
|
|
@@ -25,8 +28,8 @@ module Ibex
|
|
|
25
28
|
# @rbs (IR::AutomatonState state, IR::conflict conflict) -> IR::counterexample
|
|
26
29
|
def reachability_example: (IR::AutomatonState state, IR::conflict conflict) -> IR::counterexample
|
|
27
30
|
|
|
28
|
-
# @rbs (Integer target) -> Array[Integer]
|
|
29
|
-
def shortest_state_path: (Integer target) -> Array[Integer]
|
|
31
|
+
# @rbs (Integer target, IR::conflict conflict) -> Array[Integer]
|
|
32
|
+
def shortest_state_path: (Integer target, IR::conflict conflict) -> Array[Integer]
|
|
30
33
|
|
|
31
34
|
# @rbs () -> Hash[Integer, Array[Integer]]
|
|
32
35
|
def compute_shortest_yields: () -> Hash[Integer, Array[Integer]]
|