/
MySQLBase.g4
87 lines (81 loc) · 1.48 KB
/
MySQLBase.g4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
lexer grammar MySQLBase;
@header {
}
SELECT: 'select';
FROM: 'from';
WHERE: 'where';
AND: 'and' | '&&';
OR: 'or' | '||';
XOR: 'xor';
IS: 'is';
NULL: 'null';
LIKE: 'like';
IN: 'in';
EXISTS: 'exists';
ALL: 'all';
ANY: 'any';
TRUE: 'true';
FALSE: 'false';
DIVIDE : 'div' | '/' ;
MOD: 'mod' | '%' ;
BETWEEN: 'between';
REGEXP: 'regexp';
PLUS : '+' ;
MINUS : '-' ;
NEGATION: '~' ;
VERTBAR : '|' ;
BITAND : '&' ;
POWER_OP: '^' ;
BINARY: 'binary';
SHIFT_LEFT : '<<' ;
SHIFT_RIGHT : '>>' ;
ESCAPE: 'escape';
ASTERISK: '*' ;
RPAREN : ')' ;
LPAREN : '(' ;
RBRACK : ']' ;
LBRACK : '[' ;
COLON : ':' ;
ALL_FIELDS : '.*' ;
EQ: '=';
LTH: '<';
GTH: '>';
NOT_EQ: '!=';
NOT: 'not';
LET: '<=';
GET: '>=';
SEMI: ';';
COMMA: ',';
DOT: '.';
COLLATE: 'collate';
INNER: 'inner';
OUTER: 'outer';
JOIN: 'join';
CROSS: 'cross';
USING: 'using';
INDEX: 'index';
KEY: 'key';
ORDER: 'order';
GROUP: 'group';
BY: 'by';
FOR: 'for';
USE: 'use';
IGNORE: 'ignore';
PARTITION: 'partition';
STRAIGHT_JOIN: 'straight_join';
NATURAL: 'natural';
LEFT: 'left';
RIGHT: 'right';
OJ: 'oj';
ON: 'on';
ID: ('a'..'z' | 'A' .. 'Z' | '_')+ ;
INT: '0'..'9'+ ;
NEWLINE: '\r' ? '\n' -> skip;
WS: (' ' | '\t' | '\n' | '\r')+ -> skip;
USER_VAR:
'@' (USER_VAR_SUBFIX1 | USER_VAR_SUBFIX2 | USER_VAR_SUBFIX3 | USER_VAR_SUBFIX4)
;
fragment USER_VAR_SUBFIX1: ( '`' (~'`' )+ '`' ) ;
fragment USER_VAR_SUBFIX2: ( '\'' (~'\'')+ '\'' ) ;
fragment USER_VAR_SUBFIX3: ( '\"' (~'\"')+ '\"' ) ;
fragment USER_VAR_SUBFIX4: ( 'A'..'Z' | 'a'..'z' | '_' | '$' | '0'..'9' | DOT )+ ;