bel_parser 1.0.0.alpha.15 → 1.0.0.alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +11 -0
- data/VERSION +1 -1
- data/bin/bel_script_reader +48 -16
- data/lib/bel_parser/language/expression_validator.rb +1 -1
- data/lib/bel_parser/language/semantics_ast.rb +7 -2
- data/lib/bel_parser/language/syntax/undefined_namespace_value.rb +3 -1
- data/lib/bel_parser/script/keywords.rb +12 -0
- data/lib/bel_parser/script/state/bel_version.rb +3 -2
- data/lib/bel_parser/script/syntax/unsupported_bel_version.rb +3 -2
- data/lib/bel_parser/script.rb +5 -0
- data/lib/bel_parser.rb +3 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e827bc3f99b0c849e302bd2f32debd794abf423
|
4
|
+
data.tar.gz: e18d99921f436e6eb6d684230252d3c213d470da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c25495a94d389796b6a6f086527fc1c0ce6d6a6850966eaa169a6961d970f853ff03ec201022fd86609011ed0a3dfd76670e88ef4afdd18c749b43a02aa56ab
|
7
|
+
data.tar.gz: a3fbb92d0168fe0d7373ba01cc9a986f8127be586aefe31d3a93117ff72506ea406daa073979fbbaa5af5ae98360858ed1edf1289550a485c950fb42736894a4
|
data/README.md
CHANGED
@@ -4,6 +4,17 @@ Parser for BEL expressions and the BEL Script document format.
|
|
4
4
|
|
5
5
|
### Installation
|
6
6
|
|
7
|
+
gem install bel_parser --pre
|
8
|
+
|
7
9
|
### Getting Started
|
8
10
|
|
11
|
+
Two tools are available to try out:
|
12
|
+
1) bel_script_reader - will read a BEL Script with a specified BEL version and not any warning or errors with the script
|
13
|
+
|
14
|
+
2) bel2_validator - will read in lines and validate the BEL Statements
|
15
|
+
|
16
|
+
Example script using bel_parser module
|
17
|
+
|
18
|
+
examples/upgrade_kinase.rb
|
19
|
+
|
9
20
|
### Design
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.0.alpha.
|
1
|
+
1.0.0.alpha.16
|
data/bin/bel_script_reader
CHANGED
@@ -2,27 +2,51 @@
|
|
2
2
|
$LOAD_PATH.unshift(
|
3
3
|
File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib'))
|
4
4
|
|
5
|
-
|
5
|
+
require 'optparse'
|
6
|
+
require 'bel_parser'
|
7
|
+
require 'bel_parser/resource/resource_file_reader'
|
8
|
+
|
9
|
+
options = {
|
10
|
+
spec: BELParser::Language.specification(
|
11
|
+
BELParser::Language.latest_supported_version)
|
12
|
+
}
|
13
|
+
OptionParser.new do |opts|
|
14
|
+
opts.banner = <<-USAGE.gsub(/^ {4}/, '')
|
15
|
+
Validates BEL Script with support for multiple BEL specifications.
|
16
|
+
|
17
|
+
Read from a BEL file.
|
18
|
+
usage: #$PROGRAM_NAME --file [FILE]
|
6
19
|
|
7
|
-
|
8
|
-
|
9
|
-
$stderr.puts <<-USAGE.gsub(/ {4}/, '')
|
10
|
-
usage: #{program} [BEL specification version]
|
20
|
+
Read from standard input.
|
21
|
+
usage: #$PROGRAM_NAME
|
11
22
|
USAGE
|
12
|
-
exit 1
|
13
|
-
end
|
14
23
|
|
24
|
+
opts.on('-f', '--file FILE', 'BEL script file to read.') do |bel|
|
25
|
+
options[:file] = bel
|
26
|
+
end
|
27
|
+
|
28
|
+
opts.on(
|
29
|
+
'-s',
|
30
|
+
'--specification VERSION',
|
31
|
+
'BEL specification version (e.g. 1.0, 2.0)') do |spec|
|
32
|
+
|
33
|
+
unless BELParser::Language.defines_version?(spec)
|
34
|
+
$stderr.puts %(Invalid BEL specification "#{spec}")
|
35
|
+
exit 1
|
36
|
+
end
|
37
|
+
|
38
|
+
options[:spec] = BELParser::Language.specification(spec)
|
39
|
+
end
|
40
|
+
end.parse!
|
41
|
+
|
42
|
+
file, spec = options.values_at(:file, :spec)
|
15
43
|
io =
|
16
44
|
if file
|
17
|
-
File.open(
|
45
|
+
File.open(file, external_encoding: 'UTF-8')
|
18
46
|
else
|
19
47
|
$stdin
|
20
48
|
end
|
21
49
|
|
22
|
-
require 'bel_parser/language'
|
23
|
-
require 'bel_parser/script/validator'
|
24
|
-
require 'bel_parser/resource/resource_file_reader'
|
25
|
-
|
26
50
|
def select(list, cls)
|
27
51
|
list.select { |item| item.is_a?(cls) }
|
28
52
|
end
|
@@ -46,11 +70,19 @@ SYN_ERR = BELParser::Language::Syntax::SyntaxError
|
|
46
70
|
SYN_WARN = BELParser::Language::Syntax::SyntaxWarning
|
47
71
|
SEM_WARN = BELParser::Language::Semantics::SemanticsWarning
|
48
72
|
|
73
|
+
rr = BELParser::Resource::ResourceFileReader.new
|
74
|
+
namespaces = Hash[
|
75
|
+
ARGV.map do |ns|
|
76
|
+
prefix, identifier = ns.split('=')
|
77
|
+
dataset = rr.retrieve_resource(identifier)
|
78
|
+
dataset ? [prefix, dataset] : nil
|
79
|
+
end.compact
|
80
|
+
]
|
81
|
+
|
49
82
|
initial_state = {
|
50
|
-
resource_reader:
|
51
|
-
specification:
|
52
|
-
|
53
|
-
)
|
83
|
+
resource_reader: BELParser::Resource::ResourceFileReader.new,
|
84
|
+
specification: spec,
|
85
|
+
namespace_definitions: namespaces
|
54
86
|
}
|
55
87
|
|
56
88
|
BELParser::Script::Validator
|
@@ -10,7 +10,7 @@ module BELParser
|
|
10
10
|
class ExpressionValidator
|
11
11
|
def initialize(spec, namespaces, resource_reader)
|
12
12
|
@spec = spec
|
13
|
-
@namespaces = namespaces
|
13
|
+
@namespaces = namespaces || {}
|
14
14
|
@syntax_functions = Syntax.syntax_functions
|
15
15
|
@semantics_functions = Semantics.semantics_functions
|
16
16
|
@transform =
|
@@ -670,8 +670,13 @@ module BELParser
|
|
670
670
|
def match(identifier, spec)
|
671
671
|
return success(identifier, spec) if return_types.include?(:*)
|
672
672
|
|
673
|
-
|
674
|
-
|
673
|
+
function = spec.function(identifier.string_literal.to_sym)
|
674
|
+
return invalid_return_type_warning(
|
675
|
+
identifier,
|
676
|
+
spec,
|
677
|
+
return_types) unless function
|
678
|
+
|
679
|
+
if return_types.any? { |rt| function.return_type <= rt }
|
675
680
|
success(identifier, spec)
|
676
681
|
else
|
677
682
|
invalid_return_type_warning(identifier, spec, return_types)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'bel_parser/parsers/ast/node'
|
2
|
+
require 'bel_parser/quoting'
|
2
3
|
|
3
4
|
module BELParser
|
4
5
|
module Language
|
@@ -6,6 +7,7 @@ module BELParser
|
|
6
7
|
# Undefined namespace value finds values that are missing from their
|
7
8
|
# purported namespaces.
|
8
9
|
class UndefinedNamespaceValue
|
10
|
+
extend BELParser::Quoting
|
9
11
|
include SyntaxFunction
|
10
12
|
|
11
13
|
private_class_method :new
|
@@ -15,7 +17,7 @@ module BELParser
|
|
15
17
|
return nil unless value_node.namespace
|
16
18
|
|
17
19
|
unless value_node.namespace_value
|
18
|
-
value = value_node.children[0].string_literal
|
20
|
+
value = unquote(value_node.children[0].string_literal)
|
19
21
|
UndefinedNamespaceValueWarning.new(value_node, spec, value)
|
20
22
|
end
|
21
23
|
end
|
@@ -2,6 +2,7 @@ require 'bel_parser/language'
|
|
2
2
|
require 'bel_parser/parsers/ast/node'
|
3
3
|
require 'bel_parser/quoting'
|
4
4
|
require 'concurrent/hash'
|
5
|
+
require_relative '../keywords'
|
5
6
|
require_relative '../state_function'
|
6
7
|
|
7
8
|
module BELParser
|
@@ -10,16 +11,16 @@ module BELParser
|
|
10
11
|
class BELVersion
|
11
12
|
extend StateFunction
|
12
13
|
extend BELParser::Quoting
|
14
|
+
extend Keyword
|
13
15
|
|
14
16
|
TARGET_NODE = BELParser::Parsers::AST::DocumentProperty
|
15
|
-
BEL_VERSION_REGEX = /#{Regexp.escape('bel_version')}/i
|
16
17
|
DEFAULT_BEL_VERSION = '2.0'
|
17
18
|
|
18
19
|
def self.consume(ast_node, script_context)
|
19
20
|
return unless ast_node.is_a?(TARGET_NODE)
|
20
21
|
name, value = ast_node.children
|
21
22
|
name_string = name.identifier.string_literal
|
22
|
-
return unless name_string
|
23
|
+
return unless is_bel_version?(name_string)
|
23
24
|
|
24
25
|
value_string = unquote(value.children[0].string_literal)
|
25
26
|
begin
|
@@ -4,6 +4,7 @@ require 'bel_parser/language/syntax_error'
|
|
4
4
|
require 'bel_parser/quoting'
|
5
5
|
require 'bel_parser/parsers/ast/node'
|
6
6
|
require 'concurrent/hash'
|
7
|
+
require_relative '../keywords'
|
7
8
|
|
8
9
|
module BELParser
|
9
10
|
module Script
|
@@ -11,15 +12,15 @@ module BELParser
|
|
11
12
|
class UnsupportedBELVersion
|
12
13
|
extend BELParser::Language::Syntax::SyntaxFunction
|
13
14
|
extend BELParser::Quoting
|
15
|
+
extend Keyword
|
14
16
|
|
15
17
|
TARGET_NODE = BELParser::Parsers::AST::DocumentProperty
|
16
|
-
BEL_VERSION_REGEX = /#{Regexp.escape('bel_version')}/i
|
17
18
|
|
18
19
|
def self.map(ast_node, script_context)
|
19
20
|
return nil unless ast_node.is_a?(TARGET_NODE)
|
20
21
|
name, value = ast_node.children
|
21
22
|
name_string = name.identifier.string_literal
|
22
|
-
return nil unless name_string
|
23
|
+
return nil unless is_bel_version?(name_string)
|
23
24
|
|
24
25
|
value_string = unquote(value.children[0].string_literal)
|
25
26
|
begin
|
data/lib/bel_parser.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bel_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.alpha.
|
4
|
+
version: 1.0.0.alpha.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony Bargnesi
|
@@ -312,6 +312,8 @@ files:
|
|
312
312
|
- lib/bel_parser/resource/resource_file_reader.rb
|
313
313
|
- lib/bel_parser/resource/sparql_reader.rb
|
314
314
|
- lib/bel_parser/resource/value.rb
|
315
|
+
- lib/bel_parser/script.rb
|
316
|
+
- lib/bel_parser/script/keywords.rb
|
315
317
|
- lib/bel_parser/script/parser.rb
|
316
318
|
- lib/bel_parser/script/state/annotation_definition.rb
|
317
319
|
- lib/bel_parser/script/state/bel_version.rb
|