bel_parser 1.0.0.alpha.15 → 1.0.0.alpha.16
Sign up to get free protection for your applications and to get access to all the features.
- 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
|