sq/drivers/sqlite3/internal/sqlparser/SQLiteLexer.g4
Neil O'Toole f07edef14d
Add flag --src.schema (#326)
* Support for --src.schema in commands "slq", "sql", and "inspect"
2023-11-18 17:05:48 -07:00

244 lines
7.2 KiB
ANTLR

/*
* 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, bart@big-o.nl
*/
// $antlr-format alignTrailingComments on, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments off, useTab off
// $antlr-format allowShortRulesOnASingleLine on, alignSemicolons ownLine
lexer grammar SQLiteLexer;
options { caseInsensitive = true; }
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_] [A-Z_0-9]*
; // TODO check: needs more chars in set
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];