code: def parse_argv(tokens, options, options_first=False):
      
      parsed = []
      while tokens.current() is not None:
          if tokens.current() == '--':
              return parsed + [Argument(None, v) for v in tokens]
          elif tokens.current().startswith('--'):
              parsed += parse_long(tokens, options)
          elif tokens.current().startswith('-') and tokens.current() != '-':
              parsed += parse_shorts(tokens, options)
          elif options_first:
              return parsed + [Argument(None, v) for v in tokens]
          else:
              parsed.append(Argument(None, tokens.move()))
      return parsed
docs: Parse command-line argument vector.
  
      If options_first:
          argv ::= [ long | shorts ]* [ argument ]* [ '--' [ argument ]* ] ;
      else:
          argv ::= [ long | shorts | argument ]* [ '--' [ argument ]* ] ;