def self.parse(string_or_io)
        string = string_or_io.respond_to?(:read) ? string_or_io.read : string_or_io
        tree = Parser.new.parse(string)
        nodes = Transformer.new.apply(tree)
        Sections.new(nodes.empty? ? Array.new : nodes)