class MT940::Parser
Public Class Methods
parse(data)
click to toggle source
# File lib/mt940parser/parser.rb, line 12 def self.parse(data) tree = @@parser.parse(data) if tree.nil? self.show_error(data) raise ParseError, "Failed to parse file. See log for more information" end # clean up the tree by removing all nodes of default type 'SyntaxNode' self.clean_tree(tree) return tree end
Private Class Methods
clean_tree(root_node)
click to toggle source
# File lib/mt940parser/parser.rb, line 33 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.delete_if{|node| node.class.name == "Document::NewLine" } #remove nls root_node.elements.delete_if{|node| node.class.name == "R86::Blank" } #remove nls root_node.elements.each {|node| self.clean_tree(node) } end
show_error(data)
click to toggle source
# File lib/mt940parser/parser.rb, line 28 def self.show_error(data) @@parser.failure_reason =~ /^(Expected .+) after/m puts "#{$1.gsub("\n", '$NEWLINE')}:", data.lines.to_a[@@parser.failure_line - 1],"#{'~' * (@@parser.failure_column - 1)}^" end