Class: OboParser::Parser
- Inherits:
-
Object
- Object
- OboParser::Parser
- Defined in:
- lib/parser.rb
Instance Method Summary collapse
-
#initialize(lexer, builder) ⇒ Parser
constructor
A new instance of Parser.
- #parse_file ⇒ Object
- #parse_term ⇒ Object
- #parse_typedef ⇒ Object
Constructor Details
#initialize(lexer, builder) ⇒ Parser
Returns a new instance of Parser.
2 3 4 5 |
# File 'lib/parser.rb', line 2 def initialize(lexer, builder) @lexer = lexer @builder = builder end |
Instance Method Details
#parse_file ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/parser.rb', line 7 def parse_file # toss everything right now, we just want the terms while !@lexer.peek(OboParser::Tokens::Term) @lexer.pop(OboParser::Tokens::TagValuePair) end i = 0 while !@lexer.peek(OboParser::Tokens::Typedef) && !@lexer.peek(OboParser::Tokens::EndOfFile) raise OboParser::ParseError, "infinite loop in Terms" if i > 10000000 parse_term i += 1 end i = 0 while @lexer.peek(OboParser::Tokens::Typedef) raise OboParser::ParseError,"infinite loop in Terms" if i > 1000000 # there aren't that many words! parse_typedef i += 1 end end |
#parse_term ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/parser.rb', line 28 def parse_term t = @lexer.pop(OboParser::Tokens::Term) = [] while !@lexer.peek(OboParser::Tokens::Term) && !@lexer.peek(OboParser::Tokens::Typedef) && !@lexer.peek(OboParser::Tokens::EndOfFile) if @lexer.peek(OboParser::Tokens::TagValuePair) t = @lexer.pop(OboParser::Tokens::TagValuePair) .push [t.tag, t.value] else raise(OboParser::ParseError, "Expected a tag-value pair, but did not get one following this tag/value: [#{t.tag} / #{t.value}]") end end @builder.add_term() end |
#parse_typedef ⇒ Object
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/parser.rb', line 42 def parse_typedef @lexer.pop(OboParser::Tokens::Typedef) # @t = @builder.stub_typdef = [] while !@lexer.peek(OboParser::Tokens::Typedef) && @lexer.peek(OboParser::Tokens::TagValuePair) t = @lexer.pop(OboParser::Tokens::TagValuePair) .push [t.tag, t.value] end @builder.add_typedef() end |