anchor.diff:  % Identifier
   
   tokenize(Line, [H|_] = String, Tokens) when H >= $a andalso H =< $z; H == $_ ->
  -  { Rest, { Kind, Identifier } } = tokenize_extra_identifier(String, []),
  +  { Rest, { Kind, _, Identifier } } = tokenize_many_identifier(Line, String, []),
     case Kind == identifier andalso keyword(Identifier) of
       true  ->
         tokenize(Line, Rest, [{Identifier,Line}|Tokens]);
  
positive.code: 
  % Atom operators
  
  tokenize(Line, [$:,T|Rest], Tokens) when T == $+; T == $-; T == $*; T == $/; T == $= ->
    tokenize(Line, Rest, [{atom,Line,list_to_atom([T])}|Tokens]);
  
  tokenize(Line, [$:,T1,T2|Rest], Tokens) when T1 == $& andalso T2 == $&; T1 == $| andalso T2 == $|;
    T1 == $[ andalso T2 == $]; T1 == ${ andalso T2 == $}; T1 == $: andalso T2 == $: ->
    tokenize(Line, Rest, [{atom,Line,list_to_atom([T1,T2])}|Tokens]);
  
  % KV Identifiers
  
  tokenize(Line, [T,$:|Rest], Tokens) when T == $+; T == $-; T == $*; T == $/; T == $= ->
    tokenize(Line, Rest, [{kv_identifier,Line,list_to_atom([T])}|Tokens]);
  
  tokenize(Line, [T1,T2,$:|Rest], Tokens) when T1 == $& andalso T2 == $&; T1 == $| andalso T2 == $|;
    T1 == $[ andalso T2 == $]; T1 == ${ andalso T2 == $}; T1 == $: andalso T2 == $: ->
    tokenize(Line, Rest, [{kv_identifier,Line,list_to_atom([T1,T2])}|Tokens]);
  
  % Call operators
  
  tokenize(Line, [$.,$(|Rest], Tokens) ->
    tokenize(Line, [$(|Rest], [{dot_call_op,Line,'.'}|Tokens]);
  
  tokenize(Line, [T,$(|Rest], Tokens) when T == $+; T == $-; T == $*; T == $/; T == $= ->
    tokenize(Line, [$(|Rest], [{call_op,Line,list_to_atom([T])}|Tokens]);
  
  tokenize(Line, [T1,T2,$(|Rest], Tokens) when T1 == $& andalso T2 == $&; T1 == $| andalso T2 == $|;
    T1 == $[ andalso T2 == $]; T1 == ${ andalso T2 == $}; T1 == $: andalso T2 == $: ->
    tokenize(Line, [$(|Rest], [{call_op,Line,list_to_atom([T1,T2])}|Tokens]);
  
  % Ambiguous unary/binary operators tokens
  
  
negative.code: tokenize_identifier(Rest, Acc, _) ->
    { Rest, { identifier, list_to_atom(lists:reverse(Acc)) } }.
  
  % Tokenize identifier checking if it is a kv_identifier or a call_identifier.
  tokenize_many_identifier(Line, String, Acc) ->
    { Rest, { Kind, Atom } } = tokenize_identifier(String, Acc),
    case Rest of
      [$:|T] ->
        { T, { kv_identifier, Line, Atom } };
      _ ->
        { Rest, tokenize_call_identifier(Kind, Line, Atom, Rest) }
    end.
  
  % Tokenize identifier checking if it is a call_identifier.
  tokenize_call_identifier(Kind, Line, Atom, Rest) ->
    case Rest of
      [$(|_] -> { paren_identifier, Line, Atom };
      _ ->
        case next_is_do(Rest) of
          true  -> { do_identifier, Line, Atom };
          false -> { Kind, Line, Atom }
        end
    end.
  
  