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.
Files changed (184) hide show
  1. checksums.yaml +4 -4
  2. data/.gemspec +1 -1
  3. data/VERSION +1 -1
  4. data/bin/bel2_termcheck +2 -2
  5. data/lib/bel_parser/expression/term_semantics.rb +2 -2
  6. data/lib/bel_parser/language/expression_validator.rb +42 -0
  7. data/lib/bel_parser/language/function.rb +8 -0
  8. data/lib/bel_parser/language/relationship.rb +57 -0
  9. data/lib/bel_parser/language/{semantic_ast.rb → semantics/semantic_ast.rb} +5 -27
  10. data/lib/bel_parser/language/semantics/semantic_match.rb +28 -0
  11. data/lib/bel_parser/language/semantics.rb +2 -0
  12. data/lib/bel_parser/language/specification.rb +34 -10
  13. data/lib/bel_parser/language/syntax.rb +0 -0
  14. data/lib/bel_parser/language/{version1 → version1_0}/functions/abundance.rb +4 -4
  15. data/lib/bel_parser/language/{version1 → version1_0}/functions/biological_process.rb +4 -4
  16. data/lib/bel_parser/language/{version1 → version1_0}/functions/catalytic_activity.rb +6 -6
  17. data/lib/bel_parser/language/{version1 → version1_0}/functions/cell_secretion.rb +5 -5
  18. data/lib/bel_parser/language/{version1 → version1_0}/functions/cell_surface_expression.rb +5 -5
  19. data/lib/bel_parser/language/{version1 → version1_0}/functions/chaperone_activity.rb +6 -6
  20. data/lib/bel_parser/language/{version1 → version1_0}/functions/complex_abundance.rb +5 -5
  21. data/lib/bel_parser/language/{version1 → version1_0}/functions/composite_abundance.rb +5 -5
  22. data/lib/bel_parser/language/{version1 → version1_0}/functions/degradation.rb +5 -5
  23. data/lib/bel_parser/language/{version1 → version1_0}/functions/fusion.rb +4 -4
  24. data/lib/bel_parser/language/{version1 → version1_0}/functions/gene_abundance.rb +5 -5
  25. data/lib/bel_parser/language/{version1 → version1_0}/functions/gtp_bound_activity.rb +6 -6
  26. data/lib/bel_parser/language/{version1 → version1_0}/functions/kinase_activity.rb +6 -6
  27. data/lib/bel_parser/language/{version1 → version1_0}/functions/list.rb +5 -5
  28. data/lib/bel_parser/language/{version1 → version1_0}/functions/micro_rna_abundance.rb +4 -4
  29. data/lib/bel_parser/language/{version1 → version1_0}/functions/molecular_activity.rb +5 -5
  30. data/lib/bel_parser/language/{version2 → version1_0}/functions/pathology.rb +4 -4
  31. data/lib/bel_parser/language/{version1 → version1_0}/functions/peptidase_activity.rb +6 -6
  32. data/lib/bel_parser/language/{version1 → version1_0}/functions/phosphatase_activity.rb +6 -6
  33. data/lib/bel_parser/language/{version2 → version1_0}/functions/products.rb +5 -5
  34. data/lib/bel_parser/language/{version1 → version1_0}/functions/protein_abundance.rb +8 -8
  35. data/lib/bel_parser/language/{version1 → version1_0}/functions/protein_modification.rb +4 -4
  36. data/lib/bel_parser/language/{version2 → version1_0}/functions/reactants.rb +5 -5
  37. data/lib/bel_parser/language/{version1 → version1_0}/functions/reaction.rb +6 -6
  38. data/lib/bel_parser/language/{version1 → version1_0}/functions/ribosylation_activity.rb +6 -6
  39. data/lib/bel_parser/language/{version1 → version1_0}/functions/rna_abundance.rb +5 -5
  40. data/lib/bel_parser/language/{version1 → version1_0}/functions/substitution.rb +4 -4
  41. data/lib/bel_parser/language/{version1 → version1_0}/functions/transcriptional_activity.rb +6 -6
  42. data/lib/bel_parser/language/{version1 → version1_0}/functions/translocation.rb +5 -5
  43. data/lib/bel_parser/language/{version1 → version1_0}/functions/transport_activity.rb +6 -6
  44. data/lib/bel_parser/language/{version1 → version1_0}/functions/truncation.rb +4 -4
  45. data/lib/bel_parser/language/version1_0/relationships/acts_in.rb +31 -0
  46. data/lib/bel_parser/language/version1_0/relationships/analogous.rb +31 -0
  47. data/lib/bel_parser/language/version1_0/relationships/association.rb +31 -0
  48. data/lib/bel_parser/language/version1_0/relationships/biomarker_for.rb +31 -0
  49. data/lib/bel_parser/language/version1_0/relationships/causes_no_change.rb +31 -0
  50. data/lib/bel_parser/language/version1_0/relationships/decreases.rb +31 -0
  51. data/lib/bel_parser/language/version1_0/relationships/directly_decreases.rb +31 -0
  52. data/lib/bel_parser/language/version1_0/relationships/directly_increases.rb +31 -0
  53. data/lib/bel_parser/language/version1_0/relationships/has_component.rb +31 -0
  54. data/lib/bel_parser/language/version1_0/relationships/has_components.rb +31 -0
  55. data/lib/bel_parser/language/version1_0/relationships/has_member.rb +31 -0
  56. data/lib/bel_parser/language/version1_0/relationships/has_members.rb +31 -0
  57. data/lib/bel_parser/language/version1_0/relationships/has_modification.rb +31 -0
  58. data/lib/bel_parser/language/version1_0/relationships/has_product.rb +31 -0
  59. data/lib/bel_parser/language/version1_0/relationships/has_variant.rb +31 -0
  60. data/lib/bel_parser/language/version1_0/relationships/includes.rb +31 -0
  61. data/lib/bel_parser/language/version1_0/relationships/increases.rb +31 -0
  62. data/lib/bel_parser/language/version1_0/relationships/is_a.rb +31 -0
  63. data/lib/bel_parser/language/version1_0/relationships/negative_correlation.rb +31 -0
  64. data/lib/bel_parser/language/version1_0/relationships/orthologous.rb +31 -0
  65. data/lib/bel_parser/language/version1_0/relationships/positive_correlation.rb +31 -0
  66. data/lib/bel_parser/language/version1_0/relationships/prognostic_biomarker_for.rb +31 -0
  67. data/lib/bel_parser/language/version1_0/relationships/rate_limiting_step_of.rb +31 -0
  68. data/lib/bel_parser/language/version1_0/relationships/reactant_in.rb +31 -0
  69. data/lib/bel_parser/language/version1_0/relationships/sub_process_of.rb +31 -0
  70. data/lib/bel_parser/language/version1_0/relationships/transcribed_to.rb +31 -0
  71. data/lib/bel_parser/language/version1_0/relationships/translated_to.rb +31 -0
  72. data/lib/bel_parser/language/version1_0/relationships/translocates.rb +31 -0
  73. data/lib/bel_parser/language/{version2 → version1_0}/return_types/abundance.rb +1 -1
  74. data/lib/bel_parser/language/{version1 → version1_0}/return_types/any.rb +1 -1
  75. data/lib/bel_parser/language/{version1 → version1_0}/return_types/biological_process.rb +1 -1
  76. data/lib/bel_parser/language/{version1 → version1_0}/return_types/catalytic_activity.rb +1 -1
  77. data/lib/bel_parser/language/{version1 → version1_0}/return_types/chaperone_activity.rb +1 -1
  78. data/lib/bel_parser/language/{version2 → version1_0}/return_types/complex_abundance.rb +1 -1
  79. data/lib/bel_parser/language/{version1 → version1_0}/return_types/fusion.rb +1 -1
  80. data/lib/bel_parser/language/{version2 → version1_0}/return_types/gene_abundance.rb +1 -1
  81. data/lib/bel_parser/language/{version1 → version1_0}/return_types/gtp_bound_activity.rb +1 -1
  82. data/lib/bel_parser/language/{version1 → version1_0}/return_types/kinase_activity.rb +1 -1
  83. data/lib/bel_parser/language/{version1 → version1_0}/return_types/list.rb +1 -1
  84. data/lib/bel_parser/language/{version1 → version1_0}/return_types/micro_rna_abundance.rb +1 -1
  85. data/lib/bel_parser/language/{version1 → version1_0}/return_types/molecular_activity.rb +1 -1
  86. data/lib/bel_parser/language/{version1 → version1_0}/return_types/pathology.rb +1 -1
  87. data/lib/bel_parser/language/{version1 → version1_0}/return_types/peptidase_activity.rb +1 -1
  88. data/lib/bel_parser/language/{version1 → version1_0}/return_types/phosphatase_activity.rb +1 -1
  89. data/lib/bel_parser/language/{version2 → version1_0}/return_types/products.rb +1 -1
  90. data/lib/bel_parser/language/{version2 → version1_0}/return_types/protein_abundance.rb +1 -1
  91. data/lib/bel_parser/language/{version1 → version1_0}/return_types/protein_modification.rb +1 -1
  92. data/lib/bel_parser/language/{version2 → version1_0}/return_types/reactants.rb +1 -1
  93. data/lib/bel_parser/language/{version1 → version1_0}/return_types/ribosylation_activity.rb +1 -1
  94. data/lib/bel_parser/language/{version1 → version1_0}/return_types/rna_abundance.rb +1 -1
  95. data/lib/bel_parser/language/{version1 → version1_0}/return_types/substitution.rb +1 -1
  96. data/lib/bel_parser/language/{version1 → version1_0}/return_types/transcriptional_activity.rb +1 -1
  97. data/lib/bel_parser/language/{version1 → version1_0}/return_types/transport_activity.rb +1 -1
  98. data/lib/bel_parser/language/{version1 → version1_0}/return_types/truncation.rb +1 -1
  99. data/lib/bel_parser/language/version1_0/syntax/function.rb +29 -0
  100. data/lib/bel_parser/language/version1_0.rb +89 -0
  101. data/lib/bel_parser/language/{version2 → version2_0}/functions/abundance.rb +6 -6
  102. data/lib/bel_parser/language/{version2 → version2_0}/functions/activity.rb +7 -7
  103. data/lib/bel_parser/language/{version2 → version2_0}/functions/biological_process.rb +4 -4
  104. data/lib/bel_parser/language/{version2 → version2_0}/functions/cell_secretion.rb +5 -5
  105. data/lib/bel_parser/language/{version2 → version2_0}/functions/cell_surface_expression.rb +5 -5
  106. data/lib/bel_parser/language/{version2 → version2_0}/functions/complex_abundance.rb +8 -8
  107. data/lib/bel_parser/language/{version2 → version2_0}/functions/composite_abundance.rb +5 -5
  108. data/lib/bel_parser/language/{version2 → version2_0}/functions/degradation.rb +5 -5
  109. data/lib/bel_parser/language/{version2 → version2_0}/functions/fragment.rb +4 -4
  110. data/lib/bel_parser/language/{version2 → version2_0}/functions/from_location.rb +4 -4
  111. data/lib/bel_parser/language/{version2 → version2_0}/functions/fusion.rb +4 -4
  112. data/lib/bel_parser/language/{version2 → version2_0}/functions/gene_abundance.rb +7 -7
  113. data/lib/bel_parser/language/{version2 → version2_0}/functions/list.rb +5 -5
  114. data/lib/bel_parser/language/{version2 → version2_0}/functions/location.rb +4 -4
  115. data/lib/bel_parser/language/{version2 → version2_0}/functions/micro_rna_abundance.rb +6 -6
  116. data/lib/bel_parser/language/{version2 → version2_0}/functions/molecular_activity.rb +4 -4
  117. data/lib/bel_parser/language/{version1 → version2_0}/functions/pathology.rb +4 -4
  118. data/lib/bel_parser/language/{version1 → version2_0}/functions/products.rb +5 -5
  119. data/lib/bel_parser/language/{version2 → version2_0}/functions/protein_abundance.rb +9 -9
  120. data/lib/bel_parser/language/{version2 → version2_0}/functions/protein_modification.rb +7 -7
  121. data/lib/bel_parser/language/{version1 → version2_0}/functions/reactants.rb +5 -5
  122. data/lib/bel_parser/language/{version2 → version2_0}/functions/reaction.rb +6 -6
  123. data/lib/bel_parser/language/{version2 → version2_0}/functions/rna_abundance.rb +11 -11
  124. data/lib/bel_parser/language/{version2 → version2_0}/functions/to_location.rb +4 -4
  125. data/lib/bel_parser/language/{version2 → version2_0}/functions/translocation.rb +8 -8
  126. data/lib/bel_parser/language/{version2 → version2_0}/functions/variant.rb +4 -4
  127. data/lib/bel_parser/language/version2_0/relationships/acts_in.rb +31 -0
  128. data/lib/bel_parser/language/version2_0/relationships/analogous.rb +35 -0
  129. data/lib/bel_parser/language/version2_0/relationships/association.rb +31 -0
  130. data/lib/bel_parser/language/version2_0/relationships/biomarker_for.rb +35 -0
  131. data/lib/bel_parser/language/version2_0/relationships/causes_no_change.rb +31 -0
  132. data/lib/bel_parser/language/version2_0/relationships/decreases.rb +31 -0
  133. data/lib/bel_parser/language/version2_0/relationships/directly_decreases.rb +31 -0
  134. data/lib/bel_parser/language/version2_0/relationships/directly_increases.rb +31 -0
  135. data/lib/bel_parser/language/version2_0/relationships/has_component.rb +31 -0
  136. data/lib/bel_parser/language/version2_0/relationships/has_components.rb +31 -0
  137. data/lib/bel_parser/language/version2_0/relationships/has_member.rb +31 -0
  138. data/lib/bel_parser/language/version2_0/relationships/has_members.rb +31 -0
  139. data/lib/bel_parser/language/version2_0/relationships/has_modification.rb +31 -0
  140. data/lib/bel_parser/language/version2_0/relationships/has_product.rb +31 -0
  141. data/lib/bel_parser/language/version2_0/relationships/has_variant.rb +31 -0
  142. data/lib/bel_parser/language/version2_0/relationships/includes.rb +31 -0
  143. data/lib/bel_parser/language/version2_0/relationships/increases.rb +31 -0
  144. data/lib/bel_parser/language/version2_0/relationships/is_a.rb +31 -0
  145. data/lib/bel_parser/language/version2_0/relationships/negative_correlation.rb +31 -0
  146. data/lib/bel_parser/language/version2_0/relationships/orthologous.rb +31 -0
  147. data/lib/bel_parser/language/version2_0/relationships/positive_correlation.rb +31 -0
  148. data/lib/bel_parser/language/version2_0/relationships/prognostic_biomarker_for.rb +35 -0
  149. data/lib/bel_parser/language/version2_0/relationships/rate_limiting_step_of.rb +31 -0
  150. data/lib/bel_parser/language/version2_0/relationships/reactant_in.rb +31 -0
  151. data/lib/bel_parser/language/version2_0/relationships/regulates.rb +31 -0
  152. data/lib/bel_parser/language/version2_0/relationships/sub_process_of.rb +31 -0
  153. data/lib/bel_parser/language/version2_0/relationships/transcribed_to.rb +31 -0
  154. data/lib/bel_parser/language/version2_0/relationships/translated_to.rb +31 -0
  155. data/lib/bel_parser/language/version2_0/relationships/translocates.rb +31 -0
  156. data/lib/bel_parser/language/{version1 → version2_0}/return_types/abundance.rb +1 -1
  157. data/lib/bel_parser/language/{version2 → version2_0}/return_types/activity.rb +1 -1
  158. data/lib/bel_parser/language/{version2 → version2_0}/return_types/any.rb +1 -1
  159. data/lib/bel_parser/language/{version2 → version2_0}/return_types/biological_process.rb +1 -1
  160. data/lib/bel_parser/language/{version1 → version2_0}/return_types/complex_abundance.rb +1 -1
  161. data/lib/bel_parser/language/{version2 → version2_0}/return_types/fragment.rb +1 -1
  162. data/lib/bel_parser/language/{version2 → version2_0}/return_types/from_location.rb +1 -1
  163. data/lib/bel_parser/language/{version2 → version2_0}/return_types/fusion.rb +1 -1
  164. data/lib/bel_parser/language/{version1 → version2_0}/return_types/gene_abundance.rb +1 -1
  165. data/lib/bel_parser/language/{version2 → version2_0}/return_types/list.rb +1 -1
  166. data/lib/bel_parser/language/{version2 → version2_0}/return_types/location.rb +1 -1
  167. data/lib/bel_parser/language/{version2 → version2_0}/return_types/micro_rna_abundance.rb +1 -1
  168. data/lib/bel_parser/language/{version2 → version2_0}/return_types/molecular_activity.rb +1 -1
  169. data/lib/bel_parser/language/{version2 → version2_0}/return_types/pathology.rb +1 -1
  170. data/lib/bel_parser/language/{version1 → version2_0}/return_types/products.rb +1 -1
  171. data/lib/bel_parser/language/{version1 → version2_0}/return_types/protein_abundance.rb +1 -1
  172. data/lib/bel_parser/language/{version2 → version2_0}/return_types/protein_modification.rb +1 -1
  173. data/lib/bel_parser/language/{version1 → version2_0}/return_types/reactants.rb +1 -1
  174. data/lib/bel_parser/language/{version2 → version2_0}/return_types/rna_abundance.rb +1 -1
  175. data/lib/bel_parser/language/{version2 → version2_0}/return_types/to_location.rb +1 -1
  176. data/lib/bel_parser/language/{version2 → version2_0}/return_types/variant.rb +1 -1
  177. data/lib/bel_parser/language/version2_0.rb +73 -0
  178. data/lib/bel_parser/language.rb +90 -2
  179. data/lib/bel_parser/parsers/ast/node.rb +11 -1
  180. metadata +172 -111
  181. data/lib/bel_parser/language/syntax/expression/incomplete_node.rb +0 -14
  182. data/lib/bel_parser/language/syntax/expression/invalid_term_function.rb +0 -22
  183. data/lib/bel_parser/language/version1.rb +0 -50
  184. 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
