bel_parser 1.0.0.alpha.27-java
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 +7 -0
- data/.gemspec-java +32 -0
- data/CHANGELOG.md +10 -0
- data/LICENSE +191 -0
- data/README.md +20 -0
- data/VERSION +1 -0
- data/bin/bel2_validator +62 -0
- data/bin/bel_script_reader +132 -0
- data/lib/bel/translator/plugins/bel_script.rb +38 -0
- data/lib/bel/translator/plugins/bel_script/bel_citation_serialization.rb +125 -0
- data/lib/bel/translator/plugins/bel_script/bel_discrete_serialization.rb +109 -0
- data/lib/bel/translator/plugins/bel_script/bel_top_down_serialization.rb +100 -0
- data/lib/bel/translator/plugins/bel_script/nanopub_serialization.rb +79 -0
- data/lib/bel/translator/plugins/bel_script/reader.rb +39 -0
- data/lib/bel/translator/plugins/bel_script/translator.rb +37 -0
- data/lib/bel/translator/plugins/bel_script/writer.rb +180 -0
- data/lib/bel_parser.rb +23 -0
- data/lib/bel_parser/ast_filter.rb +44 -0
- data/lib/bel_parser/ast_generator.rb +83 -0
- data/lib/bel_parser/expression.rb +3 -0
- data/lib/bel_parser/expression/filter.rb +31 -0
- data/lib/bel_parser/expression/parser.rb +72 -0
- data/lib/bel_parser/expression/validator.rb +79 -0
- data/lib/bel_parser/language.rb +114 -0
- data/lib/bel_parser/language/amino_acid.rb +68 -0
- data/lib/bel_parser/language/apply_namespace_encoding.rb +98 -0
- data/lib/bel_parser/language/base_specification.rb +82 -0
- data/lib/bel_parser/language/covalent_protein_modification.rb +56 -0
- data/lib/bel_parser/language/expression_validator.rb +68 -0
- data/lib/bel_parser/language/function.rb +67 -0
- data/lib/bel_parser/language/relationship.rb +102 -0
- data/lib/bel_parser/language/semantics.rb +40 -0
- data/lib/bel_parser/language/semantics/deeply_nested_statement.rb +65 -0
- data/lib/bel_parser/language/semantics/function_deprecation.rb +43 -0
- data/lib/bel_parser/language/semantics/list_function_subject.rb +45 -0
- data/lib/bel_parser/language/semantics/multiple_subject_object.rb +55 -0
- data/lib/bel_parser/language/semantics/non_causal_nested_statement.rb +50 -0
- data/lib/bel_parser/language/semantics/non_object_list.rb +56 -0
- data/lib/bel_parser/language/semantics/relationship_deprecation.rb +44 -0
- data/lib/bel_parser/language/semantics/relationship_not_listable.rb +60 -0
- data/lib/bel_parser/language/semantics/signature_mapping.rb +83 -0
- data/lib/bel_parser/language/semantics_ast.rb +784 -0
- data/lib/bel_parser/language/semantics_ast_warnings.rb +180 -0
- data/lib/bel_parser/language/semantics_function.rb +16 -0
- data/lib/bel_parser/language/semantics_match.rb +28 -0
- data/lib/bel_parser/language/semantics_result.rb +33 -0
- data/lib/bel_parser/language/semantics_type_warning.rb +22 -0
- data/lib/bel_parser/language/semantics_warning.rb +27 -0
- data/lib/bel_parser/language/signature.rb +39 -0
- data/lib/bel_parser/language/specification.rb +118 -0
- data/lib/bel_parser/language/syntax.rb +38 -0
- data/lib/bel_parser/language/syntax/invalid_function.rb +39 -0
- data/lib/bel_parser/language/syntax/invalid_relationship.rb +42 -0
- data/lib/bel_parser/language/syntax/undefined_namespace.rb +49 -0
- data/lib/bel_parser/language/syntax/undefined_namespace_value.rb +44 -0
- data/lib/bel_parser/language/syntax_error.rb +32 -0
- data/lib/bel_parser/language/syntax_function.rb +16 -0
- data/lib/bel_parser/language/syntax_result.rb +32 -0
- data/lib/bel_parser/language/syntax_warning.rb +27 -0
- data/lib/bel_parser/language/version1_0.rb +20 -0
- data/lib/bel_parser/language/version1_0/functions/abundance.rb +83 -0
- data/lib/bel_parser/language/version1_0/functions/biological_process.rb +83 -0
- data/lib/bel_parser/language/version1_0/functions/catalytic_activity.rb +114 -0
- data/lib/bel_parser/language/version1_0/functions/cell_secretion.rb +83 -0
- data/lib/bel_parser/language/version1_0/functions/cell_surface_expression.rb +83 -0
- data/lib/bel_parser/language/version1_0/functions/chaperone_activity.rb +114 -0
- data/lib/bel_parser/language/version1_0/functions/complex_abundance.rb +115 -0
- data/lib/bel_parser/language/version1_0/functions/composite_abundance.rb +81 -0
- data/lib/bel_parser/language/version1_0/functions/degradation.rb +83 -0
- data/lib/bel_parser/language/version1_0/functions/fusion.rb +287 -0
- data/lib/bel_parser/language/version1_0/functions/gene_abundance.rb +122 -0
- data/lib/bel_parser/language/version1_0/functions/gtp_bound_activity.rb +113 -0
- data/lib/bel_parser/language/version1_0/functions/kinase_activity.rb +114 -0
- data/lib/bel_parser/language/version1_0/functions/list.rb +114 -0
- data/lib/bel_parser/language/version1_0/functions/micro_rna_abundance.rb +85 -0
- data/lib/bel_parser/language/version1_0/functions/molecular_activity.rb +82 -0
- data/lib/bel_parser/language/version1_0/functions/pathology.rb +83 -0
- data/lib/bel_parser/language/version1_0/functions/peptidase_activity.rb +112 -0
- data/lib/bel_parser/language/version1_0/functions/phosphatase_activity.rb +112 -0
- data/lib/bel_parser/language/version1_0/functions/products.rb +79 -0
- data/lib/bel_parser/language/version1_0/functions/protein_abundance.rb +234 -0
- data/lib/bel_parser/language/version1_0/functions/protein_modification.rb +179 -0
- data/lib/bel_parser/language/version1_0/functions/reactants.rb +79 -0
- data/lib/bel_parser/language/version1_0/functions/reaction.rb +86 -0
- data/lib/bel_parser/language/version1_0/functions/ribosylation_activity.rb +114 -0
- data/lib/bel_parser/language/version1_0/functions/rna_abundance.rb +122 -0
- data/lib/bel_parser/language/version1_0/functions/substitution.rb +93 -0
- data/lib/bel_parser/language/version1_0/functions/transcriptional_activity.rb +114 -0
- data/lib/bel_parser/language/version1_0/functions/translocation.rb +98 -0
- data/lib/bel_parser/language/version1_0/functions/transport_activity.rb +115 -0
- data/lib/bel_parser/language/version1_0/functions/truncation.rb +81 -0
- data/lib/bel_parser/language/version1_0/relationships/acts_in.rb +61 -0
- data/lib/bel_parser/language/version1_0/relationships/analogous.rb +41 -0
- data/lib/bel_parser/language/version1_0/relationships/association.rb +42 -0
- data/lib/bel_parser/language/version1_0/relationships/biomarker_for.rb +42 -0
- data/lib/bel_parser/language/version1_0/relationships/causes_no_change.rb +50 -0
- data/lib/bel_parser/language/version1_0/relationships/decreases.rb +63 -0
- data/lib/bel_parser/language/version1_0/relationships/directly_decreases.rb +56 -0
- data/lib/bel_parser/language/version1_0/relationships/directly_increases.rb +56 -0
- data/lib/bel_parser/language/version1_0/relationships/has_component.rb +62 -0
- data/lib/bel_parser/language/version1_0/relationships/has_components.rb +61 -0
- data/lib/bel_parser/language/version1_0/relationships/has_member.rb +48 -0
- data/lib/bel_parser/language/version1_0/relationships/has_members.rb +57 -0
- data/lib/bel_parser/language/version1_0/relationships/has_modification.rb +54 -0
- data/lib/bel_parser/language/version1_0/relationships/has_product.rb +60 -0
- data/lib/bel_parser/language/version1_0/relationships/has_variant.rb +54 -0
- data/lib/bel_parser/language/version1_0/relationships/includes.rb +59 -0
- data/lib/bel_parser/language/version1_0/relationships/increases.rb +63 -0
- data/lib/bel_parser/language/version1_0/relationships/is_a.rb +48 -0
- data/lib/bel_parser/language/version1_0/relationships/negative_correlation.rb +50 -0
- data/lib/bel_parser/language/version1_0/relationships/orthologous.rb +48 -0
- data/lib/bel_parser/language/version1_0/relationships/positive_correlation.rb +46 -0
- data/lib/bel_parser/language/version1_0/relationships/prognostic_biomarker_for.rb +44 -0
- data/lib/bel_parser/language/version1_0/relationships/rate_limiting_step_of.rb +53 -0
- data/lib/bel_parser/language/version1_0/relationships/reactant_in.rb +60 -0
- data/lib/bel_parser/language/version1_0/relationships/sub_process_of.rb +55 -0
- data/lib/bel_parser/language/version1_0/relationships/transcribed_to.rb +53 -0
- data/lib/bel_parser/language/version1_0/relationships/translated_to.rb +54 -0
- data/lib/bel_parser/language/version1_0/relationships/translocates.rb +57 -0
- data/lib/bel_parser/language/version1_0/return_types/abundance.rb +20 -0
- data/lib/bel_parser/language/version1_0/return_types/any.rb +74 -0
- data/lib/bel_parser/language/version1_0/return_types/biological_process.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/catalytic_activity.rb +20 -0
- data/lib/bel_parser/language/version1_0/return_types/chaperone_activity.rb +20 -0
- data/lib/bel_parser/language/version1_0/return_types/complex_abundance.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/fusion.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/gene_abundance.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/gtp_bound_activity.rb +20 -0
- data/lib/bel_parser/language/version1_0/return_types/kinase_activity.rb +20 -0
- data/lib/bel_parser/language/version1_0/return_types/list.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/micro_rna_abundance.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/molecular_activity.rb +20 -0
- data/lib/bel_parser/language/version1_0/return_types/pathology.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/peptidase_activity.rb +20 -0
- data/lib/bel_parser/language/version1_0/return_types/phosphatase_activity.rb +20 -0
- data/lib/bel_parser/language/version1_0/return_types/products.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/protein_abundance.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/protein_modification.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/reactants.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/ribosylation_activity.rb +20 -0
- data/lib/bel_parser/language/version1_0/return_types/rna_abundance.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/substitution.rb +17 -0
- data/lib/bel_parser/language/version1_0/return_types/transcriptional_activity.rb +20 -0
- data/lib/bel_parser/language/version1_0/return_types/transport_activity.rb +20 -0
- data/lib/bel_parser/language/version1_0/return_types/truncation.rb +17 -0
- data/lib/bel_parser/language/version1_0/value_encodings/abundance.rb +21 -0
- data/lib/bel_parser/language/version1_0/value_encodings/any.rb +74 -0
- data/lib/bel_parser/language/version1_0/value_encodings/biological_process.rb +21 -0
- data/lib/bel_parser/language/version1_0/value_encodings/complex_abundance.rb +21 -0
- data/lib/bel_parser/language/version1_0/value_encodings/gene_abundance.rb +21 -0
- data/lib/bel_parser/language/version1_0/value_encodings/micro_rna_abundance.rb +21 -0
- data/lib/bel_parser/language/version1_0/value_encodings/pathology.rb +21 -0
- data/lib/bel_parser/language/version1_0/value_encodings/protein_abundance.rb +21 -0
- data/lib/bel_parser/language/version1_0/value_encodings/rna_abundance.rb +21 -0
- data/lib/bel_parser/language/version2_0.rb +20 -0
- data/lib/bel_parser/language/version2_0/functions/abundance.rb +161 -0
- data/lib/bel_parser/language/version2_0/functions/activity.rb +118 -0
- data/lib/bel_parser/language/version2_0/functions/biological_process.rb +84 -0
- data/lib/bel_parser/language/version2_0/functions/cell_secretion.rb +83 -0
- data/lib/bel_parser/language/version2_0/functions/cell_surface_expression.rb +83 -0
- data/lib/bel_parser/language/version2_0/functions/complex_abundance.rb +190 -0
- data/lib/bel_parser/language/version2_0/functions/composite_abundance.rb +81 -0
- data/lib/bel_parser/language/version2_0/functions/degradation.rb +83 -0
- data/lib/bel_parser/language/version2_0/functions/fragment.rb +116 -0
- data/lib/bel_parser/language/version2_0/functions/from_location.rb +85 -0
- data/lib/bel_parser/language/version2_0/functions/fusion.rb +203 -0
- data/lib/bel_parser/language/version2_0/functions/gene_abundance.rb +192 -0
- data/lib/bel_parser/language/version2_0/functions/list.rb +114 -0
- data/lib/bel_parser/language/version2_0/functions/location.rb +83 -0
- data/lib/bel_parser/language/version2_0/functions/micro_rna_abundance.rb +163 -0
- data/lib/bel_parser/language/version2_0/functions/molecular_activity.rb +86 -0
- data/lib/bel_parser/language/version2_0/functions/pathology.rb +83 -0
- data/lib/bel_parser/language/version2_0/functions/products.rb +79 -0
- data/lib/bel_parser/language/version2_0/functions/protein_abundance.rb +270 -0
- data/lib/bel_parser/language/version2_0/functions/protein_modification.rb +172 -0
- data/lib/bel_parser/language/version2_0/functions/reactants.rb +79 -0
- data/lib/bel_parser/language/version2_0/functions/reaction.rb +86 -0
- data/lib/bel_parser/language/version2_0/functions/rna_abundance.rb +192 -0
- data/lib/bel_parser/language/version2_0/functions/to_location.rb +84 -0
- data/lib/bel_parser/language/version2_0/functions/translocation.rb +91 -0
- data/lib/bel_parser/language/version2_0/functions/variant.rb +80 -0
- data/lib/bel_parser/language/version2_0/relationships/acts_in.rb +61 -0
- data/lib/bel_parser/language/version2_0/relationships/analogous.rb +45 -0
- data/lib/bel_parser/language/version2_0/relationships/association.rb +42 -0
- data/lib/bel_parser/language/version2_0/relationships/biomarker_for.rb +46 -0
- data/lib/bel_parser/language/version2_0/relationships/causes_no_change.rb +50 -0
- data/lib/bel_parser/language/version2_0/relationships/decreases.rb +63 -0
- data/lib/bel_parser/language/version2_0/relationships/directly_decreases.rb +56 -0
- data/lib/bel_parser/language/version2_0/relationships/directly_increases.rb +56 -0
- data/lib/bel_parser/language/version2_0/relationships/has_component.rb +62 -0
- data/lib/bel_parser/language/version2_0/relationships/has_components.rb +61 -0
- data/lib/bel_parser/language/version2_0/relationships/has_member.rb +48 -0
- data/lib/bel_parser/language/version2_0/relationships/has_members.rb +57 -0
- data/lib/bel_parser/language/version2_0/relationships/has_modification.rb +54 -0
- data/lib/bel_parser/language/version2_0/relationships/has_product.rb +60 -0
- data/lib/bel_parser/language/version2_0/relationships/has_variant.rb +54 -0
- data/lib/bel_parser/language/version2_0/relationships/includes.rb +59 -0
- data/lib/bel_parser/language/version2_0/relationships/increases.rb +63 -0
- data/lib/bel_parser/language/version2_0/relationships/is_a.rb +48 -0
- data/lib/bel_parser/language/version2_0/relationships/negative_correlation.rb +50 -0
- data/lib/bel_parser/language/version2_0/relationships/orthologous.rb +48 -0
- data/lib/bel_parser/language/version2_0/relationships/positive_correlation.rb +46 -0
- data/lib/bel_parser/language/version2_0/relationships/prognostic_biomarker_for.rb +48 -0
- data/lib/bel_parser/language/version2_0/relationships/rate_limiting_step_of.rb +53 -0
- data/lib/bel_parser/language/version2_0/relationships/reactant_in.rb +60 -0
- data/lib/bel_parser/language/version2_0/relationships/regulates.rb +51 -0
- data/lib/bel_parser/language/version2_0/relationships/sub_process_of.rb +55 -0
- data/lib/bel_parser/language/version2_0/relationships/transcribed_to.rb +53 -0
- data/lib/bel_parser/language/version2_0/relationships/translated_to.rb +54 -0
- data/lib/bel_parser/language/version2_0/relationships/translocates.rb +57 -0
- data/lib/bel_parser/language/version2_0/return_types/abundance.rb +20 -0
- data/lib/bel_parser/language/version2_0/return_types/activity.rb +20 -0
- data/lib/bel_parser/language/version2_0/return_types/any.rb +74 -0
- data/lib/bel_parser/language/version2_0/return_types/biological_process.rb +17 -0
- data/lib/bel_parser/language/version2_0/return_types/complex_abundance.rb +17 -0
- data/lib/bel_parser/language/version2_0/return_types/fragment.rb +20 -0
- data/lib/bel_parser/language/version2_0/return_types/from_location.rb +20 -0
- data/lib/bel_parser/language/version2_0/return_types/fusion.rb +17 -0
- data/lib/bel_parser/language/version2_0/return_types/gene_abundance.rb +17 -0
- data/lib/bel_parser/language/version2_0/return_types/list.rb +17 -0
- data/lib/bel_parser/language/version2_0/return_types/location.rb +20 -0
- data/lib/bel_parser/language/version2_0/return_types/micro_rna_abundance.rb +17 -0
- data/lib/bel_parser/language/version2_0/return_types/molecular_activity.rb +20 -0
- data/lib/bel_parser/language/version2_0/return_types/pathology.rb +17 -0
- data/lib/bel_parser/language/version2_0/return_types/products.rb +17 -0
- data/lib/bel_parser/language/version2_0/return_types/protein_abundance.rb +17 -0
- data/lib/bel_parser/language/version2_0/return_types/protein_modification.rb +17 -0
- data/lib/bel_parser/language/version2_0/return_types/reactants.rb +17 -0
- data/lib/bel_parser/language/version2_0/return_types/rna_abundance.rb +17 -0
- data/lib/bel_parser/language/version2_0/return_types/to_location.rb +20 -0
- data/lib/bel_parser/language/version2_0/return_types/variant.rb +20 -0
- data/lib/bel_parser/language/version2_0/value_encodings/abundance.rb +21 -0
- data/lib/bel_parser/language/version2_0/value_encodings/activity.rb +21 -0
- data/lib/bel_parser/language/version2_0/value_encodings/any.rb +74 -0
- data/lib/bel_parser/language/version2_0/value_encodings/biological_process.rb +21 -0
- data/lib/bel_parser/language/version2_0/value_encodings/complex_abundance.rb +21 -0
- data/lib/bel_parser/language/version2_0/value_encodings/gene_abundance.rb +21 -0
- data/lib/bel_parser/language/version2_0/value_encodings/location.rb +21 -0
- data/lib/bel_parser/language/version2_0/value_encodings/micro_rna_abundance.rb +21 -0
- data/lib/bel_parser/language/version2_0/value_encodings/pathology.rb +21 -0
- data/lib/bel_parser/language/version2_0/value_encodings/protein_abundance.rb +21 -0
- data/lib/bel_parser/language/version2_0/value_encodings/protein_modification.rb +21 -0
- data/lib/bel_parser/language/version2_0/value_encodings/rna_abundance.rb +21 -0
- data/lib/bel_parser/mixin/line_continuator.rb +15 -0
- data/lib/bel_parser/mixin/line_mapping.rb +14 -0
- data/lib/bel_parser/parsers/ast/node.rb +987 -0
- data/lib/bel_parser/parsers/ast/sexp.rb +8 -0
- data/lib/bel_parser/parsers/bel_script.rb +5 -0
- data/lib/bel_parser/parsers/bel_script/define_annotation.rb +5920 -0
- data/lib/bel_parser/parsers/bel_script/define_annotation.rl +141 -0
- data/lib/bel_parser/parsers/bel_script/define_namespace.rb +1780 -0
- data/lib/bel_parser/parsers/bel_script/define_namespace.rl +121 -0
- data/lib/bel_parser/parsers/bel_script/set.rb +5008 -0
- data/lib/bel_parser/parsers/bel_script/set.rl +116 -0
- data/lib/bel_parser/parsers/bel_script/set_document.rb +7722 -0
- data/lib/bel_parser/parsers/bel_script/set_document.rl +97 -0
- data/lib/bel_parser/parsers/bel_script/unset.rb +706 -0
- data/lib/bel_parser/parsers/bel_script/unset.rl +95 -0
- data/lib/bel_parser/parsers/common.rb +5 -0
- data/lib/bel_parser/parsers/common/blank_line.rb +211 -0
- data/lib/bel_parser/parsers/common/blank_line.rl +81 -0
- data/lib/bel_parser/parsers/common/comment_line.rb +245 -0
- data/lib/bel_parser/parsers/common/comment_line.rl +97 -0
- data/lib/bel_parser/parsers/common/common.rb +7 -0
- data/lib/bel_parser/parsers/common/common.rl +13 -0
- data/lib/bel_parser/parsers/common/identifier.rb +289 -0
- data/lib/bel_parser/parsers/common/identifier.rl +106 -0
- data/lib/bel_parser/parsers/common/list.rb +2388 -0
- data/lib/bel_parser/parsers/common/list.rl +146 -0
- data/lib/bel_parser/parsers/common/string.rb +271 -0
- data/lib/bel_parser/parsers/common/string.rl +107 -0
- data/lib/bel_parser/parsers/expression.rb +7 -0
- data/lib/bel_parser/parsers/expression/comment.rb +239 -0
- data/lib/bel_parser/parsers/expression/comment.rl +97 -0
- data/lib/bel_parser/parsers/expression/nested_statement.rb +17802 -0
- data/lib/bel_parser/parsers/expression/nested_statement.rl +141 -0
- data/lib/bel_parser/parsers/expression/observed_term.rb +7291 -0
- data/lib/bel_parser/parsers/expression/observed_term.rl +92 -0
- data/lib/bel_parser/parsers/expression/parameter.rb +1506 -0
- data/lib/bel_parser/parsers/expression/parameter.rl +97 -0
- data/lib/bel_parser/parsers/expression/relationship.rb +254 -0
- data/lib/bel_parser/parsers/expression/relationship.rl +98 -0
- data/lib/bel_parser/parsers/expression/simple_statement.rb +10475 -0
- data/lib/bel_parser/parsers/expression/simple_statement.rl +112 -0
- data/lib/bel_parser/parsers/expression/term.rb +3989 -0
- data/lib/bel_parser/parsers/expression/term.rl +157 -0
- data/lib/bel_parser/parsers/line_parser.rb +92 -0
- data/lib/bel_parser/parsers/mixin/buffer.rb +10 -0
- data/lib/bel_parser/parsers/nonblocking_io_wrapper.rb +50 -0
- data/lib/bel_parser/parsers/serializer.rb +205 -0
- data/lib/bel_parser/quoting.rb +177 -0
- data/lib/bel_parser/resource/concept.rb +56 -0
- data/lib/bel_parser/resource/concept_scheme.rb +35 -0
- data/lib/bel_parser/resource/dataset.rb +34 -0
- data/lib/bel_parser/resource/eager_reader.rb +89 -0
- data/lib/bel_parser/resource/eager_sparql_reader.rb +51 -0
- data/lib/bel_parser/resource/file_resource.rb +21 -0
- data/lib/bel_parser/resource/file_resource_value.rb +24 -0
- data/lib/bel_parser/resource/jena_tdb_reader.rb +246 -0
- data/lib/bel_parser/resource/lru_cache.rb +111 -0
- data/lib/bel_parser/resource/lru_reader.rb +34 -0
- data/lib/bel_parser/resource/reader.rb +18 -0
- data/lib/bel_parser/resource/resource_url_reader.rb +181 -0
- data/lib/bel_parser/resource/sparql_reader.rb +179 -0
- data/lib/bel_parser/resource/value.rb +31 -0
- data/lib/bel_parser/script.rb +8 -0
- data/lib/bel_parser/script/filter.rb +35 -0
- data/lib/bel_parser/script/first_node.rb +21 -0
- data/lib/bel_parser/script/keywords.rb +32 -0
- data/lib/bel_parser/script/nanopub_mapper.rb +182 -0
- data/lib/bel_parser/script/parser.rb +51 -0
- data/lib/bel_parser/script/state/annotation_definition.rb +62 -0
- data/lib/bel_parser/script/state/bel_version.rb +36 -0
- data/lib/bel_parser/script/state/document_property.rb +29 -0
- data/lib/bel_parser/script/state/namespace_definition.rb +32 -0
- data/lib/bel_parser/script/state/set.rb +82 -0
- data/lib/bel_parser/script/state/unset.rb +46 -0
- data/lib/bel_parser/script/state_aggregator.rb +49 -0
- data/lib/bel_parser/script/state_function.rb +10 -0
- data/lib/bel_parser/script/syntax/expression_validation.rb +46 -0
- data/lib/bel_parser/script/syntax/invalid_regex_pattern.rb +49 -0
- data/lib/bel_parser/script/syntax/undefined_annotation.rb +61 -0
- data/lib/bel_parser/script/syntax/undefined_annotation_value.rb +84 -0
- data/lib/bel_parser/script/syntax/unresolvable_namespace.rb +54 -0
- data/lib/bel_parser/script/syntax/unsupported_bel_version.rb +59 -0
- data/lib/bel_parser/script/validator.rb +65 -0
- data/lib/bel_parser/vendor/ast.rb +17 -0
- data/lib/bel_parser/vendor/ast/node.rb +254 -0
- data/lib/bel_parser/vendor/ast/processor.rb +12 -0
- data/lib/bel_parser/vendor/ast/processor/mixin.rb +282 -0
- data/lib/bel_parser/vendor/ast/sexp.rb +30 -0
- metadata +390 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../../version2_0'
|
2
|
+
require_relative 'abundance'
|
3
|
+
|
4
|
+
module BELParser
|
5
|
+
module Language
|
6
|
+
module Version2_0
|
7
|
+
module ValueEncodings
|
8
|
+
# GeneAbundance value encoding.
|
9
|
+
class GeneAbundance < Abundance
|
10
|
+
# Return the {Symbol} value.
|
11
|
+
#
|
12
|
+
# @note This method should be overridden in subclasses.
|
13
|
+
def self.to_sym
|
14
|
+
raise_not_implemented(__method__) if self != GeneAbundance
|
15
|
+
:G
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../../version2_0'
|
2
|
+
require_relative 'any'
|
3
|
+
|
4
|
+
module BELParser
|
5
|
+
module Language
|
6
|
+
module Version2_0
|
7
|
+
module ValueEncodings
|
8
|
+
# Location value encoding.
|
9
|
+
class Location < Any
|
10
|
+
# Return the {Symbol} value.
|
11
|
+
#
|
12
|
+
# @note This method should be overridden in subclasses.
|
13
|
+
def self.to_sym
|
14
|
+
raise_not_implemented(__method__) if self != Location
|
15
|
+
:L
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../../version2_0'
|
2
|
+
require_relative 'rna_abundance'
|
3
|
+
|
4
|
+
module BELParser
|
5
|
+
module Language
|
6
|
+
module Version2_0
|
7
|
+
module ValueEncodings
|
8
|
+
# Micro RNA abundance value encoding.
|
9
|
+
class MicroRNAAbundance < RNAAbundance
|
10
|
+
# Return the {Symbol} value.
|
11
|
+
#
|
12
|
+
# @note This method should be overridden in subclasses.
|
13
|
+
def self.to_sym
|
14
|
+
raise_not_implemented(__method__) if self != MicroRNAAbundance
|
15
|
+
:M
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../../version2_0'
|
2
|
+
require_relative 'biological_process'
|
3
|
+
|
4
|
+
module BELParser
|
5
|
+
module Language
|
6
|
+
module Version2_0
|
7
|
+
module ValueEncodings
|
8
|
+
# Pathology value encoding.
|
9
|
+
class Pathology < BiologicalProcess
|
10
|
+
# Return the {Symbol} value.
|
11
|
+
#
|
12
|
+
# @note This method should be overridden in subclasses.
|
13
|
+
def self.to_sym
|
14
|
+
raise_not_implemented(__method__) if self != Pathology
|
15
|
+
:O
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../../version2_0'
|
2
|
+
require_relative 'abundance'
|
3
|
+
|
4
|
+
module BELParser
|
5
|
+
module Language
|
6
|
+
module Version2_0
|
7
|
+
module ValueEncodings
|
8
|
+
# ProteinAbundance value encoding.
|
9
|
+
class ProteinAbundance < Abundance
|
10
|
+
# Return the {Symbol} value.
|
11
|
+
#
|
12
|
+
# @note This method should be overridden in subclasses.
|
13
|
+
def self.to_sym
|
14
|
+
raise_not_implemented(__method__) if self != ProteinAbundance
|
15
|
+
:P
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../../version2_0'
|
2
|
+
require_relative 'any'
|
3
|
+
|
4
|
+
module BELParser
|
5
|
+
module Language
|
6
|
+
module Version2_0
|
7
|
+
module ValueEncodings
|
8
|
+
# ProteinModification value encoding.
|
9
|
+
class ProteinModification < Any
|
10
|
+
# Return the {Symbol} value.
|
11
|
+
#
|
12
|
+
# @note This method should be overridden in subclasses.
|
13
|
+
def self.to_sym
|
14
|
+
raise_not_implemented(__method__) if self != ProteinModification
|
15
|
+
:E
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../../version2_0'
|
2
|
+
require_relative 'abundance'
|
3
|
+
|
4
|
+
module BELParser
|
5
|
+
module Language
|
6
|
+
module Version2_0
|
7
|
+
module ValueEncodings
|
8
|
+
# RNAAbundance value encoding.
|
9
|
+
class RNAAbundance < Abundance
|
10
|
+
# Return the {Symbol} value.
|
11
|
+
#
|
12
|
+
# @note This method should be overridden in subclasses.
|
13
|
+
def self.to_sym
|
14
|
+
raise_not_implemented(__method__) if self != RNAAbundance
|
15
|
+
:R
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module BELParser
|
2
|
+
# LineContinuator is a mixin for line expansions for BEL Script.
|
3
|
+
module LineContinuator
|
4
|
+
LINE_CONTINUATOR = "\\\n".freeze
|
5
|
+
|
6
|
+
def expand_line_continuator(line_enumerator)
|
7
|
+
line = line_enumerator.next
|
8
|
+
while line.end_with?(LINE_CONTINUATOR)
|
9
|
+
line.chomp!(LINE_CONTINUATOR)
|
10
|
+
line += line_enumerator.next
|
11
|
+
end
|
12
|
+
line
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module BELParser
|
2
|
+
# LineMapping module.
|
3
|
+
module LineMapping
|
4
|
+
def normalize_line_terminator(line)
|
5
|
+
return nil unless line
|
6
|
+
line.sub(/[\r\n]+$/, '') + "\n"
|
7
|
+
end
|
8
|
+
|
9
|
+
def map_lines(line_enumerator)
|
10
|
+
line_enumerator
|
11
|
+
.map { |line| normalize_line_terminator(line) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,987 @@
|
|
1
|
+
require 'bel_parser/vendor/ast'
|
2
|
+
|
3
|
+
module BELParser
|
4
|
+
module Parsers
|
5
|
+
# BEL AST module.
|
6
|
+
module AST
|
7
|
+
# @raise ArgumentError if _argument_ is not _expected_
|
8
|
+
def self.assert_is_a(expected, actual, argument)
|
9
|
+
msg = ->(x, y, z) { "Expected #{x} of #{y}, but got #{z}" }
|
10
|
+
return if actual.is_a? expected
|
11
|
+
raise ArgumentError, msg.call(expected, argument, actual.class)
|
12
|
+
end
|
13
|
+
|
14
|
+
# BEL application-specific AST node.
|
15
|
+
#
|
16
|
+
# All BEL AST nodes have a basic set of properties. Additional
|
17
|
+
# properties may be specified by subclasses. Each class in
|
18
|
+
# the hierarchy describes its type through the class variable
|
19
|
+
# _ast_type_. This is equivalent to its _type_ instance variable
|
20
|
+
# but the former is not used by the AST library itself.
|
21
|
+
#
|
22
|
+
# @see Node.ast_type
|
23
|
+
# @see Node.initialize
|
24
|
+
#
|
25
|
+
class Node < ::AST::Node
|
26
|
+
# AST node type
|
27
|
+
@ast_type = :node
|
28
|
+
# Basic AST node has no meaning
|
29
|
+
@has_semantics = false
|
30
|
+
|
31
|
+
# New BEL AST node.
|
32
|
+
#
|
33
|
+
# @param [Symbol] type The node type symbol @param [Array]
|
34
|
+
# children Optional children of node @param [Hash] properties
|
35
|
+
# Optional supported node properties
|
36
|
+
#
|
37
|
+
# === Supported properties - +line_number+ -> {#line_number} -
|
38
|
+
# +character_range+ -> {#character_range}, {#range_start},
|
39
|
+
# {#range_end}
|
40
|
+
# - +complete+ -> {#complete?}
|
41
|
+
#
|
42
|
+
# @raise ArgumentError If _children_ is not an Array or
|
43
|
+
# _properties_
|
44
|
+
# is not a Hash
|
45
|
+
def initialize(type, children = [], properties = {})
|
46
|
+
AST.assert_is_a(Array, children, 'children')
|
47
|
+
AST.assert_is_a(Hash, properties, 'properties')
|
48
|
+
super(type, children, properties)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Get the class AST node type. @return [Symbol]
|
52
|
+
class << self; attr_reader :ast_type end
|
53
|
+
|
54
|
+
# Get whether this class AST node has semantics. @return
|
55
|
+
# [boolean]
|
56
|
+
class << self; attr_reader :has_semantics end
|
57
|
+
|
58
|
+
# Get the line number where this AST node originates.
|
59
|
+
attr_reader :line_number
|
60
|
+
|
61
|
+
# Get the character range enclosing this AST node. It is defined
|
62
|
+
# as the close interval containing all the characters of this
|
63
|
+
# AST node.
|
64
|
+
attr_reader :character_range
|
65
|
+
|
66
|
+
# Get/Set the complete property.
|
67
|
+
attr_accessor :complete
|
68
|
+
|
69
|
+
# Get the syntax errors for this AST node.
|
70
|
+
def syntax_errors
|
71
|
+
(@syntax_errors ||= [])
|
72
|
+
end
|
73
|
+
|
74
|
+
# Add a syntax error to thie AST node.
|
75
|
+
def add_syntax_error(syntax_error)
|
76
|
+
syntax_errors << syntax_error
|
77
|
+
end
|
78
|
+
|
79
|
+
# Get the start of the character range enclosing this AST node.
|
80
|
+
def range_start
|
81
|
+
@character_range[0]
|
82
|
+
end
|
83
|
+
|
84
|
+
# Get _a_ in the character range [a, b].
|
85
|
+
alias range_a range_start
|
86
|
+
|
87
|
+
# Get the end of the character range enclosing this AST node.
|
88
|
+
def range_end
|
89
|
+
@character_range[1]
|
90
|
+
end
|
91
|
+
|
92
|
+
# Get _b_ in the character range [a, b].
|
93
|
+
alias range_b range_end
|
94
|
+
|
95
|
+
# Get whether the AST node can be considered _complete_.
|
96
|
+
def complete?
|
97
|
+
@complete
|
98
|
+
end
|
99
|
+
|
100
|
+
# Get whether the AST node should be considered _incomplete_.
|
101
|
+
def incomplete?
|
102
|
+
!@complete
|
103
|
+
end
|
104
|
+
|
105
|
+
def traverse(&block)
|
106
|
+
if block_given?
|
107
|
+
yield self
|
108
|
+
children.each do |child_node|
|
109
|
+
child_node.traverse(&block) if child_node.respond_to?(:traverse)
|
110
|
+
end
|
111
|
+
else
|
112
|
+
enum_for(:traverse)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def freeze
|
117
|
+
# no freeze...nothing I want to be able to modify properties!
|
118
|
+
self
|
119
|
+
end
|
120
|
+
|
121
|
+
def updated(children = nil, properties = nil)
|
122
|
+
new_children = children || @children
|
123
|
+
new_properties = properties || {}
|
124
|
+
|
125
|
+
if @children == new_children && properties.nil?
|
126
|
+
self
|
127
|
+
elsif instance_of? Node
|
128
|
+
original_dup.send :initialize, @type, new_children, new_properties
|
129
|
+
else # self.is_a? Node
|
130
|
+
original_dup.send :initialize, new_children, new_properties
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
# Concatenates `array` with `children` and returns the resulting
|
135
|
+
# node.
|
136
|
+
#
|
137
|
+
# @return [Node]
|
138
|
+
def concat(array)
|
139
|
+
updated(@children + array.to_a)
|
140
|
+
end
|
141
|
+
|
142
|
+
alias + concat
|
143
|
+
|
144
|
+
# Appends `element` to `children` and returns the resulting node.
|
145
|
+
#
|
146
|
+
# @return [Node]
|
147
|
+
def append(element)
|
148
|
+
updated(@children + [element])
|
149
|
+
end
|
150
|
+
|
151
|
+
alias << append
|
152
|
+
end
|
153
|
+
|
154
|
+
# AST node representing a blank line.
|
155
|
+
class BlankLine < Node
|
156
|
+
# AST node type
|
157
|
+
@ast_type = :blank_line
|
158
|
+
# Blank lines have no meaning
|
159
|
+
@has_semantics = false
|
160
|
+
|
161
|
+
# New BlankLine AST node.
|
162
|
+
#
|
163
|
+
# @see Node#initialize Node class for basic properties
|
164
|
+
def initialize(children = [], properties = {})
|
165
|
+
super(BlankLine.ast_type, children, properties)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# AST node representing a statement comment.
|
170
|
+
class Comment < Node
|
171
|
+
# AST node type
|
172
|
+
@ast_type = :comment
|
173
|
+
# Comments have no meaning
|
174
|
+
@has_semantics = false
|
175
|
+
|
176
|
+
# New Comment AST node.
|
177
|
+
#
|
178
|
+
# @see Node#initialize Node class for basic properties
|
179
|
+
def initialize(children = [], properties = {})
|
180
|
+
super(Comment.ast_type, children, properties)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
# AST node representing a line comment.
|
185
|
+
class CommentLine < Node
|
186
|
+
# AST node type
|
187
|
+
@ast_type = :comment_line
|
188
|
+
# Comment lines have no meaning
|
189
|
+
@has_semantics = false
|
190
|
+
|
191
|
+
# New CommentLine AST node.
|
192
|
+
#
|
193
|
+
# @see Node#initialize Node class for basic properties
|
194
|
+
def initialize(children = [], properties = {})
|
195
|
+
super(CommentLine.ast_type, children, properties)
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
# AST node representing the definition of an annotation.
|
200
|
+
class AnnotationDefinition < Node
|
201
|
+
# AST node type
|
202
|
+
@ast_type = :annotation_definition
|
203
|
+
# Content is has semantic meaning
|
204
|
+
@has_semantics = true
|
205
|
+
|
206
|
+
# New AnnotationDefinition AST node.
|
207
|
+
#
|
208
|
+
# @see Node#initialize Node class for basic properties
|
209
|
+
def initialize(children = [], properties = {})
|
210
|
+
super(AnnotationDefinition.ast_type, children, properties)
|
211
|
+
end
|
212
|
+
|
213
|
+
# Get the annotation definition's keyword.
|
214
|
+
def keyword
|
215
|
+
children[0]
|
216
|
+
end
|
217
|
+
|
218
|
+
# Get the annotation definition's domain.
|
219
|
+
def domain
|
220
|
+
children[1]
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
# AST node representing the function of a BEL term.
|
225
|
+
#
|
226
|
+
# === Special node properties - _return_type_: {#return_type}
|
227
|
+
#
|
228
|
+
class Function < Node
|
229
|
+
# AST node type
|
230
|
+
@ast_type = :function
|
231
|
+
# Functions have semantic meaning
|
232
|
+
@has_semantics = true
|
233
|
+
|
234
|
+
# New Function AST node.
|
235
|
+
#
|
236
|
+
# @see Node#initialize Node class for basic properties
|
237
|
+
def initialize(children = [], properties = {})
|
238
|
+
super(Function.ast_type, children, properties)
|
239
|
+
end
|
240
|
+
|
241
|
+
# Get the function's identifier.
|
242
|
+
def identifier
|
243
|
+
children[0]
|
244
|
+
end
|
245
|
+
|
246
|
+
# Get the return type property.
|
247
|
+
attr_reader :return_type
|
248
|
+
end
|
249
|
+
|
250
|
+
# AST node representing the definition of a namespace.
|
251
|
+
class NamespaceDefinition < Node
|
252
|
+
# AST node type
|
253
|
+
@ast_type = :namespace_definition
|
254
|
+
# Namespace definitions have semantic meaning
|
255
|
+
@has_semantics = true
|
256
|
+
|
257
|
+
# New NamespaceDefinition AST node.
|
258
|
+
#
|
259
|
+
# @see Node#initialize Node class for basic properties
|
260
|
+
def initialize(children = [], properties = {})
|
261
|
+
super(NamespaceDefinition.ast_type, children, properties)
|
262
|
+
end
|
263
|
+
|
264
|
+
# Get the namespace definition's keyword.
|
265
|
+
def keyword
|
266
|
+
children[0]
|
267
|
+
end
|
268
|
+
|
269
|
+
# Get the namespace definition's domain.
|
270
|
+
def domain
|
271
|
+
children[1]
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
# AST node representing a keyword (e.g. definitions).
|
276
|
+
class Keyword < Node
|
277
|
+
# AST node type
|
278
|
+
@ast_type = :keyword
|
279
|
+
# Keywords have semantic meaning
|
280
|
+
@has_semantics = true
|
281
|
+
|
282
|
+
# New Keyword AST node.
|
283
|
+
#
|
284
|
+
# @see Node#initialize Node class for basic properties
|
285
|
+
def initialize(children = [], properties = {})
|
286
|
+
super(Keyword.ast_type, children, properties)
|
287
|
+
end
|
288
|
+
|
289
|
+
# Get the keyword's identifier.
|
290
|
+
def identifier
|
291
|
+
children[0]
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
# AST node representing a domain (e.g. Url, Uri, List, Pattern).
|
296
|
+
class Domain < Node
|
297
|
+
# AST node type
|
298
|
+
@ast_type = :domain
|
299
|
+
# Domains have semantic meaning
|
300
|
+
@has_semantics = true
|
301
|
+
|
302
|
+
# New Domain AST node.
|
303
|
+
#
|
304
|
+
# @see Node#initialize Node class for basic properties
|
305
|
+
def initialize(children = [], properties = {})
|
306
|
+
super(Domain.ast_type, children, properties)
|
307
|
+
end
|
308
|
+
|
309
|
+
# Determine if this is a LIST domain.
|
310
|
+
def list?
|
311
|
+
children[0] && children[0].is_a?(List)
|
312
|
+
end
|
313
|
+
|
314
|
+
# Determine if this is a PATTERN domain.
|
315
|
+
def pattern?
|
316
|
+
children[0] && children[0].is_a?(Pattern)
|
317
|
+
end
|
318
|
+
|
319
|
+
# Determine if this is a URL domain.
|
320
|
+
def url?
|
321
|
+
children[0] && children[0].is_a?(Url)
|
322
|
+
end
|
323
|
+
|
324
|
+
# Get the domain's Url.
|
325
|
+
def child
|
326
|
+
children[0]
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
# AST node representing a URL.
|
331
|
+
class Url < Node
|
332
|
+
# AST node type
|
333
|
+
@ast_type = :url
|
334
|
+
# Urls have semantic meaning
|
335
|
+
@has_semantics = true
|
336
|
+
|
337
|
+
# New Url AST node.
|
338
|
+
#
|
339
|
+
# @see Node#initialize Node class for basic properties
|
340
|
+
def initialize(children = [], properties = {})
|
341
|
+
super(Url.ast_type, children, properties)
|
342
|
+
end
|
343
|
+
|
344
|
+
# Get the url's string.
|
345
|
+
def string
|
346
|
+
children[0]
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
# AST node representing a Pattern.
|
351
|
+
class Pattern < Node
|
352
|
+
# AST node type
|
353
|
+
@ast_type = :pattern
|
354
|
+
# Patterns have semantic meaning
|
355
|
+
@has_semantics = true
|
356
|
+
|
357
|
+
# New Pattern AST node.
|
358
|
+
#
|
359
|
+
# @see Node#initialize Node class for basic properties
|
360
|
+
def initialize(children = [], properties = {})
|
361
|
+
super(Pattern.ast_type, children, properties)
|
362
|
+
end
|
363
|
+
|
364
|
+
# Get the pattern's string.
|
365
|
+
def string
|
366
|
+
children[0]
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
# AST node representing the definition of a namespace.
|
371
|
+
class Identifier < Node
|
372
|
+
# AST node type
|
373
|
+
@ast_type = :identifier
|
374
|
+
# Identifier have no semantics
|
375
|
+
@has_semantics = false
|
376
|
+
|
377
|
+
# New Identifier AST node.
|
378
|
+
#
|
379
|
+
# @see Node#initialize Node class for basic properties
|
380
|
+
def initialize(children = [], properties = {})
|
381
|
+
super(Identifier.ast_type, children, properties)
|
382
|
+
end
|
383
|
+
|
384
|
+
# Get the string literal.
|
385
|
+
def string_literal
|
386
|
+
children[0]
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
390
|
+
# AST node representing a list.
|
391
|
+
class List < Node
|
392
|
+
# AST node type
|
393
|
+
@ast_type = :list
|
394
|
+
# List have semantics (content is meaningful)
|
395
|
+
@has_semantics = true
|
396
|
+
|
397
|
+
# New List AST node.
|
398
|
+
#
|
399
|
+
# @see Node#initialize Node class for basic properties
|
400
|
+
def initialize(children = [], properties = {})
|
401
|
+
super(List.ast_type, children, properties)
|
402
|
+
end
|
403
|
+
|
404
|
+
def list_items
|
405
|
+
children
|
406
|
+
end
|
407
|
+
end
|
408
|
+
|
409
|
+
# AST node representing a list item.
|
410
|
+
class ListItem < Node
|
411
|
+
# AST node type
|
412
|
+
@ast_type = :list_item
|
413
|
+
# List items have semantics (content is meaningful)
|
414
|
+
@has_semantics = true
|
415
|
+
|
416
|
+
# New ListItem AST node.
|
417
|
+
#
|
418
|
+
# @see Node#initialize Node class for basic properties
|
419
|
+
def initialize(children = [], properties = {})
|
420
|
+
super(ListItem.ast_type, children, properties)
|
421
|
+
end
|
422
|
+
end
|
423
|
+
|
424
|
+
# AST node representing an argument.
|
425
|
+
class Argument < Node
|
426
|
+
# AST node type
|
427
|
+
@ast_type = :argument
|
428
|
+
# Arguments have semantics (position is meaningful)
|
429
|
+
@has_semantics = true
|
430
|
+
|
431
|
+
# New Argument AST node.
|
432
|
+
#
|
433
|
+
# @see Node#initialize Node class for basic properties
|
434
|
+
def initialize(children = [], properties = {})
|
435
|
+
super(Argument.ast_type, children, properties)
|
436
|
+
end
|
437
|
+
|
438
|
+
# Does the argument have a {Parameter} child?
|
439
|
+
def parameter?
|
440
|
+
children[0].is_a?(Parameter)
|
441
|
+
end
|
442
|
+
|
443
|
+
# Does the argument have a {Term} child?
|
444
|
+
def term?
|
445
|
+
children[0].is_a?(Term)
|
446
|
+
end
|
447
|
+
|
448
|
+
# Get the {Parameter} or {Term} child.
|
449
|
+
def child
|
450
|
+
children[0]
|
451
|
+
end
|
452
|
+
end
|
453
|
+
|
454
|
+
# AST node representing a parameter.
|
455
|
+
#
|
456
|
+
# === Special node properties - _namespace_: {#namespace}
|
457
|
+
#
|
458
|
+
class Prefix < Node
|
459
|
+
# AST node type
|
460
|
+
@ast_type = :prefix
|
461
|
+
# Prefix have semantics (indicates namespace)
|
462
|
+
@has_semantics = true
|
463
|
+
|
464
|
+
# New Prefix AST node.
|
465
|
+
#
|
466
|
+
# @see Node#initialize Node class for basic properties
|
467
|
+
def initialize(children = [], properties = {})
|
468
|
+
super(Prefix.ast_type, children, properties)
|
469
|
+
end
|
470
|
+
|
471
|
+
# Get the identifier for the prefix.
|
472
|
+
def identifier
|
473
|
+
children[0]
|
474
|
+
end
|
475
|
+
|
476
|
+
# Get/Set the namespace property.
|
477
|
+
attr_accessor :namespace
|
478
|
+
end
|
479
|
+
|
480
|
+
# AST node representing a parameter.
|
481
|
+
class Parameter < Node
|
482
|
+
# AST node type
|
483
|
+
@ast_type = :parameter
|
484
|
+
# Parameters have semantics (encodings, namespaces)
|
485
|
+
@has_semantics = true
|
486
|
+
|
487
|
+
# New Parameter AST node.
|
488
|
+
#
|
489
|
+
# @see Node#initialize Node class for basic properties
|
490
|
+
def initialize(children = [], properties = {})
|
491
|
+
super(Parameter.ast_type, children, properties)
|
492
|
+
end
|
493
|
+
|
494
|
+
# Get the prefix for the parameter.
|
495
|
+
def prefix
|
496
|
+
children[0]
|
497
|
+
end
|
498
|
+
|
499
|
+
# Get the value for the parameter.
|
500
|
+
def value
|
501
|
+
children[1]
|
502
|
+
end
|
503
|
+
end
|
504
|
+
|
505
|
+
# AST node representing a relationship.
|
506
|
+
class Relationship < Node
|
507
|
+
# AST node type
|
508
|
+
@ast_type = :relationship
|
509
|
+
# Relationship have no semantics, statements do
|
510
|
+
@has_semantics = false
|
511
|
+
|
512
|
+
# New Relationship AST node.
|
513
|
+
#
|
514
|
+
# @see Node#initialize Node class for basic properties
|
515
|
+
def initialize(children = [], properties = {})
|
516
|
+
super(Relationship.ast_type, children, properties)
|
517
|
+
end
|
518
|
+
|
519
|
+
# Get the string literal.
|
520
|
+
def string_literal
|
521
|
+
children[0]
|
522
|
+
end
|
523
|
+
end
|
524
|
+
|
525
|
+
# AST node representing a set.
|
526
|
+
class Set < Node
|
527
|
+
# AST node type
|
528
|
+
@ast_type = :set
|
529
|
+
# Set has semantics (what was set?)
|
530
|
+
@has_semantics = true
|
531
|
+
|
532
|
+
# New Set AST node.
|
533
|
+
#
|
534
|
+
# @see Node#initialize Node class for basic properties
|
535
|
+
def initialize(children = [], properties = {})
|
536
|
+
super(Set.ast_type, children, properties)
|
537
|
+
end
|
538
|
+
|
539
|
+
# Get what is being set.
|
540
|
+
def name
|
541
|
+
children[0]
|
542
|
+
end
|
543
|
+
|
544
|
+
# Get the value of what is being set.
|
545
|
+
def value
|
546
|
+
children[1]
|
547
|
+
end
|
548
|
+
end
|
549
|
+
|
550
|
+
# AST node representing a document property (e.g. +SET DOCUMENT
|
551
|
+
# ...+).
|
552
|
+
class DocumentProperty < Node
|
553
|
+
# AST node type
|
554
|
+
@ast_type = :document_property
|
555
|
+
# DocumentProperty has semantics (what was set?)
|
556
|
+
@has_semantics = true
|
557
|
+
|
558
|
+
# New DocumentProperty AST node.
|
559
|
+
#
|
560
|
+
# @see Node#initialize Node class for basic properties
|
561
|
+
def initialize(children = [], properties = {})
|
562
|
+
super(DocumentProperty.ast_type, children, properties)
|
563
|
+
end
|
564
|
+
|
565
|
+
# Get what is being set.
|
566
|
+
def name
|
567
|
+
children[0]
|
568
|
+
end
|
569
|
+
|
570
|
+
# Get the value of what is being set.
|
571
|
+
def value
|
572
|
+
children[1]
|
573
|
+
end
|
574
|
+
end
|
575
|
+
|
576
|
+
# AST node representing a statement.
|
577
|
+
class Statement < Node
|
578
|
+
# AST node type
|
579
|
+
@ast_type = :statement
|
580
|
+
# Statements have semantics
|
581
|
+
@has_semantics = true
|
582
|
+
|
583
|
+
# New Statement AST node.
|
584
|
+
#
|
585
|
+
# @see Node#initialize Node class for basic properties
|
586
|
+
def initialize(children = [], properties = {})
|
587
|
+
super(Statement.ast_type, children, properties)
|
588
|
+
end
|
589
|
+
|
590
|
+
# Get the subject of the statement.
|
591
|
+
def subject
|
592
|
+
children[0]
|
593
|
+
end
|
594
|
+
|
595
|
+
def relationship?
|
596
|
+
children[1] && children[1].is_a?(Relationship)
|
597
|
+
end
|
598
|
+
|
599
|
+
# Get the relationship of the nested statement.
|
600
|
+
def relationship
|
601
|
+
relationship? ? children[1] : nil
|
602
|
+
end
|
603
|
+
|
604
|
+
def object?
|
605
|
+
children[2] && children[2].is_a?(Object)
|
606
|
+
end
|
607
|
+
|
608
|
+
# Get the object of the nested statement.
|
609
|
+
def object
|
610
|
+
object? ? children[2] : nil
|
611
|
+
end
|
612
|
+
|
613
|
+
def comment?
|
614
|
+
children[-1] && children[-1].is_a?(Comment)
|
615
|
+
end
|
616
|
+
|
617
|
+
def comment
|
618
|
+
comment? ? children[-1] : nil
|
619
|
+
end
|
620
|
+
end
|
621
|
+
|
622
|
+
# AST node representing a nested statement.
|
623
|
+
class NestedStatement < Node
|
624
|
+
# AST node type
|
625
|
+
@ast_type = :nested_statement
|
626
|
+
# Nested statements have semantics
|
627
|
+
@has_semantics = true
|
628
|
+
|
629
|
+
# New NestedStatement AST node.
|
630
|
+
#
|
631
|
+
# @see Node#initialize Node class for basic properties
|
632
|
+
def initialize(children = [], properties = {})
|
633
|
+
super(NestedStatement.ast_type, children, properties)
|
634
|
+
end
|
635
|
+
|
636
|
+
# Get the statement.
|
637
|
+
def statement
|
638
|
+
children[0]
|
639
|
+
end
|
640
|
+
end
|
641
|
+
|
642
|
+
# AST node representing a observed term statement.
|
643
|
+
class ObservedTerm < Node
|
644
|
+
# AST node type
|
645
|
+
@ast_type = :observed_term
|
646
|
+
# Observed terms have semantics
|
647
|
+
@has_semantics = true
|
648
|
+
|
649
|
+
# New ObservedTerm AST node.
|
650
|
+
#
|
651
|
+
# @see Node#initialize Node class for basic properties
|
652
|
+
def initialize(children = [], properties = {})
|
653
|
+
super(ObservedTerm.ast_type, children, properties)
|
654
|
+
end
|
655
|
+
|
656
|
+
# Get the statement.
|
657
|
+
def statement
|
658
|
+
children[0]
|
659
|
+
end
|
660
|
+
end
|
661
|
+
|
662
|
+
# AST node representing a simple statement.
|
663
|
+
class SimpleStatement < Node
|
664
|
+
# AST node type
|
665
|
+
@ast_type = :simple_statement
|
666
|
+
# Simple statements have semantics
|
667
|
+
@has_semantics = true
|
668
|
+
|
669
|
+
# New SimpleStatement AST node.
|
670
|
+
#
|
671
|
+
# @see Node#initialize Node class for basic properties
|
672
|
+
def initialize(children = [], properties = {})
|
673
|
+
super(SimpleStatement.ast_type, children, properties)
|
674
|
+
end
|
675
|
+
|
676
|
+
# Get the statement.
|
677
|
+
def statement
|
678
|
+
children[0]
|
679
|
+
end
|
680
|
+
end
|
681
|
+
|
682
|
+
# AST node representing the subject of a statement.
|
683
|
+
class Subject < Node
|
684
|
+
# AST node type
|
685
|
+
@ast_type = :subject
|
686
|
+
# Subject have semantics
|
687
|
+
@has_semantics = true
|
688
|
+
|
689
|
+
# New Subject AST node.
|
690
|
+
#
|
691
|
+
# @see Node#initialize Node class for basic properties
|
692
|
+
def initialize(children = [], properties = {})
|
693
|
+
super(Subject.ast_type, children, properties)
|
694
|
+
end
|
695
|
+
|
696
|
+
# Get the subject's term.
|
697
|
+
def term
|
698
|
+
children[0]
|
699
|
+
end
|
700
|
+
end
|
701
|
+
|
702
|
+
# AST node representing the object of a statement.
|
703
|
+
class Object < Node
|
704
|
+
# AST node type
|
705
|
+
@ast_type = :object
|
706
|
+
# Object have semantics
|
707
|
+
@has_semantics = true
|
708
|
+
|
709
|
+
# New Object AST node.
|
710
|
+
#
|
711
|
+
# @see Node#initialize Node class for basic properties
|
712
|
+
def initialize(children = [], properties = {})
|
713
|
+
super(Object.ast_type, children, properties)
|
714
|
+
end
|
715
|
+
|
716
|
+
# Does the object have a {Term} child?
|
717
|
+
def term?
|
718
|
+
children[0].is_a?(Term)
|
719
|
+
end
|
720
|
+
|
721
|
+
# Does the object have a {Statement} child?
|
722
|
+
def statement?
|
723
|
+
children[0].is_a?(Statement)
|
724
|
+
end
|
725
|
+
|
726
|
+
# Get the {Term} or {Statement} child.
|
727
|
+
def child
|
728
|
+
children[0]
|
729
|
+
end
|
730
|
+
end
|
731
|
+
|
732
|
+
# AST node representing a UTF-8 encoded string
|
733
|
+
class String < Node
|
734
|
+
# AST node type
|
735
|
+
@ast_type = :string
|
736
|
+
# String have no semantic meaning
|
737
|
+
@has_semantics = false
|
738
|
+
|
739
|
+
# New String AST node.
|
740
|
+
#
|
741
|
+
# @see Node#initialize Node class for basic properties
|
742
|
+
def initialize(children = [], properties = {})
|
743
|
+
super(String.ast_type, children, properties)
|
744
|
+
end
|
745
|
+
|
746
|
+
# Get the string literal.
|
747
|
+
def string_literal
|
748
|
+
children[0]
|
749
|
+
end
|
750
|
+
end
|
751
|
+
|
752
|
+
# AST node representing a term.
|
753
|
+
class Term < Node
|
754
|
+
# AST node type
|
755
|
+
@ast_type = :term
|
756
|
+
# Terms have semantics
|
757
|
+
@has_semantics = true
|
758
|
+
|
759
|
+
# New Term AST node.
|
760
|
+
#
|
761
|
+
# @see Node#initialize Node class for basic properties
|
762
|
+
def initialize(children = [], properties = {})
|
763
|
+
super(Term.ast_type, children, properties)
|
764
|
+
end
|
765
|
+
|
766
|
+
# Get the term's function.
|
767
|
+
def function
|
768
|
+
children[0]
|
769
|
+
end
|
770
|
+
|
771
|
+
# Get the term's arguments.
|
772
|
+
def arguments
|
773
|
+
children[1..-1]
|
774
|
+
end
|
775
|
+
|
776
|
+
# Get the term's function semantics.
|
777
|
+
attr_reader :function_semantics
|
778
|
+
|
779
|
+
# Sets the term's function semantics.
|
780
|
+
def function_semantics=(function_semantics)
|
781
|
+
if !function_semantics.nil? &&
|
782
|
+
!function_semantics.is_a?(BELParser::Language::Signature)
|
783
|
+
raise(
|
784
|
+
ArgumentError,
|
785
|
+
'function_semantics: expected nil or Signature')
|
786
|
+
end
|
787
|
+
assign_properties(function_semantics: function_semantics)
|
788
|
+
end
|
789
|
+
end
|
790
|
+
|
791
|
+
# AST node representing an unset.
|
792
|
+
class Unset < Node
|
793
|
+
# AST node type
|
794
|
+
@ast_type = :unset
|
795
|
+
# Unset has semantics; what was unset?
|
796
|
+
@has_semantics = true
|
797
|
+
|
798
|
+
# New Unset AST node.
|
799
|
+
#
|
800
|
+
# @see Node#initialize Node class for basic properties
|
801
|
+
def initialize(children = [], properties = {})
|
802
|
+
super(Unset.ast_type, children, properties)
|
803
|
+
end
|
804
|
+
|
805
|
+
# Get what is being unset.
|
806
|
+
def name
|
807
|
+
children[0]
|
808
|
+
end
|
809
|
+
end
|
810
|
+
|
811
|
+
# AST node representing a name.
|
812
|
+
class Name < Node
|
813
|
+
# AST node type
|
814
|
+
@ast_type = :name
|
815
|
+
# Name has semantics (name of property or annotation).
|
816
|
+
@has_semantics = true
|
817
|
+
|
818
|
+
# New Name AST node.
|
819
|
+
#
|
820
|
+
# @see Node#initialize Node class for basic properties
|
821
|
+
def initialize(children = [], properties = {})
|
822
|
+
super(Name.ast_type, children, properties)
|
823
|
+
end
|
824
|
+
|
825
|
+
def identifier
|
826
|
+
children[0]
|
827
|
+
end
|
828
|
+
end
|
829
|
+
|
830
|
+
# AST node representing a value.
|
831
|
+
#
|
832
|
+
# === Special node properties - _encoding_: {#encoding}
|
833
|
+
#
|
834
|
+
class Value < Node
|
835
|
+
# AST node type
|
836
|
+
@ast_type = :value
|
837
|
+
# Values have semantics (encodings)
|
838
|
+
@has_semantics = true
|
839
|
+
|
840
|
+
# New Value AST node.
|
841
|
+
#
|
842
|
+
# @see Node#initialize Node class for basic properties
|
843
|
+
def initialize(children = [], properties = {})
|
844
|
+
super(Value.ast_type, children, properties)
|
845
|
+
end
|
846
|
+
|
847
|
+
# Get/Set the namespace prefix.
|
848
|
+
attr_accessor :prefix
|
849
|
+
|
850
|
+
# Get/Set the value's encoding.
|
851
|
+
attr_accessor :encoding
|
852
|
+
|
853
|
+
# Get/Set the value's namespace.
|
854
|
+
attr_accessor :namespace
|
855
|
+
|
856
|
+
# Get/Set the value from the purported namespace.
|
857
|
+
attr_accessor :namespace_value
|
858
|
+
end
|
859
|
+
|
860
|
+
# Sexp defines a module that creates {BELParser::Parsers::AST::Node
|
861
|
+
# AST nodes} using S-expression syntax.
|
862
|
+
#
|
863
|
+
# @see https://en.wikipedia.org/wiki/S-expression S-expression
|
864
|
+
module Sexp
|
865
|
+
def nested_statement(*children)
|
866
|
+
NestedStatement.new(children)
|
867
|
+
end
|
868
|
+
|
869
|
+
def simple_statement(*children)
|
870
|
+
SimpleStatement.new(children)
|
871
|
+
end
|
872
|
+
|
873
|
+
def observed_term(*children)
|
874
|
+
ObservedTerm.new(children)
|
875
|
+
end
|
876
|
+
|
877
|
+
def statement(*children)
|
878
|
+
Statement.new(children)
|
879
|
+
end
|
880
|
+
|
881
|
+
def subject(*children)
|
882
|
+
Subject.new(children)
|
883
|
+
end
|
884
|
+
|
885
|
+
def object(*children)
|
886
|
+
Object.new(children)
|
887
|
+
end
|
888
|
+
|
889
|
+
def relationship(*children)
|
890
|
+
Relationship.new(children)
|
891
|
+
end
|
892
|
+
|
893
|
+
def term(*children)
|
894
|
+
Term.new(children)
|
895
|
+
end
|
896
|
+
|
897
|
+
def function(*children)
|
898
|
+
Function.new(children)
|
899
|
+
end
|
900
|
+
|
901
|
+
def argument(*children)
|
902
|
+
Argument.new(children)
|
903
|
+
end
|
904
|
+
|
905
|
+
def parameter(*children)
|
906
|
+
Parameter.new(children)
|
907
|
+
end
|
908
|
+
|
909
|
+
def prefix(*children)
|
910
|
+
Prefix.new(children)
|
911
|
+
end
|
912
|
+
|
913
|
+
def name(*children)
|
914
|
+
Name.new(children)
|
915
|
+
end
|
916
|
+
|
917
|
+
def value(*children)
|
918
|
+
Value.new(children)
|
919
|
+
end
|
920
|
+
|
921
|
+
def identifier(*children)
|
922
|
+
Identifier.new(children)
|
923
|
+
end
|
924
|
+
|
925
|
+
def string(*children)
|
926
|
+
String.new(children)
|
927
|
+
end
|
928
|
+
|
929
|
+
def list(*children)
|
930
|
+
List.new(children)
|
931
|
+
end
|
932
|
+
|
933
|
+
def list_item(*children)
|
934
|
+
ListItem.new(children)
|
935
|
+
end
|
936
|
+
|
937
|
+
def comment(*children)
|
938
|
+
Comment.new(children)
|
939
|
+
end
|
940
|
+
|
941
|
+
def comment_line(*children)
|
942
|
+
CommentLine.new(children)
|
943
|
+
end
|
944
|
+
|
945
|
+
def blank_line
|
946
|
+
BlankLine.new
|
947
|
+
end
|
948
|
+
|
949
|
+
def set(*children)
|
950
|
+
Set.new(children)
|
951
|
+
end
|
952
|
+
|
953
|
+
def unset(*children)
|
954
|
+
Unset.new(children)
|
955
|
+
end
|
956
|
+
|
957
|
+
def document_property(*children)
|
958
|
+
DocumentProperty.new(children)
|
959
|
+
end
|
960
|
+
|
961
|
+
def annotation_definition(*children)
|
962
|
+
AnnotationDefinition.new(children)
|
963
|
+
end
|
964
|
+
|
965
|
+
def namespace_definition(*children)
|
966
|
+
NamespaceDefinition.new(children)
|
967
|
+
end
|
968
|
+
|
969
|
+
def keyword(*children)
|
970
|
+
Keyword.new(children)
|
971
|
+
end
|
972
|
+
|
973
|
+
def domain(*children)
|
974
|
+
Domain.new(children)
|
975
|
+
end
|
976
|
+
|
977
|
+
def url(*children)
|
978
|
+
Url.new(children)
|
979
|
+
end
|
980
|
+
|
981
|
+
def pattern(*children)
|
982
|
+
Pattern.new(children)
|
983
|
+
end
|
984
|
+
end
|
985
|
+
end
|
986
|
+
end
|
987
|
+
end
|