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/codegen/action_method_source.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Codegen
|
|
5
|
+
# Builds semantic method source shared by runtime and static shadow output.
|
|
6
|
+
class ActionMethodSource
|
|
7
|
+
@generated_action_abi: GeneratedActionABI::Cache
|
|
8
|
+
|
|
9
|
+
@grammar: IR::Grammar
|
|
10
|
+
|
|
11
|
+
# @rbs (IR::Grammar grammar, ?generated_action_abi: GeneratedActionABI::Cache?) -> void
|
|
12
|
+
def initialize: (IR::Grammar grammar, ?generated_action_abi: GeneratedActionABI::Cache?) -> void
|
|
13
|
+
|
|
14
|
+
# @rbs (IR::Production production, Hash[Symbol, untyped] step, Integer index) -> String
|
|
15
|
+
def composed_fragment_method_source: (IR::Production production, Hash[Symbol, untyped] step, Integer index) -> String
|
|
16
|
+
|
|
17
|
+
# @rbs (IR::Production production, Integer index) -> String
|
|
18
|
+
def composed_fragment_name: (IR::Production production, Integer index) -> String
|
|
19
|
+
|
|
20
|
+
# @rbs (IR::Production production) -> String
|
|
21
|
+
def compiled_action_method_source: (IR::Production production) -> String
|
|
22
|
+
|
|
23
|
+
# @rbs (IR::Production production) -> String
|
|
24
|
+
def direct_action_method_source: (IR::Production production) -> String
|
|
25
|
+
|
|
26
|
+
# @rbs (Integer symbol_id, IR::value_printer printer) -> String
|
|
27
|
+
def value_printer_method_source: (Integer symbol_id, IR::value_printer printer) -> String
|
|
28
|
+
|
|
29
|
+
# @rbs (String source) -> bool
|
|
30
|
+
def column_sensitive?: (String source) -> bool
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
# @rbs (IR::Production production) -> String
|
|
35
|
+
def action_parameters: (IR::Production production) -> String
|
|
36
|
+
|
|
37
|
+
# @rbs (IR::Production production, Integer index) -> String
|
|
38
|
+
def value_expression: (IR::Production production, Integer index) -> String
|
|
39
|
+
|
|
40
|
+
# @rbs (String source, ?production: IR::Production?) -> void
|
|
41
|
+
def append_parameter_values: (String source, ?production: IR::Production?) -> void
|
|
42
|
+
|
|
43
|
+
# @rbs (Array[String] lines, production: IR::Production) -> void
|
|
44
|
+
def append_direct_parameter_values: (Array[String] lines, production: IR::Production) -> void
|
|
45
|
+
|
|
46
|
+
# @rbs (Hash[Symbol, untyped] step) -> String
|
|
47
|
+
def composed_semantic_code: (Hash[Symbol, untyped] step) -> String
|
|
48
|
+
|
|
49
|
+
# @rbs (String source, Array[IR::named_ref] named_refs) -> void
|
|
50
|
+
def append_named_values: (String source, Array[IR::named_ref] named_refs) -> void
|
|
51
|
+
|
|
52
|
+
# @rbs (String source, IR::Production production, IR::Action action) -> void
|
|
53
|
+
def append_action_body: (String source, IR::Production production, IR::Action action) -> void
|
|
54
|
+
|
|
55
|
+
# @rbs (Array[String] lines, IR::Production production, IR::Action? action) -> void
|
|
56
|
+
def append_direct_action_body: (Array[String] lines, IR::Production production, IR::Action? action) -> void
|
|
57
|
+
|
|
58
|
+
# @rbs (IR::Production production, IR::Action action) -> String
|
|
59
|
+
def semantic_action_code: (IR::Production production, IR::Action action) -> String
|
|
60
|
+
|
|
61
|
+
# @rbs (IR::Production production) -> String
|
|
62
|
+
def default_value_expression: (IR::Production production) -> String
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Generated from lib/ibex/codegen/action_source.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Codegen
|
|
5
|
+
# Generates static-check-only Ruby containing semantic action methods.
|
|
6
|
+
class ActionSource
|
|
7
|
+
include RubyAST
|
|
8
|
+
|
|
9
|
+
@automaton: IR::Automaton
|
|
10
|
+
|
|
11
|
+
@grammar: IR::Grammar
|
|
12
|
+
|
|
13
|
+
@omit_action_call: bool
|
|
14
|
+
|
|
15
|
+
@method_source: ActionMethodSource
|
|
16
|
+
|
|
17
|
+
# @rbs (IR::Automaton automaton, ?omit_action_call: bool?) -> void
|
|
18
|
+
def initialize: (IR::Automaton automaton, ?omit_action_call: bool?) -> void
|
|
19
|
+
|
|
20
|
+
# @rbs () -> String
|
|
21
|
+
def generate: () -> String
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
# @rbs (Array[String] lines) -> void
|
|
26
|
+
def append_value_printers: (Array[String] lines) -> void
|
|
27
|
+
|
|
28
|
+
# @rbs (Array[String] lines) -> void
|
|
29
|
+
def append_actions: (Array[String] lines) -> void
|
|
30
|
+
|
|
31
|
+
# @rbs (Array[String] lines, IR::Production production) -> void
|
|
32
|
+
def append_composed_actions: (Array[String] lines, IR::Production production) -> void
|
|
33
|
+
|
|
34
|
+
# @rbs (Array[String] lines, IR::Production production) -> void
|
|
35
|
+
def append_action: (Array[String] lines, IR::Production production) -> void
|
|
36
|
+
|
|
37
|
+
# @rbs (Array[String] lines, IR::location location, String source) -> void
|
|
38
|
+
def append_method: (Array[String] lines, IR::location location, String source) -> void
|
|
39
|
+
|
|
40
|
+
# @rbs (IR::Production production) -> bool
|
|
41
|
+
def composed_action?: (IR::Production production) -> bool
|
|
42
|
+
|
|
43
|
+
# @rbs () -> [Array[String], String]
|
|
44
|
+
def class_parts: () -> [ Array[String], String ]
|
|
45
|
+
|
|
46
|
+
# @rbs () -> String
|
|
47
|
+
def grammar_digest_comment: () -> String
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Generated from lib/ibex/codegen/ambiguity.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Codegen
|
|
5
|
+
type ambiguity_search = { max_tokens: Integer, max_configurations: Integer }
|
|
6
|
+
|
|
7
|
+
type ambiguity_summary = { conflicts: Integer, ambiguous: Integer, not_found: Integer, configuration_budget_exhausted: Integer }
|
|
8
|
+
|
|
9
|
+
type ambiguity_check = { state: Integer, type: String, token: String, result: String, sentence: Array[String], lookahead_index: Integer?, interpretations: Array[IR::interpretation], explored_configurations: Integer, configuration_budget_exhausted: bool }
|
|
10
|
+
|
|
11
|
+
type ambiguity_document = { ibex_check: String, schema_version: Integer, algorithm: String, search: ambiguity_search, status: String, summary: ambiguity_summary, conflicts: Array[ambiguity_check] }
|
|
12
|
+
|
|
13
|
+
# Renders a bounded ambiguity search over every parser conflict.
|
|
14
|
+
class Ambiguity
|
|
15
|
+
SCHEMA_VERSION: Integer
|
|
16
|
+
|
|
17
|
+
@checks: Array[ambiguity_check]
|
|
18
|
+
|
|
19
|
+
@max_configurations: Integer
|
|
20
|
+
|
|
21
|
+
@max_tokens: Integer
|
|
22
|
+
|
|
23
|
+
@grammar: IR::Grammar
|
|
24
|
+
|
|
25
|
+
@automaton: IR::Automaton
|
|
26
|
+
|
|
27
|
+
# @rbs (IR::Automaton automaton, ?max_tokens: Integer, ?max_configurations: Integer) -> void
|
|
28
|
+
def initialize: (IR::Automaton automaton, ?max_tokens: Integer, ?max_configurations: Integer) -> void
|
|
29
|
+
|
|
30
|
+
# @rbs () -> Integer
|
|
31
|
+
def exit_status: () -> Integer
|
|
32
|
+
|
|
33
|
+
# @rbs () -> ambiguity_document
|
|
34
|
+
def to_h: () -> ambiguity_document
|
|
35
|
+
|
|
36
|
+
# @rbs () -> String
|
|
37
|
+
def render_text: () -> String
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
# @rbs () -> String
|
|
42
|
+
def status: () -> String
|
|
43
|
+
|
|
44
|
+
# @rbs () -> ambiguity_summary
|
|
45
|
+
def summary: () -> ambiguity_summary
|
|
46
|
+
|
|
47
|
+
# @rbs () -> Array[ambiguity_check]
|
|
48
|
+
def check_conflicts: () -> Array[ambiguity_check]
|
|
49
|
+
|
|
50
|
+
# @rbs (IR::AutomatonState state, IR::conflict conflict) -> ambiguity_check
|
|
51
|
+
def check_conflict: (IR::AutomatonState state, IR::conflict conflict) -> ambiguity_check
|
|
52
|
+
|
|
53
|
+
# @rbs (Array[Integer] ids) -> Array[String]
|
|
54
|
+
def symbol_names: (Array[Integer] ids) -> Array[String]
|
|
55
|
+
|
|
56
|
+
# @rbs (Array[String] lines, ambiguity_check check, Integer number) -> void
|
|
57
|
+
def append_check: (Array[String] lines, ambiguity_check check, Integer number) -> void
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Generated from lib/ibex/codegen/cst_metadata.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Codegen
|
|
5
|
+
# Builds the deterministic kind space embedded in CST-aware parser tables.
|
|
6
|
+
class CSTMetadata
|
|
7
|
+
type kind_map = Hash[String, Integer]
|
|
8
|
+
|
|
9
|
+
type kinds = { names: Array[String], terminal_range: Array[Integer], nonterminal_range: Array[Integer], named: kind_map, named_nonterminals: Hash[Integer, Integer], trivia: kind_map, synthetic: kind_map }
|
|
10
|
+
|
|
11
|
+
type field_slot = Integer | { index: Integer, extraction: Symbol }
|
|
12
|
+
|
|
13
|
+
type slot = { node_kind: Integer, node_name: String, fields: Hash[String, field_slot] }
|
|
14
|
+
|
|
15
|
+
type metadata = { version: Integer, trivia_policy: Symbol, kinds: kinds, slots: Hash[Integer, slot] }
|
|
16
|
+
|
|
17
|
+
TRIVIA_KINDS: Array[String]
|
|
18
|
+
|
|
19
|
+
SYNTHETIC_KINDS: Array[String]
|
|
20
|
+
|
|
21
|
+
@grammar: IR::Grammar
|
|
22
|
+
|
|
23
|
+
@trivia_policy: Symbol
|
|
24
|
+
|
|
25
|
+
# @rbs (IR::Grammar grammar, ?trivia_policy: Symbol | String) -> void
|
|
26
|
+
def initialize: (IR::Grammar grammar, ?trivia_policy: Symbol | String) -> void
|
|
27
|
+
|
|
28
|
+
# Return table-ready CST metadata with stable insertion order.
|
|
29
|
+
# @rbs () -> metadata
|
|
30
|
+
def build: () -> metadata
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
# @rbs (Symbol | String policy) -> Symbol
|
|
35
|
+
def normalize_trivia_policy: (Symbol | String policy) -> Symbol
|
|
36
|
+
|
|
37
|
+
# @rbs (Array[String] names) -> Hash[String, Integer]
|
|
38
|
+
def append_named_kinds: (Array[String] names) -> Hash[String, Integer]
|
|
39
|
+
|
|
40
|
+
# @rbs (Array[String] names, Array[String] additions) -> Hash[String, Integer]
|
|
41
|
+
def append_kinds: (Array[String] names, Array[String] additions) -> Hash[String, Integer]
|
|
42
|
+
|
|
43
|
+
# @rbs (Array[Integer] ids) -> Array[Integer]
|
|
44
|
+
def half_open_range: (Array[Integer] ids) -> Array[Integer]
|
|
45
|
+
|
|
46
|
+
# @rbs (Hash[String, Integer] named) -> Hash[Integer, Integer]
|
|
47
|
+
def named_nonterminals: (Hash[String, Integer] named) -> Hash[Integer, Integer]
|
|
48
|
+
|
|
49
|
+
# @rbs (Hash[String, Integer] named) -> Hash[Integer, slot]
|
|
50
|
+
def slot_metadata: (Hash[String, Integer] named) -> Hash[Integer, slot]
|
|
51
|
+
|
|
52
|
+
# @rbs (Integer index, Integer symbol_id) -> field_slot
|
|
53
|
+
def field_slot: (Integer index, Integer symbol_id) -> field_slot
|
|
54
|
+
|
|
55
|
+
# @rbs (Integer symbol_id) -> Symbol?
|
|
56
|
+
def repetition_extraction: (Integer symbol_id) -> Symbol?
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Generated from lib/ibex/codegen/documentation.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Codegen
|
|
5
|
+
# Renders normalized user rules as deterministic Markdown, HTML, or railroad SVG.
|
|
6
|
+
module Documentation
|
|
7
|
+
FORMATS: Array[String]
|
|
8
|
+
|
|
9
|
+
# @rbs (IR::Grammar grammar, format: String | Symbol) -> String
|
|
10
|
+
def self.render: (IR::Grammar grammar, format: String | Symbol) -> String
|
|
11
|
+
|
|
12
|
+
# @rbs (IR::Grammar grammar) -> String
|
|
13
|
+
private def self.render_markdown: (IR::Grammar grammar) -> String
|
|
14
|
+
|
|
15
|
+
# @rbs (Array[String] lines, String? documentation) -> void
|
|
16
|
+
private def self.append_markdown_documentation: (Array[String] lines, String? documentation) -> void
|
|
17
|
+
|
|
18
|
+
# @rbs (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels) -> String
|
|
19
|
+
private def self.markdown_alternative: (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels) -> String
|
|
20
|
+
|
|
21
|
+
# @rbs (IR::Grammar grammar) -> String
|
|
22
|
+
private def self.render_html: (IR::Grammar grammar) -> String
|
|
23
|
+
|
|
24
|
+
# @rbs (String title) -> Array[String]
|
|
25
|
+
private def self.html_start: (String title) -> Array[String]
|
|
26
|
+
|
|
27
|
+
# @rbs (Array[String] lines, IR::Grammar grammar, IR::GrammarSymbol symbol,
|
|
28
|
+
# Array[IR::Production] productions, Hash[Integer, String] labels) -> void
|
|
29
|
+
private def self.append_html_rule: (Array[String] lines, IR::Grammar grammar, IR::GrammarSymbol symbol, Array[IR::Production] productions, Hash[Integer, String] labels) -> void
|
|
30
|
+
|
|
31
|
+
# @rbs (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels) -> String
|
|
32
|
+
private def self.html_alternative: (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels) -> String
|
|
33
|
+
|
|
34
|
+
# @rbs (IR::Grammar grammar) -> Array[[IR::GrammarSymbol, Array[IR::Production]]]
|
|
35
|
+
private def self.rule_groups: (IR::Grammar grammar) -> Array[[ IR::GrammarSymbol, Array[IR::Production] ]]
|
|
36
|
+
|
|
37
|
+
# @rbs (String value) -> String
|
|
38
|
+
private def self.markdown_code: (String value) -> String
|
|
39
|
+
|
|
40
|
+
# @rbs (String value) -> bool
|
|
41
|
+
private def self.markdown_code_padding?: (String value) -> bool
|
|
42
|
+
|
|
43
|
+
# @rbs (String value) -> String
|
|
44
|
+
private def self.markdown_escape: (String value) -> String
|
|
45
|
+
|
|
46
|
+
# @rbs (String value) -> String
|
|
47
|
+
private def self.html_escape: (String value) -> String
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Generated from lib/ibex/codegen/explain.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Codegen
|
|
5
|
+
type explain_selection = { state: IR::AutomatonState, conflict: IR::conflict, conflict_index: Integer }
|
|
6
|
+
|
|
7
|
+
type explain_entry = { state: IR::AutomatonState, conflict: IR::conflict, example: IR::counterexample }
|
|
8
|
+
|
|
9
|
+
# Renders a selected conflict explanation from Automaton IR and counterexamples.
|
|
10
|
+
# rubocop:disable Metrics/ClassLength -- inline contracts and two stable output formats stay near selection policy.
|
|
11
|
+
class Explain
|
|
12
|
+
SCHEMA_VERSION: Integer
|
|
13
|
+
|
|
14
|
+
# @rbs (IR::Automaton automaton, ?state: Integer?, ?token: String?, ?max_tokens: Integer,
|
|
15
|
+
# ?max_configurations: Integer) -> void
|
|
16
|
+
def initialize: (IR::Automaton automaton, ?state: Integer?, ?token: String?, ?max_tokens: Integer, ?max_configurations: Integer) -> void
|
|
17
|
+
|
|
18
|
+
# @rbs () -> Hash[Symbol, untyped]
|
|
19
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
20
|
+
|
|
21
|
+
# @rbs () -> String
|
|
22
|
+
def render_text: () -> String
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
# @rbs (String? query) -> IR::GrammarSymbol?
|
|
27
|
+
def resolve_token: (String? query) -> IR::GrammarSymbol?
|
|
28
|
+
|
|
29
|
+
# @rbs () -> void
|
|
30
|
+
def validate_state!: () -> void
|
|
31
|
+
|
|
32
|
+
# @rbs () -> Array[explain_entry]
|
|
33
|
+
def select_entries: () -> Array[explain_entry]
|
|
34
|
+
|
|
35
|
+
# @rbs () -> Array[explain_selection]
|
|
36
|
+
def selected_conflicts: () -> Array[explain_selection]
|
|
37
|
+
|
|
38
|
+
# @rbs (explain_entry entry) -> Hash[Symbol, untyped]
|
|
39
|
+
def conflict_document: (explain_entry entry) -> Hash[Symbol, untyped]
|
|
40
|
+
|
|
41
|
+
# @rbs (IR::conflict conflict) -> Array[Hash[Symbol, untyped]]
|
|
42
|
+
def conflict_alternatives: (IR::conflict conflict) -> Array[Hash[Symbol, untyped]]
|
|
43
|
+
|
|
44
|
+
# @rbs (IR::interpretation interpretation) -> Hash[Symbol, untyped]
|
|
45
|
+
def interpretation_document: (IR::interpretation interpretation) -> Hash[Symbol, untyped]
|
|
46
|
+
|
|
47
|
+
# @rbs (untyped tree) -> untyped
|
|
48
|
+
def tree_document: (untyped tree) -> untyped
|
|
49
|
+
|
|
50
|
+
# @rbs (Hash[Symbol, untyped] value) -> Hash[Symbol, untyped]
|
|
51
|
+
def string_values: (Hash[Symbol, untyped] value) -> Hash[Symbol, untyped]
|
|
52
|
+
|
|
53
|
+
# @rbs (String name) -> Hash[Symbol, untyped]
|
|
54
|
+
def symbol_reference: (String name) -> Hash[Symbol, untyped]
|
|
55
|
+
|
|
56
|
+
# @rbs (IR::GrammarSymbol symbol, ?query: String?) -> Hash[Symbol, untyped]
|
|
57
|
+
def token_reference: (IR::GrammarSymbol symbol, ?query: String?) -> Hash[Symbol, untyped]
|
|
58
|
+
|
|
59
|
+
# @rbs (Array[String] lines, explain_entry entry, Integer number) -> void
|
|
60
|
+
def append_conflict: (Array[String] lines, explain_entry entry, Integer number) -> void
|
|
61
|
+
|
|
62
|
+
# @rbs (Array[String] lines, IR::conflict conflict) -> void
|
|
63
|
+
def append_midrule_origins: (Array[String] lines, IR::conflict conflict) -> void
|
|
64
|
+
|
|
65
|
+
# @rbs (Array[String] lines, IR::AutomatonState state, IR::conflict conflict,
|
|
66
|
+
# IR::counterexample example) -> void
|
|
67
|
+
def append_witness_steps: (Array[String] lines, IR::AutomatonState state, IR::conflict conflict, IR::counterexample example) -> void
|
|
68
|
+
|
|
69
|
+
# @rbs (Array[String] lines, IR::counterexample example) -> void
|
|
70
|
+
def append_interpretations: (Array[String] lines, IR::counterexample example) -> void
|
|
71
|
+
|
|
72
|
+
# @rbs (Hash[Symbol, untyped] alternative) -> String
|
|
73
|
+
def alternative_text: (Hash[Symbol, untyped] alternative) -> String
|
|
74
|
+
|
|
75
|
+
# @rbs (Array[String] lines, untyped tree, String prefix, String connector) -> void
|
|
76
|
+
def append_tree: (Array[String] lines, untyped tree, String prefix, String connector) -> void
|
|
77
|
+
|
|
78
|
+
# @rbs (IR::GrammarSymbol symbol, ?query: String?) -> String
|
|
79
|
+
def token_label: (IR::GrammarSymbol symbol, ?query: String?) -> String
|
|
80
|
+
|
|
81
|
+
# @rbs (String name) -> String
|
|
82
|
+
def display_name: (String name) -> String
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Generated from lib/ibex/codegen/generated_action_abi.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Codegen
|
|
5
|
+
# Selects the smallest generated semantic-action ABI that preserves the
|
|
6
|
+
# action's declared inputs.
|
|
7
|
+
# rubocop:disable Metrics/ModuleLength -- ABI proof and source rewriting must evolve together.
|
|
8
|
+
module GeneratedActionABI
|
|
9
|
+
LEGACY_PARAMETERS: Array[String]
|
|
10
|
+
|
|
11
|
+
SIMPLE_POSITIONAL_READ: Regexp
|
|
12
|
+
|
|
13
|
+
SIMPLE_POSITIONAL_UNSAFE: Regexp
|
|
14
|
+
|
|
15
|
+
# Keeps semantic-action analysis local to one code-generation run.
|
|
16
|
+
class Cache
|
|
17
|
+
@values_only: Hash[Integer, bool]
|
|
18
|
+
|
|
19
|
+
@borrowed_values: Hash[Integer, bool]
|
|
20
|
+
|
|
21
|
+
@positional_actions: Hash[Integer, String?]
|
|
22
|
+
|
|
23
|
+
# @rbs () -> void
|
|
24
|
+
def initialize: () -> void
|
|
25
|
+
|
|
26
|
+
# @rbs (IR::Production production) -> bool
|
|
27
|
+
def values_only?: (IR::Production production) -> bool
|
|
28
|
+
|
|
29
|
+
# @rbs (IR::Production production) -> bool
|
|
30
|
+
def borrowed_values?: (IR::Production production) -> bool
|
|
31
|
+
|
|
32
|
+
# @rbs (IR::Production production) -> String?
|
|
33
|
+
def positional_action_source: (IR::Production production) -> String?
|
|
34
|
+
|
|
35
|
+
# @rbs (IR::Production production) -> bool
|
|
36
|
+
def positional_values?: (IR::Production production) -> bool
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @rbs (IR::Production production) -> bool
|
|
40
|
+
def self?.values_only?: (IR::Production production) -> bool
|
|
41
|
+
|
|
42
|
+
# The direct runtime can share one reduction-values array with an action
|
|
43
|
+
# and a hook installed by that action only when the action cannot mutate
|
|
44
|
+
# or retain the array itself. Element reads and parallel assignment copy
|
|
45
|
+
# values out without exposing the container.
|
|
46
|
+
# @rbs (IR::Production production, ?analysis: singleton(GeneratedActionABI) | Cache) -> bool
|
|
47
|
+
def self?.borrowed_values?: (IR::Production production, ?analysis: singleton(GeneratedActionABI) | Cache) -> bool
|
|
48
|
+
|
|
49
|
+
# Return semantic source rewritten for zero-to-four positional RHS
|
|
50
|
+
# arguments, or nil when the values container remains observable.
|
|
51
|
+
# @rbs (IR::Production production, ?analysis: singleton(GeneratedActionABI) | Cache) -> String?
|
|
52
|
+
def self?.positional_action_source: (IR::Production production, ?analysis: singleton(GeneratedActionABI) | Cache) -> String?
|
|
53
|
+
|
|
54
|
+
# @rbs (String source, Array[String] parameters) -> String?
|
|
55
|
+
def self?.fast_positional_action_source: (String source, Array[String] parameters) -> String?
|
|
56
|
+
|
|
57
|
+
# @rbs (IR::Production production) -> bool
|
|
58
|
+
def self?.positional_values?: (IR::Production production) -> bool
|
|
59
|
+
|
|
60
|
+
# Avoid loading a Ruby parser for the overwhelmingly common generated
|
|
61
|
+
# action shape. This accepts only a single result assignment (or a bare
|
|
62
|
+
# expression), simple numeric val reads, and no further assignment.
|
|
63
|
+
# Anything less obvious falls back to Ripper below.
|
|
64
|
+
# @rbs (String source) -> bool
|
|
65
|
+
def self?.simple_indexed_values_action?: (String source) -> bool
|
|
66
|
+
|
|
67
|
+
# Keep the most common identity action off the Ripper load path. The
|
|
68
|
+
# whole-source match excludes strings, comments, receivers, and compound
|
|
69
|
+
# expressions before replacing the one direct read.
|
|
70
|
+
# @rbs (String source, Array[String] parameters) -> String?
|
|
71
|
+
def self?.simple_positional_action_source: (String source, Array[String] parameters) -> String?
|
|
72
|
+
|
|
73
|
+
# Rewrite the common string/comment/regexp-free action shape without
|
|
74
|
+
# loading Ripper. The borrowed-values proof has already rejected writes
|
|
75
|
+
# and escaping uses of the values container.
|
|
76
|
+
# @rbs (String source, Array[String] parameters) -> String?
|
|
77
|
+
def self?.simple_indexed_positional_action_source: (String source, Array[String] parameters) -> String?
|
|
78
|
+
|
|
79
|
+
# @rbs (Array[untyped] tokens, Array[String] parameters) -> String?
|
|
80
|
+
def self?.rewrite_positional_values: (Array[untyped] tokens, Array[String] parameters) -> String?
|
|
81
|
+
|
|
82
|
+
# @rbs (Array[untyped] tokens, Integer index, Array[String] parameters) -> [String, Integer]?
|
|
83
|
+
def self?.positional_value_reference: (Array[untyped] tokens, Integer index, Array[String] parameters) -> [ String, Integer ]?
|
|
84
|
+
|
|
85
|
+
# @rbs (Array[untyped] tokens, Integer index) -> bool
|
|
86
|
+
def self?.receiver_before_value?: (Array[untyped] tokens, Integer index) -> bool
|
|
87
|
+
|
|
88
|
+
# @rbs (String source) -> bool
|
|
89
|
+
def self?.references_legacy_parameter?: (String source) -> bool
|
|
90
|
+
|
|
91
|
+
# @rbs (untyped node, ?untyped parent, ?Integer? child_index) -> bool
|
|
92
|
+
def self?.read_only_value_references?: (untyped node, ?untyped parent, ?Integer? child_index) -> bool
|
|
93
|
+
|
|
94
|
+
# @rbs (untyped node) -> bool
|
|
95
|
+
def self?.value_reference?: (untyped node) -> bool
|
|
96
|
+
|
|
97
|
+
# @rbs (untyped parent, Integer? child_index) -> bool
|
|
98
|
+
def self?.safe_value_reference?: (untyped parent, Integer? child_index) -> bool
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
data/sig/ibex/codegen/html.rbs
CHANGED
|
@@ -8,6 +8,22 @@ module Ibex
|
|
|
8
8
|
|
|
9
9
|
private def self.state_sections: (IR::Automaton automaton, IR::Grammar grammar, Hash[Integer, String] labels) -> String
|
|
10
10
|
|
|
11
|
+
private def controls: (IR::Automaton automaton) -> String
|
|
12
|
+
|
|
13
|
+
private def self.controls: (IR::Automaton automaton) -> String
|
|
14
|
+
|
|
15
|
+
private def styles: () -> String
|
|
16
|
+
|
|
17
|
+
private def self.styles: () -> String
|
|
18
|
+
|
|
19
|
+
private def interaction_script: () -> String
|
|
20
|
+
|
|
21
|
+
private def self.interaction_script: () -> String
|
|
22
|
+
|
|
23
|
+
private def one_hop_neighbors: (IR::Automaton automaton, Integer state_id) -> Array[Integer]
|
|
24
|
+
|
|
25
|
+
private def self.one_hop_neighbors: (IR::Automaton automaton, Integer state_id) -> Array[Integer]
|
|
26
|
+
|
|
11
27
|
private def item_html: (IR::AutomatonItem item, IR::Grammar grammar, Hash[Integer, String] labels) -> String
|
|
12
28
|
|
|
13
29
|
private def self.item_html: (IR::AutomatonItem item, IR::Grammar grammar, Hash[Integer, String] labels) -> String
|
|
@@ -16,9 +32,9 @@ module Ibex
|
|
|
16
32
|
|
|
17
33
|
private def self.rule_sections: (IR::Grammar grammar, Hash[Integer, String] labels) -> String
|
|
18
34
|
|
|
19
|
-
private def conflict_sections: (IR::Automaton automaton) -> String
|
|
35
|
+
private def conflict_sections: (IR::Automaton automaton, IR::Grammar grammar, Hash[Integer, String] labels) -> String
|
|
20
36
|
|
|
21
|
-
private def self.conflict_sections: (IR::Automaton automaton) -> String
|
|
37
|
+
private def self.conflict_sections: (IR::Automaton automaton, IR::Grammar grammar, Hash[Integer, String] labels) -> String
|
|
22
38
|
|
|
23
39
|
private def escape: (String value) -> String
|
|
24
40
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Generated from lib/ibex/codegen/mermaid.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Codegen
|
|
5
|
+
# Renders an Automaton IR graph as a GitHub-compatible Mermaid flowchart.
|
|
6
|
+
module Mermaid
|
|
7
|
+
# @rbs (IR::Automaton automaton) -> String
|
|
8
|
+
def self?.render: (IR::Automaton automaton) -> String
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
# @rbs (String value) -> String
|
|
13
|
+
def self?.escape: (String value) -> String
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Generated from lib/ibex/codegen/railroad.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Codegen
|
|
5
|
+
# Renders normalized Grammar IR as a self-contained SVG railroad diagram.
|
|
6
|
+
module Railroad
|
|
7
|
+
CHAR_WIDTH: Integer
|
|
8
|
+
|
|
9
|
+
BOX_HEIGHT: Integer
|
|
10
|
+
|
|
11
|
+
BOX_PADDING: Integer
|
|
12
|
+
|
|
13
|
+
TRACK_GAP: Integer
|
|
14
|
+
|
|
15
|
+
ROW_HEIGHT: Integer
|
|
16
|
+
|
|
17
|
+
SECTION_HEADER: Integer
|
|
18
|
+
|
|
19
|
+
SECTION_GAP: Integer
|
|
20
|
+
|
|
21
|
+
PAGE_PADDING: Integer
|
|
22
|
+
|
|
23
|
+
TITLE_HEIGHT: Integer
|
|
24
|
+
|
|
25
|
+
EPSILON_WIDTH: Integer
|
|
26
|
+
|
|
27
|
+
START_RADIUS: Integer
|
|
28
|
+
|
|
29
|
+
END_RADIUS: Integer
|
|
30
|
+
|
|
31
|
+
MIN_RAIL_X: Integer
|
|
32
|
+
|
|
33
|
+
# @rbs STYLE: String
|
|
34
|
+
STYLE: ::String
|
|
35
|
+
|
|
36
|
+
extend RailroadDocumentation
|
|
37
|
+
|
|
38
|
+
# @rbs (IR::Grammar grammar) -> String
|
|
39
|
+
def self.render: (IR::Grammar grammar) -> String
|
|
40
|
+
|
|
41
|
+
# @rbs (IR::Grammar grammar) -> Array[[IR::GrammarSymbol, Array[IR::Production]]]
|
|
42
|
+
private def self.production_groups: (IR::Grammar grammar) -> Array[[ IR::GrammarSymbol, Array[IR::Production] ]]
|
|
43
|
+
|
|
44
|
+
# @rbs (IR::Grammar grammar, Array[[IR::GrammarSymbol, Array[IR::Production]]] groups,
|
|
45
|
+
# Hash[Integer, String] labels, Integer rail_x) -> Integer
|
|
46
|
+
private def self.document_width: (IR::Grammar grammar, Array[[ IR::GrammarSymbol, Array[IR::Production] ]] groups, Hash[Integer, String] labels, Integer rail_x) -> Integer
|
|
47
|
+
|
|
48
|
+
# @rbs (Array[[IR::GrammarSymbol, Array[IR::Production]]] groups) -> Integer
|
|
49
|
+
private def self.document_height: (Array[[ IR::GrammarSymbol, Array[IR::Production] ]] groups) -> Integer
|
|
50
|
+
|
|
51
|
+
# @rbs (IR::Grammar grammar, Integer width, Integer height) -> Array[String]
|
|
52
|
+
private def self.document_start: (IR::Grammar grammar, Integer width, Integer height) -> Array[String]
|
|
53
|
+
|
|
54
|
+
# @rbs (Array[String] lines, IR::Grammar grammar,
|
|
55
|
+
# Array[[IR::GrammarSymbol, Array[IR::Production]]] groups,
|
|
56
|
+
# Hash[Integer, String] labels, Integer rail_x) -> void
|
|
57
|
+
private def self.append_sections: (Array[String] lines, IR::Grammar grammar, Array[[ IR::GrammarSymbol, Array[IR::Production] ]] groups, Hash[Integer, String] labels, Integer rail_x) -> void
|
|
58
|
+
|
|
59
|
+
# @rbs (Array[String] lines, IR::Grammar grammar, Array[IR::Production] productions,
|
|
60
|
+
# Hash[Integer, String] labels, Integer rail_x, Integer header_height) -> void
|
|
61
|
+
private def self.append_productions: (Array[String] lines, IR::Grammar grammar, Array[IR::Production] productions, Hash[Integer, String] labels, Integer rail_x, Integer header_height) -> void
|
|
62
|
+
|
|
63
|
+
# @rbs (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels,
|
|
64
|
+
# Integer rail_x, Integer offset_y) -> Array[String]
|
|
65
|
+
private def self.production_lines: (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels, Integer rail_x, Integer offset_y) -> Array[String]
|
|
66
|
+
|
|
67
|
+
# @rbs (Array[String] lines, IR::Grammar grammar, IR::Production production,
|
|
68
|
+
# Hash[Integer, String] labels, Integer cursor) -> Integer
|
|
69
|
+
private def self.append_rhs: (Array[String] lines, IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels, Integer cursor) -> Integer
|
|
70
|
+
|
|
71
|
+
# @rbs (Array[String] lines, Integer cursor) -> Integer
|
|
72
|
+
private def self.append_epsilon: (Array[String] lines, Integer cursor) -> Integer
|
|
73
|
+
|
|
74
|
+
# @rbs (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels,
|
|
75
|
+
# Integer rail_x) -> Integer
|
|
76
|
+
private def self.row_end_x: (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels, Integer rail_x) -> Integer
|
|
77
|
+
|
|
78
|
+
# @rbs (String value) -> Integer
|
|
79
|
+
private def self.label_width: (String value) -> Integer
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Generated from lib/ibex/codegen/railroad_documentation.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Codegen
|
|
5
|
+
# Documentation layout helpers mixed into the railroad renderer singleton.
|
|
6
|
+
module RailroadDocumentation
|
|
7
|
+
DOCUMENTATION_COLUMNS: Integer
|
|
8
|
+
|
|
9
|
+
DOCUMENTATION_LINE_HEIGHT: Integer
|
|
10
|
+
|
|
11
|
+
DOCUMENTATION_GAP: Integer
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
# @rbs (Array[String] lines, IR::GrammarSymbol symbol) -> void
|
|
16
|
+
def append_rule_documentation: (Array[String] lines, IR::GrammarSymbol symbol) -> void
|
|
17
|
+
|
|
18
|
+
# @rbs (IR::GrammarSymbol symbol) -> Integer
|
|
19
|
+
def section_header_height: (IR::GrammarSymbol symbol) -> Integer
|
|
20
|
+
|
|
21
|
+
# @rbs (String? documentation) -> Array[String]
|
|
22
|
+
def documentation_lines: (String? documentation) -> Array[String]
|
|
23
|
+
|
|
24
|
+
# @rbs (String | Integer value) -> String
|
|
25
|
+
def escape: (String | Integer value) -> String
|
|
26
|
+
|
|
27
|
+
# @rbs (Integer from, Integer to) -> String
|
|
28
|
+
def track: (Integer from, Integer to) -> String
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|