anchor.diff:    	) -> channel(HIDDEN)
       ;
   
  -//COMMENT
  -//    :   ('//') ~('\n'|'\r')* '\r'? '\n'? {$channel=HIDDEN;}
  -//    |   '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
  -//    ;	
   COMMENT
       :  ( ('//') ~('\n'|'\r')* '\r'? '\n'? 
     //  |   '/*' ( options {greedy=false;} : . )* '*/' 
  
positive.code:       | annotation VESPA_GROUPING
        ;
  
  //selectvar_statement
  //      : CREATE ('temp' | 'temporary') TABLE ident AS LPAREN source_statement RPAREN -> ^(STATEMENT_SELECTVAR ident source_statement)
  //      ;
  selectvar_statement
        : CREATE ('temp' | 'temporary') TABLE ident AS LPAREN source_statement RPAREN
        ;
  
  
  typename
        : TYPE_BYTE | TYPE_INT16 | TYPE_INT32 | TYPE_INT64 | TYPE_STRING | TYPE_BOOLEAN | TYPE_TIMESTAMP
        | arrayType | mapType | TYPE_DOUBLE
        ;
  
  //arrayType
  //      : TYPE_ARRAY^ LT! typename GT!
  //      ;
  arrayType
        : TYPE_ARRAY LT typename GT
        ;
  
  //mapType
  //      : TYPE_MAP^ LT! typename GT!
  //      ;
  mapType
        : TYPE_MAP LT typename GT
        ;
  
  //output_spec
  //      : (OUTPUT^ AS! ident)
  //      | (OUTPUT! COUNT^ AS! ident)
  //      ;
  output_spec
        : (OUTPUT AS ident)
        | (OUTPUT COUNT AS ident)
        ;
  
  
  query_statement
      : merge_statement
  
negative.code: 	| LPAREN source_statement RPAREN
  	;
  
  select_statement
  	:	SELECT select_field_spec select_source? where? orderby? limit? offset? timeout? fallback?
      ;
  
  select_field_spec
  	:	project_spec
  	| 	STAR
  