class OboParser::Parser
Public Class Methods
new(lexer, builder)
click to toggle source
# File lib/obo_parser/parser.rb, line 2 def initialize(lexer, builder) @lexer = lexer @builder = builder end
Public Instance Methods
parse_file()
click to toggle source
# File lib/obo_parser/parser.rb, line 7 def parse_file # At present we ignore the header lines while !@lexer.peek(OboParser::Tokens::Term) && !@lexer.peek(OboParser::Tokens::Typedef) @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 > 20000 # there aren't that many words! parse_term i += 1 end i = 0 while @lexer.peek(OboParser::Tokens::Typedef) raise OboParser::ParseError,"infinite loop in Typedefs?" if i > 20000 parse_typedef i += 1 end end
parse_term()
click to toggle source
# File lib/obo_parser/parser.rb, line 29 def parse_term t = @lexer.pop(OboParser::Tokens::Term) tags = [] while !@lexer.peek(OboParser::Tokens::Term) && !@lexer.peek(OboParser::Tokens::Typedef) && !@lexer.peek(OboParser::Tokens::EndOfFile) begin if @lexer.peek(OboParser::Tokens::IsATag) t = @lexer.pop(OboParser::Tokens::IsATag) elsif @lexer.peek(OboParser::Tokens::DisjointFromTag) t = @lexer.pop(OboParser::Tokens::DisjointFromTag) elsif @lexer.peek(OboParser::Tokens::RelationshipTag) t = @lexer.pop(OboParser::Tokens::RelationshipTag) else t = @lexer.pop(OboParser::Tokens::TagValuePair) end tags.push(t) rescue raise end end @builder.add_term(tags) end
parse_typedef()
click to toggle source
# File lib/obo_parser/parser.rb, line 53 def parse_typedef @lexer.pop(OboParser::Tokens::Typedef) tags = [] while !@lexer.peek(OboParser::Tokens::Typedef) && @lexer.peek(OboParser::Tokens::TagValuePair) begin t = @lexer.pop(OboParser::Tokens::TagValuePair) tags.push(t) rescue raise end end @builder.add_typedef(tags) end