anchor.diff:      {Rest0, Pos0, String} = string(Rest, Pos, []),
       expression(Rest0, Pos0, add_op(String, Parsed));
   %% TODO support for list(...) = ...
  +expression(<<"=>",Rest/binary>>, {array_def,_,_}=Pos, [{op,_}=Op]) ->
  +    expression(Rest, add_pos(Pos,2), [{op,[]},add_op('end', [Op])]);
   expression(<<"=",Rest/binary>>, Pos, [{op,[#variable{}=V]}|_]) ->
       NewPos = code_statement_level(add_pos(Pos,1)),
       {Rest0, Pos0, Exp} = expression(Rest, NewPos, []),
  
positive.code: expression(<<A:8,R:8,R:8,A:8,Y:8,SP:8,Rest/binary>>, Pos, Parsed)
          when ?OR(A,$a,$A) andalso ?OR(R,$r,$R) andalso ?OR(Y,$y,$Y)
          andalso not (?IS_ALPHA(SP) orelse ?IS_NUMBER(SP) orelse SP =:= $_) ->
      NewPos = add_pos(Pos, 5),
      {<<"(",Rest0/binary>>, Pos0} = remove_spaces(<<SP:8,Rest/binary>>, NewPos),
      {Rest1, Pos1, Content} = expression(Rest0, arg_level(add_pos(Pos0,1)), []),
      {<<")",Rest2/binary>>, Pos2} = remove_spaces(Rest1, Pos1),
      NewParsed = add_op(add_line(#array{elements=Content}, Pos), Parsed),
      expression(Rest2, copy_level(Pos, Pos2), NewParsed);
  expression(<<T:8,R:8,U:8,E:8,SP:8,Rest/binary>>, Pos, Parsed)
          when ?OR(T,$t,$T) andalso ?OR(R,$r,$R) andalso ?OR(U,$u,$U)
          andalso ?OR(E,$e,$E)
  
negative.code:     variable(Rest, add_pos(Pos,1), Var);
  variable(<<"}",Rest/binary>>, {enclosed,_,_}=Pos, Var) ->
      {Rest, add_pos(Pos,1), Var};
  variable(<<"[",Rest/binary>>, Pos, [#variable{idx=Indexes}=Var]) ->
      {Rest1, Pos1, RawIdx} = expression(Rest, array_level(add_pos(Pos,1)), []),
      Idx = case RawIdx of
          [] -> auto;
          _ -> RawIdx
      end,
      variable(Rest1, copy_level(Pos, Pos1), [Var#variable{idx=Indexes ++ [Idx]}]);
  variable(Rest, Pos, Parsed) ->
      {Rest, Pos, Parsed}.
  
  