lib/parser/parser.rb in koi-reference-parser-0.0.1 vs lib/parser/parser.rb in koi-reference-parser-0.0.2

- old
+ new

@@ -1,43 +1,43 @@ -class Parser - - require 'treetop' - Treetop.load(File.expand_path(File.join(File.dirname(__FILE__), 'koi-reference-parser.treetop'))) - @@parser = KoiReferenceParserParser.new - - def self.parse(data) - tree = @@parser.parse(data) - - if(tree.nil?) - if( data.length > 80 ) - error_detail = "\n\n" + data.slice(@@parser.index - 120, 80).gsub("\n", ";") - error_detail += "\n" + data.slice(@@parser.index - 40, 80).gsub("\n", ";") - error_detail += "\n" + " "*40 + "^\n" - else - error_detail = "\n\n" + data.gsub("\n", ";") - error_detail += "\n" + " " * @@parser.index + "^\n" - end - raise ParseError, "Parse error at index: #{@@parser.index}#{error_detail}" - end - - # clean up the tree by removing all nodes of default type 'SyntaxNode' - self.clean_tree(tree) - # clean up the tree further by removing all whitespace nodes - self.clean_whitespace(tree) - return tree - end - - private - - def self.clean_tree(root_node) - return if(root_node.elements.nil?) - root_node.elements.delete_if{|node| node.class.name == "Treetop::Runtime::SyntaxNode" } - root_node.elements.each {|node| self.clean_tree(node) } - end - - def self.clean_whitespace(root_node) - return if(root_node.elements.nil?) - root_node.elements.delete_if{|node| node.class.name == "KoiReferenceParser::Whitespace" } - root_node.elements.each {|node| self.clean_whitespace(node) } - end - +class Parser + + require 'treetop' + Treetop.load(File.expand_path(File.join(File.dirname(__FILE__), 'koi-reference-parser.treetop'))) + @@parser = KoiReferenceParserParser.new + + def self.parse(data) + tree = @@parser.parse(data) + + if(tree.nil?) + if( data.length > 80 ) + error_detail = "\n\n" + data.slice(@@parser.index - 120, 80).gsub("\n", ";") + error_detail += "\n" + data.slice(@@parser.index - 40, 80).gsub("\n", ";") + error_detail += "\n" + " "*40 + "^\n" + else + error_detail = "\n\n" + data.gsub("\n", ";") + error_detail += "\n" + " " * @@parser.index + "^\n" + end + raise ParseError, "Parse error at index: #{@@parser.index}#{error_detail}" + end + + # clean up the tree by removing all nodes of default type 'SyntaxNode' + self.clean_tree(tree) + # clean up the tree further by removing all whitespace nodes + self.clean_whitespace(tree) + return tree + end + + private + + def self.clean_tree(root_node) + return if(root_node.elements.nil?) + root_node.elements.delete_if{|node| node.class.name == "Treetop::Runtime::SyntaxNode" } + root_node.elements.each {|node| self.clean_tree(node) } + end + + def self.clean_whitespace(root_node) + return if(root_node.elements.nil?) + root_node.elements.delete_if{|node| node.class.name == "KoiReferenceParser::Whitespace" } + root_node.elements.each {|node| self.clean_whitespace(node) } + end + end \ No newline at end of file