bel_parser 1.0.0.alpha.1 → 1.0.0.alpha.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gemspec +1 -1
- data/VERSION +1 -1
- data/bin/bel2_termcheck +2 -2
- data/lib/bel_parser/expression/term_semantics.rb +2 -2
- data/lib/bel_parser/language/expression_validator.rb +42 -0
- data/lib/bel_parser/language/function.rb +8 -0
- data/lib/bel_parser/language/relationship.rb +57 -0
- data/lib/bel_parser/language/{semantic_ast.rb → semantics/semantic_ast.rb} +5 -27
- data/lib/bel_parser/language/semantics/semantic_match.rb +28 -0
- data/lib/bel_parser/language/semantics.rb +2 -0
- data/lib/bel_parser/language/specification.rb +34 -10
- data/lib/bel_parser/language/syntax.rb +0 -0
- data/lib/bel_parser/language/{version1 → version1_0}/functions/abundance.rb +4 -4
- data/lib/bel_parser/language/{version1 → version1_0}/functions/biological_process.rb +4 -4
- data/lib/bel_parser/language/{version1 → version1_0}/functions/catalytic_activity.rb +6 -6
- data/lib/bel_parser/language/{version1 → version1_0}/functions/cell_secretion.rb +5 -5
- data/lib/bel_parser/language/{version1 → version1_0}/functions/cell_surface_expression.rb +5 -5
- data/lib/bel_parser/language/{version1 → version1_0}/functions/chaperone_activity.rb +6 -6
- data/lib/bel_parser/language/{version1 → version1_0}/functions/complex_abundance.rb +5 -5
- data/lib/bel_parser/language/{version1 → version1_0}/functions/composite_abundance.rb +5 -5
- data/lib/bel_parser/language/{version1 → version1_0}/functions/degradation.rb +5 -5
- data/lib/bel_parser/language/{version1 → version1_0}/functions/fusion.rb +4 -4
- data/lib/bel_parser/language/{version1 → version1_0}/functions/gene_abundance.rb +5 -5
- data/lib/bel_parser/language/{version1 → version1_0}/functions/gtp_bound_activity.rb +6 -6
- data/lib/bel_parser/language/{version1 → version1_0}/functions/kinase_activity.rb +6 -6
- data/lib/bel_parser/language/{version1 → version1_0}/functions/list.rb +5 -5
- data/lib/bel_parser/language/{version1 → version1_0}/functions/micro_rna_abundance.rb +4 -4
- data/lib/bel_parser/language/{version1 → version1_0}/functions/molecular_activity.rb +5 -5
- data/lib/bel_parser/language/{version2 → version1_0}/functions/pathology.rb +4 -4
- data/lib/bel_parser/language/{version1 → version1_0}/functions/peptidase_activity.rb +6 -6
- data/lib/bel_parser/language/{version1 → version1_0}/functions/phosphatase_activity.rb +6 -6
- data/lib/bel_parser/language/{version2 → version1_0}/functions/products.rb +5 -5
- data/lib/bel_parser/language/{version1 → version1_0}/functions/protein_abundance.rb +8 -8
- data/lib/bel_parser/language/{version1 → version1_0}/functions/protein_modification.rb +4 -4
- data/lib/bel_parser/language/{version2 → version1_0}/functions/reactants.rb +5 -5
- data/lib/bel_parser/language/{version1 → version1_0}/functions/reaction.rb +6 -6
- data/lib/bel_parser/language/{version1 → version1_0}/functions/ribosylation_activity.rb +6 -6
- data/lib/bel_parser/language/{version1 → version1_0}/functions/rna_abundance.rb +5 -5
- data/lib/bel_parser/language/{version1 → version1_0}/functions/substitution.rb +4 -4
- data/lib/bel_parser/language/{version1 → version1_0}/functions/transcriptional_activity.rb +6 -6
- data/lib/bel_parser/language/{version1 → version1_0}/functions/translocation.rb +5 -5
- data/lib/bel_parser/language/{version1 → version1_0}/functions/transport_activity.rb +6 -6
- data/lib/bel_parser/language/{version1 → version1_0}/functions/truncation.rb +4 -4
- data/lib/bel_parser/language/version1_0/relationships/acts_in.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/analogous.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/association.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/biomarker_for.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/causes_no_change.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/decreases.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/directly_decreases.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/directly_increases.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/has_component.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/has_components.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/has_member.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/has_members.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/has_modification.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/has_product.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/has_variant.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/includes.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/increases.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/is_a.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/negative_correlation.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/orthologous.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/positive_correlation.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/prognostic_biomarker_for.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/rate_limiting_step_of.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/reactant_in.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/sub_process_of.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/transcribed_to.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/translated_to.rb +31 -0
- data/lib/bel_parser/language/version1_0/relationships/translocates.rb +31 -0
- data/lib/bel_parser/language/{version2 → version1_0}/return_types/abundance.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/any.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/biological_process.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/catalytic_activity.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/chaperone_activity.rb +1 -1
- data/lib/bel_parser/language/{version2 → version1_0}/return_types/complex_abundance.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/fusion.rb +1 -1
- data/lib/bel_parser/language/{version2 → version1_0}/return_types/gene_abundance.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/gtp_bound_activity.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/kinase_activity.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/list.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/micro_rna_abundance.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/molecular_activity.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/pathology.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/peptidase_activity.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/phosphatase_activity.rb +1 -1
- data/lib/bel_parser/language/{version2 → version1_0}/return_types/products.rb +1 -1
- data/lib/bel_parser/language/{version2 → version1_0}/return_types/protein_abundance.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/protein_modification.rb +1 -1
- data/lib/bel_parser/language/{version2 → version1_0}/return_types/reactants.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/ribosylation_activity.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/rna_abundance.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/substitution.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/transcriptional_activity.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/transport_activity.rb +1 -1
- data/lib/bel_parser/language/{version1 → version1_0}/return_types/truncation.rb +1 -1
- data/lib/bel_parser/language/version1_0/syntax/function.rb +29 -0
- data/lib/bel_parser/language/version1_0.rb +89 -0
- data/lib/bel_parser/language/{version2 → version2_0}/functions/abundance.rb +6 -6
- data/lib/bel_parser/language/{version2 → version2_0}/functions/activity.rb +7 -7
- data/lib/bel_parser/language/{version2 → version2_0}/functions/biological_process.rb +4 -4
- data/lib/bel_parser/language/{version2 → version2_0}/functions/cell_secretion.rb +5 -5
- data/lib/bel_parser/language/{version2 → version2_0}/functions/cell_surface_expression.rb +5 -5
- data/lib/bel_parser/language/{version2 → version2_0}/functions/complex_abundance.rb +8 -8
- data/lib/bel_parser/language/{version2 → version2_0}/functions/composite_abundance.rb +5 -5
- data/lib/bel_parser/language/{version2 → version2_0}/functions/degradation.rb +5 -5
- data/lib/bel_parser/language/{version2 → version2_0}/functions/fragment.rb +4 -4
- data/lib/bel_parser/language/{version2 → version2_0}/functions/from_location.rb +4 -4
- data/lib/bel_parser/language/{version2 → version2_0}/functions/fusion.rb +4 -4
- data/lib/bel_parser/language/{version2 → version2_0}/functions/gene_abundance.rb +7 -7
- data/lib/bel_parser/language/{version2 → version2_0}/functions/list.rb +5 -5
- data/lib/bel_parser/language/{version2 → version2_0}/functions/location.rb +4 -4
- data/lib/bel_parser/language/{version2 → version2_0}/functions/micro_rna_abundance.rb +6 -6
- data/lib/bel_parser/language/{version2 → version2_0}/functions/molecular_activity.rb +4 -4
- data/lib/bel_parser/language/{version1 → version2_0}/functions/pathology.rb +4 -4
- data/lib/bel_parser/language/{version1 → version2_0}/functions/products.rb +5 -5
- data/lib/bel_parser/language/{version2 → version2_0}/functions/protein_abundance.rb +9 -9
- data/lib/bel_parser/language/{version2 → version2_0}/functions/protein_modification.rb +7 -7
- data/lib/bel_parser/language/{version1 → version2_0}/functions/reactants.rb +5 -5
- data/lib/bel_parser/language/{version2 → version2_0}/functions/reaction.rb +6 -6
- data/lib/bel_parser/language/{version2 → version2_0}/functions/rna_abundance.rb +11 -11
- data/lib/bel_parser/language/{version2 → version2_0}/functions/to_location.rb +4 -4
- data/lib/bel_parser/language/{version2 → version2_0}/functions/translocation.rb +8 -8
- data/lib/bel_parser/language/{version2 → version2_0}/functions/variant.rb +4 -4
- data/lib/bel_parser/language/version2_0/relationships/acts_in.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/analogous.rb +35 -0
- data/lib/bel_parser/language/version2_0/relationships/association.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/biomarker_for.rb +35 -0
- data/lib/bel_parser/language/version2_0/relationships/causes_no_change.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/decreases.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/directly_decreases.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/directly_increases.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/has_component.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/has_components.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/has_member.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/has_members.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/has_modification.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/has_product.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/has_variant.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/includes.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/increases.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/is_a.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/negative_correlation.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/orthologous.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/positive_correlation.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/prognostic_biomarker_for.rb +35 -0
- data/lib/bel_parser/language/version2_0/relationships/rate_limiting_step_of.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/reactant_in.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/regulates.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/sub_process_of.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/transcribed_to.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/translated_to.rb +31 -0
- data/lib/bel_parser/language/version2_0/relationships/translocates.rb +31 -0
- data/lib/bel_parser/language/{version1 → version2_0}/return_types/abundance.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/activity.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/any.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/biological_process.rb +1 -1
- data/lib/bel_parser/language/{version1 → version2_0}/return_types/complex_abundance.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/fragment.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/from_location.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/fusion.rb +1 -1
- data/lib/bel_parser/language/{version1 → version2_0}/return_types/gene_abundance.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/list.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/location.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/micro_rna_abundance.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/molecular_activity.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/pathology.rb +1 -1
- data/lib/bel_parser/language/{version1 → version2_0}/return_types/products.rb +1 -1
- data/lib/bel_parser/language/{version1 → version2_0}/return_types/protein_abundance.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/protein_modification.rb +1 -1
- data/lib/bel_parser/language/{version1 → version2_0}/return_types/reactants.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/rna_abundance.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/to_location.rb +1 -1
- data/lib/bel_parser/language/{version2 → version2_0}/return_types/variant.rb +1 -1
- data/lib/bel_parser/language/version2_0.rb +73 -0
- data/lib/bel_parser/language.rb +90 -2
- data/lib/bel_parser/parsers/ast/node.rb +11 -1
- metadata +172 -111
- data/lib/bel_parser/language/syntax/expression/incomplete_node.rb +0 -14
- data/lib/bel_parser/language/syntax/expression/invalid_term_function.rb +0 -22
- data/lib/bel_parser/language/version1.rb +0 -50
- data/lib/bel_parser/language/version2.rb +0 -50
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative '../../version2_0'
|
2
|
+
require_relative '../../relationship'
|
3
|
+
|
4
|
+
module BELParser
|
5
|
+
module Language
|
6
|
+
module Version2_0
|
7
|
+
module Relationships
|
8
|
+
# TranslatedTo: +R >> P+ - For rnaAbundance term R and proteinAbundance term P, +R translatedTo P+ or +R >> P+ indicates that members of P are produced by the translation of members of R. For example: +r(HGNC:AKT1) >> p(HGNC:AKT1)+ indicates that AKT1 protein is produced by translation of AKT1 RNA.
|
9
|
+
class TranslatedTo
|
10
|
+
extend Relationship
|
11
|
+
|
12
|
+
SHORT = :>>
|
13
|
+
LONG = :translatedTo
|
14
|
+
DESCRIPTION = ' +R >> P+ - For rnaAbundance term R and proteinAbundance term P, +R translatedTo P+ or +R >> P+ indicates that members of P are produced by the translation of members of R. For example: +r(HGNC:AKT1) >> p(HGNC:AKT1)+ indicates that AKT1 protein is produced by translation of AKT1 RNA.'.freeze
|
15
|
+
|
16
|
+
def self.short
|
17
|
+
SHORT
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.long
|
21
|
+
LONG
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.description
|
25
|
+
DESCRIPTION
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative '../../version2_0'
|
2
|
+
require_relative '../../relationship'
|
3
|
+
|
4
|
+
module BELParser
|
5
|
+
module Language
|
6
|
+
module Version2_0
|
7
|
+
module Relationships
|
8
|
+
# Translocates: +translocation(A, ns1:v1, ns2:v2) translocates A+ - This relationship links the abundance term in a +translocation()+ to the translocation. This relationship is direct because it is a _self_ relationship. The translocated abundance is directly acted on by the translocation process. This relationship is introduced by the BEL Compiler and may not be used by statements in BEL documents.
|
9
|
+
class Translocates
|
10
|
+
extend Relationship
|
11
|
+
|
12
|
+
SHORT = :translocates
|
13
|
+
LONG = :translocates
|
14
|
+
DESCRIPTION = ' +translocation(A, ns1:v1, ns2:v2) translocates A+ - This relationship links the abundance term in a +translocation()+ to the translocation. This relationship is direct because it is a _self_ relationship. The translocated abundance is directly acted on by the translocation process. This relationship is introduced by the BEL Compiler and may not be used by statements in BEL documents.'.freeze
|
15
|
+
|
16
|
+
def self.short
|
17
|
+
SHORT
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.long
|
21
|
+
LONG
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.description
|
25
|
+
DESCRIPTION
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require_relative 'function'
|
2
|
+
require_relative 'specification'
|
3
|
+
|
4
|
+
module BELParser
|
5
|
+
module Language
|
6
|
+
module Version2_0
|
7
|
+
# Version2_0Specification defines the BEL, version 2.0 specification.
|
8
|
+
class Specification
|
9
|
+
include BELParser::Language::Specification
|
10
|
+
def initialize
|
11
|
+
@version = '2.0'.freeze
|
12
|
+
|
13
|
+
# Establish functions
|
14
|
+
function_classes = Version2_0::Functions.constants.collect do |symbol|
|
15
|
+
const = Version2_0::Functions.const_get(symbol)
|
16
|
+
const if
|
17
|
+
const.respond_to?(:short) &&
|
18
|
+
const.respond_to?(:long)
|
19
|
+
end
|
20
|
+
@functions = function_classes.compact
|
21
|
+
@indexed_functions = index_long_short(@functions)
|
22
|
+
|
23
|
+
# Collect relationships
|
24
|
+
rel_classes = Version2_0::Relationships.constants.collect do |symbol|
|
25
|
+
const = Version2_0::Relationships.const_get(symbol)
|
26
|
+
const if
|
27
|
+
const.respond_to?(:short) &&
|
28
|
+
const.respond_to?(:long)
|
29
|
+
end
|
30
|
+
@relationships = rel_classes.compact
|
31
|
+
@indexed_relationships = index_long_short(@relationships)
|
32
|
+
|
33
|
+
# Establish return types
|
34
|
+
ret_classes = Version2_0::ReturnTypes.constants.collect do |symbol|
|
35
|
+
const = Version2_0::ReturnTypes.const_get(symbol)
|
36
|
+
const if const.respond_to?(:subtypes)
|
37
|
+
end
|
38
|
+
@return_types = ret_classes.compact
|
39
|
+
@indexed_return_types = index_sym(@return_types)
|
40
|
+
|
41
|
+
freeze
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Require all version 2.0 return types
|
49
|
+
Dir[
|
50
|
+
File.join(
|
51
|
+
File.dirname(File.expand_path(__FILE__)),
|
52
|
+
'version2_0', 'return_types', '*.rb')
|
53
|
+
].each do |path|
|
54
|
+
require_relative "version2_0/return_types/#{File.basename(path)}"
|
55
|
+
end
|
56
|
+
|
57
|
+
# Require all version 2.0 functions.
|
58
|
+
Dir[
|
59
|
+
File.join(
|
60
|
+
File.dirname(File.expand_path(__FILE__)),
|
61
|
+
'version2_0', 'functions', '*.rb')
|
62
|
+
].each do |path|
|
63
|
+
require_relative "version2_0/functions/#{File.basename(path)}"
|
64
|
+
end
|
65
|
+
|
66
|
+
# Require all version 1.0 relationships.
|
67
|
+
Dir[
|
68
|
+
File.join(
|
69
|
+
File.dirname(File.expand_path(__FILE__)),
|
70
|
+
'version2_0', 'relationships', '*.rb')
|
71
|
+
].each do |path|
|
72
|
+
require_relative "version2_0/relationships/#{File.basename(path)}"
|
73
|
+
end
|
data/lib/bel_parser/language.rb
CHANGED
@@ -1,7 +1,95 @@
|
|
1
1
|
require_relative 'language/function'
|
2
2
|
require_relative 'language/quoting'
|
3
|
-
require_relative 'language/
|
3
|
+
require_relative 'language/semantics'
|
4
4
|
require_relative 'language/signature'
|
5
5
|
require_relative 'language/specification'
|
6
|
+
require_relative 'language/expression_validator'
|
6
7
|
|
7
|
-
|
8
|
+
module BELParser
|
9
|
+
module Language
|
10
|
+
|
11
|
+
# Mutex to synchronize creation of BEL specifications.
|
12
|
+
LOCK = Mutex.new
|
13
|
+
private_constant :LOCK
|
14
|
+
|
15
|
+
# Indicates if +version+ is a defined BEL specification.
|
16
|
+
#
|
17
|
+
# @param [#to_s] version the BEL version string (e.g. +"2.0"+)
|
18
|
+
# @return [Boolean] +true+ if +version+ is defined; +false+ if not
|
19
|
+
def self.defines_version?(version)
|
20
|
+
begin
|
21
|
+
specification(version)
|
22
|
+
true
|
23
|
+
rescue ArgumentError, LoadError
|
24
|
+
false
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns all version strings that are defined and supported by this
|
29
|
+
# project.
|
30
|
+
#
|
31
|
+
# @return [Array<String>] BEL language versions
|
32
|
+
def self.versions
|
33
|
+
Dir[
|
34
|
+
File.join(
|
35
|
+
File.expand_path('..', __FILE__),
|
36
|
+
'language',
|
37
|
+
'version*.rb'
|
38
|
+
)
|
39
|
+
].map do |path|
|
40
|
+
file_name = File.basename(path)
|
41
|
+
file_name.scan(/[0-9]+_[0-9]+/).first.sub('_', '.')
|
42
|
+
end.sort
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns all language {Specification specifications}.
|
46
|
+
#
|
47
|
+
# @return [Array<Specification>] BEL specifications
|
48
|
+
def self.specifications
|
49
|
+
versions.map { |version| specification(version) }
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns the {Specification} for a BEL specification +version+.
|
53
|
+
#
|
54
|
+
# @param [#to_s] version the BEL version string (e.g. +"2.0"+)
|
55
|
+
# @return [Specification] the BEL specification
|
56
|
+
# @raise [ArgumentError] if the version string is malformed or is not
|
57
|
+
# supported
|
58
|
+
# @see {.defines?}
|
59
|
+
def self.specification(version)
|
60
|
+
version_string = version.to_s
|
61
|
+
unless version_string =~ /^[0-9]+\.[0-9]+/
|
62
|
+
raise ArgumentError, "Version format incorrect; expecting MAJOR.MINOR"
|
63
|
+
end
|
64
|
+
|
65
|
+
LOCK.synchronize do
|
66
|
+
version_sym = version_string.to_sym
|
67
|
+
@specs ||= {}
|
68
|
+
@specs[version_sym] ||= create_specification(version_string)
|
69
|
+
@specs[version_sym]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# Create the {Specification} for a BEL +version+.
|
74
|
+
#
|
75
|
+
# @param [String] version the BEL version string (e.g. +"2.0"+)
|
76
|
+
# @return [Specification] the BEL specification
|
77
|
+
# @raise [ArgumentError] if the version string is malformed or is not
|
78
|
+
# supported
|
79
|
+
# @see {.defines?}
|
80
|
+
def self.create_specification(version)
|
81
|
+
major, minor = version.split('.')
|
82
|
+
version_file = "language/version#{major}_#{minor}"
|
83
|
+
|
84
|
+
begin
|
85
|
+
require_relative version_file
|
86
|
+
version_const = :"Version#{major}_#{minor}"
|
87
|
+
version_module = BELParser::Language.const_get(version_const)
|
88
|
+
version_module::Specification.new
|
89
|
+
rescue LoadError
|
90
|
+
raise ArgumentError, "Version #{version} is not supported."
|
91
|
+
end
|
92
|
+
end
|
93
|
+
private_class_method :create_specification
|
94
|
+
end
|
95
|
+
end
|
@@ -64,6 +64,16 @@ module BELParser
|
|
64
64
|
# of this AST node.
|
65
65
|
attr_reader :character_range
|
66
66
|
|
67
|
+
# Get the syntax errors for this AST node.
|
68
|
+
def syntax_errors
|
69
|
+
(@syntax_errors ||= [])
|
70
|
+
end
|
71
|
+
|
72
|
+
# Add a syntax error to thie AST node.
|
73
|
+
def add_syntax_error(syntax_error)
|
74
|
+
syntax_errors << syntax_error
|
75
|
+
end
|
76
|
+
|
67
77
|
# Get the start of the character range enclosing this AST node.
|
68
78
|
def range_start
|
69
79
|
@character_range[0]
|
@@ -92,10 +102,10 @@ module BELParser
|
|
92
102
|
|
93
103
|
def traverse(&block)
|
94
104
|
if block_given?
|
105
|
+
yield self
|
95
106
|
children.each do |child_node|
|
96
107
|
child_node.traverse(&block) if child_node.respond_to?(:traverse)
|
97
108
|
end
|
98
|
-
yield self
|
99
109
|
else
|
100
110
|
enum_for(:traverse)
|
101
111
|
end
|