expressir 1.2.10-aarch64-linux → 2.4.29-aarch64-linux
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/.cargo/config.toml +3 -0
- data/.github/scripts/test_installed_gem.rb +34 -0
- data/.github/workflows/codeql.yml +35 -0
- data/.github/workflows/docs.yml +99 -0
- data/.github/workflows/links.yml +100 -0
- data/.github/workflows/native-gems.yml +201 -0
- data/.github/workflows/rake.yml +10 -296
- data/.github/workflows/release.yml +26 -114
- data/.github/workflows/rust-ext.yml +41 -0
- data/.github/workflows/stress.yml +36 -0
- data/.github/workflows/validate_schemas.yml +48 -0
- data/.github/workflows/verify_remarks.yml +33 -0
- data/.gitignore +33 -1
- data/.rubocop.yml +11 -11
- data/.rubocop_todo.yml +297 -0
- data/CHANGELOG.md +159 -0
- data/Gemfile +15 -1
- data/README.adoc +2675 -47
- data/Rakefile +34 -10
- data/TODO.bugs/01-stale-transformer-autoload.md +39 -0
- data/TODO.bugs/02-parser-class-instance-vars.md +36 -0
- data/TODO.bugs/03-builder-mutable-state.md +43 -0
- data/TODO.bugs/04-formatter-public-send-dispatch.md +53 -0
- data/TODO.bugs/05-anonymous-formatter-subclass.md +45 -0
- data/TODO.bugs/06-collection-registry-single-source.md +53 -0
- data/TODO.bugs/07-require-relative-cleanup.md +42 -0
- data/TODO.bugs/08-require-expressir-in-commands.md +34 -0
- data/TODO.bugs/09-parser-split.md +53 -0
- data/TODO.bugs/10-to-s-override.md +42 -0
- data/TODO.bugs/11-parser-class-variables.md +39 -0
- data/TODO.bugs/12-marker-modules-vs-registry.md +64 -0
- data/TODO.bugs/13-string-literal-scanner-limitation.md +52 -0
- data/TODO.bugs/14-model-formatting-leak.md +30 -0
- data/TODO.bugs/15-expression-children-macro.md +27 -0
- data/TODO.bugs/16-pretty-formatter-duplication.md +28 -0
- data/TODO.bugs/17-snake-case-cache-mutable-constant.md +28 -0
- data/TODO.bugs/18-const-get-private-constants.md +30 -0
- data/TODO.bugs/19-format-methods-public.md +22 -0
- data/TODO.bugs/20-coverage-nested-entities-dedup.md +20 -0
- data/TODO.bugs/21-operator-tokens-secondary-dispatch.md +21 -0
- data/TODO.bugs/22-builder-fast-path-wrappers.md +32 -0
- data/TODO.bugs/23-coverage-inverse-maps.md +21 -0
- data/TODO.bugs/24-streaming-builder-complexity.md +19 -0
- data/TODO.bugs/25-debug-puts-in-production.md +21 -0
- data/TODO.bugs/26-generic-entity-children-misplaced.md +21 -0
- data/TODO.bugs/27-package-build-god-method.md +19 -0
- data/TODO.bugs/28-package-god-class.md +30 -0
- data/TODO.bugs/29-validate-ascii-god-class.md +24 -0
- data/TODO.bugs/30-unicode-map-extraction.md +19 -0
- data/TODO.bugs/README.md +43 -0
- data/TODO.max-perf/01-restore-ci-green.md +36 -0
- data/TODO.max-perf/02-streaming-parse-path.md +31 -0
- data/TODO.max-perf/03-cli-parallel-opt-in.md +27 -0
- data/TODO.max-perf/04-benchmark-harness.md +28 -0
- data/TODO.max-perf/05-parallel-fidelity-specs.md +22 -0
- data/TODO.max-perf/06-builder-cpu-audit.md +41 -0
- data/TODO.max-perf/07-upstream-parsanol-roadmap.md +27 -0
- data/TODO.max-perf/08-builder-build-perf.md +45 -0
- data/TODO.max-perf/09-grammar-cold-start.md +25 -0
- data/TODO.max-perf/10-parser-facade-hygiene.md +23 -0
- data/TODO.max-perf/11-ci-green-closeout.md +25 -0
- data/TODO.max-perf/12-require-boot-profile.md +25 -0
- data/TODO.max-perf/13-key-conversion-specs.md +26 -0
- data/TODO.max-perf/14-builder-call-handler-audit.md +28 -0
- data/TODO.parity-ee/00-overview.md +76 -0
- data/TODO.parity-ee/01-annex-g-rule-extraction.md +41 -0
- data/TODO.parity-ee/02-eeng-algorithm-inventory.md +8 -0
- data/TODO.parity-ee/03-eeng-oracle-harness.md +33 -0
- data/TODO.parity-ee/04-shtolo-concatenate.md +44 -0
- data/TODO.parity-ee/05-shtolo-longform-flatten.md +53 -0
- data/TODO.parity-ee/06-interface-scheduling-parity.md +47 -0
- data/TODO.parity-ee/07-semantic-checks-port.md +35 -0
- data/TODO.parity-ee/08-pretty-roundtrip-gate.md +27 -0
- data/TODO.parity-ee/09-smrl-index-and-listing.md +22 -0
- data/TODO.parity-ee/10-interface-dot-graph.md +21 -0
- data/TODO.parity-ee/11-import-eeng-tests.md +79 -0
- data/TODO.parity-ee/12-full-check-catalog.md +67 -0
- data/TODO.parity-ee/13-population-p21.md +54 -0
- data/TODO.parity-ee/14-shtolo-completion.md +44 -0
- data/TODO.parity-ee/15-part28-xml.md +51 -0
- data/TODO.parity-ee/16-compare-patch.md +48 -0
- data/TODO.parity-ee/17-official-tests.md +42 -0
- data/TODO.parity-ee/18-mim-mapping.md +47 -0
- data/TODO.parity-ee/19-architecture.md +97 -0
- data/TODO.parity-ee/parity-matrix.md +108 -0
- data/TODO.refpath-v2/00-overview.md +64 -0
- data/TODO.suma-improvements/00-overview.md +23 -0
- data/TODO.suma-improvements/01-prebuilt-platform-gems.md +33 -0
- data/TODO.suma-improvements/02-suma-e2e.md +39 -0
- data/TODO.suma-improvements/03-item-graph.md +22 -0
- data/TODO.suma-improvements/04-compiled-set-default.md +16 -0
- data/TODO.suma-improvements/05-validation-in-docs.md +17 -0
- data/TODO.suma-improvements/06-memory-remeasure.md +36 -0
- data/TODO.suma-improvements/07-part28-xml.md +15 -0
- data/TODO.suma-improvements/08-windows-gnu-toolchain.md +15 -0
- data/TODO.suma-improvements/09-checker-tranche3.md +13 -0
- data/TODO.suma-improvements/10-expressdoc.md +8 -0
- data/benchmark/srl_benchmark.rb +458 -0
- data/benchmark/srl_native_benchmark.rb +146 -0
- data/benchmark/srl_ruby_benchmark.rb +132 -0
- data/bin/rspec +2 -1
- data/docs/Gemfile +12 -0
- data/docs/_config.yml +141 -0
- data/docs/_guides/changes/changes-format.adoc +778 -0
- data/docs/_guides/changes/importing-eengine.adoc +898 -0
- data/docs/_guides/changes/index.adoc +396 -0
- data/docs/_guides/changes/programmatic-usage.adoc +1038 -0
- data/docs/_guides/changes/validating-changes.adoc +681 -0
- data/docs/_guides/cli/benchmark-performance.adoc +834 -0
- data/docs/_guides/cli/coverage-analysis.adoc +921 -0
- data/docs/_guides/cli/format-schemas.adoc +547 -0
- data/docs/_guides/cli/index.adoc +8 -0
- data/docs/_guides/cli/managing-changes.adoc +927 -0
- data/docs/_guides/cli/validate-ascii.adoc +645 -0
- data/docs/_guides/cli/validate-schemas.adoc +534 -0
- data/docs/_guides/formatter/formatter-architecture.adoc +401 -0
- data/docs/_guides/index.adoc +165 -0
- data/docs/_guides/ler/creating-packages.adoc +664 -0
- data/docs/_guides/ler/index.adoc +305 -0
- data/docs/_guides/ler/loading-packages.adoc +707 -0
- data/docs/_guides/ler/package-formats.adoc +748 -0
- data/docs/_guides/ler/querying-packages.adoc +826 -0
- data/docs/_guides/ler/step-packages.adoc +385 -0
- data/docs/_guides/ler/validating-packages.adoc +750 -0
- data/docs/_guides/liquid/basic-templates.adoc +813 -0
- data/docs/_guides/liquid/documentation-generation.adoc +1042 -0
- data/docs/_guides/liquid/drops-reference.adoc +829 -0
- data/docs/_guides/liquid/filters-and-tags.adoc +912 -0
- data/docs/_guides/liquid/index.adoc +468 -0
- data/docs/_guides/manifests/creating-manifests.adoc +483 -0
- data/docs/_guides/manifests/index.adoc +307 -0
- data/docs/_guides/manifests/resolving-manifests.adoc +557 -0
- data/docs/_guides/manifests/validating-manifests.adoc +713 -0
- data/docs/_guides/ruby-api/formatting-schemas.adoc +605 -0
- data/docs/_guides/ruby-api/index.adoc +257 -0
- data/docs/_guides/ruby-api/parsing-files.adoc +421 -0
- data/docs/_guides/ruby-api/search-engine.adoc +609 -0
- data/docs/_guides/ruby-api/working-with-repository.adoc +577 -0
- data/docs/_pages/data-model.adoc +665 -0
- data/docs/_pages/express-language.adoc +506 -0
- data/docs/_pages/getting-started.adoc +414 -0
- data/docs/_pages/index.adoc +116 -0
- data/docs/_pages/introduction.adoc +256 -0
- data/docs/_pages/ler-packages.adoc +837 -0
- data/docs/_pages/parsers.adoc +709 -0
- data/docs/_pages/schema-manifests.adoc +431 -0
- data/docs/_references/index.adoc +228 -0
- data/docs/_tutorials/creating-ler-package.adoc +735 -0
- data/docs/_tutorials/documentation-coverage.adoc +795 -0
- data/docs/_tutorials/formatting-schemas.adoc +89 -0
- data/docs/_tutorials/index.adoc +231 -0
- data/docs/_tutorials/liquid-templates.adoc +806 -0
- data/docs/_tutorials/parsing-your-first-schema.adoc +522 -0
- data/docs/_tutorials/querying-schemas.adoc +751 -0
- data/docs/_tutorials/working-with-multiple-schemas.adoc +676 -0
- data/docs/index.adoc +242 -0
- data/docs/lychee.toml +90 -0
- data/examples/demo_ler_usage.sh +86 -0
- data/examples/ler/README.md +111 -0
- data/examples/ler/simple_example.ler +0 -0
- data/examples/ler/simple_schema.exp +33 -0
- data/examples/ler_build.rb +75 -0
- data/examples/ler_cli.rb +79 -0
- data/examples/ler_demo_complete.rb +276 -0
- data/examples/ler_query.rb +91 -0
- data/examples/ler_query_examples.rb +305 -0
- data/examples/ler_stats.rb +81 -0
- data/examples/phase3_demo.rb +159 -0
- data/examples/query_demo_simple.rb +131 -0
- data/exe/expressir +6 -17
- data/exe/expressir-format +14 -0
- data/exe/{format-test → expressir-format-test} +8 -7
- data/expressir.gemspec +50 -37
- data/lib/expressir/3.2/expressir_core.so +0 -0
- data/lib/expressir/3.3/expressir_core.so +0 -0
- data/lib/expressir/3.4/expressir_core.so +0 -0
- data/lib/expressir/4.0/expressir_core.so +0 -0
- data/lib/expressir/benchmark.rb +310 -0
- data/lib/expressir/changes/item_change.rb +20 -0
- data/lib/expressir/changes/mapping_change.rb +16 -0
- data/lib/expressir/changes/schema_change.rb +85 -0
- data/lib/expressir/changes/version_change.rb +26 -0
- data/lib/expressir/changes.rb +9 -0
- data/lib/expressir/cli.rb +138 -11
- data/lib/expressir/commands/base.rb +25 -0
- data/lib/expressir/commands/benchmark.rb +59 -0
- data/lib/expressir/commands/benchmark_cache.rb +80 -0
- data/lib/expressir/commands/changes.rb +34 -0
- data/lib/expressir/commands/changes_import_eengine.rb +146 -0
- data/lib/expressir/commands/changes_validate.rb +63 -0
- data/lib/expressir/commands/check.rb +56 -0
- data/lib/expressir/commands/clean.rb +20 -0
- data/lib/expressir/commands/coverage.rb +458 -0
- data/lib/expressir/commands/expand.rb +26 -0
- data/lib/expressir/commands/file_violations.rb +70 -0
- data/lib/expressir/commands/fix.rb +33 -0
- data/lib/expressir/commands/flatten.rb +29 -0
- data/lib/expressir/commands/format.rb +43 -0
- data/lib/expressir/commands/manifest.rb +420 -0
- data/lib/expressir/commands/mapping_validate.rb +68 -0
- data/lib/expressir/commands/non_ascii_character.rb +49 -0
- data/lib/expressir/commands/non_ascii_violation_collection.rb +301 -0
- data/lib/expressir/commands/package.rb +1222 -0
- data/lib/expressir/commands/parity_inputs.rb +160 -0
- data/lib/expressir/commands/validate.rb +106 -0
- data/lib/expressir/commands/validate_ascii.rb +94 -0
- data/lib/expressir/commands/validate_load.rb +91 -0
- data/lib/expressir/commands/version.rb +9 -0
- data/lib/expressir/commands/xsd.rb +23 -0
- data/lib/expressir/commands.rb +30 -0
- data/lib/expressir/config.rb +40 -3
- data/lib/expressir/coverage.rb +510 -0
- data/lib/expressir/eengine/arm_compare_report.rb +23 -0
- data/lib/expressir/eengine/changes_section.rb +16 -0
- data/lib/expressir/eengine/compare_report.rb +69 -0
- data/lib/expressir/eengine/mim_compare_report.rb +23 -0
- data/lib/expressir/eengine/modified_object.rb +21 -0
- data/lib/expressir/eengine.rb +9 -0
- data/lib/expressir/errors.rb +113 -0
- data/lib/expressir/express/adoc_hyperlink_formatter.rb +30 -0
- data/lib/expressir/express/adoc_source_formatter.rb +12 -0
- data/lib/expressir/express/ast_key_converter.rb +114 -0
- data/lib/expressir/express/builder.rb +277 -0
- data/lib/expressir/express/builder_context.rb +22 -0
- data/lib/expressir/express/builder_registry.rb +397 -0
- data/lib/expressir/express/builders/attribute_decl_builder.rb +32 -0
- data/lib/expressir/express/builders/built_in_builder.rb +75 -0
- data/lib/expressir/express/builders/constant_builder.rb +108 -0
- data/lib/expressir/express/builders/declaration_builder.rb +20 -0
- data/lib/expressir/express/builders/derive_clause_builder.rb +14 -0
- data/lib/expressir/express/builders/derived_attr_builder.rb +28 -0
- data/lib/expressir/express/builders/domain_rule_builder.rb +21 -0
- data/lib/expressir/express/builders/entity_decl_builder.rb +116 -0
- data/lib/expressir/express/builders/explicit_attr_builder.rb +49 -0
- data/lib/expressir/express/builders/expression_builder.rb +416 -0
- data/lib/expressir/express/builders/function_decl_builder.rb +86 -0
- data/lib/expressir/express/builders/helpers.rb +148 -0
- data/lib/expressir/express/builders/interface_builder.rb +151 -0
- data/lib/expressir/express/builders/inverse_attr_builder.rb +43 -0
- data/lib/expressir/express/builders/inverse_attr_type_builder.rb +30 -0
- data/lib/expressir/express/builders/inverse_clause_builder.rb +14 -0
- data/lib/expressir/express/builders/literal_builder.rb +93 -0
- data/lib/expressir/express/builders/procedure_decl_builder.rb +82 -0
- data/lib/expressir/express/builders/qualifier_builder.rb +102 -0
- data/lib/expressir/express/builders/reference_builder.rb +18 -0
- data/lib/expressir/express/builders/rule_decl_builder.rb +97 -0
- data/lib/expressir/express/builders/schema_body_decl_builder.rb +18 -0
- data/lib/expressir/express/builders/schema_decl_builder.rb +56 -0
- data/lib/expressir/express/builders/schema_version_builder.rb +34 -0
- data/lib/expressir/express/builders/simple_id_builder.rb +17 -0
- data/lib/expressir/express/builders/statement_builder.rb +243 -0
- data/lib/expressir/express/builders/subtype_constraint_builder.rb +166 -0
- data/lib/expressir/express/builders/syntax_builder.rb +30 -0
- data/lib/expressir/express/builders/type_builder.rb +238 -0
- data/lib/expressir/express/builders/type_decl_builder.rb +26 -0
- data/lib/expressir/express/builders/unique_clause_builder.rb +20 -0
- data/lib/expressir/express/builders/unique_rule_builder.rb +41 -0
- data/lib/expressir/express/builders/where_clause_builder.rb +20 -0
- data/lib/expressir/express/builders.rb +55 -0
- data/lib/expressir/express/cache.rb +43 -18
- data/lib/expressir/express/checker.rb +812 -0
- data/lib/expressir/express/concatenator.rb +79 -0
- data/lib/expressir/express/core.rb +95 -0
- data/lib/expressir/express/error.rb +124 -0
- data/lib/expressir/express/formatter.rb +89 -1548
- data/lib/expressir/express/formatters/data_types_formatter.rb +362 -0
- data/lib/expressir/express/formatters/declarations_formatter.rb +753 -0
- data/lib/expressir/express/formatters/expressions_formatter.rb +180 -0
- data/lib/expressir/express/formatters/literals_formatter.rb +55 -0
- data/lib/expressir/express/formatters/references_formatter.rb +53 -0
- data/lib/expressir/express/formatters/remark_formatter.rb +270 -0
- data/lib/expressir/express/formatters/remark_item_formatter.rb +28 -0
- data/lib/expressir/express/formatters/statements_formatter.rb +272 -0
- data/lib/expressir/express/formatters/supertype_expressions_formatter.rb +54 -0
- data/lib/expressir/express/formatters.rb +22 -0
- data/lib/expressir/express/grammar/parser.rb +712 -0
- data/lib/expressir/express/grammar.rb +11 -0
- data/lib/expressir/express/hyperlink_formatter.rb +4 -5
- data/lib/expressir/express/interface_dot.rb +105 -0
- data/lib/expressir/express/lazy_repository.rb +211 -0
- data/lib/expressir/express/line_map.rb +48 -0
- data/lib/expressir/express/listing.rb +174 -0
- data/lib/expressir/express/model_traversal.rb +42 -0
- data/lib/expressir/express/model_visitor.rb +11 -10
- data/lib/expressir/express/node_position_index.rb +342 -0
- data/lib/expressir/express/parallel_files.rb +229 -0
- data/lib/expressir/express/parser.rb +501 -62
- data/lib/expressir/express/pretty_formatter.rb +586 -0
- data/lib/expressir/express/pretty_gate.rb +61 -0
- data/lib/expressir/express/refs_overlay.rb +47 -0
- data/lib/expressir/express/remark_attacher.rb +1098 -0
- data/lib/expressir/express/remark_overlay.rb +86 -0
- data/lib/expressir/express/remark_scanner.rb +245 -0
- data/lib/expressir/express/resolve_references_model_visitor.rb +7 -9
- data/lib/expressir/express/schema_block_scanner.rb +137 -0
- data/lib/expressir/express/schema_head_formatter.rb +4 -5
- data/lib/expressir/express/schema_plain_source_formatter.rb +11 -0
- data/lib/expressir/express/schema_source_formatter.rb +15 -0
- data/lib/expressir/express/scope_resolver.rb +223 -0
- data/lib/expressir/express/self_schema_reference.rb +126 -0
- data/lib/expressir/express/shtolo.rb +679 -0
- data/lib/expressir/express/smrl_xml.rb +125 -0
- data/lib/expressir/express/source_formatter.rb +15 -0
- data/lib/expressir/express/streaming_builder.rb +435 -0
- data/lib/expressir/express/xsd.rb +259 -0
- data/lib/expressir/express.rb +53 -0
- data/lib/expressir/liquid.rb +1 -0
- data/lib/expressir/manifest/resolver.rb +210 -0
- data/lib/expressir/manifest/validator.rb +192 -0
- data/lib/expressir/manifest.rb +6 -0
- data/lib/expressir/mapping/refpath.rb +857 -0
- data/lib/expressir/mapping.rb +253 -0
- data/lib/expressir/model/cache.rb +10 -9
- data/lib/expressir/model/concerns.rb +42 -0
- data/lib/expressir/model/data_types/aggregate.rb +8 -13
- data/lib/expressir/model/data_types/array.rb +15 -21
- data/lib/expressir/model/data_types/bag.rb +11 -15
- data/lib/expressir/model/data_types/binary.rb +9 -12
- data/lib/expressir/model/data_types/boolean.rb +7 -2
- data/lib/expressir/model/data_types/enumeration.rb +11 -15
- data/lib/expressir/model/data_types/enumeration_item.rb +5 -7
- data/lib/expressir/model/data_types/generic.rb +6 -8
- data/lib/expressir/model/data_types/generic_entity.rb +11 -13
- data/lib/expressir/model/data_types/integer.rb +7 -2
- data/lib/expressir/model/data_types/list.rb +13 -18
- data/lib/expressir/model/data_types/logical.rb +7 -2
- data/lib/expressir/model/data_types/number.rb +7 -2
- data/lib/expressir/model/data_types/real.rb +7 -9
- data/lib/expressir/model/data_types/select.rb +13 -18
- data/lib/expressir/model/data_types/set.rb +11 -15
- data/lib/expressir/model/data_types/string.rb +9 -12
- data/lib/expressir/model/data_types.rb +25 -0
- data/lib/expressir/model/declarations/attribute.rb +19 -28
- data/lib/expressir/model/declarations/constant.rb +10 -16
- data/lib/expressir/model/declarations/derived_attribute.rb +25 -0
- data/lib/expressir/model/declarations/entity.rb +39 -30
- data/lib/expressir/model/declarations/function.rb +32 -40
- data/lib/expressir/model/declarations/informal_proposition_rule.rb +25 -0
- data/lib/expressir/model/declarations/interface.rb +25 -16
- data/lib/expressir/model/declarations/interface_item.rb +9 -11
- data/lib/expressir/model/declarations/interfaced_item.rb +15 -19
- data/lib/expressir/model/declarations/inverse_attribute.rb +25 -0
- data/lib/expressir/model/declarations/parameter.rb +10 -16
- data/lib/expressir/model/declarations/procedure.rb +30 -37
- data/lib/expressir/model/declarations/remark_item.rb +11 -11
- data/lib/expressir/model/declarations/rule.rb +38 -43
- data/lib/expressir/model/declarations/schema.rb +162 -64
- data/lib/expressir/model/declarations/schema_version.rb +8 -11
- data/lib/expressir/model/declarations/schema_version_item.rb +8 -11
- data/lib/expressir/model/declarations/subtype_constraint.rb +14 -22
- data/lib/expressir/model/declarations/type.rb +18 -18
- data/lib/expressir/model/declarations/unique_rule.rb +8 -13
- data/lib/expressir/model/declarations/variable.rb +10 -16
- data/lib/expressir/model/declarations/where_rule.rb +8 -13
- data/lib/expressir/model/declarations.rb +31 -0
- data/lib/expressir/model/dependency_resolver.rb +268 -0
- data/lib/expressir/model/exp_file.rb +42 -0
- data/lib/expressir/model/expressions/aggregate_initializer.rb +8 -9
- data/lib/expressir/model/expressions/aggregate_initializer_item.rb +10 -12
- data/lib/expressir/model/expressions/binary_expression.rb +42 -36
- data/lib/expressir/model/expressions/entity_constructor.rb +10 -12
- data/lib/expressir/model/expressions/function_call.rb +10 -12
- data/lib/expressir/model/expressions/interval.rb +18 -23
- data/lib/expressir/model/expressions/query_expression.rb +11 -15
- data/lib/expressir/model/expressions/unary_expression.rb +13 -15
- data/lib/expressir/model/expressions.rb +18 -0
- data/lib/expressir/model/identifier.rb +18 -26
- data/lib/expressir/model/indexes/entity_index.rb +103 -0
- data/lib/expressir/model/indexes/item_graph.rb +185 -0
- data/lib/expressir/model/indexes/reference_index.rb +148 -0
- data/lib/expressir/model/indexes/type_index.rb +149 -0
- data/lib/expressir/model/indexes.rb +12 -0
- data/lib/expressir/model/interface_validator.rb +384 -0
- data/lib/expressir/model/literals/binary.rb +7 -9
- data/lib/expressir/model/literals/integer.rb +7 -9
- data/lib/expressir/model/literals/logical.rb +10 -12
- data/lib/expressir/model/literals/real.rb +7 -9
- data/lib/expressir/model/literals/string.rb +10 -12
- data/lib/expressir/model/literals.rb +13 -0
- data/lib/expressir/model/model_element.rb +286 -117
- data/lib/expressir/model/references/attribute_reference.rb +9 -12
- data/lib/expressir/model/references/group_reference.rb +9 -12
- data/lib/expressir/model/references/index_reference.rb +11 -15
- data/lib/expressir/model/references/simple_reference.rb +11 -14
- data/lib/expressir/model/references.rb +12 -0
- data/lib/expressir/model/remark_format.rb +17 -0
- data/lib/expressir/model/remark_info.rb +92 -0
- data/lib/expressir/model/remark_placement.rb +42 -0
- data/lib/expressir/model/repository.rb +472 -12
- data/lib/expressir/model/repository_validator.rb +293 -0
- data/lib/expressir/model/search_engine.rb +551 -0
- data/lib/expressir/model/statements/alias.rb +12 -16
- data/lib/expressir/model/statements/assignment.rb +12 -11
- data/lib/expressir/model/statements/case.rb +31 -14
- data/lib/expressir/model/statements/case_action.rb +9 -11
- data/lib/expressir/model/statements/compound.rb +10 -8
- data/lib/expressir/model/statements/escape.rb +10 -2
- data/lib/expressir/model/statements/if.rb +15 -14
- data/lib/expressir/model/statements/null.rb +10 -2
- data/lib/expressir/model/statements/procedure_call.rb +11 -11
- data/lib/expressir/model/statements/repeat.rb +21 -28
- data/lib/expressir/model/statements/return.rb +9 -8
- data/lib/expressir/model/statements/skip.rb +10 -2
- data/lib/expressir/model/statements.rb +20 -0
- data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +13 -17
- data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +7 -9
- data/lib/expressir/model/supertype_expressions.rb +12 -0
- data/lib/expressir/model.rb +38 -78
- data/lib/expressir/package/builder.rb +231 -0
- data/lib/expressir/package/metadata.rb +79 -0
- data/lib/expressir/package/reader.rb +149 -0
- data/lib/expressir/package.rb +8 -0
- data/lib/expressir/schema_manifest.rb +159 -0
- data/lib/expressir/schema_manifest_entry.rb +15 -0
- data/lib/expressir/version.rb +6 -1
- data/lib/expressir.rb +79 -9
- data/lib/tasks/verify_remarks.rake +16 -0
- data/rakelib/native.rake +24 -0
- data/rakelib/oracle.rake +52 -0
- data/rakelib/verify_remarks.rake +16 -0
- metadata +431 -129
- data/.cross_rubies +0 -20
- data/.gitmodules +0 -6
- data/.yardopts +0 -11
- data/docs/development.md +0 -90
- data/exe/format +0 -18
- data/exe/generate-parser +0 -51
- data/lib/expressir/cli/ui.rb +0 -36
- data/lib/expressir/express/2.7/express_parser.so +0 -0
- data/lib/expressir/express/3.0/express_parser.so +0 -0
- data/lib/expressir/express/3.1/express_parser.so +0 -0
- data/lib/expressir/express/3.2/express_parser.so +0 -0
- data/lib/expressir/express/visitor.rb +0 -2588
- data/lib/expressir/model/data_type.rb +0 -9
- data/lib/expressir/model/declaration.rb +0 -9
- data/lib/expressir/model/expression.rb +0 -9
- data/lib/expressir/model/literal.rb +0 -9
- data/lib/expressir/model/reference.rb +0 -9
- data/lib/expressir/model/statement.rb +0 -9
- data/lib/expressir/model/supertype_expression.rb +0 -9
- data/rakelib/antlr4-native.rake +0 -161
- data/rakelib/cross-ruby.rake +0 -368
- data/spec/acceptance/version_spec.rb +0 -27
- data/spec/expressir/express/cache_spec.rb +0 -89
- data/spec/expressir/express/formatter_spec.rb +0 -173
- data/spec/expressir/express/parser_spec.rb +0 -141
- data/spec/expressir/model/model_element_spec.rb +0 -318
- data/spec/spec_helper.rb +0 -24
- data/spec/support/console_helper.rb +0 -29
- data/spec/syntax/multiple.exp +0 -23
- data/spec/syntax/multiple.yaml +0 -198
- data/spec/syntax/multiple_formatted.exp +0 -71
- data/spec/syntax/multiple_hyperlink_formatted.exp +0 -71
- data/spec/syntax/multiple_schema_head_hyperlink_formatted.exp +0 -13
- data/spec/syntax/remark.exp +0 -193
- data/spec/syntax/remark.yaml +0 -471
- data/spec/syntax/remark_formatted.exp +0 -228
- data/spec/syntax/single.exp +0 -4
- data/spec/syntax/single.yaml +0 -18
- data/spec/syntax/single_formatted.exp +0 -10
- data/spec/syntax/single_formatted.yaml +0 -36
- data/spec/syntax/syntax.exp +0 -333
- data/spec/syntax/syntax.yaml +0 -3509
- data/spec/syntax/syntax_formatted.exp +0 -902
- data/spec/syntax/syntax_hyperlink_formatted.exp +0 -902
- data/spec/syntax/syntax_schema_head_formatted.exp +0 -18
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Expressir
|
|
4
|
+
module Model
|
|
5
|
+
# Resolves dependencies between EXPRESS schemas
|
|
6
|
+
# Handles USE FROM and REFERENCE FROM interfaces
|
|
7
|
+
# Detects circular dependencies
|
|
8
|
+
class DependencyResolver
|
|
9
|
+
# Exception for circular dependencies
|
|
10
|
+
class CircularDependencyError < StandardError
|
|
11
|
+
attr_reader :dependency_chain
|
|
12
|
+
|
|
13
|
+
def initialize(message, chain)
|
|
14
|
+
super(message)
|
|
15
|
+
@dependency_chain = chain
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
attr_reader :base_dirs, :schema_registry, :verbose, :unresolved
|
|
20
|
+
|
|
21
|
+
# Initialize resolver
|
|
22
|
+
# @param base_dirs [String, Array<String>] Base directories to search
|
|
23
|
+
# @param schema_registry [Hash] Manual schema name => path mappings
|
|
24
|
+
# @param verbose [Boolean] Enable verbose logging
|
|
25
|
+
def initialize(base_dirs: Dir.pwd, schema_registry: {}, verbose: false)
|
|
26
|
+
@base_dirs = Array(base_dirs).map { |d| File.expand_path(d) }
|
|
27
|
+
@schema_registry = schema_registry || {}
|
|
28
|
+
@verbose = verbose
|
|
29
|
+
@resolved_schemas = Set.new
|
|
30
|
+
@resolution_stack = []
|
|
31
|
+
@unresolved = []
|
|
32
|
+
@last_found_base_index = nil
|
|
33
|
+
@last_found_base_dir = nil
|
|
34
|
+
@multiple_matches = []
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Resolve all dependencies starting from root schema
|
|
38
|
+
# @param root_schema_path [String] Path to root schema file
|
|
39
|
+
# @return [Array<String>] Ordered list of schema file paths
|
|
40
|
+
def resolve_dependencies(root_schema_path)
|
|
41
|
+
@resolved_schemas.clear
|
|
42
|
+
@resolution_stack.clear
|
|
43
|
+
@unresolved.clear
|
|
44
|
+
|
|
45
|
+
resolve_recursive(File.expand_path(root_schema_path))
|
|
46
|
+
@resolved_schemas.to_a
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Extract interfaces from schema file using proper parsing
|
|
50
|
+
# @param schema_path [String] Path to schema file
|
|
51
|
+
# @return [Array<Hash>] List of interfaces with :kind, :schema_name
|
|
52
|
+
def extract_interfaces(schema_path)
|
|
53
|
+
interfaces = []
|
|
54
|
+
|
|
55
|
+
# Parse the schema file properly
|
|
56
|
+
repo = Expressir::Express::Parser.from_file(schema_path)
|
|
57
|
+
|
|
58
|
+
# Extract interfaces from first schema (file should contain one schema)
|
|
59
|
+
schema = repo.schemas.first
|
|
60
|
+
return interfaces unless schema&.interfaces
|
|
61
|
+
|
|
62
|
+
schema.interfaces.each do |interface|
|
|
63
|
+
kind = case interface.kind
|
|
64
|
+
when Expressir::Model::Declarations::Interface::USE
|
|
65
|
+
"USE"
|
|
66
|
+
when Expressir::Model::Declarations::Interface::REFERENCE
|
|
67
|
+
"REFERENCE"
|
|
68
|
+
else
|
|
69
|
+
interface.kind.first
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
interfaces << {
|
|
73
|
+
kind: kind,
|
|
74
|
+
schema_name: interface.schema.id,
|
|
75
|
+
}
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
interfaces
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Resolve schema location
|
|
82
|
+
# @param schema_name [String] Schema name to find
|
|
83
|
+
# @param kind [String] Interface kind ("USE" or "REFERENCE")
|
|
84
|
+
# @param current_path [String] Path of schema requesting the reference
|
|
85
|
+
# @return [String, nil] Path to schema file, or nil if not found
|
|
86
|
+
def resolve_schema_location(schema_name, _kind, _current_path)
|
|
87
|
+
# Check schema_registry first
|
|
88
|
+
if @schema_registry[schema_name]
|
|
89
|
+
registry_path = File.expand_path(@schema_registry[schema_name])
|
|
90
|
+
return registry_path if File.exist?(registry_path)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Search ONLY in base_dirs recursively and collect ALL matches
|
|
94
|
+
all_matches = []
|
|
95
|
+
@base_dirs.each_with_index do |base_dir, index|
|
|
96
|
+
candidate = find_schema_in_directory(schema_name, base_dir)
|
|
97
|
+
if candidate
|
|
98
|
+
all_matches << { path: candidate, base_dir: base_dir, index: index }
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# If no matches found, return nil
|
|
103
|
+
return nil if all_matches.empty?
|
|
104
|
+
|
|
105
|
+
# If multiple matches found, record for warning
|
|
106
|
+
if all_matches.size > 1
|
|
107
|
+
@multiple_matches << {
|
|
108
|
+
schema_name: schema_name,
|
|
109
|
+
matches: all_matches,
|
|
110
|
+
}
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Use the first match
|
|
114
|
+
first_match = all_matches.first
|
|
115
|
+
@last_found_base_index = first_match[:index]
|
|
116
|
+
@last_found_base_dir = first_match[:base_dir]
|
|
117
|
+
|
|
118
|
+
first_match[:path]
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Get resolution statistics
|
|
122
|
+
# @return [Hash] Statistics about resolved schemas
|
|
123
|
+
def statistics
|
|
124
|
+
{
|
|
125
|
+
total_schemas: @resolved_schemas.size,
|
|
126
|
+
schemas: @resolved_schemas.to_a,
|
|
127
|
+
base_dirs: @base_dirs,
|
|
128
|
+
multiple_matches: @multiple_matches,
|
|
129
|
+
}
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
private
|
|
133
|
+
|
|
134
|
+
# Resolve schema and its dependencies recursively
|
|
135
|
+
# @param schema_path [String] Path to schema file
|
|
136
|
+
# @return [void]
|
|
137
|
+
def resolve_recursive(schema_path)
|
|
138
|
+
return if @resolved_schemas.include?(schema_path)
|
|
139
|
+
|
|
140
|
+
# Check for circular dependency - schema-level circular references are valid in EXPRESS
|
|
141
|
+
if @resolution_stack.include?(schema_path)
|
|
142
|
+
# Schema is already being processed - this is a back-reference
|
|
143
|
+
# Skip re-processing; the schema will be added to resolved_schemas when its original pass completes
|
|
144
|
+
return
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
@resolution_stack.push(schema_path)
|
|
148
|
+
|
|
149
|
+
# Extract and resolve interfaces
|
|
150
|
+
interfaces = extract_interfaces(schema_path)
|
|
151
|
+
interfaces.each do |interface|
|
|
152
|
+
if @verbose
|
|
153
|
+
schema_name = File.basename(schema_path, ".*")
|
|
154
|
+
print " #{interface[:kind]} FROM #{interface[:schema_name]} (in #{schema_name}): "
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
dep_path = resolve_schema_location(
|
|
158
|
+
interface[:schema_name],
|
|
159
|
+
interface[:kind],
|
|
160
|
+
schema_path,
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
if dep_path
|
|
164
|
+
if @verbose
|
|
165
|
+
# Show which source and relative path
|
|
166
|
+
if @last_found_base_dir && @last_found_base_index
|
|
167
|
+
relative_path = dep_path.sub("#{@last_found_base_dir}/", "")
|
|
168
|
+
source_label = "[source #{@last_found_base_index + 1}]"
|
|
169
|
+
puts "\e[32m✓\e[0m #{source_label} #{relative_path}"
|
|
170
|
+
else
|
|
171
|
+
relative_path = File.basename(dep_path)
|
|
172
|
+
puts "\e[32m✓\e[0m #{relative_path}"
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
resolve_recursive(dep_path)
|
|
176
|
+
else
|
|
177
|
+
# Track unresolved reference
|
|
178
|
+
@unresolved << {
|
|
179
|
+
from: schema_path,
|
|
180
|
+
kind: interface[:kind],
|
|
181
|
+
schema_name: interface[:schema_name],
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if @verbose
|
|
185
|
+
puts "\e[31m✗ not found\e[0m"
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
@resolution_stack.pop
|
|
191
|
+
@resolved_schemas.add(schema_path)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# Find schema file in directory
|
|
195
|
+
# @param schema_name [String] Schema name to find
|
|
196
|
+
# @param directory [String] Directory to search
|
|
197
|
+
# @param recursive [Boolean] Whether to search subdirectories
|
|
198
|
+
# @return [String, nil] Path to schema file or nil
|
|
199
|
+
def find_schema_in_directory(schema_name, directory)
|
|
200
|
+
return nil unless File.directory?(directory)
|
|
201
|
+
|
|
202
|
+
# Try direct match first (resource pattern: schema_name.exp)
|
|
203
|
+
candidate = File.join(directory, "#{schema_name}.exp")
|
|
204
|
+
return File.expand_path(candidate) if File.exist?(candidate)
|
|
205
|
+
|
|
206
|
+
# Try module pattern: {lower-case-prefix-without-_schema}/{arm|mim}.exp
|
|
207
|
+
# Examples:
|
|
208
|
+
# Activity_method_mim -> activity_method/mim.exp
|
|
209
|
+
# Activity_method_arm -> activity_method/arm.exp
|
|
210
|
+
module_path = try_module_pattern(schema_name, directory)
|
|
211
|
+
return module_path if module_path
|
|
212
|
+
|
|
213
|
+
# Search recursively in subdirectories
|
|
214
|
+
# Only in base_dirs to avoid permission errors in system directories
|
|
215
|
+
begin
|
|
216
|
+
# First try direct name match
|
|
217
|
+
Dir.glob(File.join(directory, "**",
|
|
218
|
+
"#{schema_name}.exp")).each do |file|
|
|
219
|
+
return File.expand_path(file)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# Also try module pattern recursively for _arm/_mim schemas
|
|
223
|
+
if schema_name =~ /^(.+)_(arm|mim)$/i
|
|
224
|
+
prefix = Regexp.last_match(1)
|
|
225
|
+
suffix = Regexp.last_match(2).downcase
|
|
226
|
+
prefix = prefix.sub(/_schema$/i, "")
|
|
227
|
+
module_dir = prefix.downcase
|
|
228
|
+
|
|
229
|
+
# Search for **/module_dir/suffix.exp pattern
|
|
230
|
+
Dir.glob(File.join(directory, "**", module_dir,
|
|
231
|
+
"#{suffix}.exp")).each do |file|
|
|
232
|
+
return File.expand_path(file)
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
rescue Errno::EACCES, Errno::EPERM
|
|
236
|
+
# Ignore permission errors when searching directories
|
|
237
|
+
nil
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
nil
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# Try module naming pattern
|
|
244
|
+
# @param schema_name [String] Schema name (e.g., "Activity_method_mim")
|
|
245
|
+
# @param directory [String] Base directory
|
|
246
|
+
# @return [String, nil] Path if found, nil otherwise
|
|
247
|
+
def try_module_pattern(schema_name, directory)
|
|
248
|
+
# Check if schema name ends with _arm or _mim
|
|
249
|
+
if schema_name =~ /^(.+)_(arm|mim)$/i
|
|
250
|
+
prefix = Regexp.last_match(1)
|
|
251
|
+
suffix = Regexp.last_match(2).downcase
|
|
252
|
+
|
|
253
|
+
# Remove trailing _schema if present
|
|
254
|
+
prefix = prefix.sub(/_schema$/i, "")
|
|
255
|
+
|
|
256
|
+
# Convert to lowercase and replace underscores
|
|
257
|
+
module_dir = prefix.downcase
|
|
258
|
+
|
|
259
|
+
# Try: directory/module_dir/suffix.exp
|
|
260
|
+
candidate = File.join(directory, module_dir, "#{suffix}.exp")
|
|
261
|
+
return File.expand_path(candidate) if File.exist?(candidate)
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
nil
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Expressir
|
|
4
|
+
module Model
|
|
5
|
+
# Represents a single EXPRESS file containing schemas and preamble remarks.
|
|
6
|
+
# This class preserves file-level information including:
|
|
7
|
+
# - File path for reference
|
|
8
|
+
# - Preamble remarks (comments at the top of the file before any schema)
|
|
9
|
+
# - Schemas defined in this file
|
|
10
|
+
#
|
|
11
|
+
# A Repository contains multiple ExpFile instances when parsing multiple files,
|
|
12
|
+
# or a single ExpFile when parsing a single file.
|
|
13
|
+
class ExpFile < ModelElement
|
|
14
|
+
include HasId
|
|
15
|
+
include ScopeContainer
|
|
16
|
+
|
|
17
|
+
collection_attributes :schemas
|
|
18
|
+
|
|
19
|
+
attribute :path, :string
|
|
20
|
+
attribute :schemas, Declarations::Schema, collection: true,
|
|
21
|
+
initialize_empty: true
|
|
22
|
+
attribute :_class, :string, default: -> { self.class.name }
|
|
23
|
+
|
|
24
|
+
key_value do
|
|
25
|
+
map "_class", to: :_class, render_default: true
|
|
26
|
+
map "path", to: :path
|
|
27
|
+
map "schemas", to: :schemas
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Returns the file path as the identifier
|
|
31
|
+
# @return [String, nil] The file path or nil
|
|
32
|
+
def id
|
|
33
|
+
path
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @return [Array<Declaration>]
|
|
37
|
+
def children
|
|
38
|
+
schemas
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -3,17 +3,16 @@ module Expressir
|
|
|
3
3
|
module Expressions
|
|
4
4
|
# Specified in ISO 10303-11:2004
|
|
5
5
|
# - section 12.9 Aggregate initializer
|
|
6
|
-
class AggregateInitializer <
|
|
7
|
-
|
|
6
|
+
class AggregateInitializer < ModelElement
|
|
7
|
+
child_attributes :items
|
|
8
|
+
attribute :items, ModelElement, collection: true
|
|
9
|
+
attribute :_class, :string, default: -> { self.class.name }
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
@items = options[:items] || []
|
|
13
|
-
|
|
14
|
-
super
|
|
11
|
+
key_value do
|
|
12
|
+
map "_class", to: :_class, render_default: true
|
|
13
|
+
map "items", to: :items
|
|
15
14
|
end
|
|
16
15
|
end
|
|
17
16
|
end
|
|
18
17
|
end
|
|
19
|
-
end
|
|
18
|
+
end
|
|
@@ -3,20 +3,18 @@ module Expressir
|
|
|
3
3
|
module Expressions
|
|
4
4
|
# Specified in ISO 10303-11:2004
|
|
5
5
|
# - section 12.9 Aggregate initializer
|
|
6
|
-
class AggregateInitializerItem <
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
class AggregateInitializerItem < ModelElement
|
|
7
|
+
child_attributes :expression, :repetition
|
|
8
|
+
attribute :expression, ModelElement
|
|
9
|
+
attribute :repetition, ModelElement
|
|
10
|
+
attribute :_class, :string, default: -> { self.class.name }
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@expression = options[:expression]
|
|
15
|
-
@repetition = options[:repetition]
|
|
16
|
-
|
|
17
|
-
super
|
|
12
|
+
key_value do
|
|
13
|
+
map "_class", to: :_class, render_default: true
|
|
14
|
+
map "expression", to: :expression
|
|
15
|
+
map "repetition", to: :repetition
|
|
18
16
|
end
|
|
19
17
|
end
|
|
20
18
|
end
|
|
21
19
|
end
|
|
22
|
-
end
|
|
20
|
+
end
|
|
@@ -9,45 +9,51 @@ module Expressir
|
|
|
9
9
|
# - section 12.5 String operators
|
|
10
10
|
# - section 12.6 Aggregate operators
|
|
11
11
|
# - section 12.10 Complex entity instance construction operator
|
|
12
|
-
class BinaryExpression <
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
12
|
+
class BinaryExpression < ModelElement
|
|
13
|
+
child_attributes :operand1, :operand2
|
|
14
|
+
ADDITION = "ADDITION".freeze
|
|
15
|
+
AND = "AND".freeze
|
|
16
|
+
COMBINE = "COMBINE".freeze
|
|
17
|
+
EQUAL = "EQUAL".freeze
|
|
18
|
+
EXPONENTIATION = "EXPONENTIATION".freeze
|
|
19
|
+
GREATER_THAN = "GREATER_THAN".freeze
|
|
20
|
+
GREATER_THAN_OR_EQUAL = "GREATER_THAN_OR_EQUAL".freeze
|
|
21
|
+
IN = "IN".freeze
|
|
22
|
+
INSTANCE_EQUAL = "INSTANCE_EQUAL".freeze
|
|
23
|
+
INSTANCE_NOT_EQUAL = "INSTANCE_NOT_EQUAL".freeze
|
|
24
|
+
INTEGER_DIVISION = "INTEGER_DIVISION".freeze
|
|
25
|
+
LESS_THAN = "LESS_THAN".freeze
|
|
26
|
+
LESS_THAN_OR_EQUAL = "LESS_THAN_OR_EQUAL".freeze
|
|
27
|
+
LIKE = "LIKE".freeze
|
|
28
|
+
MODULO = "MODULO".freeze
|
|
29
|
+
MULTIPLICATION = "MULTIPLICATION".freeze
|
|
30
|
+
NOT_EQUAL = "NOT_EQUAL".freeze
|
|
31
|
+
OR = "OR".freeze
|
|
32
|
+
REAL_DIVISION = "REAL_DIVISION".freeze
|
|
33
|
+
SUBTRACTION = "SUBTRACTION".freeze
|
|
34
|
+
XOR = "XOR".freeze
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
attribute :operator, :string,
|
|
37
|
+
values: %w[
|
|
38
|
+
ADDITION AND COMBINE EQUAL EXPONENTIATION
|
|
39
|
+
GREATER_THAN
|
|
40
|
+
GREATER_THAN_OR_EQUAL IN INSTANCE_EQUAL
|
|
41
|
+
INSTANCE_NOT_EQUAL
|
|
42
|
+
INTEGER_DIVISION LESS_THAN LESS_THAN_OR_EQUAL LIKE
|
|
43
|
+
MODULO MULTIPLICATION NOT_EQUAL OR REAL_DIVISION
|
|
44
|
+
SUBTRACTION XOR
|
|
45
|
+
]
|
|
46
|
+
attribute :operand1, ModelElement
|
|
47
|
+
attribute :operand2, ModelElement
|
|
48
|
+
attribute :_class, :string, default: -> { self.class.name }
|
|
38
49
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
@operator = options[:operator]
|
|
45
|
-
@operand1 = options[:operand1]
|
|
46
|
-
@operand2 = options[:operand2]
|
|
47
|
-
|
|
48
|
-
super
|
|
50
|
+
key_value do
|
|
51
|
+
map "_class", to: :_class, render_default: true
|
|
52
|
+
map "operator", to: :operator
|
|
53
|
+
map "operand1", to: :operand1
|
|
54
|
+
map "operand2", to: :operand2
|
|
49
55
|
end
|
|
50
56
|
end
|
|
51
57
|
end
|
|
52
58
|
end
|
|
53
|
-
end
|
|
59
|
+
end
|
|
@@ -3,20 +3,18 @@ module Expressir
|
|
|
3
3
|
module Expressions
|
|
4
4
|
# Specified in ISO 10303-11:2004
|
|
5
5
|
# - section 9.2.6 Implicit declarations
|
|
6
|
-
class EntityConstructor <
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
class EntityConstructor < ModelElement
|
|
7
|
+
child_attributes :parameters
|
|
8
|
+
attribute :entity, ModelElement
|
|
9
|
+
attribute :parameters, ModelElement, collection: true
|
|
10
|
+
attribute :_class, :string, default: -> { self.class.name }
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@entity = options[:entity]
|
|
15
|
-
@parameters = options[:parameters] || []
|
|
16
|
-
|
|
17
|
-
super
|
|
12
|
+
key_value do
|
|
13
|
+
map "_class", to: :_class, render_default: true
|
|
14
|
+
map "entity", to: :entity
|
|
15
|
+
map "parameters", to: :parameters
|
|
18
16
|
end
|
|
19
17
|
end
|
|
20
18
|
end
|
|
21
19
|
end
|
|
22
|
-
end
|
|
20
|
+
end
|
|
@@ -3,20 +3,18 @@ module Expressir
|
|
|
3
3
|
module Expressions
|
|
4
4
|
# Specified in ISO 10303-11:2004
|
|
5
5
|
# - section 12.8 Function call
|
|
6
|
-
class FunctionCall <
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
class FunctionCall < ModelElement
|
|
7
|
+
child_attributes :parameters
|
|
8
|
+
attribute :function, ModelElement
|
|
9
|
+
attribute :parameters, ModelElement, collection: true
|
|
10
|
+
attribute :_class, :string, default: -> { self.class.name }
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@function = options[:function]
|
|
15
|
-
@parameters = options[:parameters] || []
|
|
16
|
-
|
|
17
|
-
super
|
|
12
|
+
key_value do
|
|
13
|
+
map "_class", to: :_class, render_default: true
|
|
14
|
+
map "function", to: :function
|
|
15
|
+
map "parameters", to: :parameters
|
|
18
16
|
end
|
|
19
17
|
end
|
|
20
18
|
end
|
|
21
19
|
end
|
|
22
|
-
end
|
|
20
|
+
end
|
|
@@ -3,32 +3,27 @@ module Expressir
|
|
|
3
3
|
module Expressions
|
|
4
4
|
# Specified in ISO 10303-11:2004
|
|
5
5
|
# - section 12.2.4 Interval expressions
|
|
6
|
-
class Interval <
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
class Interval < ModelElement
|
|
7
|
+
child_attributes :low, :item, :high
|
|
8
|
+
LESS_THAN = "LESS_THAN".freeze
|
|
9
|
+
LESS_THAN_OR_EQUAL = "LESS_THAN_OR_EQUAL".freeze
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
attribute :low, ModelElement
|
|
12
|
+
attribute :operator1, :string, values: %w[LESS_THAN LESS_THAN_OR_EQUAL]
|
|
13
|
+
attribute :item, ModelElement
|
|
14
|
+
attribute :operator2, :string, values: %w[LESS_THAN LESS_THAN_OR_EQUAL]
|
|
15
|
+
attribute :high, ModelElement
|
|
16
|
+
attribute :_class, :string, default: -> { self.class.name }
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
@low = options[:low]
|
|
24
|
-
@operator1 = options[:operator1]
|
|
25
|
-
@item = options[:item]
|
|
26
|
-
@operator2 = options[:operator2]
|
|
27
|
-
@high = options[:high]
|
|
28
|
-
|
|
29
|
-
super
|
|
18
|
+
key_value do
|
|
19
|
+
map "_class", to: :_class, render_default: true
|
|
20
|
+
map "low", to: :low
|
|
21
|
+
map "operator1", to: :operator1
|
|
22
|
+
map "item", to: :item
|
|
23
|
+
map "operator2", to: :operator2
|
|
24
|
+
map "high", to: :high
|
|
30
25
|
end
|
|
31
26
|
end
|
|
32
27
|
end
|
|
33
28
|
end
|
|
34
|
-
end
|
|
29
|
+
end
|
|
@@ -3,33 +3,29 @@ module Expressir
|
|
|
3
3
|
module Expressions
|
|
4
4
|
# Specified in ISO 10303-11:2004
|
|
5
5
|
# - section 12.6.7 Query expression
|
|
6
|
-
class QueryExpression <
|
|
6
|
+
class QueryExpression < ModelElement
|
|
7
7
|
include Identifier
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
model_attr_accessor :expression, 'Expression'
|
|
9
|
+
child_attributes :expression, :aggregate_source
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# @option options [Expression] :expression
|
|
16
|
-
def initialize(options = {})
|
|
17
|
-
initialize_identifier(options)
|
|
11
|
+
attribute :aggregate_source, ModelElement
|
|
12
|
+
attribute :expression, ModelElement
|
|
13
|
+
attribute :_class, :string, default: -> { self.class.name }
|
|
18
14
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
key_value do
|
|
16
|
+
map "_class", to: :_class, render_default: true
|
|
17
|
+
map "aggregate_source", to: :aggregate_source
|
|
18
|
+
map "expression", to: :expression
|
|
23
19
|
end
|
|
24
20
|
|
|
25
21
|
# @return [Array<Declaration>]
|
|
26
22
|
def children
|
|
27
23
|
[
|
|
28
24
|
self,
|
|
29
|
-
*remark_items
|
|
25
|
+
*remark_items,
|
|
30
26
|
]
|
|
31
27
|
end
|
|
32
28
|
end
|
|
33
29
|
end
|
|
34
30
|
end
|
|
35
|
-
end
|
|
31
|
+
end
|
|
@@ -4,24 +4,22 @@ module Expressir
|
|
|
4
4
|
# Specified in ISO 10303-11:2004
|
|
5
5
|
# - section 12.1 Arithmetic operators
|
|
6
6
|
# - section 12.4.1 NOT operator
|
|
7
|
-
class UnaryExpression <
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
class UnaryExpression < ModelElement
|
|
8
|
+
child_attributes :operand
|
|
9
|
+
MINUS = "MINUS".freeze
|
|
10
|
+
NOT = "NOT".freeze
|
|
11
|
+
PLUS = "PLUS".freeze
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
attribute :operator, :string, values: %w[MINUS NOT PLUS]
|
|
14
|
+
attribute :operand, ModelElement
|
|
15
|
+
attribute :_class, :string, default: -> { self.class.name }
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
@operator = options[:operator]
|
|
20
|
-
@operand = options[:operand]
|
|
21
|
-
|
|
22
|
-
super
|
|
17
|
+
key_value do
|
|
18
|
+
map "_class", to: :_class, render_default: true
|
|
19
|
+
map "operator", to: :operator
|
|
20
|
+
map "operand", to: :operand
|
|
23
21
|
end
|
|
24
22
|
end
|
|
25
23
|
end
|
|
26
24
|
end
|
|
27
|
-
end
|
|
25
|
+
end
|