anchor.diff:  booleanParen returns [BooleanValue retval]
   options {backtrack=true;}	
   	: s=valueExpr  					{retval = new BooleanExpr($s.retval);}
  -	| LPAREN o=orExpr RPAREN			{retval = $o.retval;}
  +	| LPAREN o=booleanExpr RPAREN			{retval = $o.retval;}
   	;
   		
   // Literals		
  
positive.code: options {backtrack=true;}	
  	: n=atomExpr					{retval = $n.retval;}
  	| LPAREN s=valueExpr RPAREN			{retval = $s.retval;}
  	| LPAREN o=orExpr RPAREN			{retval = $o.retval;}
  	;
  	   						 
  atomExpr returns [ValueExpr retval]
  
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);}
  	;
  
  