anchor.diff:  expression(<<"(",Rest/binary>>, {L,R,C}=Pos, Parsed) ->
       {Rest0, Pos0, Op} = expression(Rest, {L+1,R,C+1}, []),
       expression(Rest0, copy_level(Pos, Pos0), add_op(Op, Parsed));
  +expression(<<";",Rest/binary>>, Pos, [{op,_}=Exp,#if_block{}=If]) ->
  +    IfBlock = If#if_block{
  +        true_block = add_op('end', [Exp])
  +    },
  +    {Rest, add_pos(Pos,1), IfBlock};
   expression(<<";",_/binary>> = Rest, {L,_,_}=Pos, Parsed) when not is_number(L) ->
       {Rest, add_pos(Pos,1), add_op('end', Parsed)};
   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) ->
  +    {Rest, add_pos(Pos,1), add_op('end', Parsed)};
  +expression(<<"]",Rest/binary>>, {array,_,_}=Pos, Parsed) ->
       {Rest, add_pos(Pos,1), add_op('end', Parsed)};
   expression(<<"?>\n",_/binary>> = Rest, {L,_,_}=Pos, Parsed)
           when not is_number(L) ->
  
positive.code:     variable(Rest, add_pos(Pos,1), Var);
  variable(<<"}",Rest/binary>>, {enclosed,_,_}=Pos, Var) ->
      {Rest, add_pos(Pos,1), Var};
  variable(Rest, Pos, Parsed) ->
      {Rest, Pos, Parsed}.
  
  
negative.code:     {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, []),
  