| /* |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| lexer grammar SQLLexer; |
| |
| @header { |
| } |
| |
| @members { |
| } |
| |
| |
| /* |
| =============================================================================== |
| Tokens for Case Insensitive Keywords |
| =============================================================================== |
| */ |
| fragment A |
| : 'A' | 'a'; |
| |
| fragment B |
| : 'B' | 'b'; |
| |
| fragment C |
| : 'C' | 'c'; |
| |
| fragment D |
| : 'D' | 'd'; |
| |
| fragment E |
| : 'E' | 'e'; |
| |
| fragment F |
| : 'F' | 'f'; |
| |
| fragment G |
| : 'G' | 'g'; |
| |
| fragment H |
| : 'H' | 'h'; |
| |
| fragment I |
| : 'I' | 'i'; |
| |
| fragment J |
| : 'J' | 'j'; |
| |
| fragment K |
| : 'K' | 'k'; |
| |
| fragment L |
| : 'L' | 'l'; |
| |
| fragment M |
| : 'M' | 'm'; |
| |
| fragment N |
| : 'N' | 'n'; |
| |
| fragment O |
| : 'O' | 'o'; |
| |
| fragment P |
| : 'P' | 'p'; |
| |
| fragment Q |
| : 'Q' | 'q'; |
| |
| fragment R |
| : 'R' | 'r'; |
| |
| fragment S |
| : 'S' | 's'; |
| |
| fragment T |
| : 'T' | 't'; |
| |
| fragment U |
| : 'U' | 'u'; |
| |
| fragment V |
| : 'V' | 'v'; |
| |
| fragment W |
| : 'W' | 'w'; |
| |
| fragment X |
| : 'X' | 'x'; |
| |
| fragment Y |
| : 'Y' | 'y'; |
| |
| fragment Z |
| : 'Z' | 'z'; |
| |
| /* |
| =============================================================================== |
| Reserved Keywords |
| =============================================================================== |
| */ |
| |
| AS : A S; |
| ALL : A L L; |
| AND : A N D; |
| ANY : A N Y; |
| ASYMMETRIC : A S Y M M E T R I C; |
| ASC : A S C; |
| |
| |
| BOTH : B O T H; |
| |
| CASE : C A S E; |
| CAST : C A S T; |
| CREATE : C R E A T E; |
| CROSS : C R O S S; |
| CURRENT_DATE: C U R R E N T UNDERLINE D A T E; |
| CURRENT_TIME: C U R R E N T UNDERLINE T I M E; |
| CURRENT_TIMESTAMP: C U R R E N T UNDERLINE T I M E S T A M P; |
| |
| DESC : D E S C; |
| DISTINCT : D I S T I N C T; |
| |
| END : E N D; |
| ELSE : E L S E; |
| EXCEPT : E X C E P T; |
| |
| FALSE : F A L S E; |
| FULL : F U L L; |
| FROM : F R O M; |
| |
| GROUP : G R O U P; |
| |
| HAVING : H A V I N G; |
| |
| ILIKE : I L I K E; |
| IN : I N; |
| INNER : I N N E R; |
| INTERSECT : I N T E R S E C T; |
| INTO : I N T O; |
| IS : I S; |
| |
| JOIN : J O I N; |
| |
| LEADING : L E A D I N G; |
| LEFT : L E F T; |
| LIKE : L I K E; |
| LIMIT : L I M I T; |
| |
| NATURAL : N A T U R A L; |
| NOT : N O T; |
| NULL : N U L L; |
| NULLS : N U L L S; |
| |
| ON : O N; |
| OR : O R; |
| ORDER : O R D E R; |
| OUTER : O U T E R; |
| OVER : O V E R; |
| RIGHT : R I G H T; |
| SELECT : S E L E C T; |
| SOME : S O M E; |
| SYMMETRIC : S Y M M E T R I C; |
| |
| TABLE : T A B L E; |
| THEN : T H E N; |
| TRAILING : T R A I L I N G; |
| TRUE : T R U E; |
| |
| UNION : U N I O N; |
| UNIQUE : U N I Q U E; |
| USING : U S I N G; |
| |
| WHEN : W H E N; |
| WHERE : W H E R E; |
| WITH : W I T H; |
| WINDOW : W I N D O W; |
| |
| /* |
| =============================================================================== |
| Non Reserved Keywords |
| =============================================================================== |
| */ |
| AVG : A V G; |
| ADD: A D D; |
| ALTER : A L T E R; |
| |
| BETWEEN : B E T W E E N; |
| BY : B Y; |
| |
| CATALOG : C A T A L O G; |
| CENTURY : C E N T U R Y; |
| CHARACTER : C H A R A C T E R; |
| COLLECT : C O L L E C T; |
| COALESCE : C O A L E S C E; |
| COLUMN : C O L U M N; |
| COUNT : C O U N T; |
| CUBE : C U B E; |
| CUME_DIST : C U M E UNDERLINE D I S T; |
| CURRENT : C U R R E N T; |
| |
| DAY : D A Y; |
| DEFAULT : D E F A U L T; |
| DATABASE : D A T A B A S E; |
| DEC : D E C; |
| DECADE : D E C A D E; |
| DENSE_RANK : D E N S E UNDERLINE R A N K; |
| DOW : D O W; |
| DOY : D O Y; |
| DROP : D R O P; |
| |
| EPOCH : E P O C H; |
| EVERY : E V E R Y; |
| EXCLUDE : E X C L U D E; |
| EXISTS : E X I S T S; |
| EXPLAIN : E X P L A I N; |
| EXTERNAL : E X T E R N A L; |
| EXTRACT : E X T R A C T; |
| |
| FILTER : F I L T E R; |
| FIRST : F I R S T; |
| FIRST_VALUE : F I R S T UNDERLINE V A L U E; |
| FOLLOWING : F O L L O W I N G; |
| FORMAT : F O R M A T; |
| FUSION : F U S I O N; |
| |
| GLOBAL : G L O B A L; |
| GROUPING : G R O U P I N G; |
| |
| HASH : H A S H; |
| HOUR : H O U R; |
| |
| IF : I F; |
| INDEX : I N D E X; |
| INSERT : I N S E R T; |
| INTERSECTION : I N T E R S E C T I O N; |
| ISODOW : I S O D O W; |
| ISOYEAR : I S O Y E A R; |
| |
| LAG : L A G; |
| LAST : L A S T; |
| LAST_VALUE : L A S T UNDERLINE V A L U E; |
| LEAD : L E A D; |
| LESS : L E S S; |
| LIST : L I S T; |
| LOCATION : L O C A T I O N; |
| |
| MAX : M A X; |
| MAXVALUE : M A X V A L U E; |
| MICROSECONDS : M I C R O S E C O N D S; |
| MILLENNIUM : M I L L E N N I U M; |
| MILLISECONDS : M I L L I S E C O N D S; |
| MIN : M I N; |
| MINUTE : M I N U T E; |
| MONTH : M O N T H; |
| |
| NATIONAL : N A T I O N A L; |
| NULLIF : N U L L I F; |
| NO : N O; |
| |
| OVERWRITE : O V E R W R I T E; |
| OTHERS: O T H E R S; |
| |
| PARTITION : P A R T I T I O N; |
| PARTITIONS : P A R T I T I O N S; |
| PERCENT_RANK : P E R C E N T UNDERLINE R A N K; |
| PRECEDING : P R E C E D I N G; |
| PRECISION : P R E C I S I O N; |
| PURGE : P U R G E; |
| PROPERTY : P R O P E R T Y; |
| |
| QUARTER : Q U A R T E R; |
| |
| RANGE : R A N G E; |
| RANK : R A N K; |
| REGEXP : R E G E X P; |
| RENAME : R E N A M E; |
| REPAIR : R E P A I R; |
| RESET : R E S E T; |
| RLIKE : R L I K E; |
| ROLLUP : R O L L U P; |
| ROW : R O W; |
| ROWS : R O W S; |
| ROW_NUMBER : R O W UNDERLINE N U M B E R; |
| |
| SECOND : S E C O N D; |
| SESSION : S E S S I O N; |
| SET : S E T; |
| SIMILAR : S I M I L A R; |
| STDDEV_POP : S T D D E V UNDERLINE P O P; |
| STDDEV_SAMP : S T D D E V UNDERLINE S A M P; |
| SUBPARTITION : S U B P A R T I T I O N; |
| SUM : S U M; |
| |
| TABLESPACE : T A B L E S P A C E; |
| THAN : T H A N; |
| TIES : T I E S; |
| TIMEZONE: T I M E Z O N E; |
| TIMEZONE_HOUR: T I M E Z O N E UNDERLINE H O U R; |
| TIMEZONE_MINUTE: T I M E Z O N E UNDERLINE M I N U T E; |
| TRIM : T R I M; |
| TO : T O; |
| TRUNCATE : T R U N C A T E; |
| |
| UNBOUNDED : U N B O U N D E D; |
| UNKNOWN : U N K N O W N; |
| |
| VALUES : V A L U E S; |
| VAR_SAMP : V A R UNDERLINE S A M P; |
| VAR_POP : V A R UNDERLINE P O P; |
| VARYING : V A R Y I N G; |
| |
| WEEK : W E E K; |
| |
| YEAR : Y E A R; |
| |
| ZONE : Z O N E; |
| |
| |
| /* |
| =============================================================================== |
| Data Type Tokens |
| =============================================================================== |
| */ |
| BOOLEAN : B O O L E A N; |
| BOOL : B O O L; |
| BIT : B I T; |
| VARBIT : V A R B I T; |
| |
| INT1 : I N T '1'; |
| INT2 : I N T '2'; |
| INT4 : I N T '4'; |
| INT8 : I N T '8'; |
| |
| TINYINT : T I N Y I N T; // alias for INT1 |
| SMALLINT : S M A L L I N T; // alias for INT2 |
| INT : I N T; // alias for INT4 |
| INTEGER : I N T E G E R; // alias - INT4 |
| BIGINT : B I G I N T; // alias for INT8 |
| |
| FLOAT4 : F L O A T '4'; |
| FLOAT8 : F L O A T '8'; |
| |
| REAL : R E A L; // alias for FLOAT4 |
| FLOAT : F L O A T; // alias for FLOAT8 |
| DOUBLE : D O U B L E; // alias for FLOAT8 |
| |
| NUMERIC : N U M E R I C; |
| DECIMAL : D E C I M A L; // alias for number |
| |
| CHAR : C H A R; |
| VARCHAR : V A R C H A R; |
| NCHAR : N C H A R; |
| NVARCHAR : N V A R C H A R; |
| |
| DATE : D A T E; |
| INTERVAL: I N T E R V A L; |
| TIME : T I M E; |
| TIMETZ : T I M E T Z; |
| TIMESTAMP : T I M E S T A M P; |
| TIMESTAMPTZ : T I M E S T A M P T Z; |
| |
| TEXT : T E X T; |
| |
| BINARY : B I N A R Y; |
| VARBINARY : V A R B I N A R Y; |
| BLOB : B L O B; |
| BYTEA : B Y T E A; // alias for BLOB |
| |
| // complex types |
| ARRAY : A R R A Y; |
| MAP : M A P; |
| RECORD : R E C O R D; |
| |
| // Operators |
| Similar_To : '~'; |
| Not_Similar_To : '!~'; |
| Similar_To_Case_Insensitive : '~*'; |
| Not_Similar_To_Case_Insensitive : '!~*'; |
| |
| // Cast Operator |
| CAST_EXPRESSION |
| : COLON COLON |
| ; |
| |
| ASSIGN : ':='; |
| EQUAL : '='; |
| COLON : ':'; |
| SEMI_COLON : ';'; |
| COMMA : ','; |
| CONCATENATION_OPERATOR : VERTICAL_BAR VERTICAL_BAR; |
| NOT_EQUAL : '<>' | '!=' | '~='| '^=' ; |
| LTH : '<' ; |
| LEQ : '<='; |
| GTH : '>'; |
| GEQ : '>='; |
| LEFT_PAREN : '('; |
| RIGHT_PAREN : ')'; |
| PLUS : '+'; |
| MINUS : '-'; |
| MULTIPLY: '*'; |
| DIVIDE : '/'; |
| MODULAR : '%'; |
| DOT : '.'; |
| UNDERLINE : '_'; |
| VERTICAL_BAR : '|'; |
| QUOTE : '\''; |
| DOUBLE_QUOTE : '"'; |
| |
| NUMBER : Digit+; |
| |
| fragment |
| Digit : '0'..'9'; |
| |
| REAL_NUMBER |
| : ('0'..'9')+ '.' ('0'..'9')* EXPONENT? |
| | '.' ('0'..'9')+ EXPONENT? |
| | ('0'..'9')+ EXPONENT |
| ; |
| |
| BlockComment |
| : '/*' .*? '*/' -> skip |
| ; |
| |
| LineComment |
| : '--' ~[\r\n]* -> skip |
| ; |
| |
| /* |
| =============================================================================== |
| Identifiers |
| =============================================================================== |
| */ |
| |
| Regular_Identifier |
| : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|Digit|'_')* { setText(getText().toLowerCase()); } |
| ; |
| |
| Quoted_Identifier |
| : DOUBLE_QUOTE ( ESC_SEQ | ~('\\'|'"') )* DOUBLE_QUOTE { setText(getText().substring(1, getText().length()-1)); } |
| ; |
| |
| /* |
| =============================================================================== |
| Literal |
| =============================================================================== |
| */ |
| |
| // Some Unicode Character Ranges |
| fragment |
| Control_Characters : '\u0001' .. '\u001F'; |
| fragment |
| Extended_Control_Characters : '\u0080' .. '\u009F'; |
| |
| Character_String_Literal |
| : QUOTE ( ESC_SEQ | ~('\\'|'\'') )* QUOTE |
| ; |
| |
| fragment |
| EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ; |
| |
| fragment |
| HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ; |
| |
| fragment |
| ESC_SEQ |
| : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') |
| | UNICODE_ESC |
| | OCTAL_ESC |
| ; |
| |
| fragment |
| OCTAL_ESC |
| : '\\' ('0'..'3') ('0'..'7') ('0'..'7') |
| | '\\' ('0'..'7') ('0'..'7') |
| | '\\' ('0'..'7') |
| ; |
| |
| fragment |
| UNICODE_ESC |
| : '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT |
| ; |
| |
| |
| /* |
| =============================================================================== |
| Whitespace Tokens |
| =============================================================================== |
| */ |
| |
| Space |
| : ' ' -> skip |
| ; |
| |
| White_Space |
| : ( Control_Characters | Extended_Control_Characters )+ -> skip |
| ; |
| |
| |
| BAD |
| : . -> skip |
| ; |