· 8 years ago · Jan 04, 2018, 10:12 AM
1/*
2T-SQL (Transact-SQL, MSSQL) grammar.
3The MIT License (MIT).
4Copyright (c) 2015-2016, Ivan Kochurkin (kvanttt@gmail.com), Positive Technologies.
5Copyright (c) 2016, Scott Ure (scott@redstormsoftware.com).
6Copyright (c) 2016, Rui Zhang (ruizhang.ccs@gmail.com).
7Copyright (c) 2016, Marcus Henriksson (kuseman80@gmail.com).
8
9Permission is hereby granted, free of charge, to any person obtaining a copy
10of this software and associated documentation files (the "Software"), to deal
11in the Software without restriction, including without limitation the rights
12to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13copies of the Software, and to permit persons to whom the Software is
14furnished to do so, subject to the following conditions:
15
16The above copyright notice and this permission notice shall be included in
17all copies or substantial portions of the Software.
18
19THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25THE SOFTWARE.
26*/
27
28grammar tsql;
29
30options
31{
32 language = CSharp;
33}
34
35tsql_file
36 : batch* EOF
37 ;
38
39batch
40 : sql_clauses go_statement?
41 ;
42
43sql_clauses
44 : (sql_clause SEMI?)+
45 ;
46
47sql_clause
48 : dml_clause
49
50 | ddl_clause
51
52 | cfl_statement
53
54 | dbcc_clause
55
56 | empty_statement
57
58 | another_statement
59 ;
60
61// Data Manipulation Language: https://msdn.microsoft.com/en-us/library/ff848766(v=sql.120).aspx
62dml_clause
63 : delete_statement
64 | insert_statement
65 | select_statement
66 | update_statement
67 ;
68
69// Data Definition Language: https://msdn.microsoft.com/en-us/library/ff848799.aspx)
70ddl_clause
71 :
72 create_database
73 | create_index
74 | create_or_alter_procedure
75 | create_or_alter_function
76 | create_statistics
77 | create_table
78 | create_type
79 | create_view
80
81 | alter_table
82 | alter_database
83
84 | drop_index
85 | drop_procedure
86 | drop_function
87 | drop_statistics
88 | drop_table
89 | drop_type
90 | drop_view
91 ;
92
93// Control-of-Flow Language: https://msdn.microsoft.com/en-us/library/ms174290.aspx
94// Labels for better AST traverse.
95cfl_statement
96 // https://msdn.microsoft.com/en-us/library/ms190487.aspx
97 : BEGIN ';'? sql_clauses? END ';'? #block_statement
98 // https://msdn.microsoft.com/en-us/library/ms181271.aspx
99 | BREAK ';'? #break_statement
100 // https://msdn.microsoft.com/en-us/library/ms174366.aspx
101 | CONTINUE ';'? #continue_statement
102 // https://msdn.microsoft.com/en-us/library/ms180188.aspx
103 | GOTO id ';'? #goto_statement
104 | id ':' ';'? #goto_statement
105 // https://msdn.microsoft.com/en-us/library/ms182717.aspx
106 | IF search_condition sql_clause (ELSE sql_clause)? ';'? #if_statement
107 // https://msdn.microsoft.com/en-us/library/ms174998.aspx
108 | RETURN expression? ';'? #return_statement
109 // https://msdn.microsoft.com/en-us/library/ee677615.aspx
110 | THROW (
111 error_number=(DECIMAL | LOCAL_ID) ',' message=(STRING | LOCAL_ID) ','
112 state=(DECIMAL | LOCAL_ID))? ';'? #throw_statement
113 // https://msdn.microsoft.com/en-us/library/ms175976.aspx
114 | BEGIN TRY ';'? try_clauses=sql_clauses? END TRY ';'?
115 BEGIN CATCH ';'? catch_clauses=sql_clauses? END CATCH ';'? #try_catch_statement
116 // https://msdn.microsoft.com/en-us/library/ms187331.aspx
117 | WAITFOR (DELAY | TIME) expression ';'? #waitfor_statement
118 // https://msdn.microsoft.com/en-us/library/ms178642.aspx
119 | WHILE search_condition (sql_clause | BREAK ';'? | CONTINUE ';'?) #while_statement
120 // https://msdn.microsoft.com/en-us/library/ms176047.aspx.
121 | PRINT expression ';'? #print_statement
122 // https://msdn.microsoft.com/en-us/library/ms178592.aspx
123 | RAISERROR '(' msg=(DECIMAL | STRING | LOCAL_ID) ',' severity=constant_LOCAL_ID ','
124 state=constant_LOCAL_ID (',' constant_LOCAL_ID)* ')' ';'? #raiseerror_statement
125 ;
126
127empty_statement
128 : ';'
129 ;
130
131another_statement
132 : declare_statement
133 | cursor_statement
134 | execute_statement
135 | security_statement
136 | set_statement
137 | transaction_statement
138 | use_statement
139 ;
140
141// DML
142
143// https://msdn.microsoft.com/en-us/library/ms189835.aspx
144delete_statement
145 : with_expression?
146 DELETE (TOP '(' expression ')' PERCENT?)?
147 FROM? delete_statement_from
148 insert_with_table_hints?
149 output_clause?
150 (FROM table_sources)?
151 (WHERE (search_condition | CURRENT OF (GLOBAL? cursor_name | cursor_var=LOCAL_ID)))?
152 for_clause? option_clause? ';'?
153 ;
154
155delete_statement_from
156 : table_alias
157 | ddl_object
158 | rowset_function_limited
159 | table_var=LOCAL_ID
160 ;
161
162// https://msdn.microsoft.com/en-us/library/ms174335.aspx
163insert_statement
164 : with_expression?
165 INSERT (TOP '(' expression ')' PERCENT?)?
166 INTO? (ddl_object | rowset_function_limited)
167 insert_with_table_hints?
168 ('(' column_name_list ')')?
169 output_clause?
170 insert_statement_value
171 for_clause? option_clause? ';'?
172 ;
173
174insert_statement_value
175 : table_value_constructor
176 | derived_table
177 | execute_statement
178 | DEFAULT VALUES
179 ;
180
181// https://msdn.microsoft.com/en-us/library/ms189499.aspx
182select_statement
183 : with_expression? query_expression order_by_clause? for_clause? option_clause? ';'?
184 ;
185
186// https://msdn.microsoft.com/en-us/library/ms177523.aspx
187update_statement
188 : with_expression?
189 UPDATE (TOP '(' expression ')' PERCENT?)?
190 (ddl_object | rowset_function_limited)
191 with_table_hints?
192 SET update_elem (',' update_elem)*
193 output_clause?
194 (FROM table_sources)?
195 (WHERE (search_condition_list | CURRENT OF (GLOBAL? cursor_name | cursor_var=LOCAL_ID)))?
196 for_clause? option_clause? ';'?
197 ;
198
199// https://msdn.microsoft.com/en-us/library/ms177564.aspx
200output_clause
201 : OUTPUT output_dml_list_elem (',' output_dml_list_elem)*
202 (INTO (LOCAL_ID | table_name) ('(' column_name_list ')')? )?
203 ;
204
205output_dml_list_elem
206 : (output_column_name | expression) (AS? column_alias)? // TODO: scalar_expression
207 ;
208
209output_column_name
210 : (DELETED | INSERTED | table_name) '.' ('*' | id)
211 | DOLLAR_ACTION
212 ;
213
214// DDL
215
216// https://msdn.microsoft.com/en-ie/library/ms176061.aspx
217create_database
218 : CREATE DATABASE (database=id)
219 ( CONTAINMENT '=' ( NONE | PARTIAL ) )?
220 ( ON PRIMARY? database_file_spec ( ',' database_file_spec )* )?
221 ( LOG ON database_file_spec ( ',' database_file_spec )* )?
222 ( COLLATE collation_name = id )?
223 ( WITH create_database_option ( ',' create_database_option )* )?
224 ;
225
226// https://msdn.microsoft.com/en-us/library/ms188783.aspx
227create_index
228 : CREATE UNIQUE? clustered? INDEX id ON table_name_with_hint '(' column_name_list (ASC | DESC)? ')'
229 (index_options)?
230 (ON id)?
231 ';'?
232 ;
233
234// https://msdn.microsoft.com/en-us/library/ms187926(v=sql.120).aspx
235create_or_alter_procedure
236 : (CREATE | ALTER) proc=(PROC | PROCEDURE) func_proc_name (';' DECIMAL)?
237 ('('? procedure_param (',' procedure_param)* ')'?)?
238 (WITH procedure_option (',' procedure_option)*)?
239 (FOR REPLICATION)? AS sql_clauses
240 ;
241
242//https://msdn.microsoft.com/en-us/library/ms186755.aspx
243create_or_alter_function
244 : (CREATE | ALTER) FUNCTION func_proc_name
245 (('(' procedure_param (',' procedure_param)* ')') | '(' ')') //must have (), but can be empty
246 (func_body_returns_select | func_body_returns_table | func_body_returns_scalar) ';'?
247
248 ;
249
250func_body_returns_select
251 :RETURNS TABLE
252 (WITH function_option (',' function_option)*)?
253 AS?
254 RETURN select_statement
255 ;
256
257func_body_returns_table
258 : RETURNS LOCAL_ID table_type_definition
259 (WITH function_option (',' function_option)*)?
260 AS?
261 BEGIN
262 sql_clause*
263 RETURN
264 END
265 ;
266
267
268func_body_returns_scalar
269 :RETURNS data_type
270 (WITH function_option (',' function_option)*)?
271 AS?
272 BEGIN
273 sql_clause*
274 RETURN ret=expression ';'?
275 END
276 ;
277
278procedure_param
279 : LOCAL_ID (id '.')? AS? data_type VARYING? ('=' default_val=default_value)? (OUT | OUTPUT | READONLY)?
280 ;
281
282procedure_option
283 : ENCRYPTION
284 | RECOMPILE
285 | execute_clause
286 ;
287
288function_option
289 : RETURNS NULL ON NULL INPUT
290 | CALLED ON NULL INPUT
291 | execute_clause
292 ;
293
294// https://msdn.microsoft.com/en-us/library/ms188038.aspx
295create_statistics
296 : CREATE STATISTICS id ON table_name_with_hint '(' column_name_list ')'
297 (WITH (FULLSCAN | SAMPLE DECIMAL (PERCENT | ROWS) | STATS_STREAM)
298 (',' NORECOMPUTE)? (',' INCREMENTAL EQUAL on_off)? )? ';'?
299 ;
300
301// https://msdn.microsoft.com/en-us/library/ms174979.aspx
302create_table
303 : CREATE TABLE table_name '(' column_def_table_constraints ','? ')' (ON id | DEFAULT)? (TEXTIMAGE_ON id | DEFAULT)?';'?
304 ;
305
306// https://msdn.microsoft.com/en-us/library/ms187956.aspx
307create_view
308 : CREATE VIEW simple_name ('(' column_name_list ')')?
309 (WITH view_attribute (',' view_attribute)*)?
310 AS select_statement (WITH CHECK OPTION)? ';'?
311 ;
312
313view_attribute
314 : ENCRYPTION | SCHEMABINDING | VIEW_METADATA
315 ;
316
317// https://msdn.microsoft.com/en-us/library/ms190273.aspx
318alter_table
319 : ALTER TABLE table_name (SET '(' LOCK_ESCALATION '=' (AUTO | TABLE | DISABLE) ')'
320 | ADD column_def_table_constraint
321 | DROP CONSTRAINT constraint=id
322 | WITH CHECK ADD CONSTRAINT constraint=id FOREIGN KEY '(' fk = column_name_list ')' REFERENCES table_name '(' pk = column_name_list')'
323 | CHECK CONSTRAINT constraint=id
324 )
325 ';'?
326 ;
327
328// https://msdn.microsoft.com/en-us/library/ms174269.aspx
329alter_database
330 : ALTER DATABASE (database=id | CURRENT)
331 (MODIFY NAME '=' new_name=id | COLLATE collation=id | SET database_optionspec (WITH termination)? ) ';'?
332 ;
333
334// https://msdn.microsoft.com/en-us/library/bb522682.aspx
335// Runtime check.
336database_optionspec
337 : auto_option
338 | change_tracking_option
339 | containment_option
340 | cursor_option
341// | database_mirroring_option
342 | date_correlation_optimization_option
343 | db_encryption_option
344 | db_state_option
345 | db_update_option
346 | db_user_access_option
347 | delayed_durability_option
348 | external_access_option
349 | FILESTREAM database_filestream_option
350 | HADR_options
351 | mixed_page_allocation_option
352 | parameterization_option
353// | query_store_options
354 | recovery_option
355// | remote_data_archive_option
356 | service_broker_option
357 | snapshot_option
358 | sql_option
359 | target_recovery_time_option
360 | termination
361 ;
362
363auto_option:
364 AUTO_CLOSE on_off
365 | AUTO_CREATE_STATISTICS OFF | ON ( INCREMENTAL EQUAL ON | OFF )
366 | AUTO_SHRINK on_off
367 | AUTO_UPDATE_STATISTICS on_off
368 | AUTO_UPDATE_STATISTICS_ASYNC (ON | OFF )
369 ;
370
371change_tracking_option:
372 CHANGE_TRACKING EQUAL ( OFF | ON (change_tracking_option_list (',' change_tracking_option_list)*)* )
373 ;
374
375change_tracking_option_list:
376 AUTO_CLEANUP EQUAL on_off
377 | CHANGE_RETENTION EQUAL ( DAYS | HOURS | MINUTES )
378 ;
379
380containment_option:
381 CONTAINMENT EQUAL ( NONE | PARTIAL )
382 ;
383
384cursor_option:
385 CURSOR_CLOSE_ON_COMMIT on_off
386 | CURSOR_DEFAULT ( LOCAL | GLOBAL )
387 ;
388
389/* Will visit later
390database_mirroring_option:
391 ALTER DATABASE Database Mirroring
392 ;
393*/
394
395date_correlation_optimization_option:
396 DATE_CORRELATION_OPTIMIZATION on_off
397 ;
398
399db_encryption_option:
400 ENCRYPTION on_off
401 ;
402db_state_option:
403 ( ONLINE | OFFLINE | EMERGENCY )
404 ;
405
406db_update_option:
407 READ_ONLY | READ_WRITE
408 ;
409
410db_user_access_option:
411 ( SINGLE_USER | RESTRICTED_USER | MULTI_USER )
412 ;
413delayed_durability_option:
414 DELAYED_DURABILITY EQUAL ( DISABLED | ALLOWED | FORCED )
415 ;
416
417external_access_option:
418 DB_CHAINING on_off
419 | TRUSTWORTHY on_off
420 | DEFAULT_LANGUAGE EQUAL ( id | STRING )
421 | DEFAULT_FULLTEXT_LANGUAGE EQUAL ( id | STRING )
422 | NESTED_TRIGGERS EQUAL ( OFF | ON )
423 | TRANSFORM_NOISE_WORDS EQUAL ( OFF | ON )
424 | TWO_DIGIT_YEAR_CUTOFF EQUAL DECIMAL
425 ;
426
427HADR_options:
428 ALTER DATABASE SET HADR
429 ;
430
431mixed_page_allocation_option:
432 MIXED_PAGE_ALLOCATION ( OFF | ON )
433 ;
434
435parameterization_option:
436 PARAMETERIZATION ( SIMPLE | FORCED )
437 ;
438
439/* Will visit later
440query_store_options:
441 ;
442*/
443
444recovery_option:
445 RECOVERY ( FULL | BULK_LOGGED | SIMPLE )
446 | TORN_PAGE_DETECTION on_off
447 | PAGE_VERIFY ( CHECKSUM | TORN_PAGE_DETECTION | NONE )
448 ;
449
450/*Will visit later
451remote_data_archive_option:
452 ;
453*/
454
455service_broker_option:
456 ENABLE_BROKER
457 | DISABLE_BROKER
458 | NEW_BROKER
459 | ERROR_BROKER_CONVERSATIONS
460 | HONOR_BROKER_PRIORITY on_off
461 ;
462snapshot_option:
463 ALLOW_SNAPSHOT_ISOLATION on_off
464 | READ_COMMITTED_SNAPSHOT (ON | OFF )
465 | MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = (ON | OFF )
466 ;
467
468sql_option:
469 ANSI_NULL_DEFAULT on_off
470 | ANSI_NULLS on_off
471 | ANSI_PADDING on_off
472 | ANSI_WARNINGS on_off
473 | ARITHABORT on_off
474 | COMPATIBILITY_LEVEL EQUAL DECIMAL
475 | CONCAT_NULL_YIELDS_NULL on_off
476 | NUMERIC_ROUNDABORT on_off
477 | QUOTED_IDENTIFIER on_off
478 | RECURSIVE_TRIGGERS on_off
479 ;
480
481target_recovery_time_option:
482 TARGET_RECOVERY_TIME EQUAL DECIMAL ( SECONDS | MINUTES )
483 ;
484
485termination:
486 ROLLBACK AFTER seconds = DECIMAL
487 | ROLLBACK IMMEDIATE
488 | NO_WAIT
489 ;
490
491// https://msdn.microsoft.com/en-us/library/ms176118.aspx
492drop_index
493 : DROP INDEX (IF EXISTS)? name=id (ON table_name)? ';'?
494 ;
495
496// https://msdn.microsoft.com/en-us/library/ms174969.aspx
497drop_procedure
498 : DROP proc=(PROC | PROCEDURE) (IF EXISTS)? func_proc_name (',' func_proc_name)* ';'?
499 ;
500
501//https://msdn.microsoft.com/en-us/library/ms190290.aspx
502drop_function
503 : DROP FUNCTION (IF EXISTS)? func_proc_name (',' func_proc_name)* ';'?
504 ;
505
506// https://msdn.microsoft.com/en-us/library/ms175075.aspx
507drop_statistics
508 : DROP STATISTICS (table_name '.')? name=id ';'
509 ;
510
511// https://msdn.microsoft.com/en-us/library/ms173790.aspx
512drop_table
513 : DROP TABLE (IF EXISTS)? table_name ';'?
514 ;
515
516// https://msdn.microsoft.com/en-us/library/ms173492.aspx
517drop_view
518 : DROP VIEW (IF EXISTS)? simple_name (',' simple_name)* ';'?
519 ;
520
521create_type:
522 CREATE TYPE name = simple_name FROM data_type default_value
523 ;
524
525drop_type:
526 DROP TYPE ( IF EXISTS )? name = simple_name
527 ;
528
529rowset_function_limited
530 : openquery
531 | opendatasource
532 ;
533
534// https://msdn.microsoft.com/en-us/library/ms188427(v=sql.120).aspx
535openquery
536 : OPENQUERY '(' linked_server=id ',' query=STRING ')'
537 ;
538
539// https://msdn.microsoft.com/en-us/library/ms179856.aspx
540opendatasource
541 : OPENDATASOURCE '(' provider=STRING ',' init=STRING ')'
542 '.' (database=id)? '.' (scheme=id)? '.' (table=id)
543 ;
544
545// Other statements.
546
547// https://msdn.microsoft.com/en-us/library/ms188927.aspx
548declare_statement
549 : DECLARE LOCAL_ID AS? table_type_definition ';'?
550 | DECLARE declare_local (',' declare_local)* ';'?
551 ;
552
553// https://msdn.microsoft.com/en-us/library/ms181441(v=sql.120).aspx
554cursor_statement
555 // https://msdn.microsoft.com/en-us/library/ms175035(v=sql.120).aspx
556 : CLOSE GLOBAL? cursor_name ';'?
557 // https://msdn.microsoft.com/en-us/library/ms188782(v=sql.120).aspx
558 | DEALLOCATE GLOBAL? cursor_name ';'?
559 // https://msdn.microsoft.com/en-us/library/ms180169(v=sql.120).aspx
560 | declare_cursor
561 // https://msdn.microsoft.com/en-us/library/ms180152(v=sql.120).aspx
562 | fetch_cursor
563 // https://msdn.microsoft.com/en-us/library/ms190500(v=sql.120).aspx
564 | OPEN GLOBAL? cursor_name ';'?
565 ;
566
567// https://msdn.microsoft.com/en-us/library/ms188332.aspx
568execute_statement
569 : EXECUTE (return_status=LOCAL_ID '=')? func_proc_name (execute_statement_arg (',' execute_statement_arg)*)? ';'?
570 | EXECUTE '(' execute_var_string ('+' execute_var_string)* ')' (AS? (LOGIN | USER) '=' STRING)? ';'?
571 ;
572
573execute_statement_arg
574 : (parameter=LOCAL_ID '=')? ((constant_LOCAL_ID | id) (OUTPUT | OUT)? | DEFAULT | NULL)
575 ;
576
577execute_var_string
578 : LOCAL_ID
579 | STRING
580 ;
581
582// https://msdn.microsoft.com/en-us/library/ff848791.aspx
583security_statement
584 // https://msdn.microsoft.com/en-us/library/ms188354.aspx
585 : execute_clause ';'?
586 // https://msdn.microsoft.com/en-us/library/ms187965.aspx
587 | GRANT (ALL PRIVILEGES? | grant_permission ('(' column_name_list ')')?) (ON on_id=table_name)? TO (to_principal=id) (WITH GRANT OPTION)? (AS as_principal=id)? ';'?
588 // https://msdn.microsoft.com/en-us/library/ms178632.aspx
589 | REVERT ('(' WITH COOKIE '=' LOCAL_ID ')')? ';'?
590 ;
591
592grant_permission
593 : EXECUTE
594 | VIEW id // DEFINITION
595 | TAKE id // OWNERSHIP
596 | CONTROL id? // SERVER
597 | CREATE (TABLE | VIEW)
598 | SHOWPLAN
599 | IMPERSONATE
600 | SELECT
601 | REFERENCES
602 | INSERT
603 | ALTER (ANY? (id | DATABASE))?
604 ;
605
606// https://msdn.microsoft.com/en-us/library/ms190356.aspx
607// https://msdn.microsoft.com/en-us/library/ms189484.aspx
608set_statement
609 : SET LOCAL_ID ('.' member_name=id)? '=' expression ';'?
610 | SET LOCAL_ID assignment_operator expression ';'?
611 | SET LOCAL_ID '='
612 CURSOR declare_set_cursor_common (FOR (READ ONLY | UPDATE (OF column_name_list)?))? ';'?
613 // https://msdn.microsoft.com/en-us/library/ms189837.aspx
614 | set_special
615 ;
616
617// https://msdn.microsoft.com/en-us/library/ms174377.aspx
618transaction_statement
619 // https://msdn.microsoft.com/en-us/library/ms188386.aspx
620 : BEGIN DISTRIBUTED (TRAN | TRANSACTION) (id | LOCAL_ID)? ';'?
621 // https://msdn.microsoft.com/en-us/library/ms188929.aspx
622 | BEGIN (TRAN | TRANSACTION) ((id | LOCAL_ID) (WITH MARK STRING)?)? ';'?
623 // https://msdn.microsoft.com/en-us/library/ms190295.aspx
624 | COMMIT (TRAN | TRANSACTION) ((id | LOCAL_ID) (WITH '(' DELAYED_DURABILITY EQUAL (OFF | ON) ')')?)? ';'?
625 // https://msdn.microsoft.com/en-us/library/ms178628.aspx
626 | COMMIT WORK? ';'?
627 // https://msdn.microsoft.com/en-us/library/ms181299.aspx
628 | ROLLBACK (TRAN | TRANSACTION) (id | LOCAL_ID)? ';'?
629 // https://msdn.microsoft.com/en-us/library/ms174973.aspx
630 | ROLLBACK WORK? ';'?
631 // https://msdn.microsoft.com/en-us/library/ms188378.aspx
632 | SAVE (TRAN | TRANSACTION) (id | LOCAL_ID)? ';'?
633 ;
634
635// https://msdn.microsoft.com/en-us/library/ms188037.aspx
636go_statement
637 : GO (count=DECIMAL)?
638 ;
639
640// https://msdn.microsoft.com/en-us/library/ms188366.aspx
641use_statement
642 : USE database=id ';'?
643 ;
644
645dbcc_clause
646 : DBCC name=simple_id ('(' expression_list ')')? (WITH dbcc_options)? ';'?
647 ;
648
649dbcc_options
650 : simple_id (',' simple_id)?
651 ;
652
653execute_clause
654 : EXECUTE AS clause=(CALLER | SELF | OWNER | STRING)
655 ;
656
657declare_local
658 : LOCAL_ID AS? data_type ('=' expression)?
659 ;
660
661table_type_definition
662 : TABLE '(' column_def_table_constraints ')'
663 ;
664
665column_def_table_constraints
666 : column_def_table_constraint (','? column_def_table_constraint)*
667 ;
668
669column_def_table_constraint
670 : column_definition
671 | table_constraint
672 ;
673
674// https://msdn.microsoft.com/en-us/library/ms187742.aspx
675column_definition
676 : id (data_type | AS expression) (COLLATE id)? null_notnull?
677 ((CONSTRAINT constraint=id)? DEFAULT constant_expression (WITH VALUES)?
678 | IDENTITY ('(' seed=DECIMAL ',' increment=DECIMAL ')')? (NOT FOR REPLICATION)?)?
679 ROWGUIDCOL?
680 column_constraint*
681 ;
682
683// https://msdn.microsoft.com/en-us/library/ms186712.aspx
684column_constraint
685 :(CONSTRAINT id)? null_notnull?
686 ((PRIMARY KEY | UNIQUE) clustered? index_options?
687 | CHECK (NOT FOR REPLICATION)? '(' search_condition ')')
688 ;
689
690// https://msdn.microsoft.com/en-us/library/ms188066.aspx
691table_constraint
692 : (CONSTRAINT id)?
693 ((PRIMARY KEY | UNIQUE) clustered? '(' column_name_list (ASC | DESC)? ')' index_options? (ON id)?
694 | CHECK (NOT FOR REPLICATION)? '(' search_condition ')')
695 ;
696
697index_options
698 : WITH '(' index_option (',' index_option)* ')'
699 ;
700
701// https://msdn.microsoft.com/en-us/library/ms186869.aspx
702// Id runtime checking. Id in (PAD_INDEX, FILLFACTOR, IGNORE_DUP_KEY, STATISTICS_NORECOMPUTE, ALLOW_ROW_LOCKS,
703// ALLOW_PAGE_LOCKS, SORT_IN_TEMPDB, ONLINE, MAXDOP, DATA_COMPRESSION, ONLINE).
704index_option
705 : simple_id '=' (simple_id | on_off | DECIMAL)
706 ;
707
708// https://msdn.microsoft.com/en-us/library/ms180169.aspx
709declare_cursor
710 : DECLARE cursor_name
711 (CURSOR (declare_set_cursor_common (FOR UPDATE (OF column_name_list)?)?)?
712 | INSENSITIVE? SCROLL? CURSOR FOR select_statement (FOR (READ ONLY | UPDATE | (OF column_name_list)))?
713 ) ';'?
714 ;
715
716declare_set_cursor_common
717 : (LOCAL | GLOBAL)?
718 (FORWARD_ONLY | SCROLL)? (STATIC | KEYSET | DYNAMIC | FAST_FORWARD)?
719 (READ_ONLY | SCROLL_LOCKS | OPTIMISTIC)? TYPE_WARNING?
720 FOR select_statement
721 ;
722
723fetch_cursor
724 : FETCH ((NEXT | PRIOR | FIRST | LAST | (ABSOLUTE | RELATIVE) expression)? FROM)?
725 GLOBAL? cursor_name (INTO LOCAL_ID (',' LOCAL_ID)*)? ';'?
726 ;
727
728// https://msdn.microsoft.com/en-us/library/ms190356.aspx
729// Runtime check.
730set_special
731 : SET id (id | constant_LOCAL_ID | on_off) ';'?
732 // https://msdn.microsoft.com/en-us/library/ms173763.aspx
733 | SET TRANSACTION ISOLATION LEVEL
734 (READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE) ';'?
735 // https://msdn.microsoft.com/en-us/library/ms188059.aspx
736 | SET IDENTITY_INSERT table_name on_off ';'?
737 | SET ANSI_NULLS on_off
738 | SET QUOTED_IDENTIFIER on_off
739 | SET ANSI_PADDING on_off
740 ;
741
742constant_LOCAL_ID
743 : constant
744 | LOCAL_ID
745 ;
746
747// Expression.
748
749// https://msdn.microsoft.com/en-us/library/ms190286.aspx
750// Operator precendence: https://msdn.microsoft.com/en-us/library/ms190276.aspx
751expression
752 : DEFAULT #primitive_expression
753 | NULL #primitive_expression
754 | LOCAL_ID #primitive_expression
755 | constant #primitive_expression
756 | function_call #function_call_expression
757 | expression COLLATE id #function_call_expression
758 // https://msdn.microsoft.com/en-us/library/ms181765.aspx
759 | CASE caseExpr=expression switch_section+ (ELSE elseExpr=expression)? END #case_expression
760 | CASE switch_search_condition_section+ (ELSE elseExpr=expression)? END #case_expression
761
762 | full_column_name #column_ref_expression
763 | '(' expression ')' #bracket_expression
764 | '(' subquery ')' #subquery_expression
765 | '~' expression #unary_operator_expression
766
767 | expression op=('*' | '/' | '%') expression #binary_operator_expression
768 | op=('+' | '-') expression #unary_operator_expression
769 | expression op=('+' | '-' | '&' | '^' | '|') expression #binary_operator_expression
770 | expression comparison_operator expression #binary_operator_expression
771
772 | over_clause #over_clause_expression
773 ;
774
775constant_expression
776 : NULL
777 | constant
778 // system functions: https://msdn.microsoft.com/en-us/library/ms187786.aspx
779 | function_call
780 | LOCAL_ID // TODO: remove.
781 | '(' constant_expression ')'
782 ;
783
784subquery
785 : select_statement
786 ;
787
788// https://msdn.microsoft.com/en-us/library/ms175972.aspx
789with_expression
790 : WITH (XMLNAMESPACES ',')? common_table_expression (',' common_table_expression)*
791 ;
792
793common_table_expression
794 : expression_name=id ('(' column_name_list ')')? AS '(' select_statement ')'
795 ;
796
797update_elem
798 : (full_column_name | LOCAL_ID) ('=' | assignment_operator) expression
799 | udt_column_name=id '.' method_name=id '(' expression_list ')'
800 //| full_column_name '.' WRITE (expression, )
801 ;
802
803// https://msdn.microsoft.com/en-us/library/ms173545.aspx
804search_condition_list
805 : search_condition (',' search_condition)*
806 ;
807
808search_condition
809 : search_condition_and (OR search_condition_and)*
810 ;
811
812search_condition_and
813 : search_condition_not (AND search_condition_not)*
814 ;
815
816search_condition_not
817 : NOT? predicate
818 ;
819
820predicate
821 : EXISTS '(' subquery ')'
822 | expression comparison_operator expression
823 | expression comparison_operator (ALL | SOME | ANY) '(' subquery ')'
824 | expression NOT? BETWEEN expression AND expression
825 | expression NOT? IN '(' (subquery | expression_list) ')'
826 | expression NOT? LIKE expression (ESCAPE expression)?
827 | expression IS null_notnull
828 | '(' search_condition ')'
829 ;
830
831query_expression
832 : (query_specification | '(' query_expression ')') union*
833 ;
834
835union
836 : (UNION ALL? | EXCEPT | INTERSECT) (query_specification | ('(' query_expression ')'))
837 ;
838
839// https://msdn.microsoft.com/en-us/library/ms176104.aspx
840query_specification
841 : SELECT (ALL | DISTINCT)? top_clause?
842 select_list
843 // https://msdn.microsoft.com/en-us/library/ms188029.aspx
844 (INTO table_name)?
845 (FROM table_sources)?
846 (WHERE where=search_condition)?
847 // https://msdn.microsoft.com/en-us/library/ms177673.aspx
848 (GROUP BY group_by_item (',' group_by_item)*)?
849 (HAVING having=search_condition)?
850 ;
851
852// https://msdn.microsoft.com/en-us/library/ms189463.aspx
853top_clause
854 : TOP (top_percent | top_count) (WITH TIES)?
855 ;
856
857top_percent
858 : (REAL | FLOAT) PERCENT
859 | '(' expression ')' PERCENT
860 ;
861
862top_count
863 : DECIMAL
864 | '(' expression ')'
865 ;
866
867// https://msdn.microsoft.com/en-us/library/ms188385.aspx
868order_by_clause
869 : ORDER BY order_by_expression (',' order_by_expression)*
870 (OFFSET expression (ROW | ROWS) (FETCH (FIRST | NEXT) expression (ROW | ROWS) ONLY)?)?
871 ;
872
873// https://msdn.microsoft.com/en-us/library/ms173812.aspx
874for_clause
875 : FOR BROWSE
876 | FOR XML AUTO xml_common_directives?
877 | FOR XML PATH ('(' STRING ')')? xml_common_directives?
878 ;
879
880xml_common_directives
881 : ',' (BINARY BASE64 | TYPE | ROOT)
882 ;
883
884order_by_expression
885 : expression (ASC | DESC)?
886 ;
887
888group_by_item
889 : expression
890 /*| rollup_spec
891 | cube_spec
892 | grouping_sets_spec
893 | grand_total*/
894 ;
895
896option_clause
897 // https://msdn.microsoft.com/en-us/library/ms181714.aspx
898 : OPTION '(' option (',' option)* ')'
899 ;
900
901option
902 : FAST number_rows=DECIMAL
903 | (HASH | ORDER) GROUP
904 | (MERGE | HASH | CONCAT) UNION
905 | (LOOP | MERGE | HASH) JOIN
906 | EXPAND VIEWS
907 | FORCE ORDER
908 | IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
909 | KEEP PLAN
910 | KEEPFIXED PLAN
911 | MAXDOP number_of_processors=DECIMAL
912 | MAXRECURSION number_recursion=DECIMAL
913 | OPTIMIZE FOR '(' optimize_for_arg (',' optimize_for_arg)* ')'
914 | OPTIMIZE FOR UNKNOWN
915 | PARAMETERIZATION (SIMPLE | FORCED)
916 | RECOMPILE
917 | ROBUST PLAN
918 | USE PLAN STRING
919 ;
920
921optimize_for_arg
922 : LOCAL_ID (UNKNOWN | '=' constant)
923 ;
924
925// https://msdn.microsoft.com/en-us/library/ms176104.aspx
926select_list
927 : select_list_elem (',' select_list_elem)*
928 ;
929
930select_list_elem
931 : (table_name '.')? ('*' | '$' (IDENTITY | ROWGUID))
932 | column_alias '=' expression
933 | expression (AS? column_alias)?
934 ;
935
936table_sources
937 : table_source (',' table_source)*
938 ;
939
940// https://msdn.microsoft.com/en-us/library/ms177634.aspx
941table_source
942 : table_source_item_joined
943 | '(' table_source_item_joined ')'
944 ;
945
946table_source_item_joined
947 : table_source_item join_part*
948 ;
949
950table_source_item
951 : table_name_with_hint as_table_alias?
952 | rowset_function as_table_alias?
953 | derived_table (as_table_alias column_alias_list?)?
954 | change_table as_table_alias
955 | function_call as_table_alias?
956 | LOCAL_ID as_table_alias?
957 | LOCAL_ID '.' function_call (as_table_alias column_alias_list?)?
958 ;
959
960change_table
961 : CHANGETABLE '(' CHANGES table_name ',' (NULL | DECIMAL | LOCAL_ID) ')'
962 ;
963
964// https://msdn.microsoft.com/en-us/library/ms191472.aspx
965join_part
966 // https://msdn.microsoft.com/en-us/library/ms173815(v=sql.120).aspx
967 : (INNER? |
968 join_type=(LEFT | RIGHT | FULL) OUTER?) (join_hint=(LOOP | HASH | MERGE | REMOTE))?
969 JOIN table_source ON search_condition
970 | CROSS JOIN table_source
971 | CROSS APPLY table_source
972 | OUTER APPLY table_source
973 ;
974
975table_name_with_hint
976 : table_name with_table_hints?
977 ;
978
979// https://msdn.microsoft.com/en-us/library/ms190312.aspx
980rowset_function
981 : (
982 OPENROWSET LR_BRACKET provider_name = STRING COMMA connectionString = STRING COMMA sql = STRING RR_BRACKET
983 )
984 | ( OPENROWSET '(' BULK data_file=STRING ',' (bulk_option (',' bulk_option)* | id)')' )
985 ;
986
987// runtime check.
988bulk_option
989 : id '=' bulk_option_value=(DECIMAL | STRING)
990 ;
991
992derived_table
993 : subquery
994 | '(' subquery ')'
995 ;
996
997function_call
998 : ranking_windowed_function
999 | aggregate_windowed_function
1000 | scalar_function_name '(' expression_list? ')'
1001 // https://msdn.microsoft.com/en-us/library/ms173784.aspx
1002 | BINARY_CHECKSUM '(' '*' ')'
1003 // https://msdn.microsoft.com/en-us/library/hh231076.aspx
1004 // https://msdn.microsoft.com/en-us/library/ms187928.aspx
1005 | CAST '(' expression AS data_type ')'
1006 | CONVERT '(' data_type ',' expression (',' style=expression)? ')'
1007 // https://msdn.microsoft.com/en-us/library/ms189788.aspx
1008 | CHECKSUM '(' '*' ')'
1009 // https://msdn.microsoft.com/en-us/library/ms190349.aspx
1010 | COALESCE '(' expression_list ')'
1011 // https://msdn.microsoft.com/en-us/library/ms188751.aspx
1012 | CURRENT_TIMESTAMP
1013 // https://msdn.microsoft.com/en-us/library/ms176050.aspx
1014 | CURRENT_USER
1015 // https://msdn.microsoft.com/en-us/library/ms186819.aspx
1016 | DATEADD '(' ID ',' expression ',' expression ')'
1017 // https://msdn.microsoft.com/en-us/library/ms189794.aspx
1018 | DATEDIFF '(' ID ',' expression ',' expression ')'
1019 // https://msdn.microsoft.com/en-us/library/ms174395.aspx
1020 | DATENAME '(' ID ',' expression ')'
1021 // https://msdn.microsoft.com/en-us/library/ms174420.aspx
1022 | DATEPART '(' ID ',' expression ')'
1023 // https://msdn.microsoft.com/en-us/library/ms189838.aspx
1024 | IDENTITY '(' data_type (',' seed=DECIMAL)? (',' increment=DECIMAL)? ')'
1025 // https://msdn.microsoft.com/en-us/library/bb839514.aspx
1026 | MIN_ACTIVE_ROWVERSION
1027 // https://msdn.microsoft.com/en-us/library/ms177562.aspx
1028 | NULLIF '(' expression ',' expression ')'
1029 // https://msdn.microsoft.com/en-us/library/ms177587.aspx
1030 | SESSION_USER
1031 // https://msdn.microsoft.com/en-us/library/ms179930.aspx
1032 | SYSTEM_USER
1033 ;
1034
1035switch_section
1036 : WHEN expression THEN expression
1037 ;
1038
1039switch_search_condition_section
1040 : WHEN search_condition THEN expression
1041 ;
1042
1043as_table_alias
1044 : AS? table_alias
1045 ;
1046
1047table_alias
1048 : id with_table_hints?
1049 ;
1050
1051// https://msdn.microsoft.com/en-us/library/ms187373.aspx
1052with_table_hints
1053 : WITH? '(' table_hint (',' table_hint)* ')'
1054 ;
1055
1056// https://msdn.microsoft.com/en-us/library/ms187373.aspx
1057insert_with_table_hints
1058 : WITH '(' table_hint (',' table_hint)* ')'
1059 ;
1060
1061// Id runtime check. Id can be (FORCESCAN, HOLDLOCK, NOLOCK, NOWAIT, PAGLOCK, READCOMMITTED,
1062// READCOMMITTEDLOCK, READPAST, READUNCOMMITTED, REPEATABLEREAD, ROWLOCK, TABLOCK, TABLOCKX
1063// UPDLOCK, XLOCK)
1064table_hint
1065 : NOEXPAND? ( INDEX '(' index_value (',' index_value)* ')'
1066 | INDEX '=' index_value
1067 | FORCESEEK ('(' index_value '(' ID (',' ID)* ')' ')')?
1068 | SERIALIZABLE
1069 | SNAPSHOT
1070 | SPATIAL_WINDOW_MAX_CELLS '=' DECIMAL
1071 | ID)?
1072 ;
1073
1074index_value
1075 : id | DECIMAL
1076 ;
1077
1078column_alias_list
1079 : '(' column_alias (',' column_alias)* ')'
1080 ;
1081
1082column_alias
1083 : id
1084 | STRING
1085 ;
1086
1087table_value_constructor
1088 : VALUES '(' expression_list ')' (',' '(' expression_list ')')*
1089 ;
1090
1091expression_list
1092 : expression (',' expression)*
1093 ;
1094
1095// https://msdn.microsoft.com/en-us/library/ms189798.aspx
1096ranking_windowed_function
1097 : (RANK | DENSE_RANK | ROW_NUMBER) '(' ')' over_clause
1098 | NTILE '(' expression ')' over_clause
1099 ;
1100
1101// https://msdn.microsoft.com/en-us/library/ms173454.aspx
1102aggregate_windowed_function
1103 : (AVG | MAX | MIN | SUM | STDEV | STDEVP | VAR | VARP)
1104 '(' all_distinct_expression ')' over_clause?
1105 | (COUNT | COUNT_BIG)
1106 '(' ('*' | all_distinct_expression) ')' over_clause?
1107 | CHECKSUM_AGG '(' all_distinct_expression ')'
1108 | GROUPING '(' expression ')'
1109 | GROUPING_ID '(' expression_list ')'
1110 ;
1111
1112all_distinct_expression
1113 : (ALL | DISTINCT)? expression
1114 ;
1115
1116// https://msdn.microsoft.com/en-us/library/ms189461.aspx
1117over_clause
1118 : OVER '(' (PARTITION BY expression_list)? order_by_clause? row_or_range_clause? ')'
1119 ;
1120
1121row_or_range_clause
1122 : (ROWS | RANGE) window_frame_extent
1123 ;
1124
1125window_frame_extent
1126 : window_frame_preceding
1127 | BETWEEN window_frame_bound AND window_frame_bound
1128 ;
1129
1130window_frame_bound
1131 : window_frame_preceding
1132 | window_frame_following
1133 ;
1134
1135window_frame_preceding
1136 : UNBOUNDED PRECEDING
1137 | DECIMAL PRECEDING
1138 | CURRENT ROW
1139 ;
1140
1141window_frame_following
1142 : UNBOUNDED FOLLOWING
1143 | DECIMAL FOLLOWING
1144 ;
1145
1146create_database_option:
1147 FILESTREAM ( database_filestream_option (',' database_filestream_option)* )
1148 | DEFAULT_LANGUAGE EQUAL ( id | STRING )
1149 | DEFAULT_FULLTEXT_LANGUAGE EQUAL ( id | STRING )
1150 | NESTED_TRIGGERS EQUAL ( OFF | ON )
1151 | TRANSFORM_NOISE_WORDS EQUAL ( OFF | ON )
1152 | TWO_DIGIT_YEAR_CUTOFF EQUAL DECIMAL
1153 | DB_CHAINING ( OFF | ON )
1154 | TRUSTWORTHY ( OFF | ON )
1155 ;
1156
1157database_filestream_option:
1158 LR_BRACKET
1159 (
1160 ( NON_TRANSACTED_ACCESS EQUAL ( OFF | READ_ONLY | FULL ) )
1161 |
1162 ( DIRECTORY_NAME EQUAL STRING )
1163 )
1164 RR_BRACKET
1165 ;
1166
1167database_file_spec:
1168 file_group | file_spec;
1169
1170file_group:
1171 FILEGROUP id
1172 ( CONTAINS FILESTREAM )?
1173 ( DEFAULT )?
1174 ( CONTAINS MEMORY_OPTIMIZED_DATA )?
1175 file_spec ( ',' file_spec )*
1176 ;
1177file_spec
1178 : LR_BRACKET
1179 NAME EQUAL ( id | STRING ) ','?
1180 FILENAME EQUAL file = STRING ','?
1181 ( SIZE EQUAL file_size ','? )?
1182 ( MAXSIZE EQUAL (file_size | UNLIMITED )','? )?
1183 ( FILEGROWTH EQUAL file_size ','? )?
1184 RR_BRACKET
1185 ;
1186
1187// Primitive.
1188
1189full_table_name
1190 : (server=id '.' database=id '.' schema=id '.'
1191 | database=id '.' (schema=id)? '.'
1192 | schema=id '.')? table=id
1193 ;
1194
1195table_name
1196 : (database=id '.' (schema=id)? '.' | schema=id '.')? table=id
1197 ;
1198
1199simple_name
1200 : (schema=id '.')? name=id
1201 ;
1202
1203func_proc_name
1204 : (database=id '.' (schema=id)? '.' | (schema=id) '.')? procedure=id
1205 ;
1206
1207ddl_object
1208 : full_table_name
1209 | LOCAL_ID
1210 ;
1211
1212full_column_name
1213 : (table_name '.')? id
1214 ;
1215
1216column_name_list
1217 : id (',' id)*
1218 ;
1219
1220cursor_name
1221 : id
1222 | LOCAL_ID
1223 ;
1224
1225on_off
1226 : ON
1227 | OFF
1228 ;
1229
1230clustered
1231 : CLUSTERED
1232 | NONCLUSTERED
1233 ;
1234
1235null_notnull
1236 : NOT? NULL
1237 ;
1238
1239scalar_function_name
1240 : func_proc_name
1241 | RIGHT
1242 | LEFT
1243 | BINARY_CHECKSUM
1244 | CHECKSUM
1245 ;
1246
1247// https://msdn.microsoft.com/en-us/library/ms187752.aspx
1248// TODO: implement runtime check or add new tokens.
1249data_type
1250 /*: BIGINT
1251 | BINARY '(' DECIMAL ')'
1252 | BIT
1253 | CHAR '(' DECIMAL ')'
1254 | DATE
1255 | DATETIME
1256 | DATETIME2
1257 | DATETIMEOFFSET '(' DECIMAL ')'
1258 | DECIMAL '(' DECIMAL ',' DECIMAL ')'
1259 | FLOAT
1260 | GEOGRAPHY
1261 | GEOMETRY
1262 | HIERARCHYID
1263 | IMAGE
1264 | INT
1265 | MONEY
1266 | NCHAR '(' DECIMAL ')'
1267 | NTEXT
1268 | NUMERIC '(' DECIMAL ',' DECIMAL ')'
1269 | NVARCHAR '(' DECIMAL | MAX ')'
1270 | REAL
1271 | SMALLDATETIME
1272 | SMALLINT
1273 | SMALLMONEY
1274 | SQL_VARIANT
1275 | TEXT
1276 | TIME '(' DECIMAL ')'
1277 | TIMESTAMP
1278 | TINYINT
1279 | UNIQUEIDENTIFIER
1280 | VARBINARY '(' DECIMAL | MAX ')'
1281 | VARCHAR '(' DECIMAL | MAX ')'
1282 | XML*/
1283 : id IDENTITY? ('(' (DECIMAL | MAX) (',' DECIMAL)? ')')?
1284 ;
1285
1286default_value
1287 : NULL
1288 | constant
1289 ;
1290
1291// https://msdn.microsoft.com/en-us/library/ms179899.aspx
1292constant
1293 : STRING // string, datetime or uniqueidentifier
1294 | BINARY
1295 | sign? DECIMAL
1296 | sign? (REAL | FLOAT) // float or decimal
1297 | sign? dollar='$' (DECIMAL | FLOAT) // money
1298 ;
1299
1300sign
1301 : '+'
1302 | '-'
1303 ;
1304
1305// https://msdn.microsoft.com/en-us/library/ms175874.aspx
1306id
1307 : simple_id
1308 | DOUBLE_QUOTE_ID
1309 | SQUARE_BRACKET_ID
1310 ;
1311
1312simple_id
1313 : ID
1314 | ABSOLUTE
1315 | APPLY
1316 | AUTO
1317 | AVG
1318 | BASE64
1319 | CALLED
1320 | CALLER
1321 | CAST
1322 | CATCH
1323 | CHECKSUM_AGG
1324 | COMMITTED
1325 | CONCAT
1326 | CONTROL
1327 | COOKIE
1328 | COUNT
1329 | COUNT_BIG
1330 | DELAY
1331 | DELETED
1332 | DENSE_RANK
1333 | DISABLE
1334 | DYNAMIC
1335 | ENCRYPTION
1336 | EXPAND
1337 | FAST
1338 | FAST_FORWARD
1339 | FIRST
1340 | FOLLOWING
1341 | FORCE
1342 | FORCESEEK
1343 | FORWARD_ONLY
1344 | FULLSCAN
1345 | GLOBAL
1346 | GO
1347 | GROUPING
1348 | GROUPING_ID
1349 | HASH
1350 | IMPERSONATE
1351 | INSENSITIVE
1352 | INSERTED
1353 | ISOLATION
1354 | KEEP
1355 | KEEPFIXED
1356 | FORCED
1357 | KEYSET
1358 | IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
1359 | INPUT
1360 | LAST
1361 | LEVEL
1362 | LOCAL
1363 | LOCK_ESCALATION
1364 | LOGIN
1365 | LOOP
1366 | MARK
1367 | MAX
1368 | MAXDOP
1369 | MAXRECURSION
1370 | MIN
1371 | MODIFY
1372 | NAME
1373 | NEXT
1374 | NOCOUNT
1375 | NOEXPAND
1376 | NORECOMPUTE
1377 | NTILE
1378 | NUMBER
1379 | OFFSET
1380 | ONLINE
1381 | ONLY
1382 | OPTIMISTIC
1383 | OPTIMIZE
1384 | OUT
1385 | OUTPUT
1386 | OWNER
1387 | PARAMETERIZATION
1388 | PARTITION
1389 | PATH
1390 | PRECEDING
1391 | PRIOR
1392 | PRIVILEGES
1393 | RANGE
1394 | RANK
1395 | READONLY
1396 | READ_ONLY
1397 | RECOMPILE
1398 | RELATIVE
1399 | REMOTE
1400 | REPEATABLE
1401 | RETURN
1402 | RETURNS
1403 | ROBUST
1404 | ROOT
1405 | ROW
1406 | ROWGUID
1407 | ROWS
1408 | ROW_NUMBER
1409 | SAMPLE
1410 | SIZE
1411 | SCHEMABINDING
1412 | SCROLL
1413 | SCROLL_LOCKS
1414 | SELF
1415 | SERIALIZABLE
1416 | SIMPLE
1417 | SNAPSHOT
1418 | SPATIAL_WINDOW_MAX_CELLS
1419 | STATIC
1420 | STATS_STREAM
1421 | STDEV
1422 | STDEVP
1423 | SUM
1424 | TEXTIMAGE_ON
1425 | THROW
1426 | TIES
1427 | TIME
1428 | TRY
1429 | TYPE
1430 | TYPE_WARNING
1431 | UNBOUNDED
1432 | UNCOMMITTED
1433 | UNKNOWN
1434 | USING
1435 | VAR
1436 | VARP
1437 | VIEW_METADATA
1438 | VIEWS
1439 | WORK
1440 | XML
1441 | XMLNAMESPACES
1442 ;
1443
1444// https://msdn.microsoft.com/en-us/library/ms188074.aspx
1445// Spaces are allowed for comparison operators.
1446comparison_operator
1447 : '=' | '>' | '<' | '<' '=' | '>' '=' | '<' '>' | '!' '=' | '!' '>' | '!' '<'
1448 ;
1449
1450assignment_operator
1451 : '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '^=' | '|='
1452 ;
1453
1454file_size:
1455 DECIMAL( KB | MB | GB | TB | '%' )?
1456 ;
1457
1458// Lexer
1459
1460// Basic keywords (from https://msdn.microsoft.com/en-us/library/ms189822.aspx)
1461ADD: A D D;
1462ALL: A L L;
1463ALTER: A L T E R;
1464AND: A N D;
1465ANY: A N Y;
1466AS: A S;
1467ASC: A S C;
1468AUTHORIZATION: A U T H O R I Z A T I O N;
1469BACKUP: B A C K U P;
1470BEGIN: B E G I N;
1471BETWEEN: B E T W E E N;
1472BREAK: B R E A K;
1473BROWSE: B R O W S E;
1474BULK: B U L K;
1475BY: B Y;
1476CALLED: C A L L E D;
1477CASCADE: C A S C A D E;
1478CASE: C A S E;
1479CHANGETABLE: C H A N G E T A B L E;
1480CHANGES: C H A N G E S;
1481CHECK: C H E C K;
1482CHECKPOINT: C H E C K P O I N T;
1483CLOSE: C L O S E;
1484CLUSTERED: C L U S T E R E D;
1485COALESCE: C O A L E S C E;
1486COLLATE: C O L L A T E;
1487COLUMN: C O L U M N;
1488COMMIT: C O M M I T;
1489COMPUTE: C O M P U T E;
1490CONSTRAINT: C O N S T R A I N T;
1491CONTAINMENT: C O N T A I N M E N T;
1492CONTAINS: C O N T A I N S;
1493CONTAINSTABLE: C O N T A I N S T A B L E;
1494CONTINUE: C O N T I N U E;
1495CONVERT: C O N V E R T;
1496CREATE: C R E A T E;
1497CROSS: C R O S S;
1498CURRENT: C U R R E N T;
1499CURRENT_DATE: C U R R E N T '_' D A T E;
1500CURRENT_TIME: C U R R E N T '_' T I M E;
1501CURRENT_TIMESTAMP: C U R R E N T '_' T I M E S T A M P;
1502CURRENT_USER: C U R R E N T '_' U S E R;
1503CURSOR: C U R S O R;
1504DATABASE: D A T A B A S E;
1505DBCC: D B C C;
1506DEALLOCATE: D E A L L O C A T E;
1507DECLARE: D E C L A R E;
1508DEFAULT: D E F A U L T;
1509DELETE: D E L E T E;
1510DENY: D E N Y;
1511DESC: D E S C;
1512DISK: D I S K;
1513DISTINCT: D I S T I N C T;
1514DISTRIBUTED: D I S T R I B U T E D;
1515DOUBLE: D O U B L E;
1516DROP: D R O P;
1517DUMP: D U M P;
1518ELSE: E L S E;
1519END: E N D;
1520ERRLVL: E R R L V L;
1521ESCAPE: E S C A P E;
1522EXCEPT: E X C E P T;
1523EXECUTE: E X E C (U T E)?;
1524EXISTS: E X I S T S;
1525EXIT: E X I T;
1526EXTERNAL: E X T E R N A L;
1527FETCH: F E T C H;
1528FILE: F I L E;
1529FILENAME: F I L E N A M E;
1530FILLFACTOR: F I L L F A C T O R;
1531FOR: F O R;
1532FORCESEEK: F O R C E S E E K;
1533FOREIGN: F O R E I G N;
1534FREETEXT: F R E E T E X T;
1535FREETEXTTABLE: F R E E T E X T T A B L E;
1536FROM: F R O M;
1537FULL: F U L L;
1538FUNCTION: F U N C T I O N;
1539GOTO: G O T O;
1540GRANT: G R A N T;
1541GROUP: G R O U P;
1542HAVING: H A V I N G;
1543IDENTITY: I D E N T I T Y;
1544IDENTITYCOL: I D E N T I T Y C O L;
1545IDENTITY_INSERT: I D E N T I T Y '_' I N S E R T;
1546IF: I F;
1547IN: I N;
1548INDEX: I N D E X;
1549INNER: I N N E R;
1550INSERT: I N S E R T;
1551INTERSECT: I N T E R S E C T;
1552INTO: I N T O;
1553IS: I S;
1554JOIN: J O I N;
1555KEY: K E Y;
1556KILL: K I L L;
1557LEFT: L E F T;
1558LIKE: L I K E;
1559LINENO: L I N E N O;
1560LOAD: L O A D;
1561LOG: L O G;
1562MERGE: M E R G E;
1563NATIONAL: N A T I O N A L;
1564NOCHECK: N O C H E C K;
1565NONCLUSTERED: N O N C L U S T E R E D;
1566NONE: N O N E;
1567NOT: N O T;
1568NULL: N U L L;
1569NULLIF: N U L L I F;
1570OF: O F;
1571OFF: O F F;
1572OFFSETS: O F F S E T S;
1573ON: O N;
1574OPEN: O P E N;
1575OPENDATASOURCE: O P E N D A T A S O U R C E;
1576OPENQUERY: O P E N Q U E R Y;
1577OPENROWSET: O P E N R O W S E T;
1578OPENXML: O P E N X M L;
1579OPTION: O P T I O N;
1580OR: O R;
1581ORDER: O R D E R;
1582OUTER: O U T E R;
1583OVER: O V E R;
1584PARTIAL: P A R T I A L;
1585PERCENT: P E R C E N T;
1586PIVOT: P I V O T;
1587PLAN: P L A N;
1588PRECISION: P R E C I S I O N;
1589PRIMARY: P R I M A R Y;
1590PRINT: P R I N T;
1591PROC: P R O C;
1592PROCEDURE: P R O C E D U R E;
1593PUBLIC: P U B L I C;
1594RAISERROR: R A I S E R R O R;
1595READ: R E A D;
1596READTEXT: R E A D T E X T;
1597RECONFIGURE: R E C O N F I G U R E;
1598REFERENCES: R E F E R E N C E S;
1599REPLICATION: R E P L I C A T I O N;
1600RESTORE: R E S T O R E;
1601RESTRICT: R E S T R I C T;
1602RETURN: R E T U R N;
1603RETURNS: R E T U R N S;
1604REVERT: R E V E R T;
1605REVOKE: R E V O K E;
1606RIGHT: R I G H T;
1607ROLLBACK: R O L L B A C K;
1608ROWCOUNT: R O W C O U N T;
1609ROWGUIDCOL: R O W G U I D C O L;
1610RULE: R U L E;
1611SAVE: S A V E;
1612SCHEMA: S C H E M A;
1613SECURITYAUDIT: S E C U R I T Y A U D I T;
1614SELECT: S E L E C T;
1615SEMANTICKEYPHRASETABLE: S E M A N T I C K E Y P H R A S E T A B L E;
1616SEMANTICSIMILARITYDETAILSTABLE: S E M A N T I C S I M I L A R I T Y D E T A I L S T A B L E;
1617SEMANTICSIMILARITYTABLE: S E M A N T I C S I M I L A R I T Y T A B L E;
1618SESSION_USER: S E S S I O N '_' U S E R;
1619SET: S E T;
1620SETUSER: S E T U S E R;
1621SHUTDOWN: S H U T D O W N;
1622SOME: S O M E;
1623STATISTICS: S T A T I S T I C S;
1624SYSTEM_USER: S Y S T E M '_' U S E R;
1625TABLE: T A B L E;
1626TABLESAMPLE: T A B L E S A M P L E;
1627TEXTSIZE: T E X T S I Z E;
1628THEN: T H E N;
1629TO: T O;
1630TOP: T O P;
1631TRAN: T R A N;
1632TRANSACTION: T R A N S A C T I O N;
1633TRIGGER: T R I G G E R;
1634TRUNCATE: T R U N C A T E;
1635TRY_CONVERT: T R Y '_' C O N V E R T;
1636TSEQUAL: T S E Q U A L;
1637UNION: U N I O N;
1638UNIQUE: U N I Q U E;
1639UNPIVOT: U N P I V O T;
1640UPDATE: U P D A T E;
1641UPDATETEXT: U P D A T E T E X T;
1642USE: U S E;
1643USER: U S E R;
1644VALUES: V A L U E S;
1645VARYING: V A R Y I N G;
1646VIEW: V I E W;
1647WAITFOR: W A I T F O R;
1648WHEN: W H E N;
1649WHERE: W H E R E;
1650WHILE: W H I L E;
1651WITH: W I T H;
1652WITHIN: W I T H I N;
1653WRITETEXT: W R I T E T E X T;
1654
1655// Additional keywords (they can be id).
1656ABSOLUTE: A B S O L U T E;
1657AFTER: A F T E R;
1658ALLOWED: A L L O W E D;
1659ALLOW_SNAPSHOT_ISOLATION: A L L O W '_' S N A P S H O T '_' I S O L A T I O N;
1660ANSI_NULLS: A N S I '_' N U L L S;
1661ANSI_NULL_DEFAULT: A N S I '_' N U L L '_' D E F A U L T;
1662ANSI_PADDING: A N S I '_' P A D D I N G;
1663ANSI_WARNINGS: A N S I '_' W A R N I N G S;
1664APPLY: A P P L Y;
1665ARITHABORT: A R I T H A B O R T;
1666AUTO: A U T O;
1667AUTO_CLEANUP: A U T O '_' C L E A N U P;
1668AUTO_CLOSE: A U T O '_' C L O S E;
1669AUTO_CREATE_STATISTICS: A U T O '_' C R E A T E '_' S T A T I S T I C S;
1670AUTO_SHRINK: A U T O '_' S H R I N K;
1671AUTO_UPDATE_STATISTICS: A U T O '_' U P D A T E '_' S T A T I S T I C S;
1672AUTO_UPDATE_STATISTICS_ASYNC: A U T O '_' U P D A T E '_' S T A T I S T I C S '_' A S Y N C;
1673AVG: A V G;
1674BASE64: B A S E '64';
1675BINARY_CHECKSUM: B I N A R Y '_' C H E C K S U M;
1676BULK_LOGGED: B U L K '_' L O G G E D;
1677CALLER: C A L L E R;
1678CAST: C A S T;
1679CATCH: C A T C H;
1680CHANGE_RETENTION: C H A N G E '_' R E T E N T I O N;
1681CHANGE_TRACKING: C H A N G E '_' T R A C K I N G;
1682CHECKSUM: C H E C K S U M;
1683CHECKSUM_AGG: C H E C K S U M '_' A G G;
1684COMMITTED: C O M M I T T E D;
1685COMPATIBILITY_LEVEL: C O M P A T I B I L I T Y '_' L E V E L;
1686CONCAT: C O N C A T;
1687CONCAT_NULL_YIELDS_NULL: C O N C A T '_' N U L L '_' Y I E L D S '_' N U L L;
1688CONTROL: C O N T R O L;
1689COOKIE: C O O K I E;
1690COUNT: C O U N T;
1691COUNT_BIG: C O U N T '_' B I G;
1692CURSOR_CLOSE_ON_COMMIT: C U R S O R '_' C L O S E '_' O N '_' C O M M I T;
1693CURSOR_DEFAULT: C U R S O R '_' D E F A U L T;
1694DATEADD: D A T E A D D;
1695DATEDIFF: D A T E D I F F;
1696DATENAME: D A T E N A M E;
1697DATEPART: D A T E P A R T;
1698DATE_CORRELATION_OPTIMIZATION: D A T E '_' C O R R E L A T I O N '_' O P T I M I Z A T I O N;
1699DAYS: D A Y S;
1700DB_CHAINING: D B '_' C H A I N I N G;
1701DEFAULT_FULLTEXT_LANGUAGE: D E F A U L T '_' F U L L T E X T '_' L A N G U A G E;
1702DEFAULT_LANGUAGE: D E F A U L T '_' L A N G U A G E;
1703DELAY: D E L A Y;
1704DELAYED_DURABILITY: D E L A Y E D '_' D U R A B I L I T Y;
1705DELETED: D E L E T E D;
1706DENSE_RANK: D E N S E '_' R A N K;
1707DIRECTORY_NAME: D I R E C T O R Y '_' N A M E;
1708DISABLE: D I S A B L E;
1709DISABLED: D I S A B L E D;
1710DISABLE_BROKER: D I S A B L E '_' B R O K E R;
1711DYNAMIC: D Y N A M I C;
1712EMERGENCY: E M E R G E N C Y;
1713ENABLE_BROKER: E N A B L E '_' B R O K E R;
1714ENCRYPTION: E N C R Y P T I O N;
1715ERROR_BROKER_CONVERSATIONS: E R R O R '_' B R O K E R '_' C O N V E R S A T I O N S;
1716EXPAND: E X P A N D;
1717FAST: F A S T;
1718FAST_FORWARD: F A S T '_' F O R W A R D;
1719FILEGROUP: F I L E G R O U P;
1720FILEGROWTH: F I L E G R O W T H;
1721FILESTREAM: F I L E S T R E A M;
1722FIRST: F I R S T;
1723FOLLOWING: F O L L O W I N G;
1724FORCE: F O R C E;
1725FORCED: F O R C E D;
1726FORWARD_ONLY: F O R W A R D '_' O N L Y;
1727FULLSCAN: F U L L S C A N;
1728GB: G B;
1729GLOBAL: G L O B A L;
1730GO: G O;
1731GROUPING: G R O U P I N G;
1732GROUPING_ID: G R O U P I N G '_' I D;
1733HADR: H A D R;
1734HASH: H A S H;
1735HONOR_BROKER_PRIORITY: H O N O R '_' B R O K E R '_' P R I O R I T Y;
1736HOURS: H O U R S;
1737IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX: I G N O R E '_' N O N C L U S T E R E D '_' C O L U M N S T O R E '_' I N D E X;
1738IMMEDIATE: I M M E D I A T E;
1739IMPERSONATE: I M P E R S O N A T E;
1740INCREMENTAL: I N C R E M E N T A L;
1741INPUT: I N P U T;
1742INSENSITIVE: I N S E N S I T I V E;
1743INSERTED: I N S E R T E D;
1744ISOLATION: I S O L A T I O N;
1745KB: K B;
1746KEEP: K E E P;
1747KEEPFIXED: K E E P F I X E D;
1748KEYSET: K E Y S E T;
1749LAST: L A S T;
1750LEVEL: L E V E L;
1751LOCAL: L O C A L;
1752LOCK_ESCALATION: L O C K '_' E S C A L A T I O N;
1753LOGIN: L O G I N;
1754LOOP: L O O P;
1755MARK: M A R K;
1756MAX: M A X;
1757MAXDOP: M A X D O P;
1758MAXRECURSION: M A X R E C U R S I O N;
1759MAXSIZE: M A X S I Z E;
1760MB: M B;
1761MEMORY_OPTIMIZED_DATA: M E M O R Y '_' O P T I M I Z E D '_' D A T A;
1762MIN: M I N;
1763MINUTES: M I N U T E S;
1764MIN_ACTIVE_ROWVERSION: M I N '_' A C T I V E '_' R O W V E R S I O N;
1765MIXED_PAGE_ALLOCATION: M I X E D '_' P A G E '_' A L L O C A T I O N;
1766MODIFY: M O D I F Y;
1767MULTI_USER: M U L T I '_' U S E R;
1768NAME: N A M E;
1769NESTED_TRIGGERS: N E S T E D '_' T R I G G E R S;
1770NEW_BROKER: N E W '_' B R O K E R;
1771NEXT: N E X T;
1772NOCOUNT: N O C O U N T;
1773NOEXPAND: N O E X P A N D;
1774NON_TRANSACTED_ACCESS: N O N '_' T R A N S A C T E D '_' A C C E S S;
1775NORECOMPUTE: N O R E C O M P U T E;
1776NO_WAIT: N O '_' W A I T;
1777NTILE: N T I L E;
1778NUMBER: N U M B E R;
1779NUMERIC_ROUNDABORT: N U M E R I C '_' R O U N D A B O R T;
1780OFFLINE: O F F L I N E;
1781OFFSET: O F F S E T;
1782ONLINE: O N L I N E;
1783ONLY: O N L Y;
1784OPTIMISTIC: O P T I M I S T I C;
1785OPTIMIZE: O P T I M I Z E;
1786OUT: O U T;
1787OUTPUT: O U T P U T;
1788OWNER: O W N E R;
1789PAGE_VERIFY: P A G E '_' V E R I F Y;
1790PARAMETERIZATION: P A R A M E T E R I Z A T I O N;
1791PARTITION: P A R T I T I O N;
1792PATH: P A T H;
1793PRECEDING: P R E C E D I N G;
1794PRIOR: P R I O R;
1795PRIVILEGES: P R I V I L E G E S;
1796QUOTED_IDENTIFIER: Q U O T E D '_' I D E N T I F I E R;
1797RANGE: R A N G E;
1798RANK: R A N K;
1799READONLY: R E A D O N L Y;
1800READ_COMMITTED_SNAPSHOT: R E A D '_' C O M M I T T E D '_' S N A P S H O T;
1801READ_ONLY: R E A D '_' O N L Y;
1802READ_WRITE: R E A D '_' W R I T E;
1803RECOMPILE: R E C O M P I L E;
1804RECOVERY: R E C O V E R Y;
1805RECURSIVE_TRIGGERS: R E C U R S I V E '_' T R I G G E R S;
1806RELATIVE: R E L A T I V E;
1807REMOTE: R E M O T E;
1808REPEATABLE: R E P E A T A B L E;
1809RESTRICTED_USER: R E S T R I C T E D '_' U S E R;
1810ROBUST: R O B U S T;
1811ROOT: R O O T;
1812ROW: R O W;
1813ROWGUID: R O W G U I D;
1814ROWS: R O W S;
1815ROW_NUMBER: R O W '_' N U M B E R;
1816SAMPLE: S A M P L E;
1817SCHEMABINDING: S C H E M A B I N D I N G;
1818SCROLL: S C R O L L;
1819SCROLL_LOCKS: S C R O L L '_' L O C K S;
1820SECONDS: S E C O N D S;
1821SELF: S E L F;
1822SERIALIZABLE: S E R I A L I Z A B L E;
1823SHOWPLAN: S H O W P L A N;
1824SIMPLE: S I M P L E;
1825SINGLE_USER: S I N G L E '_' U S E R;
1826SIZE: S I Z E;
1827SNAPSHOT: S N A P S H O T;
1828SPATIAL_WINDOW_MAX_CELLS: S P A T I A L '_' W I N D O W '_' M A X '_' C E L L S;
1829STATIC: S T A T I C;
1830STATS_STREAM: S T A T S '_' S T R E A M;
1831STDEV: S T D E V;
1832STDEVP: S T D E V P;
1833SUM: S U M;
1834TAKE: T A K E;
1835TARGET_RECOVERY_TIME: T A R G E T '_' R E C O V E R Y '_' T I M E;
1836TB: T B;
1837TEXTIMAGE_ON: T E X T I M A G E '_' O N;
1838THROW: T H R O W;
1839TIES: T I E S;
1840TIME: T I M E;
1841TORN_PAGE_DETECTION: T O R N '_' P A G E '_' D E T E C T I O N;
1842TRANSFORM_NOISE_WORDS: T R A N S F O R M '_' N O I S E '_' W O R D S;
1843TRUSTWORTHY: T R U S T W O R T H Y;
1844TRY: T R Y;
1845TWO_DIGIT_YEAR_CUTOFF: T W O '_' D I G I T '_' Y E A R '_' C U T O F F;
1846TYPE: T Y P E;
1847TYPE_WARNING: T Y P E '_' W A R N I N G;
1848UNBOUNDED: U N B O U N D E D;
1849UNCOMMITTED: U N C O M M I T T E D;
1850UNKNOWN: U N K N O W N;
1851UNLIMITED: U N L I M I T E D;
1852USING: U S I N G;
1853VAR: V A R;
1854VARP: V A R P;
1855VIEWS: V I E W S;
1856VIEW_METADATA: V I E W '_' M E T A D A T A;
1857WORK: W O R K;
1858XML: X M L;
1859XMLNAMESPACES: X M L N A M E S P A C E S;
1860
1861DOLLAR_ACTION: '$' A C T I O N;
1862
1863SPACE: [ \t\r\n]+ -> skip;
1864COMMENT: '/*' .*? '*/' -> channel(HIDDEN);
1865LINE_COMMENT: '--' ~[\r\n]* -> channel(HIDDEN);
1866
1867// TODO: ID can be not only Latin.
1868DOUBLE_QUOTE_ID: '"' ~'"'+ '"';
1869SQUARE_BRACKET_ID: '[' ~']'+ ']';
1870LOCAL_ID: '@' ([a-zA-Z_$@#0-9] | FullWidthLetter)+;
1871DECIMAL: DEC_DIGIT+;
1872ID: ( [a-zA-Z_#] | FullWidthLetter) ( [a-zA-Z_#$@0-9] | FullWidthLetter )*;
1873STRING: N? '\'' (~'\'' | '\'\'')* '\'';
1874BINARY: '0' X HEX_DIGIT*;
1875FLOAT: DEC_DOT_DEC;
1876REAL: DEC_DOT_DEC (E [+-]? DEC_DIGIT+)?;
1877
1878EQUAL: '=';
1879
1880GREATER: '>';
1881LESS: '<';
1882EXCLAMATION: '!';
1883
1884PLUS_ASSIGN: '+=';
1885MINUS_ASSIGN: '-=';
1886MULT_ASSIGN: '*=';
1887DIV_ASSIGN: '/=';
1888MOD_ASSIGN: '%=';
1889AND_ASSIGN: '&=';
1890XOR_ASSIGN: '^=';
1891OR_ASSIGN: '|=';
1892
1893DOT: '.';
1894UNDERLINE: '_';
1895AT: '@';
1896SHARP: '#';
1897DOLLAR: '$';
1898LR_BRACKET: '(';
1899RR_BRACKET: ')';
1900COMMA: ',';
1901SEMI: ';';
1902COLON: ':';
1903STAR: '*';
1904DIVIDE: '/';
1905MODULE: '%';
1906PLUS: '+';
1907MINUS: '-';
1908BIT_NOT: '~';
1909BIT_OR: '|';
1910BIT_AND: '&';
1911BIT_XOR: '^';
1912
1913fragment LETTER: [a-zA-Z_];
1914fragment DEC_DOT_DEC: (DEC_DIGIT+ '.' DEC_DIGIT+ | DEC_DIGIT+ '.' | '.' DEC_DIGIT+);
1915fragment HEX_DIGIT: [0-9A-Fa-f];
1916fragment DEC_DIGIT: [0-9];
1917
1918fragment A: [aA];
1919fragment B: [bB];
1920fragment C: [cC];
1921fragment D: [dD];
1922fragment E: [eE];
1923fragment F: [fF];
1924fragment G: [gG];
1925fragment H: [hH];
1926fragment I: [iI];
1927fragment J: [jJ];
1928fragment K: [kK];
1929fragment L: [lL];
1930fragment M: [mM];
1931fragment N: [nN];
1932fragment O: [oO];
1933fragment P: [pP];
1934fragment Q: [qQ];
1935fragment R: [rR];
1936fragment S: [sS];
1937fragment T: [tT];
1938fragment U: [uU];
1939fragment V: [vV];
1940fragment W: [wW];
1941fragment X: [xX];
1942fragment Y: [yY];
1943fragment Z: [zZ];
1944fragment FullWidthLetter
1945 : '\u00c0'..'\u00d6'
1946 | '\u00d8'..'\u00f6'
1947 | '\u00f8'..'\u00ff'
1948 | '\u0100'..'\u1fff'
1949 | '\u2c00'..'\u2fff'
1950 | '\u3040'..'\u318f'
1951 | '\u3300'..'\u337f'
1952 | '\u3400'..'\u3fff'
1953 | '\u4e00'..'\u9fff'
1954 | '\ua000'..'\ud7ff'
1955 | '\uf900'..'\ufaff'
1956 | '\uff00'..'\ufff0'
1957 // | '\u10000'..'\u1F9FF' //not support four bytes chars
1958 // | '\u20000'..'\u2FA1F'
1959 ;