anchor.diff:  
   %% Check if we have e- followed by numbers (valid only for floats);
   tokenize_number([E, S, H | T], Acc, Length, true)
  -    when (E == $E) or (E == $e), ?is_digit(H), S == $+ orelse S == $- ->
  +    when (E =:= $E) or (E =:= $e), ?is_digit(H), S =:= $+ orelse S =:= $- ->
     tokenize_number(T, [H, S, E | Acc], Length + 3, true);
   
   %% Check if we have e followed by numbers (valid only for floats);
   tokenize_number([E, H | T], Acc, Length, true)
  -    when (E == $E) or (E == $e), ?is_digit(H) ->
  +    when (E =:= $E) or (E =:= $e), ?is_digit(H) ->
     tokenize_number(T, [H, E | Acc], Length + 2, true);
   
   %% Finally just numbers.
  
positive.code:   {[$! | Acc], T, Length + 1, [$! | Special]};
  tokenize_continue([$? | T], Acc, Length, Special) ->
    {[$? | Acc], T, Length + 1, [$? | Special]};
  tokenize_continue([H | T], Acc, Length, Special) when ?is_upcase(H); ?is_downcase(H); ?is_digit(H); H == $_ ->
    tokenize_continue(T, [H | Acc], Length + 1, Special);
  tokenize_continue(Rest, Acc, Length, Special) ->
    {Acc, Rest, Length, Special}.
  
negative.code: -define(is_downcase(S), (S >= $a andalso S =< $z)).
  
  %% Others
  -define(is_quote(S), (S =:= $" orelse S =:= $')).
  -define(is_sigil(S), (S =:= $/ orelse S =:= $< orelse S =:= $" orelse S =:= $' orelse
                        S =:= $[ orelse S =:= $( orelse S =:= ${ orelse S =:= $|)).
  
  %% Spaces
  -define(is_horizontal_space(S), (S =:= $\s orelse S =:= $\t)).
  -define(is_vertical_space(S), (S =:= $\r orelse S =:= $\n)).
  -define(is_space(S), (?is_horizontal_space(S) orelse ?is_vertical_space(S))).
  
  %% Operators
  -define(at_op(T),
    T =:= $@).
  
  -define(capture_op(T),
    T =:= $&).
  
  -define(unary_op(T),
    T =:= $!;
    T =:= $^).
  
  -define(unary_op3(T1, T2, T3),
    T1 =:= $~, T2 =:= $~, T3 =:= $~).
  
  -define(list_op(T1, T2),
    T1 =:= $+, T2 =:= $+;
    T1 =:= $-, T2 =:= $-).
  
  -define(two_op(T1, T2),
    T1 =:= $<, T2 =:= $>;
    T1 =:= $., T2 =:= $.).
  
  -define(three_op(T1, T2, T3),
    T1 =:= $^, T2 =:= $^, T3 =:= $^).
  
  -define(mult_op(T),
    T =:= $* orelse T =:= $/).
  
  -define(dual_op(T),
    T =:= $+ orelse T =:= $-).
  
  -define(arrow_op3(T1, T2, T3),
    T1 =:= $<, T2 =:= $<, T3 =:= $<;
    T1 =:= $>, T2 =:= $>, T3 =:= $>;
    T1 =:= $~, T2 =:= $>, T3 =:= $>;
    T1 =:= $<, T2 =:= $<, T3 =:= $~;
    T1 =:= $<, T2 =:= $~, T3 =:= $>;
    T1 =:= $<, T2 =:= $|, T3 =:= $>).
  
  -define(arrow_op(T1, T2),
    T1 =:= $|, T2 =:= $>;
    T1 =:= $~, T2 =:= $>;
    T1 =:= $<, T2 =:= $~).
  
  -define(rel_op(T),
    T =:= $<;
    T =:= $>).
  
  -define(rel_op2(T1, T2),
    T1 =:= $<, T2 =:= $=;
    T1 =:= $>, T2 =:= $=).
  
  -define(comp_op2(T1, T2),
    T1 =:= $=, T2 =:= $=;
    T1 =:= $=, T2 =:= $~;
    T1 =:= $!, T2 =:= $=).
  
  -define(comp_op3(T1, T2, T3),
    T1 =:= $=, T2 =:= $=, T3 =:= $=;
    T1 =:= $!, T2 =:= $=, T3 =:= $=).
  
  -define(and_op(T1, T2),
    T1 =:= $&, T2 =:= $&).
  
  -define(or_op(T1, T2),
    T1 =:= $|, T2 =:= $|).
  
  -define(and_op3(T1, T2, T3),
    T1 =:= $&, T2 =:= $&, T3 =:= $&).
  
  -define(or_op3(T1, T2, T3),
    T1 =:= $|, T2 =:= $|, T3 =:= $|).
  
  -define(match_op(T),
    T =:= $=).
  
  -define(in_match_op(T1, T2),
    T1 =:= $<, T2 =:= $-;
    T1 =:= $\\, T2 =:= $\\).
  
  -define(stab_op(T1, T2),
    T1 =:= $-, T2 =:= $>).
  
  -define(type_op(T1, T2),
    T1 =:= $:, T2 =:= $:).
  
  -define(pipe_op(T),
    T =:= $|).
  
  tokenize(String, Line, Column, #elixir_tokenizer{} = Scope) ->
    tokenize(String, Line, Column, Scope, []);
  