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