# File lib/parslet/export.rb, line 81
    def pretty_print(name, parslet)
      output = "grammar #{name}\n"
      
      output << rule('root', parslet)
      
      seen = Set.new
      loop do
        # @todo is constantly filled by the visitor (see #deferred). We 
        # keep going until it is empty.
        break if @todo.empty?
        name, block = @todo.shift

        # Track what rules we've already seen. This breaks loops.
        next if seen.include?(name)
        seen << name

        output << rule(name, block.call)
      end
      
      output << "end\n"
    end