mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-30 03:22:14 +00:00
291 lines
6.0 KiB
ANTLR
291 lines
6.0 KiB
ANTLR
lexer grammar ClickHouseLexer;
|
|
|
|
// NOTE: don't forget to add new keywords to the parser rule "keyword"!
|
|
|
|
// Keywords
|
|
|
|
ADD: A D D;
|
|
AFTER: A F T E R;
|
|
ALIAS: A L I A S;
|
|
ALL: A L L;
|
|
ALTER: A L T E R;
|
|
AND: A N D;
|
|
ANTI: A N T I;
|
|
ANY: A N Y;
|
|
ARRAY: A R R A Y;
|
|
AS: A S;
|
|
ASCENDING: A S C | A S C E N D I N G;
|
|
ASOF: A S O F;
|
|
AST: A S T;
|
|
ASYNC: A S Y N C;
|
|
ATTACH: A T T A C H;
|
|
BETWEEN: B E T W E E N;
|
|
BOTH: B O T H;
|
|
BY: B Y;
|
|
CASE: C A S E;
|
|
CAST: C A S T;
|
|
CHECK: C H E C K;
|
|
CLEAR: C L E A R;
|
|
CLUSTER: C L U S T E R;
|
|
CODEC: C O D E C;
|
|
COLLATE: C O L L A T E;
|
|
COLUMN: C O L U M N;
|
|
COMMENT: C O M M E N T;
|
|
CONSTRAINT: C O N S T R A I N T;
|
|
CREATE: C R E A T E;
|
|
CROSS: C R O S S;
|
|
CUBE: C U B E;
|
|
CURRENT: C U R R E N T;
|
|
DATABASE: D A T A B A S E;
|
|
DATABASES: D A T A B A S E S;
|
|
DATE: D A T E;
|
|
DAY: D A Y;
|
|
DEDUPLICATE: D E D U P L I C A T E;
|
|
DEFAULT: D E F A U L T;
|
|
DELAY: D E L A Y;
|
|
DELETE: D E L E T E;
|
|
DESC: D E S C;
|
|
DESCENDING: D E S C E N D I N G;
|
|
DESCRIBE: D E S C R I B E;
|
|
DETACH: D E T A C H;
|
|
DICTIONARIES: D I C T I O N A R I E S;
|
|
DICTIONARY: D I C T I O N A R Y;
|
|
DISK: D I S K;
|
|
DISTINCT: D I S T I N C T;
|
|
DISTRIBUTED: D I S T R I B U T E D;
|
|
DROP: D R O P;
|
|
ELSE: E L S E;
|
|
END: E N D;
|
|
ENGINE: E N G I N E;
|
|
EVENTS: E V E N T S;
|
|
EXISTS: E X I S T S;
|
|
EXPLAIN: E X P L A I N;
|
|
EXPRESSION: E X P R E S S I O N;
|
|
EXTRACT: E X T R A C T;
|
|
FETCHES: F E T C H E S;
|
|
FINAL: F I N A L;
|
|
FIRST: F I R S T;
|
|
FLUSH: F L U S H;
|
|
FOLLOWING: F O L L O W I N G;
|
|
FOR: F O R;
|
|
FORMAT: F O R M A T;
|
|
FREEZE: F R E E Z E;
|
|
FROM: F R O M;
|
|
FULL: F U L L;
|
|
FUNCTION: F U N C T I O N;
|
|
GLOBAL: G L O B A L;
|
|
GRANULARITY: G R A N U L A R I T Y;
|
|
GROUP: G R O U P;
|
|
HAVING: H A V I N G;
|
|
HIERARCHICAL: H I E R A R C H I C A L;
|
|
HOUR: H O U R;
|
|
ID: I D;
|
|
IF: I F;
|
|
ILIKE: I L I K E;
|
|
IN: I N;
|
|
INDEX: I N D E X;
|
|
INF: I N F | I N F I N I T Y;
|
|
INJECTIVE: I N J E C T I V E;
|
|
INNER: I N N E R;
|
|
INSERT: I N S E R T;
|
|
INTERVAL: I N T E R V A L;
|
|
INTO: I N T O;
|
|
IS: I S;
|
|
IS_OBJECT_ID: I S UNDERSCORE O B J E C T UNDERSCORE I D;
|
|
JOIN: J O I N;
|
|
KEY: K E Y;
|
|
KILL: K I L L;
|
|
LAST: L A S T;
|
|
LAYOUT: L A Y O U T;
|
|
LEADING: L E A D I N G;
|
|
LEFT: L E F T;
|
|
LIFETIME: L I F E T I M E;
|
|
LIKE: L I K E;
|
|
LIMIT: L I M I T;
|
|
LIVE: L I V E;
|
|
LOCAL: L O C A L;
|
|
LOGS: L O G S;
|
|
MATERIALIZE: M A T E R I A L I Z E;
|
|
MATERIALIZED: M A T E R I A L I Z E D;
|
|
MAX: M A X;
|
|
MERGES: M E R G E S;
|
|
MIN: M I N;
|
|
MINUTE: M I N U T E;
|
|
MODIFY: M O D I F Y;
|
|
MONTH: M O N T H;
|
|
MOVE: M O V E;
|
|
MUTATION: M U T A T I O N;
|
|
NAN_SQL: N A N; // conflicts with macro NAN
|
|
NO: N O;
|
|
NOT: N O T;
|
|
NULL_SQL: N U L L; // conflicts with macro NULL
|
|
NULLS: N U L L S;
|
|
OFFSET: O F F S E T;
|
|
ON: O N;
|
|
OPTIMIZE: O P T I M I Z E;
|
|
OR: O R;
|
|
ORDER: O R D E R;
|
|
OUTER: O U T E R;
|
|
OUTFILE: O U T F I L E;
|
|
OVER: O V E R;
|
|
PARTITION: P A R T I T I O N;
|
|
POPULATE: P O P U L A T E;
|
|
PRECEDING: P R E C E D I N G;
|
|
PREWHERE: P R E W H E R E;
|
|
PRIMARY: P R I M A R Y;
|
|
PROJECTION: P R O J E C T I O N;
|
|
QUARTER: Q U A R T E R;
|
|
RANGE: R A N G E;
|
|
RELOAD: R E L O A D;
|
|
REMOVE: R E M O V E;
|
|
RENAME: R E N A M E;
|
|
REPLACE: R E P L A C E;
|
|
REPLICA: R E P L I C A;
|
|
REPLICATED: R E P L I C A T E D;
|
|
RIGHT: R I G H T;
|
|
ROLLUP: R O L L U P;
|
|
ROW: R O W;
|
|
ROWS: R O W S;
|
|
SAMPLE: S A M P L E;
|
|
SECOND: S E C O N D;
|
|
SELECT: S E L E C T;
|
|
SEMI: S E M I;
|
|
SENDS: S E N D S;
|
|
SET: S E T;
|
|
SETTINGS: S E T T I N G S;
|
|
SHOW: S H O W;
|
|
SOURCE: S O U R C E;
|
|
START: S T A R T;
|
|
STOP: S T O P;
|
|
SUBSTRING: S U B S T R I N G;
|
|
SYNC: S Y N C;
|
|
SYNTAX: S Y N T A X;
|
|
SYSTEM: S Y S T E M;
|
|
TABLE: T A B L E;
|
|
TABLES: T A B L E S;
|
|
TEMPORARY: T E M P O R A R Y;
|
|
TEST: T E S T;
|
|
THEN: T H E N;
|
|
TIES: T I E S;
|
|
TIMEOUT: T I M E O U T;
|
|
TIMESTAMP: T I M E S T A M P;
|
|
TO: T O;
|
|
TOP: T O P;
|
|
TOTALS: T O T A L S;
|
|
TRAILING: T R A I L I N G;
|
|
TRIM: T R I M;
|
|
TRUNCATE: T R U N C A T E;
|
|
TTL: T T L;
|
|
TYPE: T Y P E;
|
|
UNBOUNDED: U N B O U N D E D;
|
|
UNION: U N I O N;
|
|
UPDATE: U P D A T E;
|
|
USE: U S E;
|
|
USING: U S I N G;
|
|
UUID: U U I D;
|
|
VALUES: V A L U E S;
|
|
VIEW: V I E W;
|
|
VOLUME: V O L U M E;
|
|
WATCH: W A T C H;
|
|
WEEK: W E E K;
|
|
WHEN: W H E N;
|
|
WHERE: W H E R E;
|
|
WINDOW: W I N D O W;
|
|
WITH: W I T H;
|
|
YEAR: Y E A R | Y Y Y Y;
|
|
|
|
JSON_FALSE: 'false';
|
|
JSON_TRUE: 'true';
|
|
|
|
// Tokens
|
|
|
|
IDENTIFIER
|
|
: (LETTER | UNDERSCORE) (LETTER | UNDERSCORE | DEC_DIGIT)*
|
|
| BACKQUOTE ( ~([\\`]) | (BACKSLASH .) | (BACKQUOTE BACKQUOTE) )* BACKQUOTE
|
|
| QUOTE_DOUBLE ( ~([\\"]) | (BACKSLASH .) | (QUOTE_DOUBLE QUOTE_DOUBLE) )* QUOTE_DOUBLE
|
|
;
|
|
FLOATING_LITERAL
|
|
: HEXADECIMAL_LITERAL DOT HEX_DIGIT* (P | E) (PLUS | DASH)? DEC_DIGIT+
|
|
| HEXADECIMAL_LITERAL (P | E) (PLUS | DASH)? DEC_DIGIT+
|
|
| DECIMAL_LITERAL DOT DEC_DIGIT* E (PLUS | DASH)? DEC_DIGIT+
|
|
| DOT DECIMAL_LITERAL E (PLUS | DASH)? DEC_DIGIT+
|
|
| DECIMAL_LITERAL E (PLUS | DASH)? DEC_DIGIT+
|
|
;
|
|
OCTAL_LITERAL: '0' OCT_DIGIT+;
|
|
DECIMAL_LITERAL: DEC_DIGIT+;
|
|
HEXADECIMAL_LITERAL: '0' X HEX_DIGIT+;
|
|
|
|
// It's important that quote-symbol is a single character.
|
|
STRING_LITERAL: QUOTE_SINGLE ( ~([\\']) | (BACKSLASH .) | (QUOTE_SINGLE QUOTE_SINGLE) )* QUOTE_SINGLE;
|
|
|
|
// Alphabet and allowed symbols
|
|
|
|
fragment A: [aA];
|
|
fragment B: [bB];
|
|
fragment C: [cC];
|
|
fragment D: [dD];
|
|
fragment E: [eE];
|
|
fragment F: [fF];
|
|
fragment G: [gG];
|
|
fragment H: [hH];
|
|
fragment I: [iI];
|
|
fragment J: [jJ];
|
|
fragment K: [kK];
|
|
fragment L: [lL];
|
|
fragment M: [mM];
|
|
fragment N: [nN];
|
|
fragment O: [oO];
|
|
fragment P: [pP];
|
|
fragment Q: [qQ];
|
|
fragment R: [rR];
|
|
fragment S: [sS];
|
|
fragment T: [tT];
|
|
fragment U: [uU];
|
|
fragment V: [vV];
|
|
fragment W: [wW];
|
|
fragment X: [xX];
|
|
fragment Y: [yY];
|
|
fragment Z: [zZ];
|
|
|
|
fragment LETTER: [a-zA-Z];
|
|
fragment OCT_DIGIT: [0-7];
|
|
fragment DEC_DIGIT: [0-9];
|
|
fragment HEX_DIGIT: [0-9a-fA-F];
|
|
|
|
ARROW: '->';
|
|
ASTERISK: '*';
|
|
BACKQUOTE: '`';
|
|
BACKSLASH: '\\';
|
|
COLON: ':';
|
|
COMMA: ',';
|
|
CONCAT: '||';
|
|
DASH: '-';
|
|
DOT: '.';
|
|
EQ_DOUBLE: '==';
|
|
EQ_SINGLE: '=';
|
|
GE: '>=';
|
|
GT: '>';
|
|
LBRACE: '{';
|
|
LBRACKET: '[';
|
|
LE: '<=';
|
|
LPAREN: '(';
|
|
LT: '<';
|
|
NOT_EQ: '!=' | '<>';
|
|
PERCENT: '%';
|
|
PLUS: '+';
|
|
QUERY: '?';
|
|
QUOTE_DOUBLE: '"';
|
|
QUOTE_SINGLE: '\'';
|
|
RBRACE: '}';
|
|
RBRACKET: ']';
|
|
RPAREN: ')';
|
|
SEMICOLON: ';';
|
|
SLASH: '/';
|
|
UNDERSCORE: '_';
|
|
|
|
// Comments and whitespace
|
|
|
|
MULTI_LINE_COMMENT: '/*' .*? '*/' -> skip;
|
|
SINGLE_LINE_COMMENT: '--' ~('\n'|'\r')* ('\n' | '\r' | EOF) -> skip;
|
|
WHITESPACE: [ \u000B\u000C\t\r\n] -> skip; // '\n' can be part of multiline single query
|