def wrap_io_or_string(io_or_str)
      return io_or_str if io_or_str.respond_to?(:read_one_char) # Bychar or R
      return R.new(io_or_str) if io_or_str.respond_to?(:read)
      R.new(StringIO.new(io_or_str))
    end
def wrap_io_or_string(io_or_str)
      return io_or_str if io_or_str.respond_to?(:read_one_char) # Bychar or R
      return R.new(io_or_str) if io_or_str.respond_to?(:read)
      R.new(StringIO.new(io_or_str))
    end
Returns the given String or IO object wrapped in an object that has
 one method, read_one_char - that gets used by all the subsequent
 parsing steps