anchor.diff:                  },
     parse_args_tokens(State).
   
  +-spec parse_args_tokens(state()) -> [child_pattern()].
   parse_args_tokens(#state{tokens=[]}) -> [];
   parse_args_tokens(State0) ->
     case current(State0) of
  
positive.code:   {#required{children=Result}, options(State)}.
  
  % expr ::= seq ( '|' seq )* ;
  parse_expr(State0) ->
    {Seq, State} = parse_seq(State0),
    case current(State) of
  
negative.code:     0 when Value == [] -> {[Opt#option{value = true}], State}
    end.
  
  -spec starts_with(string(), string()) -> boolean().
  starts_with(Str, SubStr) when is_list(Str), is_list(SubStr) ->
    string:str(Str, SubStr) == 1;
  starts_with(_, _) -> false.
  
  -spec parse_shorts(state()) -> {options(), state()}.
  parse_shorts(State) ->
    [$-|Str] = current(State),
    parse_shorts(Str, move(State), []).
  
  -spec parse_shorts([string()], state(), options()) -> {options(), state()}.
  parse_shorts([], State, Acc) -> {lists:reverse(Acc), State};
  parse_shorts([H|T], State, Acc) ->
   case [O || O <- options(State), tl(O#option.short) == [H]] of
  