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.
Files changed (332) hide show
  1. checksums.yaml +7 -0
  2. data/.gemspec-java +32 -0
  3. data/CHANGELOG.md +10 -0
  4. data/LICENSE +191 -0
  5. data/README.md +20 -0
  6. data/VERSION +1 -0
  7. data/bin/bel2_validator +62 -0
  8. data/bin/bel_script_reader +132 -0
  9. data/lib/bel/translator/plugins/bel_script.rb +38 -0
  10. data/lib/bel/translator/plugins/bel_script/bel_citation_serialization.rb +125 -0
  11. data/lib/bel/translator/plugins/bel_script/bel_discrete_serialization.rb +109 -0
  12. data/lib/bel/translator/plugins/bel_script/bel_top_down_serialization.rb +100 -0
  13. data/lib/bel/translator/plugins/bel_script/nanopub_serialization.rb +79 -0
  14. data/lib/bel/translator/plugins/bel_script/reader.rb +39 -0
  15. data/lib/bel/translator/plugins/bel_script/translator.rb +37 -0
  16. data/lib/bel/translator/plugins/bel_script/writer.rb +180 -0
  17. data/lib/bel_parser.rb +23 -0
  18. data/lib/bel_parser/ast_filter.rb +44 -0
  19. data/lib/bel_parser/ast_generator.rb +83 -0
  20. data/lib/bel_parser/expression.rb +3 -0
  21. data/lib/bel_parser/expression/filter.rb +31 -0
  22. data/lib/bel_parser/expression/parser.rb +72 -0
  23. data/lib/bel_parser/expression/validator.rb +79 -0
  24. data/lib/bel_parser/language.rb +114 -0
  25. data/lib/bel_parser/language/amino_acid.rb +68 -0
  26. data/lib/bel_parser/language/apply_namespace_encoding.rb +98 -0
  27. data/lib/bel_parser/language/base_specification.rb +82 -0
  28. data/lib/bel_parser/language/covalent_protein_modification.rb +56 -0
  29. data/lib/bel_parser/language/expression_validator.rb +68 -0
  30. data/lib/bel_parser/language/function.rb +67 -0
  31. data/lib/bel_parser/language/relationship.rb +102 -0
  32. data/lib/bel_parser/language/semantics.rb +40 -0
  33. data/lib/bel_parser/language/semantics/deeply_nested_statement.rb +65 -0
  34. data/lib/bel_parser/language/semantics/function_deprecation.rb +43 -0
  35. data/lib/bel_parser/language/semantics/list_function_subject.rb +45 -0
  36. data/lib/bel_parser/language/semantics/multiple_subject_object.rb +55 -0
  37. data/lib/bel_parser/language/semantics/non_causal_nested_statement.rb +50 -0
  38. data/lib/bel_parser/language/semantics/non_object_list.rb +56 -0
  39. data/lib/bel_parser/language/semantics/relationship_deprecation.rb +44 -0
  40. data/lib/bel_parser/language/semantics/relationship_not_listable.rb +60 -0
  41. data/lib/bel_parser/language/semantics/signature_mapping.rb +83 -0
  42. data/lib/bel_parser/language/semantics_ast.rb +784 -0
  43. data/lib/bel_parser/language/semantics_ast_warnings.rb +180 -0
  44. data/lib/bel_parser/language/semantics_function.rb +16 -0
  45. data/lib/bel_parser/language/semantics_match.rb +28 -0
  46. data/lib/bel_parser/language/semantics_result.rb +33 -0
  47. data/lib/bel_parser/language/semantics_type_warning.rb +22 -0
  48. data/lib/bel_parser/language/semantics_warning.rb +27 -0
  49. data/lib/bel_parser/language/signature.rb +39 -0
  50. data/lib/bel_parser/language/specification.rb +118 -0
  51. data/lib/bel_parser/language/syntax.rb +38 -0
  52. data/lib/bel_parser/language/syntax/invalid_function.rb +39 -0
  53. data/lib/bel_parser/language/syntax/invalid_relationship.rb +42 -0
  54. data/lib/bel_parser/language/syntax/undefined_namespace.rb +49 -0
  55. data/lib/bel_parser/language/syntax/undefined_namespace_value.rb +44 -0
  56. data/lib/bel_parser/language/syntax_error.rb +32 -0
  57. data/lib/bel_parser/language/syntax_function.rb +16 -0
  58. data/lib/bel_parser/language/syntax_result.rb +32 -0
  59. data/lib/bel_parser/language/syntax_warning.rb +27 -0
  60. data/lib/bel_parser/language/version1_0.rb +20 -0
  61. data/lib/bel_parser/language/version1_0/functions/abundance.rb +83 -0
  62. data/lib/bel_parser/language/version1_0/functions/biological_process.rb +83 -0
  63. data/lib/bel_parser/language/version1_0/functions/catalytic_activity.rb +114 -0
  64. data/lib/bel_parser/language/version1_0/functions/cell_secretion.rb +83 -0
  65. data/lib/bel_parser/language/version1_0/functions/cell_surface_expression.rb +83 -0
  66. data/lib/bel_parser/language/version1_0/functions/chaperone_activity.rb +114 -0
  67. data/lib/bel_parser/language/version1_0/functions/complex_abundance.rb +115 -0
  68. data/lib/bel_parser/language/version1_0/functions/composite_abundance.rb +81 -0
  69. data/lib/bel_parser/language/version1_0/functions/degradation.rb +83 -0
  70. data/lib/bel_parser/language/version1_0/functions/fusion.rb +287 -0
  71. data/lib/bel_parser/language/version1_0/functions/gene_abundance.rb +122 -0
  72. data/lib/bel_parser/language/version1_0/functions/gtp_bound_activity.rb +113 -0
  73. data/lib/bel_parser/language/version1_0/functions/kinase_activity.rb +114 -0
  74. data/lib/bel_parser/language/version1_0/functions/list.rb +114 -0
  75. data/lib/bel_parser/language/version1_0/functions/micro_rna_abundance.rb +85 -0
  76. data/lib/bel_parser/language/version1_0/functions/molecular_activity.rb +82 -0
  77. data/lib/bel_parser/language/version1_0/functions/pathology.rb +83 -0
  78. data/lib/bel_parser/language/version1_0/functions/peptidase_activity.rb +112 -0
  79. data/lib/bel_parser/language/version1_0/functions/phosphatase_activity.rb +112 -0
  80. data/lib/bel_parser/language/version1_0/functions/products.rb +79 -0
  81. data/lib/bel_parser/language/version1_0/functions/protein_abundance.rb +234 -0
  82. data/lib/bel_parser/language/version1_0/functions/protein_modification.rb +179 -0
  83. data/lib/bel_parser/language/version1_0/functions/reactants.rb +79 -0
  84. data/lib/bel_parser/language/version1_0/functions/reaction.rb +86 -0
  85. data/lib/bel_parser/language/version1_0/functions/ribosylation_activity.rb +114 -0
  86. data/lib/bel_parser/language/version1_0/functions/rna_abundance.rb +122 -0
  87. data/lib/bel_parser/language/version1_0/functions/substitution.rb +93 -0
  88. data/lib/bel_parser/language/version1_0/functions/transcriptional_activity.rb +114 -0
  89. data/lib/bel_parser/language/version1_0/functions/translocation.rb +98 -0
  90. data/lib/bel_parser/language/version1_0/functions/transport_activity.rb +115 -0
  91. data/lib/bel_parser/language/version1_0/functions/truncation.rb +81 -0
  92. data/lib/bel_parser/language/version1_0/relationships/acts_in.rb +61 -0
  93. data/lib/bel_parser/language/version1_0/relationships/analogous.rb +41 -0
  94. data/lib/bel_parser/language/version1_0/relationships/association.rb +42 -0
  95. data/lib/bel_parser/language/version1_0/relationships/biomarker_for.rb +42 -0
  96. data/lib/bel_parser/language/version1_0/relationships/causes_no_change.rb +50 -0
  97. data/lib/bel_parser/language/version1_0/relationships/decreases.rb +63 -0
  98. data/lib/bel_parser/language/version1_0/relationships/directly_decreases.rb +56 -0
  99. data/lib/bel_parser/language/version1_0/relationships/directly_increases.rb +56 -0
  100. data/lib/bel_parser/language/version1_0/relationships/has_component.rb +62 -0
  101. data/lib/bel_parser/language/version1_0/relationships/has_components.rb +61 -0
  102. data/lib/bel_parser/language/version1_0/relationships/has_member.rb +48 -0
  103. data/lib/bel_parser/language/version1_0/relationships/has_members.rb +57 -0
  104. data/lib/bel_parser/language/version1_0/relationships/has_modification.rb +54 -0
  105. data/lib/bel_parser/language/version1_0/relationships/has_product.rb +60 -0
  106. data/lib/bel_parser/language/version1_0/relationships/has_variant.rb +54 -0
  107. data/lib/bel_parser/language/version1_0/relationships/includes.rb +59 -0
  108. data/lib/bel_parser/language/version1_0/relationships/increases.rb +63 -0
  109. data/lib/bel_parser/language/version1_0/relationships/is_a.rb +48 -0
  110. data/lib/bel_parser/language/version1_0/relationships/negative_correlation.rb +50 -0
  111. data/lib/bel_parser/language/version1_0/relationships/orthologous.rb +48 -0
  112. data/lib/bel_parser/language/version1_0/relationships/positive_correlation.rb +46 -0
  113. data/lib/bel_parser/language/version1_0/relationships/prognostic_biomarker_for.rb +44 -0
  114. data/lib/bel_parser/language/version1_0/relationships/rate_limiting_step_of.rb +53 -0
  115. data/lib/bel_parser/language/version1_0/relationships/reactant_in.rb +60 -0
  116. data/lib/bel_parser/language/version1_0/relationships/sub_process_of.rb +55 -0
  117. data/lib/bel_parser/language/version1_0/relationships/transcribed_to.rb +53 -0
  118. data/lib/bel_parser/language/version1_0/relationships/translated_to.rb +54 -0
  119. data/lib/bel_parser/language/version1_0/relationships/translocates.rb +57 -0
  120. data/lib/bel_parser/language/version1_0/return_types/abundance.rb +20 -0
  121. data/lib/bel_parser/language/version1_0/return_types/any.rb +74 -0
  122. data/lib/bel_parser/language/version1_0/return_types/biological_process.rb +17 -0
  123. data/lib/bel_parser/language/version1_0/return_types/catalytic_activity.rb +20 -0
  124. data/lib/bel_parser/language/version1_0/return_types/chaperone_activity.rb +20 -0
  125. data/lib/bel_parser/language/version1_0/return_types/complex_abundance.rb +17 -0
  126. data/lib/bel_parser/language/version1_0/return_types/fusion.rb +17 -0
  127. data/lib/bel_parser/language/version1_0/return_types/gene_abundance.rb +17 -0
  128. data/lib/bel_parser/language/version1_0/return_types/gtp_bound_activity.rb +20 -0
  129. data/lib/bel_parser/language/version1_0/return_types/kinase_activity.rb +20 -0
  130. data/lib/bel_parser/language/version1_0/return_types/list.rb +17 -0
  131. data/lib/bel_parser/language/version1_0/return_types/micro_rna_abundance.rb +17 -0
  132. data/lib/bel_parser/language/version1_0/return_types/molecular_activity.rb +20 -0
  133. data/lib/bel_parser/language/version1_0/return_types/pathology.rb +17 -0
  134. data/lib/bel_parser/language/version1_0/return_types/peptidase_activity.rb +20 -0
  135. data/lib/bel_parser/language/version1_0/return_types/phosphatase_activity.rb +20 -0
  136. data/lib/bel_parser/language/version1_0/return_types/products.rb +17 -0
  137. data/lib/bel_parser/language/version1_0/return_types/protein_abundance.rb +17 -0
  138. data/lib/bel_parser/language/version1_0/return_types/protein_modification.rb +17 -0
  139. data/lib/bel_parser/language/version1_0/return_types/reactants.rb +17 -0
  140. data/lib/bel_parser/language/version1_0/return_types/ribosylation_activity.rb +20 -0
  141. data/lib/bel_parser/language/version1_0/return_types/rna_abundance.rb +17 -0
  142. data/lib/bel_parser/language/version1_0/return_types/substitution.rb +17 -0
  143. data/lib/bel_parser/language/version1_0/return_types/transcriptional_activity.rb +20 -0
  144. data/lib/bel_parser/language/version1_0/return_types/transport_activity.rb +20 -0
  145. data/lib/bel_parser/language/version1_0/return_types/truncation.rb +17 -0
  146. data/lib/bel_parser/language/version1_0/value_encodings/abundance.rb +21 -0
  147. data/lib/bel_parser/language/version1_0/value_encodings/any.rb +74 -0
  148. data/lib/bel_parser/language/version1_0/value_encodings/biological_process.rb +21 -0
  149. data/lib/bel_parser/language/version1_0/value_encodings/complex_abundance.rb +21 -0
  150. data/lib/bel_parser/language/version1_0/value_encodings/gene_abundance.rb +21 -0
  151. data/lib/bel_parser/language/version1_0/value_encodings/micro_rna_abundance.rb +21 -0
  152. data/lib/bel_parser/language/version1_0/value_encodings/pathology.rb +21 -0
  153. data/lib/bel_parser/language/version1_0/value_encodings/protein_abundance.rb +21 -0
  154. data/lib/bel_parser/language/version1_0/value_encodings/rna_abundance.rb +21 -0
  155. data/lib/bel_parser/language/version2_0.rb +20 -0
  156. data/lib/bel_parser/language/version2_0/functions/abundance.rb +161 -0
  157. data/lib/bel_parser/language/version2_0/functions/activity.rb +118 -0
  158. data/lib/bel_parser/language/version2_0/functions/biological_process.rb +84 -0
  159. data/lib/bel_parser/language/version2_0/functions/cell_secretion.rb +83 -0
  160. data/lib/bel_parser/language/version2_0/functions/cell_surface_expression.rb +83 -0
  161. data/lib/bel_parser/language/version2_0/functions/complex_abundance.rb +190 -0
  162. data/lib/bel_parser/language/version2_0/functions/composite_abundance.rb +81 -0
  163. data/lib/bel_parser/language/version2_0/functions/degradation.rb +83 -0
  164. data/lib/bel_parser/language/version2_0/functions/fragment.rb +116 -0
  165. data/lib/bel_parser/language/version2_0/functions/from_location.rb +85 -0
  166. data/lib/bel_parser/language/version2_0/functions/fusion.rb +203 -0
  167. data/lib/bel_parser/language/version2_0/functions/gene_abundance.rb +192 -0
  168. data/lib/bel_parser/language/version2_0/functions/list.rb +114 -0
  169. data/lib/bel_parser/language/version2_0/functions/location.rb +83 -0
  170. data/lib/bel_parser/language/version2_0/functions/micro_rna_abundance.rb +163 -0
  171. data/lib/bel_parser/language/version2_0/functions/molecular_activity.rb +86 -0
  172. data/lib/bel_parser/language/version2_0/functions/pathology.rb +83 -0
  173. data/lib/bel_parser/language/version2_0/functions/products.rb +79 -0
  174. data/lib/bel_parser/language/version2_0/functions/protein_abundance.rb +270 -0
  175. data/lib/bel_parser/language/version2_0/functions/protein_modification.rb +172 -0
  176. data/lib/bel_parser/language/version2_0/functions/reactants.rb +79 -0
  177. data/lib/bel_parser/language/version2_0/functions/reaction.rb +86 -0
  178. data/lib/bel_parser/language/version2_0/functions/rna_abundance.rb +192 -0
  179. data/lib/bel_parser/language/version2_0/functions/to_location.rb +84 -0
  180. data/lib/bel_parser/language/version2_0/functions/translocation.rb +91 -0
  181. data/lib/bel_parser/language/version2_0/functions/variant.rb +80 -0
  182. data/lib/bel_parser/language/version2_0/relationships/acts_in.rb +61 -0
  183. data/lib/bel_parser/language/version2_0/relationships/analogous.rb +45 -0
  184. data/lib/bel_parser/language/version2_0/relationships/association.rb +42 -0
  185. data/lib/bel_parser/language/version2_0/relationships/biomarker_for.rb +46 -0
  186. data/lib/bel_parser/language/version2_0/relationships/causes_no_change.rb +50 -0
  187. data/lib/bel_parser/language/version2_0/relationships/decreases.rb +63 -0
  188. data/lib/bel_parser/language/version2_0/relationships/directly_decreases.rb +56 -0
  189. data/lib/bel_parser/language/version2_0/relationships/directly_increases.rb +56 -0
  190. data/lib/bel_parser/language/version2_0/relationships/has_component.rb +62 -0
  191. data/lib/bel_parser/language/version2_0/relationships/has_components.rb +61 -0
  192. data/lib/bel_parser/language/version2_0/relationships/has_member.rb +48 -0
  193. data/lib/bel_parser/language/version2_0/relationships/has_members.rb +57 -0
  194. data/lib/bel_parser/language/version2_0/relationships/has_modification.rb +54 -0
  195. data/lib/bel_parser/language/version2_0/relationships/has_product.rb +60 -0
  196. data/lib/bel_parser/language/version2_0/relationships/has_variant.rb +54 -0
  197. data/lib/bel_parser/language/version2_0/relationships/includes.rb +59 -0
  198. data/lib/bel_parser/language/version2_0/relationships/increases.rb +63 -0
  199. data/lib/bel_parser/language/version2_0/relationships/is_a.rb +48 -0
  200. data/lib/bel_parser/language/version2_0/relationships/negative_correlation.rb +50 -0
  201. data/lib/bel_parser/language/version2_0/relationships/orthologous.rb +48 -0
  202. data/lib/bel_parser/language/version2_0/relationships/positive_correlation.rb +46 -0
  203. data/lib/bel_parser/language/version2_0/relationships/prognostic_biomarker_for.rb +48 -0
  204. data/lib/bel_parser/language/version2_0/relationships/rate_limiting_step_of.rb +53 -0
  205. data/lib/bel_parser/language/version2_0/relationships/reactant_in.rb +60 -0
  206. data/lib/bel_parser/language/version2_0/relationships/regulates.rb +51 -0
  207. data/lib/bel_parser/language/version2_0/relationships/sub_process_of.rb +55 -0
  208. data/lib/bel_parser/language/version2_0/relationships/transcribed_to.rb +53 -0
  209. data/lib/bel_parser/language/version2_0/relationships/translated_to.rb +54 -0
  210. data/lib/bel_parser/language/version2_0/relationships/translocates.rb +57 -0
  211. data/lib/bel_parser/language/version2_0/return_types/abundance.rb +20 -0
  212. data/lib/bel_parser/language/version2_0/return_types/activity.rb +20 -0
  213. data/lib/bel_parser/language/version2_0/return_types/any.rb +74 -0
  214. data/lib/bel_parser/language/version2_0/return_types/biological_process.rb +17 -0
  215. data/lib/bel_parser/language/version2_0/return_types/complex_abundance.rb +17 -0
  216. data/lib/bel_parser/language/version2_0/return_types/fragment.rb +20 -0
  217. data/lib/bel_parser/language/version2_0/return_types/from_location.rb +20 -0
  218. data/lib/bel_parser/language/version2_0/return_types/fusion.rb +17 -0
  219. data/lib/bel_parser/language/version2_0/return_types/gene_abundance.rb +17 -0
  220. data/lib/bel_parser/language/version2_0/return_types/list.rb +17 -0
  221. data/lib/bel_parser/language/version2_0/return_types/location.rb +20 -0
  222. data/lib/bel_parser/language/version2_0/return_types/micro_rna_abundance.rb +17 -0
  223. data/lib/bel_parser/language/version2_0/return_types/molecular_activity.rb +20 -0
  224. data/lib/bel_parser/language/version2_0/return_types/pathology.rb +17 -0
  225. data/lib/bel_parser/language/version2_0/return_types/products.rb +17 -0
  226. data/lib/bel_parser/language/version2_0/return_types/protein_abundance.rb +17 -0
  227. data/lib/bel_parser/language/version2_0/return_types/protein_modification.rb +17 -0
  228. data/lib/bel_parser/language/version2_0/return_types/reactants.rb +17 -0
  229. data/lib/bel_parser/language/version2_0/return_types/rna_abundance.rb +17 -0
  230. data/lib/bel_parser/language/version2_0/return_types/to_location.rb +20 -0
  231. data/lib/bel_parser/language/version2_0/return_types/variant.rb +20 -0
  232. data/lib/bel_parser/language/version2_0/value_encodings/abundance.rb +21 -0
  233. data/lib/bel_parser/language/version2_0/value_encodings/activity.rb +21 -0
  234. data/lib/bel_parser/language/version2_0/value_encodings/any.rb +74 -0
  235. data/lib/bel_parser/language/version2_0/value_encodings/biological_process.rb +21 -0
  236. data/lib/bel_parser/language/version2_0/value_encodings/complex_abundance.rb +21 -0
  237. data/lib/bel_parser/language/version2_0/value_encodings/gene_abundance.rb +21 -0
  238. data/lib/bel_parser/language/version2_0/value_encodings/location.rb +21 -0
  239. data/lib/bel_parser/language/version2_0/value_encodings/micro_rna_abundance.rb +21 -0
  240. data/lib/bel_parser/language/version2_0/value_encodings/pathology.rb +21 -0
  241. data/lib/bel_parser/language/version2_0/value_encodings/protein_abundance.rb +21 -0
  242. data/lib/bel_parser/language/version2_0/value_encodings/protein_modification.rb +21 -0
  243. data/lib/bel_parser/language/version2_0/value_encodings/rna_abundance.rb +21 -0
  244. data/lib/bel_parser/mixin/line_continuator.rb +15 -0
  245. data/lib/bel_parser/mixin/line_mapping.rb +14 -0
  246. data/lib/bel_parser/parsers/ast/node.rb +987 -0
  247. data/lib/bel_parser/parsers/ast/sexp.rb +8 -0
  248. data/lib/bel_parser/parsers/bel_script.rb +5 -0
  249. data/lib/bel_parser/parsers/bel_script/define_annotation.rb +5920 -0
  250. data/lib/bel_parser/parsers/bel_script/define_annotation.rl +141 -0
  251. data/lib/bel_parser/parsers/bel_script/define_namespace.rb +1780 -0
  252. data/lib/bel_parser/parsers/bel_script/define_namespace.rl +121 -0
  253. data/lib/bel_parser/parsers/bel_script/set.rb +5008 -0
  254. data/lib/bel_parser/parsers/bel_script/set.rl +116 -0
  255. data/lib/bel_parser/parsers/bel_script/set_document.rb +7722 -0
  256. data/lib/bel_parser/parsers/bel_script/set_document.rl +97 -0
  257. data/lib/bel_parser/parsers/bel_script/unset.rb +706 -0
  258. data/lib/bel_parser/parsers/bel_script/unset.rl +95 -0
  259. data/lib/bel_parser/parsers/common.rb +5 -0
  260. data/lib/bel_parser/parsers/common/blank_line.rb +211 -0
  261. data/lib/bel_parser/parsers/common/blank_line.rl +81 -0
  262. data/lib/bel_parser/parsers/common/comment_line.rb +245 -0
  263. data/lib/bel_parser/parsers/common/comment_line.rl +97 -0
  264. data/lib/bel_parser/parsers/common/common.rb +7 -0
  265. data/lib/bel_parser/parsers/common/common.rl +13 -0
  266. data/lib/bel_parser/parsers/common/identifier.rb +289 -0
  267. data/lib/bel_parser/parsers/common/identifier.rl +106 -0
  268. data/lib/bel_parser/parsers/common/list.rb +2388 -0
  269. data/lib/bel_parser/parsers/common/list.rl +146 -0
  270. data/lib/bel_parser/parsers/common/string.rb +271 -0
  271. data/lib/bel_parser/parsers/common/string.rl +107 -0
  272. data/lib/bel_parser/parsers/expression.rb +7 -0
  273. data/lib/bel_parser/parsers/expression/comment.rb +239 -0
  274. data/lib/bel_parser/parsers/expression/comment.rl +97 -0
  275. data/lib/bel_parser/parsers/expression/nested_statement.rb +17802 -0
  276. data/lib/bel_parser/parsers/expression/nested_statement.rl +141 -0
  277. data/lib/bel_parser/parsers/expression/observed_term.rb +7291 -0
  278. data/lib/bel_parser/parsers/expression/observed_term.rl +92 -0
  279. data/lib/bel_parser/parsers/expression/parameter.rb +1506 -0
  280. data/lib/bel_parser/parsers/expression/parameter.rl +97 -0
  281. data/lib/bel_parser/parsers/expression/relationship.rb +254 -0
  282. data/lib/bel_parser/parsers/expression/relationship.rl +98 -0
  283. data/lib/bel_parser/parsers/expression/simple_statement.rb +10475 -0
  284. data/lib/bel_parser/parsers/expression/simple_statement.rl +112 -0
  285. data/lib/bel_parser/parsers/expression/term.rb +3989 -0
  286. data/lib/bel_parser/parsers/expression/term.rl +157 -0
  287. data/lib/bel_parser/parsers/line_parser.rb +92 -0
  288. data/lib/bel_parser/parsers/mixin/buffer.rb +10 -0
  289. data/lib/bel_parser/parsers/nonblocking_io_wrapper.rb +50 -0
  290. data/lib/bel_parser/parsers/serializer.rb +205 -0
  291. data/lib/bel_parser/quoting.rb +177 -0
  292. data/lib/bel_parser/resource/concept.rb +56 -0
  293. data/lib/bel_parser/resource/concept_scheme.rb +35 -0
  294. data/lib/bel_parser/resource/dataset.rb +34 -0
  295. data/lib/bel_parser/resource/eager_reader.rb +89 -0
  296. data/lib/bel_parser/resource/eager_sparql_reader.rb +51 -0
  297. data/lib/bel_parser/resource/file_resource.rb +21 -0
  298. data/lib/bel_parser/resource/file_resource_value.rb +24 -0
  299. data/lib/bel_parser/resource/jena_tdb_reader.rb +246 -0
  300. data/lib/bel_parser/resource/lru_cache.rb +111 -0
  301. data/lib/bel_parser/resource/lru_reader.rb +34 -0
  302. data/lib/bel_parser/resource/reader.rb +18 -0
  303. data/lib/bel_parser/resource/resource_url_reader.rb +181 -0
  304. data/lib/bel_parser/resource/sparql_reader.rb +179 -0
  305. data/lib/bel_parser/resource/value.rb +31 -0
  306. data/lib/bel_parser/script.rb +8 -0
  307. data/lib/bel_parser/script/filter.rb +35 -0
  308. data/lib/bel_parser/script/first_node.rb +21 -0
  309. data/lib/bel_parser/script/keywords.rb +32 -0
  310. data/lib/bel_parser/script/nanopub_mapper.rb +182 -0
  311. data/lib/bel_parser/script/parser.rb +51 -0
  312. data/lib/bel_parser/script/state/annotation_definition.rb +62 -0
  313. data/lib/bel_parser/script/state/bel_version.rb +36 -0
  314. data/lib/bel_parser/script/state/document_property.rb +29 -0
  315. data/lib/bel_parser/script/state/namespace_definition.rb +32 -0
  316. data/lib/bel_parser/script/state/set.rb +82 -0
  317. data/lib/bel_parser/script/state/unset.rb +46 -0
  318. data/lib/bel_parser/script/state_aggregator.rb +49 -0
  319. data/lib/bel_parser/script/state_function.rb +10 -0
  320. data/lib/bel_parser/script/syntax/expression_validation.rb +46 -0
  321. data/lib/bel_parser/script/syntax/invalid_regex_pattern.rb +49 -0
  322. data/lib/bel_parser/script/syntax/undefined_annotation.rb +61 -0
  323. data/lib/bel_parser/script/syntax/undefined_annotation_value.rb +84 -0
  324. data/lib/bel_parser/script/syntax/unresolvable_namespace.rb +54 -0
  325. data/lib/bel_parser/script/syntax/unsupported_bel_version.rb +59 -0
  326. data/lib/bel_parser/script/validator.rb +65 -0
  327. data/lib/bel_parser/vendor/ast.rb +17 -0
  328. data/lib/bel_parser/vendor/ast/node.rb +254 -0
  329. data/lib/bel_parser/vendor/ast/processor.rb +12 -0
  330. data/lib/bel_parser/vendor/ast/processor/mixin.rb +282 -0
  331. data/lib/bel_parser/vendor/ast/sexp.rb +30 -0
  332. metadata +390 -0
