anchor.diff:  
   gen_op([], Stack) ->
       Stack;
  -gen_op([{Op,{_,_}}|Rest], [A,B|Stack]) ->
  +gen_op([{Op,{_,_}}|Rest], [B,A|Stack]) ->
       gen_op(Rest, [operator(Op,A,B)|Stack]);
   gen_op([A|Rest], Stack) ->
       gen_op(Rest, [A|Stack]).
  
positive.code: code_block_level({_,Row,Col}) -> {code_block,Row,Col}.
  code_value_level({_,Row,Col}) -> {code_value,Row,Col}.
  code_statement_level({_,Row,Col}) -> {code_statement,Row,Col}.
  
  add_op('end', [{op,Content}]) ->
      solve(Content);
  add_op(Add, [{op,Content}|Parsed]) ->
      [{op,[Add|Content]}|Parsed];
  add_op(Add, Parsed) ->
      [{op,[Add]}|Parsed].
  
  
negative.code: code_block(Rest, Pos, Parsed) ->
      code(Rest, code_statement_level(Pos), Parsed).
  
  expression(<<SP:1/binary,Rest/binary>>, Pos, Parsed) when ?IS_SPACE(SP) ->
      expression(Rest, add_pos(Pos,1), Parsed);
  expression(<<SP:1/binary,Rest/binary>>, Pos, Parsed) when ?IS_NEWLINE(SP) ->
      expression(Rest, new_line(Pos), Parsed);
  expression(Rest, {arg,Row,Col}, Parsed) ->
      expression(Rest, {100,Row,Col+1}, Parsed);
  expression(Rest, {print,Row,Col}, Parsed) ->
      expression(Rest, {200,Row,Col+1}, Parsed);
  expression(<<"(",Rest/binary>>, {L,Row,Col}, Parsed) when not is_number(L) ->
      expression(Rest, {1,Row,Col+1}, Parsed);
  expression(<<";",Rest/binary>>, {L,_,_}=Pos, Parsed) when not is_number(L) ->
      {Rest, add_pos(Pos,1), add_op('end', Parsed)};
  expression(<<";",Rest/binary>>, {200,_,_}=Pos, Parsed) ->
      {Rest, add_pos(Pos,1), add_op('end', Parsed)};
  expression(<<"(",Rest/binary>>, {Level,Row,Col}, Parsed) ->
      expression(Rest, {Level+1,Row,Col+1}, add_op(open, Parsed));
  expression(<<",",Rest/binary>>, {100,_,_}=Pos, Parsed) ->
      {Rest, add_pos(Pos,1), add_op('end', Parsed)};
  expression(<<")",_/binary>> = Rest, {100,_Row,_Col}=Pos, Parsed) ->
      {Rest, add_pos(Pos,1), add_op('end', Parsed)};
  expression(<<")",Rest/binary>>, {1,_Row,_Col}=Pos, Parsed) ->
      {Rest, add_pos(Pos,1), add_op('end', Parsed)};
  expression(<<"?>",_/binary>> = Rest, Pos, Parsed) ->
      {Rest, Pos, add_op('end', Parsed)};
  expression(<<")",Rest/binary>>, {Level,Row,Col}, Parsed) ->
      expression(Rest, {Level-1,Row,Col+1}, add_op(close, Parsed));
  expression(<<"$",Rest/binary>>, Pos, Parsed) ->
      {Rest0, Pos0, [Var]} = variable(Rest, add_pos(Pos,1), []),
      expression(Rest0, Pos0, add_op(Var, Parsed));
  expression(<<Op:3/binary,Rest/binary>>, Pos, Parsed) when ?IS_OP3(Op) ->
      expression(Rest, add_pos(Pos,3), add_op({Op,precedence0(Op)}, Parsed));
  expression(<<Op:2/binary,Rest/binary>>, Pos, Parsed) when ?IS_OP2(Op) ->
      expression(Rest, add_pos(Pos,2), add_op({Op,precedence0(Op)}, Parsed));
  expression(<<Op:1/binary,Rest/binary>>, Pos, Parsed) when ?IS_OP1(Op) ->
      expression(Rest, add_pos(Pos,1), add_op({Op,precedence(Op)}, Parsed));
  expression(<<A:8,_/binary>> = Rest, Pos, Parsed) when ?IS_NUMBER(A) ->
      {Rest0, Pos0, [Number]} = number(Rest, Pos, []),
      expression(Rest0, Pos0, add_op(Number, Parsed));
  expression(<<A:8,_/binary>> = Rest, Pos, Parsed) when ?IS_ALPHA(A) ->
      {Rest0, Pos0, Constant} = constant(Rest, Pos, []),
      expression(Rest0, Pos0, add_op(Constant, Parsed));
  expression(<<A:8,_/binary>> = Rest, Pos, Parsed) when A =:= $" orelse A =:= $' ->
      {Rest0, Pos0, String} = string(Rest, Pos, []),
      expression(Rest0, Pos0, add_op(String, Parsed));
  expression(<<>>, Pos, _Parsed) ->
      throw({error, {parse, Pos, incomplete_expression}}).
  
  variable(<<A:8,Rest/binary>>, Pos, []) when ?IS_ALPHA(A) ->
      Var = add_line(#variable{name = <<A:8>>}, Pos),
  