anchor.diff:  Token op=null;
   }
       :   code=unaryExpr
  -	(
  -	    options {
  -		greedy = true;
  -		//warnWhenFollowAmbig = false;
  -	    }
  -	    :
  +    (
  +        options {
  +        greedy = true;
  +        //warnWhenFollowAmbig = false;
  +        }
  +        :
               {op=LT(1);}
               ( STAR | DIV | MOD ) b=unaryExpr
               {
               a = code;
               code=template("arith");
  -	    code.setAttribute("op", escape(op.getText()));
  +        code.setAttribute("op", escape(op.getText()));
               code.setAttribute("left", a);
               code.setAttribute("right", b);
               }
  
positive.code: }
      :   code=condExpr
          (
     	    {op=LT(1);}
              ( EQ | NE ) b=condExpr
              {
              a = code;
              code=template("cond");
  	    code.setAttribute("op", escape(op.getText()));
              code.setAttribute("left", a);
              code.setAttribute("right", b);
              }
  
negative.code:     k=2;
  }
  
  AT        :   "@" ;
  PLUS    :   "+" ;
  MINUS   :   '-' ;
  DIV        :   '/' ;
  MOD        :   '%' ;
  EQ      :   "==" ;
  NE        :   "!=" ;
  LT      :   '<' ;
  LE        :   "<=" ;
  GT        :   ">" ;
  GE        :   ">=";
  ASSIGN  :   '=' ;
  AND        :   "&&";
  OR        :   "||";
  NOT        :   "!";
  LBRACK    :   '[' ;
  RBRACK    :   ']' ;
  LPAREN  :   '(' ;
  RPAREN  :   ')' ;
  LCURLY  :   '{' ;
  RCURLY  :   '}' ;
  SEMI    :   ';' ;
  COMMA   :   ',' ;
  COLON    :   ':' ;
  STAR    :   '*' ;
  
  ID     options
          {
            testLiterals = true;
          }
      :
      ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
      ;
  
  // string literals
  STRING_LITERAL
      :    '"'! (~('"'|'\n'|'\r'))* '"'!
  //    :    '"'! (ESC|~('"'|'\\'|'\n'|'\r'))* '"'!
      ;
  
  // a numeric literal
  NUMBER
      {boolean isDecimal=false; Token t=null;}
      :   '.' {_ttype = DOT;}
          (
              ('0'..'9')+ (EXPONENT)?
                  {
                      _ttype = FLOAT_LITERAL;
                  }
              )?
  
              |    (    '0' {isDecimal = true; _ttype = INT_LITERAL; } // special case for just '0'
                  // may add octal or hex support here
              |    ('1'..'9') ('0'..'9')*  {isDecimal=true; _ttype = INT_LITERAL;}    // non-zero decimal
          )
          (
              {isDecimal}?
              (   '.'  ('0'..'9')* (EXPONENT)?
                         {
                          _ttype = FLOAT_LITERAL;
                       }
              )
              |   ( EXPONENT )?
          )
      ;
  
  // white spaces
  WS  :   (   ' '
  