123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- /*
- * 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;
- SCOL: ';';
- DOT: '.';
- OPEN_PAR: '(';
- CLOSE_PAR: ')';
- COMMA: ',';
- ASSIGN: '=';
- STAR: '*';
- PLUS: '+';
- PTR2: '->>';
- PTR: '->';
- 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_: A B O R T;
- ACTION_: A C T I O N;
- ADD_: A D D;
- AFTER_: A F T E R;
- ALL_: A L L;
- ALTER_: A L T E R;
- ANALYZE_: A N A L Y Z E;
- AND_: A N D;
- AS_: A S;
- ASC_: A S C;
- ATTACH_: A T T A C H;
- AUTOINCREMENT_: A U T O I N C R E M E N T;
- BEFORE_: B E F O R E;
- BEGIN_: B E G I N;
- BETWEEN_: B E T W E E N;
- BY_: B Y;
- CASCADE_: C A S C A D E;
- CASE_: C A S E;
- CAST_: C A S T;
- CHECK_: C H E C K;
- COLLATE_: C O L L A T E;
- COLUMN_: C O L U M N;
- COMMIT_: C O M M I T;
- CONFLICT_: C O N F L I C T;
- CONSTRAINT_: C O N S T R A I N T;
- CREATE_: C R E A T E;
- CROSS_: C R O S S;
- CURRENT_DATE_: C U R R E N T '_' D A T E;
- CURRENT_TIME_: C U R R E N T '_' T I M E;
- CURRENT_TIMESTAMP_: C U R R E N T '_' T I M E S T A M P;
- DATABASE_: D A T A B A S E;
- DEFAULT_: D E F A U L T;
- DEFERRABLE_: D E F E R R A B L E;
- DEFERRED_: D E F E R R E D;
- DELETE_: D E L E T E;
- DESC_: D E S C;
- DETACH_: D E T A C H;
- DISTINCT_: D I S T I N C T;
- DROP_: D R O P;
- EACH_: E A C H;
- ELSE_: E L S E;
- END_: E N D;
- ESCAPE_: E S C A P E;
- EXCEPT_: E X C E P T;
- EXCLUSIVE_: E X C L U S I V E;
- EXISTS_: E X I S T S;
- EXPLAIN_: E X P L A I N;
- FAIL_: F A I L;
- FOR_: F O R;
- FOREIGN_: F O R E I G N;
- FROM_: F R O M;
- FULL_: F U L L;
- GLOB_: G L O B;
- GROUP_: G R O U P;
- HAVING_: H A V I N G;
- IF_: I F;
- IGNORE_: I G N O R E;
- IMMEDIATE_: I M M E D I A T E;
- IN_: I N;
- INDEX_: I N D E X;
- INDEXED_: I N D E X E D;
- INITIALLY_: I N I T I A L L Y;
- INNER_: I N N E R;
- INSERT_: I N S E R T;
- INSTEAD_: I N S T E A D;
- INTERSECT_: I N T E R S E C T;
- INTO_: I N T O;
- IS_: I S;
- ISNULL_: I S N U L L;
- JOIN_: J O I N;
- KEY_: K E Y;
- LEFT_: L E F T;
- LIKE_: L I K E;
- LIMIT_: L I M I T;
- MATCH_: M A T C H;
- NATURAL_: N A T U R A L;
- NO_: N O;
- NOT_: N O T;
- NOTNULL_: N O T N U L L;
- NULL_: N U L L;
- OF_: O F;
- OFFSET_: O F F S E T;
- ON_: O N;
- OR_: O R;
- ORDER_: O R D E R;
- OUTER_: O U T E R;
- PLAN_: P L A N;
- PRAGMA_: P R A G M A;
- PRIMARY_: P R I M A R Y;
- QUERY_: Q U E R Y;
- RAISE_: R A I S E;
- RECURSIVE_: R E C U R S I V E;
- REFERENCES_: R E F E R E N C E S;
- REGEXP_: R E G E X P;
- REINDEX_: R E I N D E X;
- RELEASE_: R E L E A S E;
- RENAME_: R E N A M E;
- REPLACE_: R E P L A C E;
- RESTRICT_: R E S T R I C T;
- RETURNING_: R E T U R N I N G;
- RIGHT_: R I G H T;
- ROLLBACK_: R O L L B A C K;
- ROW_: R O W;
- ROWS_: R O W S;
- SAVEPOINT_: S A V E P O I N T;
- SELECT_: S E L E C T;
- SET_: S E T;
- STRICT_: S T R I C T;
- TABLE_: T A B L E;
- TEMP_: T E M P;
- TEMPORARY_: T E M P O R A R Y;
- THEN_: T H E N;
- TO_: T O;
- TRANSACTION_: T R A N S A C T I O N;
- TRIGGER_: T R I G G E R;
- UNION_: U N I O N;
- UNIQUE_: U N I Q U E;
- UPDATE_: U P D A T E;
- USING_: U S I N G;
- VACUUM_: V A C U U M;
- VALUES_: V A L U E S;
- VIEW_: V I E W;
- VIRTUAL_: V I R T U A L;
- WHEN_: W H E N;
- WHERE_: W H E R E;
- WITH_: W I T H;
- WITHOUT_: W I T H O U T;
- FIRST_VALUE_: F I R S T '_' V A L U E;
- OVER_: O V E R;
- PARTITION_: P A R T I T I O N;
- RANGE_: R A N G E;
- PRECEDING_: P R E C E D I N G;
- UNBOUNDED_: U N B O U N D E D;
- CURRENT_: C U R R E N T;
- FOLLOWING_: F O L L O W I N G;
- CUME_DIST_: C U M E '_' D I S T;
- DENSE_RANK_: D E N S E '_' R A N K;
- LAG_: L A G;
- LAST_VALUE_: L A S T '_' V A L U E;
- LEAD_: L E A D;
- NTH_VALUE_: N T H '_' V A L U E;
- NTILE_: N T I L E;
- PERCENT_RANK_: P E R C E N T '_' R A N K;
- RANK_: R A N K;
- ROW_NUMBER_: R O W '_' N U M B E R;
- GENERATED_: G E N E R A T E D;
- ALWAYS_: A L W A Y S;
- STORED_: S T O R E D;
- TRUE_: T R U E;
- FALSE_: F A L S E;
- WINDOW_: W I N D O W;
- NULLS_: N U L L S;
- FIRST_: F I R S T;
- LAST_: L A S T;
- FILTER_: F I L T E R;
- GROUPS_: G R O U P S;
- EXCLUDE_: E X C L U D E;
- TIES_: T I E S;
- OTHERS_: O T H E R S;
- DO_: D O;
- NOTHING_: N O T H I N G;
- IDENTIFIER:
- '"' (~'"' | '""')* '"'
- | '`' (~'`' | '``')* '`'
- | '[' ~']'* ']'
- | [a-zA-Z_] [a-zA-Z_0-9]*
- ; // TODO check: needs more chars in set
- NUMERIC_LITERAL: ((DIGIT+ ('.' DIGIT*)?) | ('.' DIGIT+)) (E [-+]? DIGIT+)? | '0x' HEX_DIGIT+;
- NUMBERED_BIND_PARAMETER: '?' DIGIT*;
- NAMED_BIND_PARAMETER: [:@$] 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-fA-F];
- fragment DIGIT: [0-9];
- fragment A: [aA];
- fragment B: [bB];
- fragment C: [cC];
- fragment D: [dD];
- fragment E: [eE];
- fragment F: [fF];
- fragment G: [gG];
- fragment H: [hH];
- fragment I: [iI];
- fragment J: [jJ];
- fragment K: [kK];
- fragment L: [lL];
- fragment M: [mM];
- fragment N: [nN];
- fragment O: [oO];
- fragment P: [pP];
- fragment Q: [qQ];
- fragment R: [rR];
- fragment S: [sS];
- fragment T: [tT];
- fragment U: [uU];
- fragment V: [vV];
- fragment W: [wW];
- fragment X: [xX];
- fragment Y: [yY];
- fragment Z: [zZ];
|