anchor.diff:  options {backtrack=true;}	
   	: n=atomExpr					{retval = $n.retval;}
   	| LPAREN s=valueExpr RPAREN			{retval = $s.retval;}
  -	| LPAREN o=orExpr RPAREN			{retval = $o.retval;}
  +	| LPAREN o=booleanExpr RPAREN			{retval = $o.retval;}
   	;
   	   						 
   atomExpr returns [ValueExpr retval]
  
positive.code: 	| f=keyFALSE					{retval = new BooleanLiteral($f.text);}
  	;
  
  valueExpr returns [ValueExpr retval]
  	: a=addExpr					{retval = $a.retval;}
  	;
  			
  // Numeric calculations
  addExpr returns [ValueExpr retval] 
  @init {List<ValueExpr> exprList = Lists.newArrayList(); List<Operator> opList = Lists.newArrayList(); }
  	: m=multExpr {exprList.add($m.retval);} (op=plusMinus n=multExpr {opList.add($op.retval); exprList.add($n.retval);})*	
  							{retval = getLeftAssociativeValueExprs(exprList, opList);};
  
negative.code: 	| f1=funcReturningInteger			{retval = $f1.retval;}
  	| f2=funcReturningString			{retval = $f2.retval;}
  	| d2=funcReturningDatetime			{retval = $d2.retval;}
  	| keyIF v1=booleanExpr keyTHEN v2=valueExpr keyELSE v3=valueExpr keyEND	
  							{retval = new ValueTernary($v1.retval, $v2.retval, $v3.retval);}
  	;
  
  