anchor.diff:  struct_op -> '%' eol : '$1'.
   
   map -> map_op map_args : '$2'.
  -map -> struct_op map_expr map_args : {'%', meta('$1'), ['$2', '$3']}.
  -map -> struct_op map_expr eol map_args : {'%', meta('$1'), ['$2', '$4']}.
  +map -> struct_op map_expr map_args : {'%', meta_from_token('$1'), ['$2', '$3']}.
  +map -> struct_op map_expr eol map_args : {'%', meta_from_token('$1'), ['$2', '$4']}.
   
   Erlang code.
   
  --define(id(Node), element(1, Node)).
  --define(line(Node), element(2, Node)).
  --define(exprs(Node), element(3, Node)).
  +-define(id(Token), element(1, Token)).
  +-define(location(Token), element(2, Token)).
  +-define(exprs(Token), element(3, Token)).
  +-define(meta(Node), element(2, Node)).
   -define(rearrange_uop(Op), (Op == 'not' orelse Op == '!')).
   
   %% The following directive is needed for (significantly) faster
  
positive.code:     "    one a, two(b, c, d)\n\n"
      "Elixir cannot compile otherwise. Syntax error before: ", "','").
  
  throw_no_parens_container_strict(Token) ->
    Line =
      case lists:keyfind(line, 1, element(2, Token)) of
        {line, L} -> L;
        false -> 0
      end,
  
    throw(Line,
      "unexpected comma. Parentheses are required to solve ambiguity inside containers.\n\n"
      "This error may happen when you forget a comma in a list or other container:\n\n"
      "    [a, b c, d]\n\n"
  
negative.code:   identifier kw_identifier kw_identifier_safe kw_identifier_unsafe bracket_identifier
    paren_identifier do_identifier block_identifier
    fn 'end' aliases
    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
  