anchor.diff:  							{retval = new AttribMapping(new KeyInfo($key.text, $w.retval), $fm.retval);};
   	
   pred returns [StatementPredicate retval]
  +options {memoize=true;}	
   	: keyIF  b=exprValue 				{retval = new StatementPredicate($b.retval);};
   
   	
  
positive.code: 	;
  	
  indexElements[WithArgs withArgs] 
  	: (keyKEYS | keyKEY) k=keysRangeArgs		{withArgs.setKeyRangeArgs($k.retval);}
  	| keyINDEX keyFILTER keyWHERE s=serverFilter	{withArgs.setServerExpressionTree($s.retval);}
  	| keyCLIENT keyFILTER keyWHERE c=clientFilter	{withArgs.setClientExpressionTree($c.retval);}
  
negative.code: columnDefinition returns [ColumnDefinition retval]
  	: s=simpleId type=simpleId (b=LBRACE RBRACE)? (keyALIAS a=simpleId)? (keyDEFAULT def=exprValue)?
  							{retval = ColumnDefinition.newMappedColumn($s.text, $type.text, $b.text!=null, $a.text, $def.retval);};
  
  withClause returns [WithArgs retval]
  	: keyWITH w=withStmt				{retval = $w.retval;};	
  								 
  withStmt  returns [WithArgs retval]
  @init {retval = new WithArgs();}
  	: withElements[retval]+
  	| keyINDEX idx=simpleId {retval.setIndexName($idx.text);} indexElements[retval]* ;
  
  withElements[WithArgs withArgs] 
  options {memoize=true;}	
  	: (keyKEYS | keyKEY) k=keysRangeArgs		{withArgs.setKeyRangeArgs($k.retval);}
  	| keyTIMESTAMP t=timestampArgs			{withArgs.setTimestampArgs($t.retval);}	
  	| keyVERSIONS v=versionArgs			{withArgs.setVersionArgs($v.retval);}
  