blob: 50303966f71a13765a7012500f2999bd615ef843 [file] [log] [blame]
/*
* The MIT License (MIT)
*
* Copyright (c) 2020 by Martin Mirchev
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
* associated documentation files (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge, publish, distribute,
* sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or
* substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
* NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Project : sqlite-parser; an ANTLR4 grammar for SQLite https://github.com/bkiers/sqlite-parser
* Developed by : Bart Kiers, [email protected]
*/
// $antlr-format alignTrailingComments on, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments off, useTab off
// $antlr-format allowShortRulesOnASingleLine on, alignSemicolons ownLine
lexer grammar SQLiteLexer;
options {
caseInsensitive = true;
}
// TODO: Add JSON operators -> and ->> added in 3.38.0
SCOL : ';';
DOT : '.';
OPEN_PAR : '(';
CLOSE_PAR : ')';
COMMA : ',';
ASSIGN : '=';
STAR : '*';
PLUS : '+';
MINUS : '-';
TILDE : '~';
PIPE2 : '||';
DIV : '/';
MOD : '%';
LT2 : '<<';
GT2 : '>>';
AMP : '&';
PIPE : '|';
LT : '<';
LT_EQ : '<=';
GT : '>';
GT_EQ : '>=';
EQ : '==';
NOT_EQ1 : '!=';
NOT_EQ2 : '<>';
// http://www.sqlite.org/lang_keywords.html
ABORT_ : 'ABORT';
ACTION_ : 'ACTION';
ADD_ : 'ADD';
AFTER_ : 'AFTER';
ALL_ : 'ALL';
ALTER_ : 'ALTER';
ANALYZE_ : 'ANALYZE';
AND_ : 'AND';
AS_ : 'AS';
ASC_ : 'ASC';
ATTACH_ : 'ATTACH';
AUTOINCREMENT_ : 'AUTOINCREMENT';
BEFORE_ : 'BEFORE';
BEGIN_ : 'BEGIN';
BETWEEN_ : 'BETWEEN';
BY_ : 'BY';
CASCADE_ : 'CASCADE';
CASE_ : 'CASE';
CAST_ : 'CAST';
CHECK_ : 'CHECK';
COLLATE_ : 'COLLATE';
COLUMN_ : 'COLUMN';
COMMIT_ : 'COMMIT';
CONFLICT_ : 'CONFLICT';
CONSTRAINT_ : 'CONSTRAINT';
CREATE_ : 'CREATE';
CROSS_ : 'CROSS';
CURRENT_DATE_ : 'CURRENT_DATE';
CURRENT_TIME_ : 'CURRENT_TIME';
CURRENT_TIMESTAMP_ : 'CURRENT_TIMESTAMP';
DATABASE_ : 'DATABASE';
DEFAULT_ : 'DEFAULT';
DEFERRABLE_ : 'DEFERRABLE';
DEFERRED_ : 'DEFERRED';
DELETE_ : 'DELETE';
DESC_ : 'DESC';
DETACH_ : 'DETACH';
DISTINCT_ : 'DISTINCT';
DROP_ : 'DROP';
EACH_ : 'EACH';
ELSE_ : 'ELSE';
END_ : 'END';
ESCAPE_ : 'ESCAPE';
EXCEPT_ : 'EXCEPT';
EXCLUSIVE_ : 'EXCLUSIVE';
EXISTS_ : 'EXISTS';
EXPLAIN_ : 'EXPLAIN';
FAIL_ : 'FAIL';
FOR_ : 'FOR';
FOREIGN_ : 'FOREIGN';
FROM_ : 'FROM';
FULL_ : 'FULL';
GLOB_ : 'GLOB';
GROUP_ : 'GROUP';
HAVING_ : 'HAVING';
IF_ : 'IF';
IGNORE_ : 'IGNORE';
IMMEDIATE_ : 'IMMEDIATE';
IN_ : 'IN';
INDEX_ : 'INDEX';
INDEXED_ : 'INDEXED';
INITIALLY_ : 'INITIALLY';
INNER_ : 'INNER';
INSERT_ : 'INSERT';
INSTEAD_ : 'INSTEAD';
INTERSECT_ : 'INTERSECT';
INTO_ : 'INTO';
IS_ : 'IS';
ISNULL_ : 'ISNULL';
JOIN_ : 'JOIN';
KEY_ : 'KEY';
LEFT_ : 'LEFT';
LIKE_ : 'LIKE';
LIMIT_ : 'LIMIT';
MATCH_ : 'MATCH';
NATURAL_ : 'NATURAL';
NO_ : 'NO';
NOT_ : 'NOT';
NOTNULL_ : 'NOTNULL';
NULL_ : 'NULL';
OF_ : 'OF';
OFFSET_ : 'OFFSET';
ON_ : 'ON';
OR_ : 'OR';
ORDER_ : 'ORDER';
OUTER_ : 'OUTER';
PLAN_ : 'PLAN';
PRAGMA_ : 'PRAGMA';
PRIMARY_ : 'PRIMARY';
QUERY_ : 'QUERY';
RAISE_ : 'RAISE';
RECURSIVE_ : 'RECURSIVE';
REFERENCES_ : 'REFERENCES';
REGEXP_ : 'REGEXP';
REINDEX_ : 'REINDEX';
RELEASE_ : 'RELEASE';
RENAME_ : 'RENAME';
REPLACE_ : 'REPLACE';
RESTRICT_ : 'RESTRICT';
RETURNING_ : 'RETURNING';
RIGHT_ : 'RIGHT';
ROLLBACK_ : 'ROLLBACK';
ROW_ : 'ROW';
ROWS_ : 'ROWS';
SAVEPOINT_ : 'SAVEPOINT';
SELECT_ : 'SELECT';
SET_ : 'SET';
TABLE_ : 'TABLE';
TEMP_ : 'TEMP';
TEMPORARY_ : 'TEMPORARY';
THEN_ : 'THEN';
TO_ : 'TO';
TRANSACTION_ : 'TRANSACTION';
TRIGGER_ : 'TRIGGER';
UNION_ : 'UNION';
UNIQUE_ : 'UNIQUE';
UPDATE_ : 'UPDATE';
USING_ : 'USING';
VACUUM_ : 'VACUUM';
VALUES_ : 'VALUES';
VIEW_ : 'VIEW';
VIRTUAL_ : 'VIRTUAL';
WHEN_ : 'WHEN';
WHERE_ : 'WHERE';
WITH_ : 'WITH';
WITHOUT_ : 'WITHOUT';
FIRST_VALUE_ : 'FIRST_VALUE';
OVER_ : 'OVER';
PARTITION_ : 'PARTITION';
RANGE_ : 'RANGE';
PRECEDING_ : 'PRECEDING';
UNBOUNDED_ : 'UNBOUNDED';
CURRENT_ : 'CURRENT';
FOLLOWING_ : 'FOLLOWING';
CUME_DIST_ : 'CUME_DIST';
DENSE_RANK_ : 'DENSE_RANK';
LAG_ : 'LAG';
LAST_VALUE_ : 'LAST_VALUE';
LEAD_ : 'LEAD';
NTH_VALUE_ : 'NTH_VALUE';
NTILE_ : 'NTILE';
PERCENT_RANK_ : 'PERCENT_RANK';
RANK_ : 'RANK';
ROW_NUMBER_ : 'ROW_NUMBER';
GENERATED_ : 'GENERATED';
ALWAYS_ : 'ALWAYS';
STORED_ : 'STORED';
TRUE_ : 'TRUE';
FALSE_ : 'FALSE';
WINDOW_ : 'WINDOW';
NULLS_ : 'NULLS';
FIRST_ : 'FIRST';
LAST_ : 'LAST';
FILTER_ : 'FILTER';
GROUPS_ : 'GROUPS';
EXCLUDE_ : 'EXCLUDE';
TIES_ : 'TIES';
OTHERS_ : 'OTHERS';
DO_ : 'DO';
NOTHING_ : 'NOTHING';
IDENTIFIER:
'"' (~'"' | '""')* '"'
| '`' (~'`' | '``')* '`'
| '[' ~']'* ']'
| [A-Z_\u007f-\uffff] [A-Z_0-9\u007f-\uffff]*
;
NUMERIC_LITERAL: ((DIGIT+ ('.' DIGIT*)?) | ('.' DIGIT+)) ('E' [-+]? DIGIT+)? | '0x' HEX_DIGIT+;
BIND_PARAMETER: '?' DIGIT* | [:@$] IDENTIFIER;
STRING_LITERAL: '\'' ( ~'\'' | '\'\'')* '\'';
BLOB_LITERAL: 'X' STRING_LITERAL;
SINGLE_LINE_COMMENT: '--' ~[\r\n]* (('\r'? '\n') | EOF) -> channel(HIDDEN);
MULTILINE_COMMENT: '/*' .*? '*/' -> channel(HIDDEN);
SPACES: [ \u000B\t\r\n] -> channel(HIDDEN);
UNEXPECTED_CHAR: .;
fragment HEX_DIGIT : [0-9A-F];
fragment DIGIT : [0-9];