@plurnk/plurnk-mimetypes-text-postgresql 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -0
  3. package/dist/TextPostgresql.d.ts +7 -0
  4. package/dist/TextPostgresql.d.ts.map +1 -0
  5. package/dist/TextPostgresql.js +198 -0
  6. package/dist/TextPostgresql.js.map +1 -0
  7. package/dist/generated/PostgreSQLLexer.d.ts +640 -0
  8. package/dist/generated/PostgreSQLLexer.d.ts.map +1 -0
  9. package/dist/generated/PostgreSQLLexer.js +3359 -0
  10. package/dist/generated/PostgreSQLLexer.js.map +1 -0
  11. package/dist/generated/PostgreSQLLexerBase.d.ts +33 -0
  12. package/dist/generated/PostgreSQLLexerBase.d.ts.map +1 -0
  13. package/dist/generated/PostgreSQLLexerBase.js +92 -0
  14. package/dist/generated/PostgreSQLLexerBase.js.map +1 -0
  15. package/dist/generated/PostgreSQLParser.d.ts +10568 -0
  16. package/dist/generated/PostgreSQLParser.d.ts.map +1 -0
  17. package/dist/generated/PostgreSQLParser.js +93755 -0
  18. package/dist/generated/PostgreSQLParser.js.map +1 -0
  19. package/dist/generated/PostgreSQLParserBase.d.ts +9 -0
  20. package/dist/generated/PostgreSQLParserBase.d.ts.map +1 -0
  21. package/dist/generated/PostgreSQLParserBase.js +106 -0
  22. package/dist/generated/PostgreSQLParserBase.js.map +1 -0
  23. package/dist/generated/PostgreSQLParserVisitor.d.ts +5086 -0
  24. package/dist/generated/PostgreSQLParserVisitor.d.ts.map +1 -0
  25. package/dist/generated/PostgreSQLParserVisitor.js +4362 -0
  26. package/dist/generated/PostgreSQLParserVisitor.js.map +1 -0
  27. package/dist/index.d.ts +3 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +3 -0
  30. package/dist/index.js.map +1 -0
  31. package/grammar/PostgreSQLLexer.g4 +1476 -0
  32. package/grammar/PostgreSQLParser.g4 +5469 -0
  33. package/package.json +64 -0