@@ -2,7 +2,7 @@ require_relative 'any'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version1
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Abundance return type.
8
8
  class Abundance < Any
@@ -2,7 +2,7 @@ require_relative 'any'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Activity return type.
8
8
  class Activity < Any
@@ -2,7 +2,7 @@ require 'English'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # The any type.
8
8
  class Any
@@ -2,7 +2,7 @@ require_relative 'any'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Biological process return type.
8
8
  class BiologicalProcess < Any
@@ -2,7 +2,7 @@ require_relative 'abundance'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version1
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Complex abundance return type.
8
8
  class ComplexAbundance < Abundance
@@ -2,7 +2,7 @@ require_relative 'any'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Fragment return type.
8
8
  class Fragment < Any
@@ -2,7 +2,7 @@ require_relative 'location'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # FromLocation return type.
8
8
  class FromLocation < Location
@@ -2,7 +2,7 @@ require_relative 'any'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Fusion return type.
8
8
  class Fusion < Any
@@ -2,7 +2,7 @@ require_relative 'abundance'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version1
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Gene abundance return type.
8
8
  class GeneAbundance < Abundance
@@ -2,7 +2,7 @@ require_relative 'any'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # List return type.
8
8
  class List < Any
@@ -2,7 +2,7 @@ require_relative 'any'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Location return type.
8
8
  class Location < Any
