anchor.diff:  code_statement_level({_,Row,Col}) -> {code_statement,Row,Col}.
   arg_level({_,Row,Col}) -> {arg,Row,Col}.
   array_level({_,Row,Col}) -> {array,Row,Col}.
  -array_def_level({_,Row,Col}) -> {array_def,Row,Col}.
  +array_def_level({_,Row,Col}) -> {{array_def,0},Row,Col}.
  +array_def_54_level({_,Row,Col}) -> {{array_def,54},Row,Col}.
   
   add_op('end', []) ->
       [];
  
positive.code:     array_def(Rest, add_pos(Pos,1), Args);
  array_def(<<SP:8,Rest/binary>>, Pos, Args) when ?IS_NEWLINE(SP) ->
      array_def(Rest, new_line(Pos), Args);
  array_def(<<")",Rest/binary>>, Pos, Args) ->
      {Rest,add_pos(Pos,1),Args};
  %% TODO add error missing closing params
  array_def(<<"(",Rest/binary>>, Pos, []) ->
      array_def(Rest, add_pos(Pos,1), []);
  array_def(Rest, Pos, Args) when Rest =/= <<>> ->
      case expression(Rest, array_def_level(Pos), []) of
          {<<")",Rest0/binary>>, Pos0, []} ->
              {Rest0, add_pos(Pos0,1), Args};
          {<<")",Rest0/binary>>, Pos0, [Idx,Arg]} ->
              NewArg = add_line(#array_element{idx=Idx, element=Arg}, Pos),
              {Rest0, add_pos(Pos0,1), Args ++ [NewArg]};
          {<<")",Rest0/binary>>, Pos0, Arg} ->
              NewArg = add_line(#array_element{element=Arg}, Pos),
              {Rest0, add_pos(Pos0,1), Args ++ [NewArg]};
          {<<",",Rest0/binary>>, Pos0, [Idx,Arg]} ->
  
negative.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 = array_def_level(add_pos(Pos, 5)),
      {Rest1, Pos1, Content} = array_def(<<SP:8,Rest/binary>>, NewPos, []),
      NewParsed = add_op(add_line(#array{elements=Content}, Pos), Parsed),
      expression(Rest1, copy_level(Pos, Pos1), NewParsed);
  expression(<<"[",Rest/binary>>, Pos, []) ->
      NewPos = array_def_54_level(add_pos(Pos, 1)),
      {Rest1, Pos1, Content} = array_def(Rest, NewPos, []),
      NewParsed = add_op(add_line(#array{elements=Content}, Pos), []),
      expression(Rest1, copy_level(Pos, Pos1), 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)
  