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: expression(<<A:8,_/binary>> = Rest, {arg,_,_}=Pos, Parsed) when A =:= $,
                                                             orelse A =:= $) ->
      {Rest, add_pos(Pos,1), add_op('end', Parsed)};
  expression(<<A:8,_/binary>> = Rest, {array_def,_,_}=Pos, [Parsed]) when A =:= $,
                                                                   orelse A =:= $) ->
      {Rest, add_pos(Pos,1), add_op('end', [Parsed])};
  expression(<<A:8,_/binary>> = Rest, {array_def,_,_}=Pos, Parsed) when A =:= $,
                                                                   orelse A =:= $) ->
      [Arg,Idx] = Parsed,
      {Rest, add_pos(Pos,1), [Idx,add_op('end', [Arg])]};
  expression(<<")",Rest/binary>>, {L,_Row,_Col}=Pos, Parsed) when is_number(L) ->
  
negative.code:         {<<",",Rest0/binary>>, Pos0, Arg} ->
              NewCall = C#call{args=Args ++ [Arg]},
              function(Rest0, add_pos(Pos0, 1), [NewCall|Parsed]);
          %% TODO error missing closing params
          {Rest0, Pos0, []} ->
              function(Rest0, Pos0, [C|Parsed]);
          {Rest0, Pos0, Arg} ->
  