@@ -2,7 +2,7 @@ require_relative 'abundance'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Micro RNA abundance return type.
8
8
  class MicroRNAAbundance < Abundance
@@ -2,7 +2,7 @@ require_relative 'any'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # MolecularActivity return type.
8
8
  class MolecularActivity < Any
@@ -2,7 +2,7 @@ require_relative 'biological_process'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Pathology return type.
8
8
  class Pathology < BiologicalProcess
@@ -2,7 +2,7 @@ require_relative 'any'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version1
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Products return type.
8
8
  class Products < Any
@@ -2,7 +2,7 @@ require_relative 'abundance'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version1
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Protein abundance return type.
8
8
  class ProteinAbundance < Abundance
@@ -2,7 +2,7 @@ require_relative 'any'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Protein modification return type.
8
8
  class ProteinModification < Any
@@ -2,7 +2,7 @@ require_relative 'any'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version1
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Reactants return type.
8
8
  class Reactants < Any
@@ -2,7 +2,7 @@ require_relative 'abundance'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # RNA abundance return type.
8
8
  class RNAAbundance < Abundance
@@ -2,7 +2,7 @@ require_relative 'location'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # ToLocation return type.
8
8
  class ToLocation < Location
@@ -2,7 +2,7 @@ require_relative 'any'
2
2
 
3
3
  module BELParser
4
4
  module Language
5
- module Version2
5
+ module Version2_0
6
6
  module ReturnTypes
7
7
  # Variant return type.
8
8
  class Variant < Any
@@ -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
@@ -1,7 +1,95 @@
1
1
  require_relative 'language/function'
2
2
  require_relative 'language/quoting'
3
- require_relative 'language/semantic_ast'
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
- # BEL language/version1 and language/version2 files are loaded when needed.
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