obo_parser 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/lib/lexer.rb CHANGED
@@ -1,4 +1,4 @@
1
- class OboFile::Lexer
1
+ class OboParser::Lexer
2
2
  attr_reader :input
3
3
  def initialize(input)
4
4
  @input = input
@@ -17,7 +17,7 @@ class OboFile::Lexer
17
17
  token = read_next_token(token_class)
18
18
  @next_token = nil
19
19
  if token.class != token_class
20
- raise(OboFile::ParseError,"expected #{token_class.to_s} but received #{token.class.to_s} at #{@input[0..10]}...", caller)
20
+ raise(OboParser::ParseError,"expected #{token_class.to_s} but received #{token.class.to_s} at #{@input[0..10]}...", caller)
21
21
  else
22
22
  return token
23
23
  end
@@ -34,13 +34,13 @@ class OboFile::Lexer
34
34
  return @next_token
35
35
  else
36
36
  # now check all the tokens for a match
37
- OboFile::Tokens.obo_file_token_list.each {|t|
37
+ OboParser::Tokens.obo_file_token_list.each {|t|
38
38
  return @next_token if match(t)
39
39
  }
40
40
  end
41
41
  # no match, either end of string or lex-error
42
42
  if @input != ''
43
- raise(OboFile::ParseError, "Lex Error, unknown token at #{@input[0..10]}...", caller)
43
+ raise(OboParser::ParseError, "Lex Error, unknown token at #{@input[0..10]}...", caller)
44
44
  else
45
45
  return nil
46
46
  end
@@ -4,14 +4,14 @@
4
4
 
5
5
  # outstanding issues:
6
6
 
7
- module OboFile
7
+ module OboParser
8
8
 
9
9
  require File.expand_path(File.join(File.dirname(__FILE__), 'tokens'))
10
10
  require File.expand_path(File.join(File.dirname(__FILE__), 'parser'))
11
11
  require File.expand_path(File.join(File.dirname(__FILE__), 'lexer'))
12
12
 
13
13
 
14
- class OboFile # Node
14
+ class OboParser # Node
15
15
  attr_accessor :terms, :typedefs
16
16
 
17
17
  def initialize
@@ -65,17 +65,17 @@ class OboFile # Node
65
65
  end
66
66
 
67
67
 
68
- class OboFileBuilder
68
+ class OboParserBuilder
69
69
  def initialize
70
- @of = OboFile.new
70
+ @of = OboParser.new
71
71
  end
72
72
 
73
73
  def add_term(tags)
74
- @of.terms.push OboFile::Term.new(tags)
74
+ @of.terms.push OboParser::Term.new(tags)
75
75
  end
76
76
 
77
77
  def add_typedef(tags)
78
- @of.typedefs.push OboFile::Typedef.new(tags)
78
+ @of.typedefs.push OboParser::Typedef.new(tags)
79
79
  end
80
80
 
81
81
  def obo_file
@@ -92,13 +92,13 @@ end # end module
92
92
  # the actual method
93
93
  def parse_obo_file(input)
94
94
  @input = input
95
- raise(OboFile::ParseError, "Nothing passed to parse!") if !@input || @input.size == 0
95
+ raise(OboParser::ParseError, "Nothing passed to parse!") if !@input || @input.size == 0
96
96
 
97
97
  @input.gsub!(/(\s*?![^!'"]*?\n)/i, "\n") # strip out comments - this is a kludge, likely needs fixing!!
98
98
 
99
- builder = OboFile::OboFileBuilder.new
100
- lexer = OboFile::Lexer.new(@input)
101
- OboFile::Parser.new(lexer, builder).parse_file
99
+ builder = OboParser::OboParserBuilder.new
100
+ lexer = OboParser::Lexer.new(@input)
101
+ OboParser::Parser.new(lexer, builder).parse_file
102
102
  return builder.obo_file
103
103
  end
104
104
 
data/lib/parser.rb CHANGED
@@ -1,4 +1,4 @@
1
- class OboFile::Parser
1
+ class OboParser::Parser
2
2
  def initialize(lexer, builder)
3
3
  @lexer = lexer
4
4
  @builder = builder
@@ -6,45 +6,45 @@ class OboFile::Parser
6
6
 
7
7
  def parse_file
8
8
  # toss everything right now, we just want the terms
9
- while !@lexer.peek(OboFile::Tokens::Term)
10
- @lexer.pop(OboFile::Tokens::TagValuePair)
9
+ while !@lexer.peek(OboParser::Tokens::Term)
10
+ @lexer.pop(OboParser::Tokens::TagValuePair)
11
11
  end
12
12
 
13
13
  i = 0
14
- while !@lexer.peek(OboFile::Tokens::Typedef) && !@lexer.peek(OboFile::Tokens::EndOfFile)
15
- raise OboFile::ParseError, "infinite loop in Terms" if i > 10000000
14
+ while !@lexer.peek(OboParser::Tokens::Typedef) && !@lexer.peek(OboParser::Tokens::EndOfFile)
15
+ raise OboParser::ParseError, "infinite loop in Terms" if i > 10000000
16
16
  parse_term
17
17
  i += 1
18
18
  end
19
19
 
20
20
  i = 0
21
- while @lexer.peek(OboFile::Tokens::Typedef)
22
- raise OboFile::ParseError,"infinite loop in Terms" if i > 1000000 # there aren't that many words!
21
+ while @lexer.peek(OboParser::Tokens::Typedef)
22
+ raise OboParser::ParseError,"infinite loop in Terms" if i > 1000000 # there aren't that many words!
23
23
  parse_typedef
24
24
  i += 1
25
25
  end
26
26
  end
27
27
 
28
28
  def parse_term
29
- t = @lexer.pop(OboFile::Tokens::Term)
29
+ t = @lexer.pop(OboParser::Tokens::Term)
30
30
  tags = []
31
- while !@lexer.peek(OboFile::Tokens::Term) && !@lexer.peek(OboFile::Tokens::Typedef) && !@lexer.peek(OboFile::Tokens::EndOfFile)
32
- if @lexer.peek(OboFile::Tokens::TagValuePair)
33
- t = @lexer.pop(OboFile::Tokens::TagValuePair)
31
+ while !@lexer.peek(OboParser::Tokens::Term) && !@lexer.peek(OboParser::Tokens::Typedef) && !@lexer.peek(OboParser::Tokens::EndOfFile)
32
+ if @lexer.peek(OboParser::Tokens::TagValuePair)
33
+ t = @lexer.pop(OboParser::Tokens::TagValuePair)
34
34
  tags.push [t.tag, t.value]
35
35
  else
36
- raise(OboFile::ParseError, "Expected a tag-value pair, but did not get one following this tag/value: [#{t.tag} / #{t.value}]")
36
+ raise(OboParser::ParseError, "Expected a tag-value pair, but did not get one following this tag/value: [#{t.tag} / #{t.value}]")
37
37
  end
38
38
  end
39
39
  @builder.add_term(tags)
40
40
  end
41
41
 
42
42
  def parse_typedef
43
- @lexer.pop(OboFile::Tokens::Typedef)
43
+ @lexer.pop(OboParser::Tokens::Typedef)
44
44
  # @t = @builder.stub_typdef
45
45
  tags = []
46
- while !@lexer.peek(OboFile::Tokens::Typedef) && @lexer.peek(OboFile::Tokens::TagValuePair)
47
- t = @lexer.pop(OboFile::Tokens::TagValuePair)
46
+ while !@lexer.peek(OboParser::Tokens::Typedef) && @lexer.peek(OboParser::Tokens::TagValuePair)
47
+ t = @lexer.pop(OboParser::Tokens::TagValuePair)
48
48
  tags.push [t.tag, t.value]
49
49
  end
50
50
  @builder.add_typedef(tags)
data/lib/tokens.rb CHANGED
@@ -1,4 +1,4 @@
1
- module OboFile::Tokens
1
+ module OboParser::Tokens
2
2
 
3
3
  class Token
4
4
  # this allows access the the class attribute regexp, without using a class variable
@@ -147,13 +147,13 @@ module OboFile::Tokens
147
147
  # this list also defines priority, i.e. if tokens have overlap (which they shouldn't!!) then the earlier indexed token will match first
148
148
  def self.obo_file_token_list
149
149
  [
150
- OboFile::Tokens::Term,
151
- OboFile::Tokens::Typedef,
152
- OboFile::Tokens::TagValuePair,
153
- OboFile::Tokens::NameValuePair, # not implemented
154
- OboFile::Tokens::Dbxref, # not implemented
155
- OboFile::Tokens::LBracket,
156
- OboFile::Tokens::EndOfFile
150
+ OboParser::Tokens::Term,
151
+ OboParser::Tokens::Typedef,
152
+ OboParser::Tokens::TagValuePair,
153
+ OboParser::Tokens::NameValuePair, # not implemented
154
+ OboParser::Tokens::Dbxref, # not implemented
155
+ OboParser::Tokens::LBracket,
156
+ OboParser::Tokens::EndOfFile
157
157
  ]
158
158
  end
159
159
 
data/obo_parser.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{obo_parser}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["mjy"]
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
28
28
  "init.rb",
29
29
  "install.rb",
30
30
  "lib/lexer.rb",
31
- "lib/obo_file.rb",
31
+ "lib/obo_parser.rb",
32
32
  "lib/parser.rb",
33
33
  "lib/tokens.rb",
34
34
  "obo_parser.gemspec",
@@ -2,7 +2,7 @@ require 'test/unit'
2
2
  require 'rubygems'
3
3
  require 'ruby-debug'
4
4
 
5
- require File.expand_path(File.join(File.dirname(__FILE__), '../lib/obo_file'))
5
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/obo_parser'))
6
6
 
7
7
  class OboParserTest < Test::Unit::TestCase
8
8
  def test_truth
@@ -10,9 +10,9 @@ class OboParserTest < Test::Unit::TestCase
10
10
  end
11
11
  end
12
12
 
13
- class Test_OboFileBuilder < Test::Unit::TestCase
13
+ class Test_OboParserBuilder < Test::Unit::TestCase
14
14
  def test_builder
15
- b = OboFile::OboFileBuilder.new
15
+ b = OboParser::OboParserBuilder.new
16
16
  end
17
17
  end
18
18
 
@@ -30,16 +30,16 @@ end
30
30
  class Test_Lexer < Test::Unit::TestCase
31
31
 
32
32
  def test_term
33
- lexer = OboFile::Lexer.new("[Term]")
34
- assert lexer.pop(OboFile::Tokens::Term)
33
+ lexer = OboParser::Lexer.new("[Term]")
34
+ assert lexer.pop(OboParser::Tokens::Term)
35
35
  end
36
36
 
37
37
  def test_end_of_file
38
- lexer = OboFile::Lexer.new(" \n\n")
39
- assert lexer.pop(OboFile::Tokens::EndOfFile)
38
+ lexer = OboParser::Lexer.new(" \n\n")
39
+ assert lexer.pop(OboParser::Tokens::EndOfFile)
40
40
 
41
- lexer = OboFile::Lexer.new("\n")
42
- assert lexer.pop(OboFile::Tokens::EndOfFile)
41
+ lexer = OboParser::Lexer.new("\n")
42
+ assert lexer.pop(OboParser::Tokens::EndOfFile)
43
43
  end
44
44
 
45
45
  def test_parse_term_stanza
@@ -49,37 +49,37 @@ class Test_Lexer < Test::Unit::TestCase
49
49
  def: "A chromatic scalar-circular quality inhering in an object that manifests in an observer by virtue of the dominant wavelength of the visible light; may be subject to fiat divisions, typically into 7 or 8 spectra." [PATOC:cjm]
50
50
  subset: attribute_slim
51
51
  is_a: PATO:0001301'
52
- lexer = OboFile::Lexer.new(input)
53
- assert t = lexer.pop(OboFile::Tokens::TagValuePair)
52
+ lexer = OboParser::Lexer.new(input)
53
+ assert t = lexer.pop(OboParser::Tokens::TagValuePair)
54
54
  assert_equal 'id', t.tag
55
55
  assert_equal 'PATO:0000015', t.value
56
56
 
57
- assert t = lexer.pop(OboFile::Tokens::TagValuePair)
57
+ assert t = lexer.pop(OboParser::Tokens::TagValuePair)
58
58
  assert_equal 'name', t.tag
59
59
  assert_equal 'color hue', t.value
60
60
 
61
- assert t = lexer.pop(OboFile::Tokens::TagValuePair)
61
+ assert t = lexer.pop(OboParser::Tokens::TagValuePair)
62
62
  assert_equal 'def', t.tag
63
63
  assert_equal '"A chromatic scalar-circular quality inhering in an object that manifests in an observer by virtue of the dominant wavelength of the visible light; may be subject to fiat divisions, typically into 7 or 8 spectra." [PATOC:cjm]', t.value
64
64
 
65
- assert t = lexer.pop(OboFile::Tokens::TagValuePair)
65
+ assert t = lexer.pop(OboParser::Tokens::TagValuePair)
66
66
  assert_equal 'subset', t.tag
67
67
  assert_equal 'attribute_slim', t.value
68
68
 
69
- assert t = lexer.pop(OboFile::Tokens::TagValuePair)
69
+ assert t = lexer.pop(OboParser::Tokens::TagValuePair)
70
70
  assert_equal 'is_a', t.tag
71
71
  assert_equal 'PATO:0001301', t.value
72
72
  end
73
73
 
74
74
 
75
75
  def test_parse_term
76
- lexer = OboFile::Lexer.new("[Term]")
77
- assert lexer.pop(OboFile::Tokens::Term)
76
+ lexer = OboParser::Lexer.new("[Term]")
77
+ assert lexer.pop(OboParser::Tokens::Term)
78
78
  end
79
79
 
80
80
  def test_tagvaluepair
81
- lexer = OboFile::Lexer.new("id: PATO:0000179")
82
- assert lexer.pop(OboFile::Tokens::TagValuePair)
81
+ lexer = OboParser::Lexer.new("id: PATO:0000179")
82
+ assert lexer.pop(OboParser::Tokens::TagValuePair)
83
83
  end
84
84
  end
85
85
 
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - mjy
@@ -39,7 +39,7 @@ files:
39
39
  - init.rb
40
40
  - install.rb
41
41
  - lib/lexer.rb
42
- - lib/obo_file.rb
42
+ - lib/obo_parser.rb
43
43
  - lib/parser.rb
44
44
  - lib/tokens.rb
45
45
  - obo_parser.gemspec