@@ -0,0 +1,32 @@
1
+ module BELParser
2
+ module Script
3
+ module Keyword
4
+ BEL_VERSION_STRING = 'BELVersion'.freeze
5
+ BEL_VERSION_REGEX = /\A#{BEL_VERSION_STRING}\Z/i
6
+
7
+ CITATION = 'Citation'.freeze
8
+ CITATION_REGEX = /\A#{CITATION}\Z/i
9
+
10
+ SUPPORT = 'Support'.freeze
11
+ SUPPORT_REGEX = /\A#{SUPPORT}\Z/i
12
+
13
+ IMPLICIT_ANNOTATIONS = ['Citation', 'Support', 'STATEMENT_GROUP']
14
+
15
+ def is_bel_version?(string)
16
+ string =~ BEL_VERSION_REGEX
17
+ end
18
+
19
+ def is_citation?(string)
20
+ string =~ CITATION_REGEX
21
+ end
22
+
23
+ def is_support?(string)
24
+ string =~ SUPPORT_REGEX
25
+ end
26
+
27
+ def is_implicit_annotation?(string)
28
+ IMPLICIT_ANNOTATIONS.any? { |annotation| string == annotation }
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,182 @@
1
+ require 'bel_parser/quoting'
2
+ require_relative '../parsers/serializer'
3
+
4
+ module BELParser
5
+ module Script
6
+ # NanopubMapper maps BEL Script AST nodes and state to aggregated
7
+ # nanopub hash objects.
8
+ class NanopubMapper
9
+ include BELParser::Parsers
10
+ include BELParser::Quoting
11
+
12
+ STATEMENT_TYPES = [
13
+ :simple_statement,
14
+ :nested_statement,
15
+ :observed_term
16
+ ]
17
+
18
+ DEFINITIONS = [:annotation_definitions, :namespace_definitions]
19
+
20
+ def initialize(ast_enum, omit_on_error = false, omit_on_warning = false)
21
+ @ast_enum = ast_enum
22
+ @omit_on_error = omit_on_error
23
+ @omit_on_warning = omit_on_warning
24
+ end
25
+
26
+ def each
27
+ if block_given?
28
+ @ast_enum.each do |(num, line, ast_node, state)|
29
+ next unless STATEMENT_TYPES.include?(ast_node.type)
30
+
31
+ errors = errors(ast_node)
32
+ warnings = warnings(ast_node)
33
+
34
+ if (@omit_on_error && !errors.empty?) ||
35
+ (@omit_on_warning && !warnings.empty?)
36
+
37
+ report(num, line, errors, warnings)
38
+ next
39
+ end
40
+
41
+ yield [num, line, ast_node, nanopub(ast_node, state)]
42
+ end
43
+ else
44
+ enum_for(:each)
45
+ end
46
+ end
47
+
48
+ def nanopub(ast_node, state)
49
+ {
50
+ bel_statement: serialize(ast_node),
51
+ citation: citation(state[:citation]),
52
+ support: support(state[:support]),
53
+ experiment_context: experiment_context(state[:annotations]),
54
+ references: references(*state.values_at(*DEFINITIONS)),
55
+ metadata: {
56
+ document_header: state[:document_properties] || nil
57
+ }
58
+ }
59
+ end
60
+
61
+ def report(num, line, errors, warnings)
62
+ warn "Line #{num}: #{line}"
63
+ errors.each do |err|
64
+ warn " #{err}"
65
+ end
66
+ warnings.each do |warn|
67
+ warn " #{warn}"
68
+ end
69
+ warn
70
+ end
71
+
72
+ def errors(ast_node)
73
+ ast_node
74
+ .syntax_errors
75
+ .select do |err|
76
+ err.is_a?(::BELParser::Language::Syntax::SyntaxError)
77
+ end.each(&:to_s)
78
+ end
79
+
80
+ def warnings(ast_node)
81
+ ast_node
82
+ .syntax_errors
83
+ .select do |warn|
84
+ warn.is_a?(::BELParser::Language::Syntax::SyntaxError) ||
85
+ warn.is_a?(::BELParser::Language::Semantics::SemanticsWarning)
86
+ end.each(&:to_s)
87
+ end
88
+
89
+ def citation(citation)
90
+ return nil unless citation
91
+ citation.each do |field, value|
92
+ citation[field] = unquote(value)
93
+ end
94
+ end
95
+
96
+ def support(support)
97
+ unquote(support)
98
+ end
99
+
100
+ def experiment_context(annotations)
101
+ (annotations || []).map do |name, value|
102
+ {
103
+ name: name,
104
+ value: unquote(value)
105
+ }
106
+ end
107
+ end
108
+
109
+ def references(anno_defs, ns_defs)
110
+ {
111
+ annotations: (anno_defs || []).map do |keyword, (type, domain)|
112
+ {
113
+ keyword: keyword,
114
+ type: type,
115
+ domain: domain_value(type, domain)
116
+ }
117
+ end,
118
+ namespaces: (ns_defs || []).map do |keyword, uri|
119
+ {
120
+ keyword: keyword,
121
+ uri: domain_value(:uri, uri)
122
+ }
123
+ end
124
+ }
125
+ end
126
+
127
+ def domain_value(type, domain)
128
+ case type
129
+ when :uri
130
+ domain.identifier
131
+ when :list
132
+ domain
133
+ else
134
+ domain.to_s
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
140
+
141
+ if __FILE__ == $PROGRAM_NAME
142
+ $LOAD_PATH.unshift(
143
+ File.join(File.expand_path(File.dirname(__FILE__)), '..', '..', '..', 'lib'))
144
+
145
+ require 'json'
146
+ require 'bel_parser'
147
+ require 'bel_parser/language'
148
+ require 'bel_parser/parsers/serializer'
149
+ require 'bel_parser/script'
150
+ require 'bel_parser/resource/resource_url_reader'
151
+ include BELParser::Script
152
+
153
+ rr = BELParser::Resource::ResourceURLReader.new(true)
154
+ namespaces = Hash[
155
+ ARGV.map do |ns|
156
+ prefix, identifier = ns.split('=')
157
+ dataset = rr.retrieve_resource(identifier)
158
+ dataset ? [prefix, dataset] : nil
159
+ end.compact
160
+ ]
161
+
162
+ initial_state = {
163
+ resource_reader: rr,
164
+ specification: BELParser::Language.specification('2.0'),
165
+ namespace_definitions: namespaces
166
+ }
167
+
168
+ io =
169
+ if ARGV.first
170
+ File.open(ARGV.first)
171
+ else
172
+ $stdin
173
+ end
174
+
175
+ nanopubs =
176
+ NanopubMapper.new(
177
+ Validator.new(
178
+ StateAggregator.new(
179
+ FirstNode.new(Filter.new(BELParser::ASTGenerator.new(io))),
180
+ initial_state))).each.map(&:last).to_a
181
+ puts JSON.dump(nanopubs)
182
+ end
@@ -0,0 +1,51 @@
1
+ require_relative '../ast_filter'
2
+ require_relative '../ast_generator'
3
+ require_relative '../parsers/common'
4
+ require_relative '../parsers/expression'
5
+ require_relative '../parsers/bel_script'
6
+
7
+ module BELParser
8
+ module Script
9
+ # Parser for BEL Script.
10
+ class Parser
11
+ include BELParser::Parsers::Common
12
+ include BELParser::Parsers::Expression
13
+ include BELParser::Parsers::BELScript
14
+
15
+ TYPES = [
16
+ :simple_statement,
17
+ :observed_term,
18
+ :nested_statement,
19
+ :annotation_definition,
20
+ :namespace_definition,
21
+ :set,
22
+ :document_property,
23
+ :unset,
24
+ :blank_line,
25
+ :comment_line
26
+ ]
27
+
28
+ def each(io)
29
+ if block_given?
30
+ filter = BELParser::ASTFilter.new(
31
+ BELParser::ASTGenerator.new(io),
32
+ *TYPES)
33
+ filter.each do |results|
34
+ yield results
35
+ end
36
+ else
37
+ enum_for(:each, io)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ if __FILE__ == $PROGRAM_NAME
45
+ BELParser::Script::Parser.new.each($stdin) do |(line_number, line, results)|
46
+ puts "#{line_number}: #{line}"
47
+ results.each do |ast|
48
+ puts ast.to_s(1)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,62 @@
1
+ require 'bel_parser/language'
2
+ require 'bel_parser/quoting'
3
+ require 'bel_parser/parsers/ast/node'
4
+ require 'concurrent/hash'
5
+ require_relative '../state_function'
6
+
7
+ module BELParser
8
+ module Script
9
+ module State
10
+ class AnnotationDefinition
11
+ extend StateFunction
12
+ extend BELParser::Quoting
13
+
14
+ TARGET_NODE = BELParser::Parsers::AST::AnnotationDefinition
15
+
16
+ def self.consume(ast_node, script_context)
17
+ return nil unless ast_node.is_a?(TARGET_NODE)
18
+ resource_reader = script_context[:resource_reader]
19
+
20
+ keyword, domain = ast_node.children
21
+ prefix = keyword.identifier.string_literal
22
+ case
23
+ when domain.list?
24
+ handle_list(prefix, domain.child, script_context)
25
+ when domain.url?
26
+ handle_url(prefix, domain.child, script_context)
27
+ when domain.pattern?
28
+ handle_pattern(prefix, domain.child, script_context)
29
+ end
30
+ end
31
+
32
+ def self.handle_list(prefix, list_node, script_context)
33
+ script_context[:annotation_definitions] ||= Concurrent::Hash.new
34
+ script_context[:annotation_definitions][prefix] = [
35
+ :list,
36
+ list_node.list_items.map do |li|
37
+ unquote(li.children[0].string_literal)
38
+ end
39
+ ]
40
+ end
41
+ private_class_method :handle_list
42
+
43
+ def self.handle_pattern(prefix, pattern_node, script_context)
44
+ script_context[:annotation_definitions] ||= Concurrent::Hash.new
45
+ script_context[:annotation_definitions][prefix] = [
46
+ :pattern,
47
+ unquote(pattern_node.string)
48
+ ]
49
+ end
50
+ private_class_method :handle_pattern
51
+
52
+ def self.handle_url(prefix, url_node, script_context)
53
+ url = unquote(url_node.string.string_literal)
54
+ dataset = script_context[:resource_reader].retrieve_resource(url)
55
+ script_context[:annotation_definitions] ||= Concurrent::Hash.new
56
+ script_context[:annotation_definitions][prefix] = [:uri, dataset]
57
+ end
58
+ private_class_method :handle_url
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,36 @@
1
+ require 'bel_parser/language'
2
+ require 'bel_parser/parsers/ast/node'
3
+ require 'bel_parser/quoting'
4
+ require 'concurrent/hash'
5
+ require_relative '../keywords'
6
+ require_relative '../state_function'
7
+
8
+ module BELParser
9
+ module Script
10
+ module State
11
+ class BELVersion
12
+ extend StateFunction
13
+ extend BELParser::Quoting
14
+ extend Keyword
15
+
16
+ TARGET_NODE = BELParser::Parsers::AST::DocumentProperty
17
+ DEFAULT_BEL_VERSION = '2.0'
18
+
19
+ def self.consume(ast_node, script_context)
20
+ return unless ast_node.is_a?(TARGET_NODE)
21
+ name, value = ast_node.children
22
+ name_string = name.identifier.string_literal
23
+ return unless is_bel_version?(name_string)
24
+
25
+ value_string = unquote(value.children[0].string_literal)
26
+ begin
27
+ spec = BELParser::Language.specification(value_string)
28
+ rescue ArgumentError
29
+ spec = BELParser::Language.specification(DEFAULT_BEL_VERSION)
30
+ end
31
+ script_context[:specification] = spec
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,29 @@
1
+ require 'bel_parser/parsers/ast/node'
2
+ require 'bel_parser/quoting'
3
+ require 'concurrent/hash'
4
+ require_relative '../state_function'
5
+
6
+ module BELParser
7
+ module Script
8
+ module State
9
+ class DocumentProperty
10
+ extend StateFunction
11
+ extend BELParser::Quoting
12
+
13
+ TARGET_NODE = BELParser::Parsers::AST::DocumentProperty
14
+
15
+ def self.consume(ast_node, script_context)
16
+ return nil unless ast_node.is_a?(TARGET_NODE)
17
+ hash = script_context[:document_properties] ||= Concurrent::Hash.new
18
+
19
+ name, value = ast_node.children
20
+ if name && value
21
+ name_string = name.identifier.string_literal
22
+ value_string = value.children[0].string_literal
23
+ hash[name_string] = unquote(value_string)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,32 @@
1
+ require 'bel_parser/language'
2
+ require 'bel_parser/quoting'
3
+ require 'bel_parser/parsers/ast/node'
4
+ require 'concurrent/hash'
5
+ require_relative '../state_function'
6
+
7
+ module BELParser
8
+ module Script
9
+ module State
10
+ class NamespaceDefinition
11
+ extend StateFunction
12
+ extend BELParser::Quoting
13
+
14
+ TARGET_NODE = BELParser::Parsers::AST::NamespaceDefinition
15
+
16
+ def self.consume(ast_node, script_context)
17
+ return nil unless ast_node.is_a?(TARGET_NODE)
18
+ resource_reader = script_context[:resource_reader]
19
+
20
+ keyword, domain = ast_node.children
21
+ if domain.url?
22
+ prefix = keyword.identifier.string_literal
23
+ url = unquote(domain.child.string.string_literal)
24
+ dataset = resource_reader.retrieve_resource(url)
25
+ script_context[:namespace_definitions] ||= Concurrent::Hash.new
26
+ script_context[:namespace_definitions][prefix] = dataset
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,82 @@
1
+ require 'bel_parser/language'
2
+ require 'bel_parser/quoting'
3
+ require 'bel_parser/parsers/ast/node'
4
+ require 'concurrent/hash'
5
+ require_relative '../keywords'
6
+ require_relative '../state_function'
7
+
8
+ module BELParser
9
+ module Script
10
+ module State
11
+ class Set
12
+ extend StateFunction
13
+ extend BELParser::Script::Keyword
14
+ extend BELParser::Quoting
15
+
16
+ TARGET_NODE = BELParser::Parsers::AST::Set
17
+ LIST_NODE = BELParser::Parsers::AST::List
18
+ FIELDS = %w(type name id date authors comment)
19
+
20
+ def self.consume(ast_node, script_context)
21
+ return nil unless ast_node.is_a?(TARGET_NODE)
22
+ name, value = ast_node.children
23
+ name_string = name.identifier.string_literal
24
+ value_node = ast_node.value.children[0]
25
+ case
26
+ when is_citation?(name_string)
27
+ handle_citation(value_node, script_context)
28
+ when is_support?(name_string)
29
+ handle_support(value_node, script_context)
30
+ when value_node.is_a?(LIST_NODE)
31
+ value_node
32
+ .list_items.map { |li| li.children[0].string_literal }
33
+ .each do |string|
34
+ handle_annotation(name_string, string, script_context)
35
+ end
36
+ else
37
+ value_string = value_node.string_literal
38
+ case name_string
39
+ when /\ASTATEMENT_GROUP\Z/
40
+ handle_statement_group(value_string, script_context)
41
+ else
42
+ handle_annotation(name_string, value_string, script_context)
43
+ end
44
+ end
45
+ end
46
+
47
+ def self.handle_citation(value_node, script_context)
48
+ if value_node.is_a?(LIST_NODE)
49
+ script_context[:citation] =
50
+ Hash[
51
+ FIELDS.zip(
52
+ value_node
53
+ .list_items
54
+ .map { |li| li.children[0].string_literal })
55
+ ]
56
+ end
57
+ end
58
+
59
+ def self.handle_support(value_node, script_context)
60
+ script_context[:support] = value_node.string_literal
61
+ end
62
+
63
+ def self.handle_annotation(name, value, script_context)
64
+ # add to annotation state
65
+ script_context[:annotations] ||= Concurrent::Hash.new
66
+ script_context[:annotations][name] = value
67
+ end
68
+ private_class_method :handle_annotation
69
+
70
+ def self.handle_statement_group(value, script_context)
71
+ script_context[:statement_group] = value
72
+
73
+ # clear annotation state
74
+ script_context[:annotations] ||= Concurrent::Hash.new
75
+ script_context[:annotations].clear
76
+ script_context[:citation] = nil
77
+ end
78
+ private_class_method :handle_statement_group
79
+ end
80
+ end
81
+ end
82
+ end