def lex
      r = []
      while (tok = @lexer.lex).kind != T::EOF
        r.push(tok)
      end
      r
    end
def lex
      r = []
      while (tok = @lexer.lex).kind != T::EOF
        r.push(tok)
      end
      r
    end
When io is specified, io is used as input source. When io is not specified,
 ARGV[0] is considered as sourcde file.

 @param [<String>] argv
 @param [IO, NilClass] input
 NOTE: Used only for debug