anchor.diff:  options {backtrack=true;}	
   	: a3=dateValue n=keyNOT? keyIN LPAREN d=dateItemList RPAREN			
   							{retval = new DateInStmt($a3.retval, ($n.text != null), $d.retval);} 
  -	| a1=numberValue n=keyNOT? keyIN LPAREN i=numberItemList RPAREN			
  +	| a1=addExpr n=keyNOT? keyIN LPAREN i=numberItemList RPAREN			
   							{retval = new NumberInStmt($a1.retval,($n.text != null), $i.retval);} 
   	| a2=stringValue n=keyNOT? keyIN LPAREN s=stringItemList RPAREN			
   							{retval = new StringInStmt($a2.retval, ($n.text != null), $s.retval);} 
  
positive.code: 	;
  	
  // Value Atom
  valueAtom returns [BooleanValue retval]
  options {backtrack=true;}	
  	: b=booleanLiteral				{retval = $b.retval;}
  	| v=varRef					{retval = this.getValueExpr($v.text);}
  	| p=paramRef
  	;
  		
  // Numeric calculations
  numberValue returns [NumberValue retval] 
  @init {List<NumberValue> exprList = Lists.newArrayList(); List<Operator> opList = Lists.newArrayList(); }
  	: m=multNumber {exprList.add($m.retval);} (op=plusMinus n=multNumber {opList.add($op.retval); exprList.add($n.retval);})*	
  							{retval = getLeftAssociativeNumberValues(exprList, opList);};
  	
  multNumber returns [NumberValue retval]
  @init {List<NumberValue> exprList = Lists.newArrayList(); List<Operator> opList = Lists.newArrayList(); }
  	: m=signedNumberPrimary {exprList.add($m.retval);} (op=multDiv n=signedNumberPrimary {opList.add($op.retval); exprList.add($n.retval);})*	
  							{retval = getLeftAssociativeNumberValues(exprList, opList);};
  	
  signedNumberPrimary returns [NumberValue retval]
  	: (s=plusMinus)? n=numberParen 			{$signedNumberPrimary.retval = ($s.retval == Operator.MINUS) ? new NumberCalcExpr($n.retval, Operator.NEGATIVE, null) :  $n.retval;};
  
  numberParen returns [NumberValue retval]
  	: n=numberCond					{retval = $n.retval;}
  	| LPAREN s=numberValue RPAREN			{retval = $s.retval;}
  	;
  	   						 
  numberCond returns [NumberValue retval]
  	: l=numberVal					{retval = $l.retval;} 
  	| keyIF e=orExpr keyTHEN n1=numberValue keyELSE n2=numberValue keyEND 	
  							{retval = new NumberTernary($e.retval, $n1.retval, $n2.retval);}
  	;
  
  
negative.code: dateAttribVar returns [DateValue retval]
  	: {isAttribType(input, FieldType.DateType)}? v=varRef 
  							{retval = (DateValue)this.getValueExpr($v.text);};
  
  // Functions
  funcReturningDatetime returns [DateValue retval]
  