anchor.diff:    identifier kw_identifier kw_identifier_safe kw_identifier_unsafe bracket_identifier
     paren_identifier do_identifier block_identifier
     fn 'end' aliases
  -  number signed_number atom atom_safe atom_unsafe bin_string list_string sigil
  +  number atom atom_safe atom_unsafe bin_string list_string sigil
     dot_call_op op_identifier
     comp_op at_op unary_op and_op or_op arrow_op match_op in_op in_match_op
     type_op dual_op add_op mult_op two_op pipe_op stab_op when_op assoc_op
  
positive.code: stab_expr -> stab_parens_many stab_op_eol stab_maybe_expr :
                 build_op('$2', unwrap_splice('$1'), '$3').
  stab_expr -> stab_parens_many when_op expr stab_op_eol stab_maybe_expr :
                 build_op('$4', [{'when', meta('$2'), unwrap_splice('$1') ++ ['$3']}], '$5').
  
  stab_maybe_expr -> 'expr' : '$1'.
  stab_maybe_expr -> '$empty' : nil.
  
negative.code: %% Dots
  
  build_dot_alias(Dot, {'__aliases__', _, Left}, {'aliases', _, Right}) ->
    {'__aliases__', meta_from_token(Dot), Left ++ Right};
  
  build_dot_alias(_Dot, Atom, {'aliases', _, _} = Token) when is_atom(Atom) ->
    throw_bad_atom(Token);
  
  build_dot_alias(Dot, Other, {'aliases', _, Right}) ->
    {'__aliases__', meta_from_token(Dot), [Other|Right]}.
  
  build_dot(Dot, Left, Right) ->
    {'.', meta_from_token(Dot), [Left, extract_identifier(Right)]}.
  
  extract_identifier({Kind, _, Identifier}) when
      Kind == identifier; Kind == bracket_identifier; Kind == paren_identifier;
  