anchor.diff:          true_block = add_op('end', [Exp])
       },
       {Rest, add_pos(Pos,1), IfBlock};
  -expression(<<A:8,_/binary>> = Rest, {L,_,_}=Pos, Parsed)
  -        when not is_number(L) andalso (A =:= $) orelse A =:= $;) ->
  -    {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)};
  
positive.code: shunting_yard([{_,{_,P1}}=Op|Rest], [{_,{_,P2}}|_]=OpS, Postfix)
          when P1 < P2 ->
      shunting_yard(Rest, [Op|OpS], Postfix);
  shunting_yard([{_,{_,_}}=Op|Rest], [open|_]=OpS, Postfix) ->
      shunting_yard(Rest, [Op|OpS], Postfix);
  shunting_yard([A|Rest], OpS, Postfix) ->
      shunting_yard(Rest, OpS, Postfix ++ [A]).
  
  add_line(#array{}=A, {_,Row,Col}) -> A#array{line={{line,Row},{column,Col}}};
  add_line(#eval{}=E, {_,Row,Col}) -> E#eval{line={{line,Row},{column,Col}}};
  add_line(#print{}=P, {_,Row,Col}) -> P#print{line={{line,Row},{column,Col}}};
  
negative.code:     expression(Rest0, Pos0, add_op(String, Parsed));
  expression(<<Op:3/binary,Rest/binary>>, Pos, Parsed) when ?IS_OP3(Op) ->
      OpL = ephp_string:to_lower(Op),
      expression(Rest, add_pos(Pos,3), add_op({OpL,precedence(OpL),Pos}, Parsed));
  expression(<<Op:2/binary,Rest/binary>>, Pos, Parsed) when ?IS_OP2(Op) ->
      OpL = ephp_string:to_lower(Op),
      expression(Rest, add_pos(Pos,2), add_op({OpL,precedence(OpL),Pos}, Parsed));
  expression(<<Op:1/binary,Rest/binary>>, Pos, Parsed) when ?IS_OP1(Op) ->
      expression(Rest, add_pos(Pos,1), add_op({Op,precedence(Op),Pos}, Parsed));
  expression(<<A:8,_/binary>> = Rest, {L,_,_}=Pos, Parsed) when ?IS_ALPHA(A) ->
      {Rest0, {_,R,C}, [Constant]} = constant(Rest, Pos, []),
      expression(Rest0, {L,R,C}, add_op(Constant, Parsed));
  expression(<<"=>",Rest/binary>>, {{array_def,_},_,_}=Pos, [{op,_}=Op|Parser]) ->
      expression(Rest, add_pos(Pos,2), [{op,[]},add_op('end', [Op])|Parser]);
  %% TODO support for list(...) = ...
  expression(<<"=",Rest/binary>>, Pos, [{op,[#variable{}=V]}|_]) ->
      NewPos = code_statement_level(add_pos(Pos,1)),
  