anchor.diff:  %% atom ::= '(' expr ')' | '[' expr ']' | 'options'
   %%       | long | shorts | argument | command ;
   parse_atom(State) ->
  -  ct:pal("in parse atom: ~p", [tokens(State)]),
  +  debug("in parse atom: ~p", [tokens(State)]),
     case current(State) of
       "["       -> parse_optional(move(State));
       "("       -> parse_required(move(State));
  
positive.code: parse_seq(#state{tokens=[")"|_]} = State, Acc) -> {lists:reverse(Acc), State};
  parse_seq(#state{tokens=["|"|_]} = State, Acc) -> {lists:reverse(Acc), State};
  parse_seq(State0, Acc) ->
    ct:pal("in parse seq: ~p, ~p", [tokens(State0), Acc]),
    {Atom, State} = parse_atom(State0),
    ct:pal("in parse seq after parse_atom: ~p, ~p, ~p", [Atom, tokens(State), Acc]),
    case current(State) of
      "..." -> parse_seq(move(State), [#one_or_more{children=Atom}|Acc]);
      _     -> parse_seq(State, Atom ++ Acc)
  
negative.code:     0 -> {Str, ""};
      I -> {string:substr(Str, 1, I - 1), string:substr(Str, I + length(Delim))}
    end.
  
  -ifdef(DEBUG).
  debug(Fmt, Args) -> ct:pal(Fmt, Args).
  -else.
  debug(_Fmt, _Args) -> ok.
  -endif.
  
  %%%_* Tests ===================================================================
  
  