anchor.diff:  dot_identifier -> identifier : '$1'.
   dot_identifier -> matched_expr dot_op identifier : build_dot('$2', '$1', '$3').
   
  -dot_alias -> aliases : {'__aliases__', meta('$1', 0), ?exprs('$1')}.
  +dot_alias -> aliases : {'__aliases__', meta_from_token('$1', 0), ?exprs('$1')}.
   dot_alias -> matched_expr dot_op aliases : build_dot_alias('$2', '$1', '$3').
   
   dot_op_identifier -> op_identifier : '$1'.
  
positive.code:     "adding parentheses:\n\n"
      "    [one, two(three, four), five]\n\n"
      "Elixir cannot compile otherwise. Syntax error before: ", "','").
  
  throw_bad_atom(Line) ->
    throw(Line, "atom cannot be followed by an alias. If the '.' was meant to be "
      "part of the atom's name, the atom name must be quoted. Syntax error before: ", "'.'").
  
negative.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_from_token('$2'), unwrap_splice('$1') ++ ['$3']}], '$5').
  
  stab_maybe_expr -> 'expr' : '$1'.
  stab_maybe_expr -> '$empty' : nil.
  