/* * 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; } // 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];