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