anchor.diff:      )
   ).
   -define(OR(I,X,Y), erlang:'or'(I =:= X,I =:= Y)).
  +-define(IS_OP1_ARITH(X),
  +    X =:= <<"*">> orelse
  +    X =:= <<"/">> orelse
  +    X =:= <<"%">> orelse
  +    X =:= <<"+">> orelse
  +    X =:= <<"-">> orelse
  +    X =:= <<".">> orelse
  +    X =:= <<"&">> orelse
  +    X =:= <<"^">> orelse
  +    X =:= <<"|">>
  +).
   -define(IS_OP1(X),
       X =:= <<126>> orelse
       X =:= <<"@">> orelse
  
positive.code: 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(<<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));
  
negative.code: 
  process_incr_decr([], Processed) ->
      Processed;
  process_incr_decr([{<<"++">>,_,Pos},#variable{}=V|Rest], Processed) ->
      process_incr_decr(Rest, Processed ++ [{pre_incr, V, Pos}]);
  process_incr_decr([{<<"--">>,_,Pos},#variable{}=V|Rest], Processed) ->
      process_incr_decr(Rest, Processed ++ [{pre_decr, V, Pos}]);
  process_incr_decr([#variable{}=V,{<<"++">>,_,Pos}|Rest], Processed) ->
      process_incr_decr(Rest, Processed ++ [{post_incr, V, Pos}]);
  process_incr_decr([#variable{}=V,{<<"--">>,_,Pos}|Rest], Processed) ->
      process_incr_decr(Rest, Processed ++ [{post_decr, V, Pos}]);
  process_incr_decr([A|Rest], Processed) ->
      process_incr_decr(Rest, Processed ++ [A]).
  
  