anchor.diff:  	: a1=familyProperty {retval.add($a1.retval);} (COMMA a2=familyProperty {retval.add($a2.retval);})*;
   	
   familyProperty returns [FamilyProperty retval]
  +options {memoize=true;}	
   	: keyMAX_VERSIONS COLON v=exprValue		{retval = new MaxVersionsProperty($v.retval);}
   	| keyBLOOM_FILTER COLON v=exprValue		{retval = new BloomFilterProperty($v.retval);}
   	| keyBLOCK_SIZE COLON v=exprValue		{retval = new BlockSizeProperty($v.retval);}
  
positive.code: 	| sel=selectStatement				{retval = new InsertSelectValues($sel.retval);};
  			
  selectStatement returns [SelectStatement retval]
  	: keySELECT c=selectElems keyFROM keyMAPPING? t=simpleId (keyWITH w=withClause)?
  							{retval = new SelectStatement($c.retval, $t.text, $w.retval);};
  							
  familyDefinitionList returns [List<FamilyDefinition> 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);}
  