github.com/iasthc/atlas/cmd/atlas@v0.0.0-20230523071841-73246df3f88d/internal/sqlparse/sqliteparse/Lexer.g4 (about) 1 /* 2 * The MIT License (MIT) 3 * 4 * Copyright (c) 2020 by Martin Mirchev 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 7 * associated documentation files (the "Software"), to deal in the Software without restriction, 8 * including without limitation the rights to use, copy, modify, merge, publish, distribute, 9 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 10 * furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice shall be included in all copies or 13 * substantial portions of the Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT 16 * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 18 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 20 * 21 * Project : sqlite-parser; an ANTLR4 grammar for SQLite https://github.com/bkiers/sqlite-parser 22 * Developed by : Bart Kiers, bart@big-o.nl 23 */ 24 25 // $antlr-format alignTrailingComments on, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments off, useTab off 26 // $antlr-format allowShortRulesOnASingleLine on, alignSemicolons ownLine 27 28 lexer grammar Lexer; 29 30 options { caseInsensitive = true; } 31 32 SCOL: ';'; 33 DOT: '.'; 34 OPEN_PAR: '('; 35 CLOSE_PAR: ')'; 36 COMMA: ','; 37 ASSIGN: '='; 38 STAR: '*'; 39 PLUS: '+'; 40 MINUS: '-'; 41 TILDE: '~'; 42 PIPE2: '||'; 43 DIV: '/'; 44 MOD: '%'; 45 LT2: '<<'; 46 GT2: '>>'; 47 AMP: '&'; 48 PIPE: '|'; 49 LT: '<'; 50 LT_EQ: '<='; 51 GT: '>'; 52 GT_EQ: '>='; 53 EQ: '=='; 54 NOT_EQ1: '!='; 55 NOT_EQ2: '<>'; 56 57 // http://www.sqlite.org/lang_keywords.html 58 ABORT_: 'ABORT'; 59 ACTION_: 'ACTION'; 60 ADD_: 'ADD'; 61 AFTER_: 'AFTER'; 62 ALL_: 'ALL'; 63 ALTER_: 'ALTER'; 64 ANALYZE_: 'ANALYZE'; 65 AND_: 'AND'; 66 AS_: 'AS'; 67 ASC_: 'ASC'; 68 ATTACH_: 'ATTACH'; 69 AUTOINCREMENT_: 'AUTOINCREMENT'; 70 BEFORE_: 'BEFORE'; 71 BEGIN_: 'BEGIN'; 72 BETWEEN_: 'BETWEEN'; 73 BY_: 'BY'; 74 CASCADE_: 'CASCADE'; 75 CASE_: 'CASE'; 76 CAST_: 'CAST'; 77 CHECK_: 'CHECK'; 78 COLLATE_: 'COLLATE'; 79 COLUMN_: 'COLUMN'; 80 COMMIT_: 'COMMIT'; 81 CONFLICT_: 'CONFLICT'; 82 CONSTRAINT_: 'CONSTRAINT'; 83 CREATE_: 'CREATE'; 84 CROSS_: 'CROSS'; 85 CURRENT_DATE_: 'CURRENT_DATE'; 86 CURRENT_TIME_: 'CURRENT_TIME'; 87 CURRENT_TIMESTAMP_: 'CURRENT_TIMESTAMP'; 88 DATABASE_: 'DATABASE'; 89 DEFAULT_: 'DEFAULT'; 90 DEFERRABLE_: 'DEFERRABLE'; 91 DEFERRED_: 'DEFERRED'; 92 DELETE_: 'DELETE'; 93 DESC_: 'DESC'; 94 DETACH_: 'DETACH'; 95 DISTINCT_: 'DISTINCT'; 96 DROP_: 'DROP'; 97 EACH_: 'EACH'; 98 ELSE_: 'ELSE'; 99 END_: 'END'; 100 ESCAPE_: 'ESCAPE'; 101 EXCEPT_: 'EXCEPT'; 102 EXCLUSIVE_: 'EXCLUSIVE'; 103 EXISTS_: 'EXISTS'; 104 EXPLAIN_: 'EXPLAIN'; 105 FAIL_: 'FAIL'; 106 FOR_: 'FOR'; 107 FOREIGN_: 'FOREIGN'; 108 FROM_: 'FROM'; 109 FULL_: 'FULL'; 110 GLOB_: 'GLOB'; 111 GROUP_: 'GROUP'; 112 HAVING_: 'HAVING'; 113 IF_: 'IF'; 114 IGNORE_: 'IGNORE'; 115 IMMEDIATE_: 'IMMEDIATE'; 116 IN_: 'IN'; 117 INDEX_: 'INDEX'; 118 INDEXED_: 'INDEXED'; 119 INITIALLY_: 'INITIALLY'; 120 INNER_: 'INNER'; 121 INSERT_: 'INSERT'; 122 INSTEAD_: 'INSTEAD'; 123 INTERSECT_: 'INTERSECT'; 124 INTO_: 'INTO'; 125 IS_: 'IS'; 126 ISNULL_: 'ISNULL'; 127 JOIN_: 'JOIN'; 128 KEY_: 'KEY'; 129 LEFT_: 'LEFT'; 130 LIKE_: 'LIKE'; 131 LIMIT_: 'LIMIT'; 132 MATCH_: 'MATCH'; 133 NATURAL_: 'NATURAL'; 134 NO_: 'NO'; 135 NOT_: 'NOT'; 136 NOTNULL_: 'NOTNULL'; 137 NULL_: 'NULL'; 138 OF_: 'OF'; 139 OFFSET_: 'OFFSET'; 140 ON_: 'ON'; 141 OR_: 'OR'; 142 ORDER_: 'ORDER'; 143 OUTER_: 'OUTER'; 144 PLAN_: 'PLAN'; 145 PRAGMA_: 'PRAGMA'; 146 PRIMARY_: 'PRIMARY'; 147 QUERY_: 'QUERY'; 148 RAISE_: 'RAISE'; 149 RECURSIVE_: 'RECURSIVE'; 150 REFERENCES_: 'REFERENCES'; 151 REGEXP_: 'REGEXP'; 152 REINDEX_: 'REINDEX'; 153 RELEASE_: 'RELEASE'; 154 RENAME_: 'RENAME'; 155 REPLACE_: 'REPLACE'; 156 RESTRICT_: 'RESTRICT'; 157 RETURNING_: 'RETURNING'; 158 RIGHT_: 'RIGHT'; 159 ROLLBACK_: 'ROLLBACK'; 160 ROW_: 'ROW'; 161 ROWS_: 'ROWS'; 162 SAVEPOINT_: 'SAVEPOINT'; 163 SELECT_: 'SELECT'; 164 SET_: 'SET'; 165 TABLE_: 'TABLE'; 166 TEMP_: 'TEMP'; 167 TEMPORARY_: 'TEMPORARY'; 168 THEN_: 'THEN'; 169 TO_: 'TO'; 170 TRANSACTION_: 'TRANSACTION'; 171 TRIGGER_: 'TRIGGER'; 172 UNION_: 'UNION'; 173 UNIQUE_: 'UNIQUE'; 174 UPDATE_: 'UPDATE'; 175 USING_: 'USING'; 176 VACUUM_: 'VACUUM'; 177 VALUES_: 'VALUES'; 178 VIEW_: 'VIEW'; 179 VIRTUAL_: 'VIRTUAL'; 180 WHEN_: 'WHEN'; 181 WHERE_: 'WHERE'; 182 WITH_: 'WITH'; 183 WITHOUT_: 'WITHOUT'; 184 FIRST_VALUE_: 'FIRST_VALUE'; 185 OVER_: 'OVER'; 186 PARTITION_: 'PARTITION'; 187 RANGE_: 'RANGE'; 188 PRECEDING_: 'PRECEDING'; 189 UNBOUNDED_: 'UNBOUNDED'; 190 CURRENT_: 'CURRENT'; 191 FOLLOWING_: 'FOLLOWING'; 192 CUME_DIST_: 'CUME_DIST'; 193 DENSE_RANK_: 'DENSE_RANK'; 194 LAG_: 'LAG'; 195 LAST_VALUE_: 'LAST_VALUE'; 196 LEAD_: 'LEAD'; 197 NTH_VALUE_: 'NTH_VALUE'; 198 NTILE_: 'NTILE'; 199 PERCENT_RANK_: 'PERCENT_RANK'; 200 RANK_: 'RANK'; 201 ROW_NUMBER_: 'ROW_NUMBER'; 202 GENERATED_: 'GENERATED'; 203 ALWAYS_: 'ALWAYS'; 204 STORED_: 'STORED'; 205 TRUE_: 'TRUE'; 206 FALSE_: 'FALSE'; 207 WINDOW_: 'WINDOW'; 208 NULLS_: 'NULLS'; 209 FIRST_: 'FIRST'; 210 LAST_: 'LAST'; 211 FILTER_: 'FILTER'; 212 GROUPS_: 'GROUPS'; 213 EXCLUDE_: 'EXCLUDE'; 214 TIES_: 'TIES'; 215 OTHERS_: 'OTHERS'; 216 DO_: 'DO'; 217 NOTHING_: 'NOTHING'; 218 219 IDENTIFIER: 220 '"' (~'"' | '""')* '"' 221 | '`' (~'`' | '``')* '`' 222 | '[' ~']'* ']' 223 | [A-Z_] [A-Z_0-9]* 224 ; // TODO check: needs more chars in set 225 226 NUMERIC_LITERAL: ((DIGIT+ ('.' DIGIT*)?) | ('.' DIGIT+)) ('E' [-+]? DIGIT+)? | '0x' HEX_DIGIT+; 227 228 BIND_PARAMETER: '?' DIGIT* | [:@$] IDENTIFIER; 229 230 STRING_LITERAL: '\'' ( ~'\'' | '\'\'')* '\''; 231 232 BLOB_LITERAL: 'X' STRING_LITERAL; 233 234 SINGLE_LINE_COMMENT: '--' ~[\r\n]* (('\r'? '\n') | EOF) -> channel(HIDDEN); 235 236 MULTILINE_COMMENT: '/*' .*? '*/' -> channel(HIDDEN); 237 238 SPACES: [ \u000B\t\r\n] -> channel(HIDDEN); 239 240 UNEXPECTED_CHAR: .; 241 242 fragment HEX_DIGIT: [0-9A-F]; 243 fragment DIGIT: [0-9];