1+
2+ // $antlr-format alignColons trailing, alignLabels true, alignLexerCommands true, alignSemicolons ownLine, alignTrailers true
3+ // $antlr-format alignTrailingComments true, allowShortBlocksOnASingleLine true, allowShortRulesOnASingleLine true, columnLimit 150
4+ // $antlr-format maxEmptyLinesToKeep 1, minEmptyLines 0, reflowComments false, singleLineOverrulesHangingColon true, useTab false
5+
6+ lexer grammar ClickHouseLexer;
7+
8+ // NOTE: don't forget to add new keywords to the parser rule "keyword"!
9+
10+ // Keywords
11+
12+ ADD : A D D ;
13+ AFTER : A F T E R ;
14+ ALIAS : A L I A S ;
15+ ALL : A L L ;
16+ ALTER : A L T E R ;
17+ AND : A N D ;
18+ ANTI : A N T I ;
19+ ANY : A N Y ;
20+ ARRAY : A R R A Y ;
21+ AS : A S ;
22+ ASCENDING : A S C | A S C E N D I N G ;
23+ ASOF : A S O F ;
24+ AST : A S T ;
25+ ASYNC : A S Y N C ;
26+ ATTACH : A T T A C H ;
27+ BETWEEN : B E T W E E N ;
28+ BOTH : B O T H ;
29+ BY : B Y ;
30+ CASE : C A S E ;
31+ CAST : C A S T ;
32+ CHECK : C H E C K ;
33+ CLEAR : C L E A R ;
34+ CLUSTER : C L U S T E R ;
35+ CODEC : C O D E C ;
36+ COLLATE : C O L L A T E ;
37+ COLUMN : C O L U M N ;
38+ COMMENT : C O M M E N T ;
39+ CONSTRAINT : C O N S T R A I N T ;
40+ CREATE : C R E A T E ;
41+ CROSS : C R O S S ;
42+ CUBE : C U B E ;
43+ CURRENT : C U R R E N T ;
44+ CURRENT_USER : C U R R E N T ' _' U S E R ;
45+ DATABASE : D A T A B A S E ;
46+ DATABASES : D A T A B A S E S ;
47+ DATE : D A T E ;
48+ DAY : D A Y ;
49+ DEDUPLICATE : D E D U P L I C A T E ;
50+ DEFAULT : D E F A U L T ;
51+ DELAY : D E L A Y ;
52+ DELETE : D E L E T E ;
53+ DESC : D E S C ;
54+ DESCENDING : D E S C E N D I N G ;
55+ DESCRIBE : D E S C R I B E ;
56+ DETACH : D E T A C H ;
57+ DICTIONARIES : D I C T I O N A R I E S ;
58+ DICTIONARY : D I C T I O N A R Y ;
59+ DISK : D I S K ;
60+ DISTINCT : D I S T I N C T ;
61+ DISTRIBUTED : D I S T R I B U T E D ;
62+ DROP : D R O P ;
63+ ELSE : E L S E ;
64+ END : E N D ;
65+ ENGINE : E N G I N E ;
66+ EVENTS : E V E N T S ;
67+ EXISTS : E X I S T S ;
68+ EXPLAIN : E X P L A I N ;
69+ EXPRESSION : E X P R E S S I O N ;
70+ EXCEPT : E X C E P T ;
71+ EXTRACT : E X T R A C T ;
72+ FETCHES : F E T C H E S ;
73+ FINAL : F I N A L ;
74+ FIRST : F I R S T ;
75+ FLUSH : F L U S H ;
76+ FOLLOWING : F O L L O W I N G ;
77+ FOR : F O R ;
78+ FORMAT : F O R M A T ;
79+ FREEZE : F R E E Z E ;
80+ FROM : F R O M ;
81+ FULL : F U L L ;
82+ FUNCTION : F U N C T I O N ;
83+ GLOBAL : G L O B A L ;
84+ GRANULARITY : G R A N U L A R I T Y ;
85+ GROUP : G R O U P ;
86+ HAVING : H A V I N G ;
87+ HIERARCHICAL : H I E R A R C H I C A L ;
88+ HOUR : H O U R ;
89+ ID : I D ;
90+ IF : I F ;
91+ ILIKE : I L I K E ;
92+ IN : I N ;
93+ INDEX : I N D E X ;
94+ INF : I N F | I N F I N I T Y ;
95+ INJECTIVE : I N J E C T I V E ;
96+ INNER : I N N E R ;
97+ INSERT : I N S E R T ;
98+ INTERVAL : I N T E R V A L ;
99+ INTO : I N T O ;
100+ IS : I S ;
101+ IS_OBJECT_ID : I S UNDERSCORE O B J E C T UNDERSCORE I D ;
102+ JOIN : J O I N ;
103+ KEY : K E Y ;
104+ KILL : K I L L ;
105+ LAST : L A S T ;
106+ LAYOUT : L A Y O U T ;
107+ LEADING : L E A D I N G ;
108+ LEFT : L E F T ;
109+ LIFETIME : L I F E T I M E ;
110+ LIKE : L I K E ;
111+ LIMIT : L I M I T ;
112+ LIVE : L I V E ;
113+ LOCAL : L O C A L ;
114+ LOGS : L O G S ;
115+ MATERIALIZE : M A T E R I A L I Z E ;
116+ MATERIALIZED : M A T E R I A L I Z E D ;
117+ MAX : M A X ;
118+ MERGES : M E R G E S ;
119+ MIN : M I N ;
120+ MINUTE : M I N U T E ;
121+ MODIFY : M O D I F Y ;
122+ MONTH : M O N T H ;
123+ MOVE : M O V E ;
124+ MUTATION : M U T A T I O N ;
125+ NAN_SQL : N A N ; // conflicts with macro NAN
126+ NO : N O ;
127+ NONE : N O N E ;
128+ NOT : N O T ;
129+ NULL_SQL : N U L L ; // conflicts with macro NULL
130+ NULLS : N U L L S ;
131+ OFFSET : O F F S E T ;
132+ ON : O N ;
133+ OPTIMIZE : O P T I M I Z E ;
134+ OR : O R ;
135+ ORDER : O R D E R ;
136+ OUTER : O U T E R ;
137+ OUTFILE : O U T F I L E ;
138+ OVER : O V E R ;
139+ PARTITION : P A R T I T I O N ;
140+ POPULATE : P O P U L A T E ;
141+ PRECEDING : P R E C E D I N G ;
142+ PREWHERE : P R E W H E R E ;
143+ PRIMARY : P R I M A R Y ;
144+ PROJECTION : P R O J E C T I O N ;
145+ QUARTER : Q U A R T E R ;
146+ RANGE : R A N G E ;
147+ RELOAD : R E L O A D ;
148+ REMOVE : R E M O V E ;
149+ RENAME : R E N A M E ;
150+ REPLACE : R E P L A C E ;
151+ REPLICA : R E P L I C A ;
152+ REPLICATED : R E P L I C A T E D ;
153+ RIGHT : R I G H T ;
154+ ROLE : R O L E ;
155+ ROLLUP : R O L L U P ;
156+ ROW : R O W ;
157+ ROWS : R O W S ;
158+ SAMPLE : S A M P L E ;
159+ SECOND : S E C O N D ;
160+ SELECT : S E L E C T ;
161+ SEMI : S E M I ;
162+ SENDS : S E N D S ;
163+ SET : S E T ;
164+ SETTINGS : S E T T I N G S ;
165+ SHOW : S H O W ;
166+ SOURCE : S O U R C E ;
167+ START : S T A R T ;
168+ STOP : S T O P ;
169+ SUBSTRING : S U B S T R I N G ;
170+ SYNC : S Y N C ;
171+ SYNTAX : S Y N T A X ;
172+ SYSTEM : S Y S T E M ;
173+ TABLE : T A B L E ;
174+ TABLES : T A B L E S ;
175+ TEMPORARY : T E M P O R A R Y ;
176+ TEST : T E S T ;
177+ THEN : T H E N ;
178+ TIES : T I E S ;
179+ TIMEOUT : T I M E O U T ;
180+ TIMESTAMP : T I M E S T A M P ;
181+ TO : T O ;
182+ TOP : T O P ;
183+ TOTALS : T O T A L S ;
184+ TRAILING : T R A I L I N G ;
185+ TRIM : T R I M ;
186+ TRUNCATE : T R U N C A T E ;
187+ TTL : T T L ;
188+ TYPE : T Y P E ;
189+ UNBOUNDED : U N B O U N D E D ;
190+ UNION : U N I O N ;
191+ UPDATE : U P D A T E ;
192+ USE : U S E ;
193+ USING : U S I N G ;
194+ UUID : U U I D ;
195+ VALUES : V A L U E S ;
196+ VIEW : V I E W ;
197+ VOLUME : V O L U M E ;
198+ WATCH : W A T C H ;
199+ WEEK : W E E K ;
200+ WHEN : W H E N ;
201+ WHERE : W H E R E ;
202+ WINDOW : W I N D O W ;
203+ WITH : W I T H ;
204+ YEAR : Y E A R | Y Y Y Y ;
205+
206+ JSON_FALSE : ' false' ;
207+ JSON_TRUE : ' true' ;
208+
209+ // Tokens
210+
211+ IDENTIFIER : (LETTER | UNDERSCORE ) (LETTER | UNDERSCORE | DEC_DIGIT )*
212+ | BACKQUOTE ( ~([\\`]) | (BACKSLASH .) | (BACKQUOTE BACKQUOTE ))* BACKQUOTE
213+ | QUOTE_DOUBLE (~([\\" ]) | (BACKSLASH .) | (QUOTE_DOUBLE QUOTE_DOUBLE))* QUOTE_DOUBLE
214+ ;
215+ FLOATING_LITERAL:
216+ HEXADECIMAL_LITERAL DOT HEX_DIGIT* (P | E) (PLUS | DASH)? DEC_DIGIT+
217+ | HEXADECIMAL_LITERAL (P | E) (PLUS | DASH)? DEC_DIGIT+
218+ | DECIMAL_LITERAL DOT DEC_DIGIT* E (PLUS | DASH)? DEC_DIGIT+
219+ | DOT DECIMAL_LITERAL E (PLUS | DASH)? DEC_DIGIT+
220+ | DECIMAL_LITERAL E (PLUS | DASH)? DEC_DIGIT+
221+ ;
222+ OCTAL_LITERAL : '0' OCT_DIGIT+;
223+ DECIMAL_LITERAL : DEC_DIGIT+;
224+ HEXADECIMAL_LITERAL : '0' X HEX_DIGIT+;
225+
226+ // It's important that quote-symbol is a single character.
227+ STRING_LITERAL:
228+ QUOTE_SINGLE (~([\\ ']) | (BACKSLASH .) | (QUOTE_SINGLE QUOTE_SINGLE))* QUOTE_SINGLE
229+ ;
230+
231+ // Alphabet and allowed symbols
232+
233+ fragment A : [aA];
234+ fragment B : [bB];
235+ fragment C : [cC];
236+ fragment D : [dD];
237+ fragment E : [eE];
238+ fragment F : [fF];
239+ fragment G : [gG];
240+ fragment H : [hH];
241+ fragment I : [iI];
242+ fragment J : [jJ];
243+ fragment K : [kK];
244+ fragment L : [lL];
245+ fragment M : [mM];
246+ fragment N : [nN];
247+ fragment O : [oO];
248+ fragment P : [pP];
249+ fragment Q : [qQ];
250+ fragment R : [rR];
251+ fragment S : [sS];
252+ fragment T : [tT];
253+ fragment U : [uU];
254+ fragment V : [vV];
255+ fragment W : [wW];
256+ fragment X : [xX];
257+ fragment Y : [yY];
258+ fragment Z : [zZ];
259+
260+ fragment LETTER : [a-zA-Z];
261+ fragment OCT_DIGIT : [0-7];
262+ fragment DEC_DIGIT : [0-9];
263+ fragment HEX_DIGIT : [0-9a-fA-F];
264+
265+ ARROW : '->';
266+ ASTERISK : '*';
267+ BACKQUOTE : '`';
268+ BACKSLASH : '\\ ';
269+ COLON : ':';
270+ COMMA : ',';
271+ CONCAT : '||';
272+ DASH : '-';
273+ DOT : '.';
274+ EQ_DOUBLE : '==';
275+ EQ_SINGLE : '=';
276+ GE : '>=';
277+ GT : '>';
278+ LBRACE : '{';
279+ LBRACKET : '[';
280+ LE : '<=';
281+ LPAREN : '(';
282+ LT : '<';
283+ NOT_EQ : '!=' | '<>';
284+ PERCENT : '%';
285+ PLUS : '+';
286+ QUERY : '?';
287+ QUOTE_DOUBLE : '" ' ;
288+ QUOTE_SINGLE : ' \' ' ;
289+ RBRACE : ' }' ;
290+ RBRACKET : ' ]' ;
291+ RPAREN : ' )' ;
292+ SEMICOLON : ' ;' ;
293+ SLASH : ' /' ;
294+ UNDERSCORE : ' _' ;
295+
296+ // Comments and whitespace
297+
298+ MULTI_LINE_COMMENT : ' /*' .*? ' */' -> skip;
299+ SINGLE_LINE_COMMENT : (' --' | ' #!' | ' #' ) ~(' \n ' | ' \r ' )* (' \n ' | ' \r ' | EOF ) -> skip;
300+ WHITESPACE : [ \u000B\u000C\t\r\n] -> skip; // '\n' can be part of multiline single query
0 commit comments