@@ -0,0 +1,1476 @@
1
+ /*
2
+ based on
3
+ https://github.com/tunnelvisionlabs/antlr4-grammar-postgresql/blob/master/src/com/tunnelvisionlabs/postgresql/PostgreSqlLexer.g4
4
+ */
5
+
6
+ /*
7
+ * [The "MIT license"]
8
+ * Copyright (C) 2014 Sam Harwell, Tunnel Vision Laboratories, LLC
9
+ *
10
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ * of this software and associated documentation files (the "Software"), to deal
12
+ * in the Software without restriction, including without limitation the rights
13
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ * copies of the Software, and to permit persons to whom the Software is
15
+ * furnished to do so, subject to the following conditions:
16
+ *
17
+ * 1. The above copyright notice and this permission notice shall be included in
18
+ * all copies or substantial portions of the Software.
19
+ * 2. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+ * DEALINGS IN THE SOFTWARE.
26
+ * 3. Except as contained in this notice, the name of Tunnel Vision
27
+ * Laboratories, LLC. shall not be used in advertising or otherwise to
28
+ * promote the sale, use or other dealings in this Software without prior
29
+ * written authorization from Tunnel Vision Laboratories, LLC.
30
+ */
31
+
32
+ // $antlr-format alignTrailingComments true, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments false, useTab false
33
+ // $antlr-format allowShortRulesOnASingleLine true, allowShortBlocksOnASingleLine true, minEmptyLines 0, alignSemicolons ownLine
34
+ // $antlr-format alignColons trailing, singleLineOverrulesHangingColon true, alignLexerCommands true, alignLabels true, alignTrailers true
35
+
36
+ lexer grammar PostgreSQLLexer;
37
+ /* Reference:
38
+ * http://www.postgresql.org/docs/9.3/static/sql-syntax-lexical.html
39
+ */
40
+
41
+ options {
42
+ superClass = PostgreSQLLexerBase;
43
+ caseInsensitive = true;
44
+ }
45
+
46
+
47
+ // Insert here @header for C++ lexer.
48
+
49
+
50
+ Dollar: '$';
51
+
52
+ OPEN_PAREN: '(';
53
+
54
+ CLOSE_PAREN: ')';
55
+
56
+ OPEN_BRACKET: '[';
57
+
58
+ CLOSE_BRACKET: ']';
59
+
60
+ COMMA: ',';
61
+
62
+ SEMI: ';';
63
+
64
+ COLON: ':';
65
+
66
+ STAR: '*';
67
+
68
+ EQUAL: '=';
69
+
70
+ DOT: '.';
71
+ //NamedArgument : ':=';
72
+
73
+ PLUS: '+';
74
+
75
+ MINUS: '-';
76
+
77
+ SLASH: '/';
78
+
79
+ CARET: '^';
80
+
81
+ LT: '<';
82
+
83
+ GT: '>';
84
+
85
+ LESS_LESS: '<<';
86
+
87
+ GREATER_GREATER: '>>';
88
+
89
+ COLON_EQUALS: ':=';
90
+
91
+ LESS_EQUALS: '<=';
92
+
93
+ EQUALS_GREATER: '=>';
94
+
95
+ GREATER_EQUALS: '>=';
96
+
97
+ DOT_DOT: '..';
98
+
99
+ NOT_EQUALS: '<>';
100
+
101
+ TYPECAST: '::';
102
+
103
+ PERCENT: '%';
104
+
105
+ PARAM: '$' ([0-9])+;
106
+ //
107
+
108
+ // OPERATORS (4.1.3)
109
+
110
+ //
111
+
112
+ // this rule does not allow + or - at the end of a multi-character operator
113
+
114
+ Operator:
115
+ (
116
+ (
117
+ OperatorCharacter
118
+ | ('+' | '-' {this.CheckLaMinus()}? )+ (OperatorCharacter | '/' {this.CheckLaStar()}? )
119
+ | '/' {this.CheckLaStar()}?
120
+ )+
121
+ | // special handling for the single-character operators + and -
122
+ [+-]
123
+ )
124
+ //TODO somehow rewrite this part without using Actions
125
+ {this.HandleLessLessGreaterGreater();}
126
+ ;
127
+ /* This rule handles operators which end with + or -, and sets the token type to Operator. It is comprised of four
128
+ * parts, in order:
129
+ *
130
+ * 1. A prefix, which does not contain a character from the required set which allows + or - to appear at the end of
131
+ * the operator.
132
+ * 2. A character from the required set which allows + or - to appear at the end of the operator.
133
+ * 3. An optional sub-token which takes the form of an operator which does not include a + or - at the end of the
134
+ * sub-token.
135
+ * 4. A suffix sequence of + and - characters.
136
+ */
137
+
138
+ OperatorEndingWithPlusMinus:
139
+ (OperatorCharacterNotAllowPlusMinusAtEnd | '-' {this.CheckLaMinus()}? | '/' {this.CheckLaStar()}? )* OperatorCharacterAllowPlusMinusAtEnd Operator? (
140
+ '+'
141
+ | '-' {this.CheckLaMinus()}?
142
+ )+ -> type (Operator)
143
+ ;
144
+ // Each of the following fragment rules omits the +, -, and / characters, which must always be handled in a special way
145
+
146
+ // by the operator rules above.
147
+
148
+ fragment OperatorCharacter: [*<>=~!@%^&|`?#];
149
+ // these are the operator characters that don't count towards one ending with + or -
150
+
151
+ fragment OperatorCharacterNotAllowPlusMinusAtEnd: [*<>=+];
152
+ // an operator may end with + or - if it contains one of these characters
153
+
154
+ fragment OperatorCharacterAllowPlusMinusAtEnd: [~!@%^&|`?#];
155
+ //
156
+
157
+ // KEYWORDS (Appendix C)
158
+
159
+
160
+
161
+ JSON: 'JSON';
162
+ JSON_ARRAY: 'JSON_ARRAY';
163
+ JSON_ARRAYAGG: 'JSON_ARRAYAGG';
164
+ JSON_EXISTS: 'JSON_EXISTS';
165
+ JSON_OBJECT: 'JSON_OBJECT';
166
+ JSON_OBJECTAGG: 'JSON_OBJECTAGG';
167
+ JSON_QUERY: 'JSON_QUERY';
168
+ JSON_SCALAR: 'JSON_SCALAR';
169
+ JSON_SERIALIZE: 'JSON_SERIALIZE';
170
+ JSON_TABLE: 'JSON_TABLE';
171
+ JSON_VALUE: 'JSON_VALUE';
172
+ MERGE_ACTION: 'MERGE_ACTION';
173
+
174
+ SYSTEM_USER: 'SYSTEM_USER';
175
+
176
+ ABSENT: 'ABSENT';
177
+ ASENSITIVE: 'ASENSITIVE';
178
+ ATOMIC: 'ATOMIC';
179
+ BREADTH: 'BREATH';
180
+ COMPRESSION: 'COMPRESSION';
181
+ CONDITIONAL: 'CONDITIONAL';
182
+ DEPTH: 'DEPTH';
183
+ EMPTY_P: 'EMPTY';
184
+ FINALIZE: 'FINALIZE';
185
+ INDENT: 'INDENT';
186
+ KEEP: 'KEEP';
187
+ KEYS: 'KEYS';
188
+ NESTED: 'NESTED';
189
+ OMIT: 'OMIT';
190
+ PARAMETER: 'PARAMETER';
191
+ PATH: 'PATH';
192
+ PLAN: 'PLAN';
193
+ QUOTES: 'QUOTES';
194
+ SCALAR: 'SCALAR';
195
+ SOURCE: 'SOURCE';
196
+ STRING_P: 'STRING';
197
+ TARGET: 'TARGET';
198
+ UNCONDITIONAL: 'UNCONDITIONAL';
199
+
200
+ PERIOD: 'PERIOD';
201
+
202
+ FORMAT_LA: 'FORMAT_LA';
203
+
204
+ //
205
+
206
+ //
207
+
208
+ // reserved keywords
209
+
210
+ //
211
+
212
+ ALL: 'ALL';
213
+
214
+ ANALYSE: 'ANALYSE';
215
+
216
+ ANALYZE: 'ANALYZE';
217
+
218
+ AND: 'AND';
219
+
220
+ ANY: 'ANY';
221
+
222
+ ARRAY: 'ARRAY';
223
+
224
+ AS: 'AS';
225
+
226
+ ASC: 'ASC';
227
+
228
+ ASYMMETRIC: 'ASYMMETRIC';
229
+
230
+ BOTH: 'BOTH';
231
+
232
+ CASE: 'CASE';
233
+
234
+ CAST: 'CAST';
235
+
236
+ CHECK: 'CHECK';
237
+
238
+ COLLATE: 'COLLATE';
239
+
240
+ COLUMN: 'COLUMN';
241
+
242
+ CONSTRAINT: 'CONSTRAINT';
243
+
244
+ CREATE: 'CREATE';
245
+
246
+ CURRENT_CATALOG: 'CURRENT_CATALOG';
247
+
248
+ CURRENT_DATE: 'CURRENT_DATE';
249
+
250
+ CURRENT_ROLE: 'CURRENT_ROLE';
251
+
252
+ CURRENT_TIME: 'CURRENT_TIME';
253
+
254
+ CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP';
255
+
256
+ CURRENT_USER: 'CURRENT_USER';
257
+
258
+ DEFAULT: 'DEFAULT';
259
+
260
+ DEFERRABLE: 'DEFERRABLE';
261
+
262
+ DESC: 'DESC';
263
+
264
+ DISTINCT: 'DISTINCT';
265
+
266
+ DO: 'DO';
267
+
268
+ ELSE: 'ELSE';
269
+
270
+ EXCEPT: 'EXCEPT';
271
+
272
+ FALSE_P: 'FALSE';
273
+
274
+ FETCH: 'FETCH';
275
+
276
+ FOR: 'FOR';
277
+
278
+ FOREIGN: 'FOREIGN';
279
+
280
+ FROM: 'FROM';
281
+
282
+ GRANT: 'GRANT';
283
+
284
+ GROUP_P: 'GROUP';
285
+
286
+ HAVING: 'HAVING';
287
+
288
+ IN_P: 'IN';
289
+
290
+ INITIALLY: 'INITIALLY';
291
+
292
+ INTERSECT: 'INTERSECT';
293
+
294
+ INTO: 'INTO';
295
+
296
+ LATERAL_P: 'LATERAL';
297
+
298
+ LEADING: 'LEADING';
299
+
300
+ LIMIT: 'LIMIT';
301
+
302
+ LOCALTIME: 'LOCALTIME';
303
+
304
+ LOCALTIMESTAMP: 'LOCALTIMESTAMP';
305
+
306
+ NOT: 'NOT';
307
+
308
+ NULL_P: 'NULL';
309
+
310
+ OFFSET: 'OFFSET';
311
+
312
+ ON: 'ON';
313
+
314
+ ONLY: 'ONLY';
315
+
316
+ OR: 'OR';
317
+
318
+ ORDER: 'ORDER';
319
+
320
+ PLACING: 'PLACING';
321
+
322
+ PRIMARY: 'PRIMARY';
323
+
324
+ REFERENCES: 'REFERENCES';
325
+
326
+ RETURNING: 'RETURNING';
327
+
328
+ SELECT: 'SELECT';
329
+
330
+ SESSION_USER: 'SESSION_USER';
331
+
332
+ SOME: 'SOME';
333
+
334
+ SYMMETRIC: 'SYMMETRIC';
335
+
336
+ TABLE: 'TABLE';
337
+
338
+ THEN: 'THEN';
339
+
340
+ TO: 'TO';
341
+
342
+ TRAILING: 'TRAILING';
343
+
344
+ TRUE_P: 'TRUE';
345
+
346
+ UNION: 'UNION';
347
+
348
+ UNIQUE: 'UNIQUE';
349
+
350
+ USER: 'USER';
351
+
352
+ USING: 'USING';
353
+
354
+ VARIADIC: 'VARIADIC';
355
+
356
+ WHEN: 'WHEN';
357
+
358
+ WHERE: 'WHERE';
359
+
360
+ WINDOW: 'WINDOW';
361
+
362
+ WITH: 'WITH';
363
+
364
+ //
365
+
366
+ // reserved keywords (can be function or type)
367
+
368
+ //
369
+
370
+ AUTHORIZATION: 'AUTHORIZATION';
371
+
372
+ BINARY: 'BINARY';
373
+
374
+ COLLATION: 'COLLATION';
375
+
376
+ CONCURRENTLY: 'CONCURRENTLY';
377
+
378
+ CROSS: 'CROSS';
379
+
380
+ CURRENT_SCHEMA: 'CURRENT_SCHEMA';
381
+
382
+ FREEZE: 'FREEZE';
383
+
384
+ FULL: 'FULL';
385
+
386
+ ILIKE: 'ILIKE';
387
+
388
+ INNER_P: 'INNER';
389
+
390
+ IS: 'IS';
391
+
392
+ ISNULL: 'ISNULL';
393
+
394
+ JOIN: 'JOIN';
395
+
396
+ LEFT: 'LEFT';
397
+
398
+ LIKE: 'LIKE';
399
+
400
+ NATURAL: 'NATURAL';
401
+
402
+ NOTNULL: 'NOTNULL';
403
+
404
+ OUTER_P: 'OUTER';
405
+
406
+ OVER: 'OVER';
407
+
408
+ OVERLAPS: 'OVERLAPS';
409
+
410
+ RIGHT: 'RIGHT';
411
+
412
+ SIMILAR: 'SIMILAR';
413
+
414
+ VERBOSE: 'VERBOSE';
415
+ //
416
+
417
+ // non-reserved keywords
418
+
419
+ //
420
+
421
+ ABORT_P: 'ABORT';
422
+
423
+ ABSOLUTE_P: 'ABSOLUTE';
424
+
425
+ ACCESS: 'ACCESS';
426
+
427
+ ACTION: 'ACTION';
428
+
429
+ ADD_P: 'ADD';
430
+
431
+ ADMIN: 'ADMIN';
432
+
433
+ AFTER: 'AFTER';
434
+
435
+ AGGREGATE: 'AGGREGATE';
436
+
437
+ ALSO: 'ALSO';
438
+
439
+ ALTER: 'ALTER';
440
+
441
+ ALWAYS: 'ALWAYS';
442
+
443
+ ASSERTION: 'ASSERTION';
444
+
445
+ ASSIGNMENT: 'ASSIGNMENT';
446
+
447
+ AT: 'AT';
448
+
449
+ ATTRIBUTE: 'ATTRIBUTE';
450
+
451
+ BACKWARD: 'BACKWARD';
452
+
453
+ BEFORE: 'BEFORE';
454
+
455
+ BEGIN_P: 'BEGIN';
456
+
457
+ BY: 'BY';
458
+
459
+ CACHE: 'CACHE';
460
+
461
+ CALLED: 'CALLED';
462
+
463
+ CASCADE: 'CASCADE';
464
+
465
+ CASCADED: 'CASCADED';
466
+
467
+ CATALOG: 'CATALOG';
468
+
469
+ CHAIN: 'CHAIN';
470
+
471
+ CHARACTERISTICS: 'CHARACTERISTICS';
472
+
473
+ CHECKPOINT: 'CHECKPOINT';
474
+
475
+ CLASS: 'CLASS';
476
+
477
+ CLOSE: 'CLOSE';
478
+
479
+ CLUSTER: 'CLUSTER';
480
+
481
+ COMMENT: 'COMMENT';
482
+
483
+ COMMENTS: 'COMMENTS';
484
+
485
+ COMMIT: 'COMMIT';
486
+
487
+ COMMITTED: 'COMMITTED';
488
+
489
+ CONFIGURATION: 'CONFIGURATION';
490
+
491
+ CONNECTION: 'CONNECTION';
492
+
493
+ CONSTRAINTS: 'CONSTRAINTS';
494
+
495
+ CONTENT_P: 'CONTENT';
496
+
497
+ CONTINUE_P: 'CONTINUE';
498
+
499
+ CONVERSION_P: 'CONVERSION';
500
+
501
+ COPY: 'COPY';
502
+
503
+ COST: 'COST';
504
+
505
+ CSV: 'CSV';
506
+
507
+ CURSOR: 'CURSOR';
508
+
509
+ CYCLE: 'CYCLE';
510
+
511
+ DATA_P: 'DATA';
512
+
513
+ DATABASE: 'DATABASE';
514
+
515
+ DAY_P: 'DAY';
516
+
517
+ DEALLOCATE: 'DEALLOCATE';
518
+
519
+ DECLARE: 'DECLARE';
520
+
521
+ DEFAULTS: 'DEFAULTS';
522
+
523
+ DEFERRED: 'DEFERRED';
524
+
525
+ DEFINER: 'DEFINER';
526
+
527
+ DELETE_P: 'DELETE';
528
+
529
+ DELIMITER: 'DELIMITER';
530
+
531
+ DELIMITERS: 'DELIMITERS';
532
+
533
+ DICTIONARY: 'DICTIONARY';
534
+
535
+ DISABLE_P: 'DISABLE';
536
+
537
+ DISCARD: 'DISCARD';
538
+
539
+ DOCUMENT_P: 'DOCUMENT';
540
+
541
+ DOMAIN_P: 'DOMAIN';
542
+
543
+ DOUBLE_P: 'DOUBLE';
544
+
545
+ DROP: 'DROP';
546
+
547
+ EACH: 'EACH';
548
+
549
+ ENABLE_P: 'ENABLE';
550
+
551
+ ENCODING: 'ENCODING';
552
+
553
+ ENCRYPTED: 'ENCRYPTED';
554
+
555
+ ENUM_P: 'ENUM';
556
+
557
+ ESCAPE: 'ESCAPE';
558
+
559
+ EVENT: 'EVENT';
560
+
561
+ EXCLUDE: 'EXCLUDE';
562
+
563
+ EXCLUDING: 'EXCLUDING';
564
+
565
+ EXCLUSIVE: 'EXCLUSIVE';
566
+
567
+ EXECUTE: 'EXECUTE';
568
+
569
+ EXPLAIN: 'EXPLAIN';
570
+
571
+ EXTENSION: 'EXTENSION';
572
+
573
+ EXTERNAL: 'EXTERNAL';
574
+
575
+ FAMILY: 'FAMILY';
576
+
577
+ FIRST_P: 'FIRST';
578
+
579
+ FOLLOWING: 'FOLLOWING';
580
+
581
+ FORCE: 'FORCE';
582
+
583
+ FORWARD: 'FORWARD';
584
+
585
+ FUNCTION: 'FUNCTION';
586
+
587
+ FUNCTIONS: 'FUNCTIONS';
588
+
589
+ GLOBAL: 'GLOBAL';
590
+
591
+ GRANTED: 'GRANTED';
592
+
593
+ HANDLER: 'HANDLER';
594
+
595
+ HEADER_P: 'HEADER';
596
+
597
+ HOLD: 'HOLD';
598
+
599
+ HOUR_P: 'HOUR';
600
+
601
+ IDENTITY_P: 'IDENTITY';
602
+
603
+ IF_P: 'IF';
604
+
605
+ IMMEDIATE: 'IMMEDIATE';
606
+
607
+ IMMUTABLE: 'IMMUTABLE';
608
+
609
+ IMPLICIT_P: 'IMPLICIT';
610
+
611
+ INCLUDING: 'INCLUDING';
612
+
613
+ INCREMENT: 'INCREMENT';
614
+
615
+ INDEX: 'INDEX';
616
+
617
+ INDEXES: 'INDEXES';
618
+
619
+ INHERIT: 'INHERIT';
620
+
621
+ INHERITS: 'INHERITS';
622
+
623
+ INLINE_P: 'INLINE';
624
+
625
+ INSENSITIVE: 'INSENSITIVE';
626
+
627
+ INSERT: 'INSERT';
628
+
629
+ INSTEAD: 'INSTEAD';
630
+
631
+ INVOKER: 'INVOKER';
632
+
633
+ ISOLATION: 'ISOLATION';
634
+
635
+ KEY: 'KEY';
636
+
637
+ LABEL: 'LABEL';
638
+
639
+ LANGUAGE: 'LANGUAGE';
640
+
641
+ LARGE_P: 'LARGE';
642
+
643
+ LAST_P: 'LAST';
644
+ //LC_COLLATE : 'LC'_'COLLATE;
645
+
646
+ //LC_CTYPE : 'LC'_'CTYPE;
647
+
648
+ LEAKPROOF: 'LEAKPROOF';
649
+
650
+ LEVEL: 'LEVEL';
651
+
652
+ LISTEN: 'LISTEN';
653
+
654
+ LOAD: 'LOAD';
655
+
656
+ LOCAL: 'LOCAL';
657
+
658
+ LOCATION: 'LOCATION';
659
+
660
+ LOCK_P: 'LOCK';
661
+
662
+ MAPPING: 'MAPPING';
663
+
664
+ MATCH: 'MATCH';
665
+
666
+ MATCHED: 'MATCHED';
667
+
668
+ MATERIALIZED: 'MATERIALIZED';
669
+
670
+ MAXVALUE: 'MAXVALUE';
671
+
672
+ MERGE: 'MERGE';
673
+
674
+ MINUTE_P: 'MINUTE';
675
+
676
+ MINVALUE: 'MINVALUE';
677
+
678
+ MODE: 'MODE';
679
+
680
+ MONTH_P: 'MONTH';
681
+
682
+ MOVE: 'MOVE';
683
+
684
+ NAME_P: 'NAME';
685
+
686
+ NAMES: 'NAMES';
687
+
688
+ NEXT: 'NEXT';
689
+
690
+ NO: 'NO';
691
+
692
+ NOTHING: 'NOTHING';
693
+
694
+ NOTIFY: 'NOTIFY';
695
+
696
+ NOWAIT: 'NOWAIT';
697
+
698
+ NULLS_P: 'NULLS';
699
+
700
+ OBJECT_P: 'OBJECT';
701
+
702
+ OF: 'OF';
703
+
704
+ OFF: 'OFF';
705
+
706
+ OIDS: 'OIDS';
707
+
708
+ OPERATOR: 'OPERATOR';
709
+
710
+ OPTION: 'OPTION';
711
+
712
+ OPTIONS: 'OPTIONS';
713
+
714
+ OWNED: 'OWNED';
715
+
716
+ OWNER: 'OWNER';
717
+
718
+ PARSER: 'PARSER';
719
+
720
+ PARTIAL: 'PARTIAL';
721
+
722
+ PARTITION: 'PARTITION';
723
+
724
+ PASSING: 'PASSING';
725
+
726
+ PASSWORD: 'PASSWORD';
727
+
728
+ PLANS: 'PLANS';
729
+
730
+ PRECEDING: 'PRECEDING';
731
+
732
+ PREPARE: 'PREPARE';
733
+
734
+ PREPARED: 'PREPARED';
735
+
736
+ PRESERVE: 'PRESERVE';
737
+
738
+ PRIOR: 'PRIOR';
739
+
740
+ PRIVILEGES: 'PRIVILEGES';
741
+
742
+ PROCEDURAL: 'PROCEDURAL';
743
+
744
+ PROCEDURE: 'PROCEDURE';
745
+
746
+ PROGRAM: 'PROGRAM';
747
+
748
+ QUOTE: 'QUOTE';
749
+
750
+ RANGE: 'RANGE';
751
+
752
+ READ: 'READ';
753
+
754
+ REASSIGN: 'REASSIGN';
755
+
756
+ RECHECK: 'RECHECK';
757
+
758
+ RECURSIVE: 'RECURSIVE';
759
+
760
+ REF: 'REF';
761
+
762
+ REFRESH: 'REFRESH';
763
+
764
+ REINDEX: 'REINDEX';
765
+
766
+ RELATIVE_P: 'RELATIVE';
767
+
768
+ RELEASE: 'RELEASE';
769
+
770
+ RENAME: 'RENAME';
771
+
772
+ REPEATABLE: 'REPEATABLE';
773
+
774
+ REPLACE: 'REPLACE';
775
+
776
+ REPLICA: 'REPLICA';
777
+
778
+ RESET: 'RESET';
779
+
780
+ RESTART: 'RESTART';
781
+
782
+ RESTRICT: 'RESTRICT';
783
+
784
+ RETURNS: 'RETURNS';
785
+
786
+ REVOKE: 'REVOKE';
787
+
788
+ ROLE: 'ROLE';
789
+
790
+ ROLLBACK: 'ROLLBACK';
791
+
792
+ ROWS: 'ROWS';
793
+
794
+ RULE: 'RULE';
795
+
796
+ SAVEPOINT: 'SAVEPOINT';
797
+
798
+ SCHEMA: 'SCHEMA';
799
+
800
+ SCROLL: 'SCROLL';
801
+
802
+ SEARCH: 'SEARCH';
803
+
804
+ SECOND_P: 'SECOND';
805
+
806
+ SECURITY: 'SECURITY';
807
+
808
+ SEQUENCE: 'SEQUENCE';
809
+
810
+ SEQUENCES: 'SEQUENCES';
811
+
812
+ SERIALIZABLE: 'SERIALIZABLE';
813
+
814
+ SERVER: 'SERVER';
815
+
816
+ SESSION: 'SESSION';
817
+
818
+ SET: 'SET';
819
+
820
+ SHARE: 'SHARE';
821
+
822
+ SHOW: 'SHOW';
823
+
824
+ SIMPLE: 'SIMPLE';
825
+
826
+ SNAPSHOT: 'SNAPSHOT';
827
+
828
+ STABLE: 'STABLE';
829
+
830
+ STANDALONE_P: 'STANDALONE';
831
+
832
+ START: 'START';
833
+
834
+ STATEMENT: 'STATEMENT';
835
+
836
+ STATISTICS: 'STATISTICS';
837
+
838
+ STDIN: 'STDIN';
839
+
840
+ STDOUT: 'STDOUT';
841
+
842
+ STORAGE: 'STORAGE';
843
+
844
+ STRICT_P: 'STRICT';
845
+
846
+ STRIP_P: 'STRIP';
847
+
848
+ SYSID: 'SYSID';
849
+
850
+ SYSTEM_P: 'SYSTEM';
851
+
852
+ TABLES: 'TABLES';
853
+
854
+ TABLESPACE: 'TABLESPACE';
855
+
856
+ TEMP: 'TEMP';
857
+
858
+ TEMPLATE: 'TEMPLATE';
859
+
860
+ TEMPORARY: 'TEMPORARY';
861
+
862
+ TEXT_P: 'TEXT';
863
+
864
+ TRANSACTION: 'TRANSACTION';
865
+
866
+ TRIGGER: 'TRIGGER';
867
+
868
+ TRUNCATE: 'TRUNCATE';
869
+
870
+ TRUSTED: 'TRUSTED';
871
+
872
+ TYPE_P: 'TYPE';
873
+
874
+ TYPES_P: 'TYPES';
875
+
876
+ UNBOUNDED: 'UNBOUNDED';
877
+
878
+ UNCOMMITTED: 'UNCOMMITTED';
879
+
880
+ UNENCRYPTED: 'UNENCRYPTED';
881
+
882
+ UNKNOWN: 'UNKNOWN';
883
+
884
+ UNLISTEN: 'UNLISTEN';
885
+
886
+ UNLOGGED: 'UNLOGGED';
887
+
888
+ UNTIL: 'UNTIL';
889
+
890
+ UPDATE: 'UPDATE';
891
+
892
+ VACUUM: 'VACUUM';
893
+
894
+ VALID: 'VALID';
895
+
896
+ VALIDATE: 'VALIDATE';
897
+
898
+ VALIDATOR: 'VALIDATOR';
899
+ //VALUE : 'VALUE;
900
+
901
+ VARYING: 'VARYING';
902
+
903
+ VERSION_P: 'VERSION';
904
+
905
+ VIEW: 'VIEW';
906
+
907
+ VOLATILE: 'VOLATILE';
908
+
909
+ WHITESPACE_P: 'WHITESPACE';
910
+
911
+ WITHOUT: 'WITHOUT';
912
+
913
+ WORK: 'WORK';
914
+
915
+ WRAPPER: 'WRAPPER';
916
+
917
+ WRITE: 'WRITE';
918
+
919
+ XML_P: 'XML';
920
+
921
+ YEAR_P: 'YEAR';
922
+
923
+ YES_P: 'YES';
924
+
925
+ ZONE: 'ZONE';
926
+ //
927
+
928
+ // non-reserved keywords (can not be function or type)
929
+
930
+ //
931
+
932
+ BETWEEN: 'BETWEEN';
933
+
934
+ BIGINT: 'BIGINT';
935
+
936
+ BIT: 'BIT';
937
+
938
+ BOOLEAN_P: 'BOOLEAN';
939
+
940
+ CHAR_P: 'CHAR';
941
+
942
+ CHARACTER: 'CHARACTER';
943
+
944
+ COALESCE: 'COALESCE';
945
+
946
+ DEC: 'DEC';
947
+
948
+ DECIMAL_P: 'DECIMAL';
949
+
950
+ EXISTS: 'EXISTS';
951
+
952
+ EXTRACT: 'EXTRACT';
953
+
954
+ FLOAT_P: 'FLOAT';
955
+
956
+ GREATEST: 'GREATEST';
957
+
958
+ INOUT: 'INOUT';
959
+
960
+ INT_P: 'INT';
961
+
962
+ INTEGER: 'INTEGER';
963
+
964
+ INTERVAL: 'INTERVAL';
965
+
966
+ LEAST: 'LEAST';
967
+
968
+ NATIONAL: 'NATIONAL';
969
+
970
+ NCHAR: 'NCHAR';
971
+
972
+ NONE: 'NONE';
973
+
974
+ NULLIF: 'NULLIF';
975
+
976
+ NUMERIC: 'NUMERIC';
977
+
978
+ OVERLAY: 'OVERLAY';
979
+
980
+ POSITION: 'POSITION';
981
+
982
+ PRECISION: 'PRECISION';
983
+
984
+ REAL: 'REAL';
985
+
986
+ ROW: 'ROW';
987
+
988
+ SETOF: 'SETOF';
989
+
990
+ SMALLINT: 'SMALLINT';
991
+
992
+ SUBSTRING: 'SUBSTRING';
993
+
994
+ TIME: 'TIME';
995
+
996
+ TIMESTAMP: 'TIMESTAMP';
997
+
998
+ TREAT: 'TREAT';
999
+
1000
+ TRIM: 'TRIM';
1001
+
1002
+ VALUES: 'VALUES';
1003
+
1004
+ VARCHAR: 'VARCHAR';
1005
+
1006
+ XMLATTRIBUTES: 'XMLATTRIBUTES';
1007
+
1008
+ XMLCOMMENT: 'XMLCOMMENT';
1009
+
1010
+ XMLAGG: 'XMLAGG';
1011
+
1012
+ XML_IS_WELL_FORMED: 'XML_IS_WELL_FORMED';
1013
+
1014
+ XML_IS_WELL_FORMED_DOCUMENT: 'XML_IS_WELL_FORMED_DOCUMENT';
1015
+
1016
+ XML_IS_WELL_FORMED_CONTENT: 'XML_IS_WELL_FORMED_CONTENT';
1017
+
1018
+ XPATH: 'XPATH';
1019
+
1020
+ XPATH_EXISTS: 'XPATH_EXISTS';
1021
+
1022
+ XMLCONCAT: 'XMLCONCAT';
1023
+
1024
+ XMLELEMENT: 'XMLELEMENT';
1025
+
1026
+ XMLEXISTS: 'XMLEXISTS';
1027
+
1028
+ XMLFOREST: 'XMLFOREST';
1029
+
1030
+ XMLPARSE: 'XMLPARSE';
1031
+
1032
+ XMLPI: 'XMLPI';
1033
+
1034
+ XMLROOT: 'XMLROOT';
1035
+
1036
+ XMLSERIALIZE: 'XMLSERIALIZE';
1037
+ //MISSED
1038
+
1039
+ CALL: 'CALL';
1040
+
1041
+ CURRENT_P: 'CURRENT';
1042
+
1043
+ ATTACH: 'ATTACH';
1044
+
1045
+ DETACH: 'DETACH';
1046
+
1047
+ EXPRESSION: 'EXPRESSION';
1048
+
1049
+ GENERATED: 'GENERATED';
1050
+
1051
+ LOGGED: 'LOGGED';
1052
+
1053
+ STORED: 'STORED';
1054
+
1055
+ INCLUDE: 'INCLUDE';
1056
+
1057
+ ROUTINE: 'ROUTINE';
1058
+
1059
+ TRANSFORM: 'TRANSFORM';
1060
+
1061
+ IMPORT_P: 'IMPORT';
1062
+
1063
+ POLICY: 'POLICY';
1064
+
1065
+ METHOD: 'METHOD';
1066
+
1067
+ REFERENCING: 'REFERENCING';
1068
+
1069
+ NEW: 'NEW';
1070
+
1071
+ OLD: 'OLD';
1072
+
1073
+ VALUE_P: 'VALUE';
1074
+
1075
+ SUBSCRIPTION: 'SUBSCRIPTION';
1076
+
1077
+ PUBLICATION: 'PUBLICATION';
1078
+
1079
+ OUT_P: 'OUT';
1080
+
1081
+ END_P: 'END';
1082
+
1083
+ ROUTINES: 'ROUTINES';
1084
+
1085
+ SCHEMAS: 'SCHEMAS';
1086
+
1087
+ PROCEDURES: 'PROCEDURES';
1088
+
1089
+ INPUT_P: 'INPUT';
1090
+
1091
+ SUPPORT: 'SUPPORT';
1092
+
1093
+ PARALLEL: 'PARALLEL';
1094
+
1095
+ SQL_P: 'SQL';
1096
+
1097
+ DEPENDS: 'DEPENDS';
1098
+
1099
+ OVERRIDING: 'OVERRIDING';
1100
+
1101
+ CONFLICT: 'CONFLICT';
1102
+
1103
+ SKIP_P: 'SKIP';
1104
+
1105
+ LOCKED: 'LOCKED';
1106
+
1107
+ TIES: 'TIES';
1108
+
1109
+ ROLLUP: 'ROLLUP';
1110
+
1111
+ CUBE: 'CUBE';
1112
+
1113
+ GROUPING: 'GROUPING';
1114
+
1115
+ SETS: 'SETS';
1116
+
1117
+ TABLESAMPLE: 'TABLESAMPLE';
1118
+
1119
+ ORDINALITY: 'ORDINALITY';
1120
+
1121
+ XMLTABLE: 'XMLTABLE';
1122
+
1123
+ COLUMNS: 'COLUMNS';
1124
+
1125
+ XMLNAMESPACES: 'XMLNAMESPACES';
1126
+
1127
+ ROWTYPE: 'ROWTYPE';
1128
+
1129
+ NORMALIZED: 'NORMALIZED';
1130
+
1131
+ WITHIN: 'WITHIN';
1132
+
1133
+ FILTER: 'FILTER';
1134
+
1135
+ GROUPS: 'GROUPS';
1136
+
1137
+ OTHERS: 'OTHERS';
1138
+
1139
+ NFC: 'NFC';
1140
+
1141
+ NFD: 'NFD';
1142
+
1143
+ NFKC: 'NFKC';
1144
+
1145
+ NFKD: 'NFKD';
1146
+
1147
+ UESCAPE: 'UESCAPE';
1148
+
1149
+ VIEWS: 'VIEWS';
1150
+
1151
+ NORMALIZE: 'NORMALIZE';
1152
+
1153
+ DUMP: 'DUMP';
1154
+
1155
+ ERROR: 'ERROR';
1156
+
1157
+ USE_VARIABLE: 'USE_VARIABLE';
1158
+
1159
+ USE_COLUMN: 'USE_COLUMN';
1160
+
1161
+ CONSTANT: 'CONSTANT';
1162
+
1163
+ PERFORM: 'PERFORM';
1164
+
1165
+ GET: 'GET';
1166
+
1167
+ DIAGNOSTICS: 'DIAGNOSTICS';
1168
+
1169
+ STACKED: 'STACKED';
1170
+
1171
+ ELSIF: 'ELSIF';
1172
+
1173
+ WHILE: 'WHILE';
1174
+
1175
+ FOREACH: 'FOREACH';
1176
+
1177
+ SLICE: 'SLICE';
1178
+
1179
+ EXIT: 'EXIT';
1180
+
1181
+ RETURN: 'RETURN';
1182
+
1183
+ RAISE: 'RAISE';
1184
+
1185
+ SQLSTATE: 'SQLSTATE';
1186
+
1187
+ DEBUG: 'DEBUG';
1188
+
1189
+ INFO: 'INFO';
1190
+
1191
+ NOTICE: 'NOTICE';
1192
+
1193
+ WARNING: 'WARNING';
1194
+
1195
+ EXCEPTION: 'EXCEPTION';
1196
+
1197
+ ASSERT: 'ASSERT';
1198
+
1199
+ LOOP: 'LOOP';
1200
+
1201
+ OPEN: 'OPEN';
1202
+
1203
+ FORMAT: 'FORMAT';
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+ Identifier: IdentifierStartChar IdentifierChar*;
1210
+
1211
+ fragment IdentifierStartChar options {
1212
+ caseInsensitive = false;
1213
+ }: // these are the valid identifier start characters below 0x7F
1214
+ [a-zA-Z_]
1215
+ | // these are the valid characters from 0x80 to 0xFF
1216
+ [\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]
1217
+ | // these are the letters above 0xFF which only need a single UTF-16 code unit
1218
+ [\u0100-\uD7FF\uE000-\uFFFF] {this.CharIsLetter()}?
1219
+ | // letters which require multiple UTF-16 code units
1220
+ [\uD800-\uDBFF] [\uDC00-\uDFFF] {this.CheckIfUtf32Letter()}?
1221
+ ;
1222
+
1223
+ fragment IdentifierChar: StrictIdentifierChar | '$';
1224
+
1225
+ fragment StrictIdentifierChar: IdentifierStartChar | [0-9];
1226
+ /* Quoted Identifiers
1227
+ *
1228
+ * These are divided into four separate tokens, allowing distinction of valid quoted identifiers from invalid quoted
1229
+ * identifiers without sacrificing the ability of the lexer to reliably recover from lexical errors in the input.
1230
+ */
1231
+
1232
+ QuotedIdentifier: UnterminatedQuotedIdentifier '"';
1233
+ // This is a quoted identifier which only contains valid characters but is not terminated
1234
+
1235
+ UnterminatedQuotedIdentifier: '"' ('""' | ~ [\u0000"])*;
1236
+ // This is a quoted identifier which is terminated but contains a \u0000 character
1237
+
1238
+ InvalidQuotedIdentifier: InvalidUnterminatedQuotedIdentifier '"';
1239
+ // This is a quoted identifier which is unterminated and contains a \u0000 character
1240
+
1241
+ InvalidUnterminatedQuotedIdentifier: '"' ('""' | ~ '"')*;
1242
+ /* Unicode Quoted Identifiers
1243
+ *
1244
+ * These are divided into four separate tokens, allowing distinction of valid Unicode quoted identifiers from invalid
1245
+ * Unicode quoted identifiers without sacrificing the ability of the lexer to reliably recover from lexical errors in
1246
+ * the input. Note that escape sequences are never checked as part of this determination due to the ability of users
1247
+ * to change the escape character with a UESCAPE clause following the Unicode quoted identifier.
1248
+ *
1249
+ * TODO: these rules assume "" is still a valid escape sequence within a Unicode quoted identifier.
1250
+ */
1251
+
1252
+ UnicodeQuotedIdentifier: 'U' '&' QuotedIdentifier;
1253
+ // This is a Unicode quoted identifier which only contains valid characters but is not terminated
1254
+
1255
+ UnterminatedUnicodeQuotedIdentifier: 'U' '&' UnterminatedQuotedIdentifier;
1256
+ // This is a Unicode quoted identifier which is terminated but contains a \u0000 character
1257
+
1258
+ InvalidUnicodeQuotedIdentifier: 'U' '&' InvalidQuotedIdentifier;
1259
+ // This is a Unicode quoted identifier which is unterminated and contains a \u0000 character
1260
+
1261
+ InvalidUnterminatedUnicodeQuotedIdentifier: 'U' '&' InvalidUnterminatedQuotedIdentifier;
1262
+ //
1263
+
1264
+ // CONSTANTS (4.1.2)
1265
+
1266
+ //
1267
+
1268
+ // String Constants (4.1.2.1)
1269
+
1270
+ StringConstant: UnterminatedStringConstant '\'';
1271
+
1272
+ UnterminatedStringConstant: '\'' ('\'\'' | ~ '\'')*;
1273
+ // String Constants with C-style Escapes (4.1.2.2)
1274
+
1275
+ BeginEscapeStringConstant: 'E' '\'' -> more, pushMode (EscapeStringConstantMode);
1276
+ // String Constants with Unicode Escapes (4.1.2.3)
1277
+
1278
+ //
1279
+
1280
+ // Note that escape sequences are never checked as part of this token due to the ability of users to change the escape
1281
+
1282
+ // character with a UESCAPE clause following the Unicode string constant.
1283
+
1284
+ //
1285
+
1286
+ // TODO: these rules assume '' is still a valid escape sequence within a Unicode string constant.
1287
+
1288
+ UnicodeEscapeStringConstant: UnterminatedUnicodeEscapeStringConstant '\'';
1289
+
1290
+ UnterminatedUnicodeEscapeStringConstant: 'U' '&' UnterminatedStringConstant;
1291
+ // Dollar-quoted String Constants (4.1.2.4)
1292
+
1293
+ BeginDollarStringConstant: '$' Tag? '$' {this.PushTag();} -> pushMode (DollarQuotedStringMode);
1294
+ /* "The tag, if any, of a dollar-quoted string follows the same rules as an
1295
+ * unquoted identifier, except that it cannot contain a dollar sign."
1296
+ */
1297
+
1298
+ fragment Tag: IdentifierStartChar StrictIdentifierChar*;
1299
+ // Bit-strings Constants (4.1.2.5)
1300
+
1301
+ BinaryStringConstant: UnterminatedBinaryStringConstant '\'';
1302
+
1303
+ UnterminatedBinaryStringConstant: 'B' '\'' [01]*;
1304
+
1305
+ InvalidBinaryStringConstant: InvalidUnterminatedBinaryStringConstant '\'';
1306
+
1307
+ InvalidUnterminatedBinaryStringConstant: 'B' UnterminatedStringConstant;
1308
+
1309
+ HexadecimalStringConstant: UnterminatedHexadecimalStringConstant '\'';
1310
+
1311
+ UnterminatedHexadecimalStringConstant: 'X' '\'' [0-9A-F]*;
1312
+
1313
+ InvalidHexadecimalStringConstant: InvalidUnterminatedHexadecimalStringConstant '\'';
1314
+
1315
+ InvalidUnterminatedHexadecimalStringConstant: 'X' UnterminatedStringConstant;
1316
+ // Numeric Constants (4.1.2.6)
1317
+
1318
+ Integral: Digits;
1319
+
1320
+ BinaryIntegral: '0b' Digits;
1321
+
1322
+ OctalIntegral: '0o' Digits;
1323
+
1324
+ HexadecimalIntegral: '0x' Digits;
1325
+
1326
+ NumericFail: Digits '..' {this.HandleNumericFail();};
1327
+
1328
+ Numeric:
1329
+ Digits '.' Digits? /*? replaced with + to solve problem with DOT_DOT .. but this surely must be rewriten */ (
1330
+ 'E' [+-]? Digits
1331
+ )?
1332
+ | '.' Digits ('E' [+-]? Digits)?
1333
+ | Digits 'E' [+-]? Digits
1334
+ ;
1335
+
1336
+ fragment Digits: [0-9]+;
1337
+
1338
+ PLSQLVARIABLENAME: ':' [A-Z_] [A-Z_0-9$]*;
1339
+
1340
+ PLSQLIDENTIFIER: ':"' ('\\' . | '""' | ~ ('"' | '\\'))* '"';
1341
+ //
1342
+
1343
+ // WHITESPACE (4.1)
1344
+
1345
+ //
1346
+
1347
+ Whitespace: [ \t]+ -> channel (HIDDEN);
1348
+
1349
+ Newline: ('\r' '\n'? | '\n') -> channel (HIDDEN);
1350
+ //
1351
+
1352
+ // COMMENTS (4.1.5)
1353
+
1354
+ //
1355
+
1356
+ LineComment: '--' ~ [\r\n]* -> channel (HIDDEN);
1357
+
1358
+ BlockComment:
1359
+ ('/*' ('/'* BlockComment | ~ [/*] | '/'+ ~ [/*] | '*'+ ~ [/*])* '*'* '*/') -> channel (HIDDEN)
1360
+ ;
1361
+
1362
+ UnterminatedBlockComment:
1363
+ '/*' (
1364
+ '/'* BlockComment
1365
+ | // these characters are not part of special sequences in a block comment
1366
+ ~ [/*]
1367
+ | // handle / or * characters which are not part of /* or */ and do not appear at the end of the file
1368
+ ('/'+ ~ [/*] | '*'+ ~ [/*])
1369
+ )*
1370
+ // Handle the case of / or * characters at the end of the file, or a nested unterminated block comment
1371
+ ('/'+ | '*'+ | '/'* UnterminatedBlockComment)?
1372
+ // Optional assertion to make sure this rule is working as intended
1373
+ {this.UnterminatedBlockCommentDebugAssert();}
1374
+ ;
1375
+ //
1376
+
1377
+ // META-COMMANDS
1378
+
1379
+ //
1380
+
1381
+ // http://www.postgresql.org/docs/9.3/static/app-psql.html
1382
+
1383
+ MetaCommand: '\\' -> pushMode(META), more ;
1384
+
1385
+ //
1386
+
1387
+ // ERROR
1388
+
1389
+ //
1390
+
1391
+ // Any character which does not match one of the above rules will appear in the token stream as an ErrorCharacter token.
1392
+
1393
+ // This ensures the lexer itself will never encounter a syntax error, so all error handling may be performed by the
1394
+
1395
+ // parser.
1396
+
1397
+ ErrorCharacter: .;
1398
+
1399
+ mode EscapeStringConstantMode;
1400
+ EscapeStringConstant: EscapeStringText '\'' -> mode (AfterEscapeStringConstantMode);
1401
+
1402
+ UnterminatedEscapeStringConstant:
1403
+ EscapeStringText
1404
+ // Handle a final unmatched \ character appearing at the end of the file
1405
+ '\\'? EOF
1406
+ ;
1407
+
1408
+ fragment EscapeStringText options { caseInsensitive = false; }:
1409
+ (
1410
+ '\'\''
1411
+ | '\\' (
1412
+ // two-digit hex escapes are still valid when treated as single-digit escapes
1413
+ 'x' [0-9a-fA-F]
1414
+ | 'u' [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F]
1415
+ | 'U' [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F]
1416
+ | // Any character other than the Unicode escapes can follow a backslash. Some have special meaning,
1417
+ // but that doesn't affect the syntax.
1418
+ ~ [xuU]
1419
+ )
1420
+ | ~ ['\\]
1421
+ )*
1422
+ ;
1423
+
1424
+ InvalidEscapeStringConstant: InvalidEscapeStringText '\'' -> mode (AfterEscapeStringConstantMode);
1425
+
1426
+ InvalidUnterminatedEscapeStringConstant:
1427
+ InvalidEscapeStringText
1428
+ // Handle a final unmatched \ character appearing at the end of the file
1429
+ '\\'? EOF
1430
+ ;
1431
+
1432
+ fragment InvalidEscapeStringText: ('\'\'' | '\\' . | ~ ['\\])*;
1433
+
1434
+ mode AfterEscapeStringConstantMode;
1435
+ AfterEscapeStringConstantMode_Whitespace: Whitespace -> type (Whitespace), channel (HIDDEN);
1436
+
1437
+ AfterEscapeStringConstantMode_Newline:
1438
+ Newline -> type (Newline), channel (HIDDEN), mode (AfterEscapeStringConstantWithNewlineMode)
1439
+ ;
1440
+
1441
+ AfterEscapeStringConstantMode_NotContinued:
1442
+ -> skip, popMode
1443
+ ;
1444
+
1445
+ mode AfterEscapeStringConstantWithNewlineMode;
1446
+ AfterEscapeStringConstantWithNewlineMode_Whitespace:
1447
+ Whitespace -> type (Whitespace), channel (HIDDEN)
1448
+ ;
1449
+
1450
+ AfterEscapeStringConstantWithNewlineMode_Newline: Newline -> type (Newline), channel (HIDDEN);
1451
+
1452
+ AfterEscapeStringConstantWithNewlineMode_Continued:
1453
+ '\'' -> more, mode (EscapeStringConstantMode)
1454
+ ;
1455
+
1456
+ AfterEscapeStringConstantWithNewlineMode_NotContinued:
1457
+ -> skip, popMode
1458
+ ;
1459
+
1460
+ mode DollarQuotedStringMode;
1461
+ DollarText:
1462
+ ~ '$'+
1463
+ //| '$'([0-9])+
1464
+ | // this alternative improves the efficiency of handling $ characters within a dollar-quoted string which are
1465
+
1466
+ // not part of the ending tag.
1467
+ '$' ~ '$'*
1468
+ ;
1469
+
1470
+ // NB: Next rule on two lines in order to make transformGrammar.py easy.
1471
+ EndDollarStringConstant: ('$' Tag? '$') {this.IsTag()}?
1472
+ {this.PopTag();} -> popMode;
1473
+
1474
+ mode META;
1475
+ MetaSemi : {this.IsSemiColon()}? ';' -> type(SEMI), popMode ;
1476
+ MetaOther : ~[;\r\n\\"] .*? ('\\\\' | [\r\n]+) -> type(SEMI), popMode ;