anchor.diff:  	}
   	;
   
  +select_core
  +	: SELECT (DISTINCT | ALL)? (expr)? (AS name)? 
  +	  (FROM)?
  +	  (WHERE expr)?
  +	  (GROUP BY expr (',' expr)* (OFFSET expr)? (HAVING expr)?)?
  +	;
  +
  +compound_operator
  +	: UNION (ALL)?
  +	| INTERSECT
  +	| EXCEPT
  +	;
  +name
  +	: STRING
  +	;
  +
  +expr
  +	: property
  +	| integer_literal
  +	| real_literal
  +	| string_literal
  +	| true
  +	| false
  +	| '{' (name ':' expr) (',' name ':' expr )* '}'
  +	| ']' expr (',' expr )* ']'
  +	;
  +
  +property
  +	: STRING 
  +	;
  +
  +integer_literal
  +	: NUMBER
  +	;
  +
  +real_literal
  +	: FLOAT
  +	;
  +
  +string_literal
  +	: STRING
  +	;
  +
  +true
  +	: 'true'
  +	;
  +	
  +false
  +	: 'false'
  +	;
  +	
  +	
  +	
  +	
  +	
  +	
  +	
  +	
   table_name [uSQL::SQLFrom *sqlFrom]
   	: ID {
   		uSQL::SQLTable *sqlTable = new uSQL::SQLTable();
  
positive.code: 		ls = NULL;
  		os = NULL;
  	}
  	: SELECT ASTERISK FROM tl=table_list (ws=where_section)? (ss=sort_section)? (ls=limit_section)? (os=offset_section)? 
  	{
  		// SELECT
  		uSQL::SQLSelect *sqlCmd = new uSQL::SQLSelect();
  
negative.code: 		| '\n'
  		) {$channel=HIDDEN;}
  	;
  
  STRING
  	:  ( ESC_SEQ | ~('\\'|'\'') )*
  //	:  '\'' ( ESC_SEQ | ~('\\'|'\'') )* '\''
  	;
  
  fragment
  ESC_SEQ
  