]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/Ecc/C.g
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / BaseTools / Source / Python / Ecc / C.g
CommitLineData
52302d4d
LG
1/* @file\r
2 This file is used to be the grammar file of ECC tool\r
3\r
40d841f6 4 Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
2e351cbe 5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
52302d4d 6*/\r
30fdf114
LG
7\r
8grammar C;\r
9options {\r
10 language=Python;\r
11 backtrack=true;\r
12 memoize=true;\r
13 k=2;\r
14}\r
15\r
52302d4d
LG
16@lexer::header{\r
17## @file\r
18# The file defines the Lexer for C source files.\r
19#\r
fb0b35e0 20# THIS FILE IS AUTO-GENERATED. PLEASE DO NOT MODIFY THIS FILE.\r
52302d4d
LG
21# This file is generated by running:\r
22# java org.antlr.Tool C.g\r
23#\r
24# Copyright (c) 2009 - 2010, Intel Corporation All rights reserved.\r
25#\r
26# This program and the accompanying materials are licensed and made available\r
27# under the terms and conditions of the BSD License which accompanies this\r
28# distribution. The full text of the license may be found at:\r
29# http://opensource.org/licenses/bsd-license.php\r
30#\r
31# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
32# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
33#\r
34##\r
35}\r
36\r
30fdf114 37@header {\r
52302d4d
LG
38## @file\r
39# The file defines the parser for C source files.\r
40#\r
fb0b35e0 41# THIS FILE IS AUTO-GENERATED. PLEASE DO NOT MODIFY THIS FILE.\r
52302d4d
LG
42# This file is generated by running:\r
43# java org.antlr.Tool C.g\r
44#\r
45# Copyright (c) 2009 - 2010, Intel Corporation All rights reserved.\r
46#\r
47# This program and the accompanying materials are licensed and made available\r
48# under the terms and conditions of the BSD License which accompanies this\r
49# distribution. The full text of the license may be found at:\r
50# http://opensource.org/licenses/bsd-license.php\r
51#\r
52# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
53# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
54#\r
55##\r
56\r
57import CodeFragment\r
58import FileProfile\r
30fdf114
LG
59}\r
60\r
61@members {\r
62 \r
63 def printTokenInfo(self, line, offset, tokenText):\r
64 print str(line)+ ',' + str(offset) + ':' + str(tokenText)\r
65 \r
66 def StorePredicateExpression(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
67 PredExp = CodeFragment.PredicateExpression(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
68 FileProfile.PredicateExpressionList.append(PredExp)\r
69 \r
70 def StoreEnumerationDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
71 EnumDef = CodeFragment.EnumerationDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
72 FileProfile.EnumerationDefinitionList.append(EnumDef)\r
73 \r
74 def StoreStructUnionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text):\r
75 SUDef = CodeFragment.StructUnionDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset))\r
76 FileProfile.StructUnionDefinitionList.append(SUDef)\r
77 \r
78 def StoreTypedefDefinition(self, StartLine, StartOffset, EndLine, EndOffset, FromText, ToText):\r
79 Tdef = CodeFragment.TypedefDefinition(FromText, ToText, (StartLine, StartOffset), (EndLine, EndOffset))\r
80 FileProfile.TypedefDefinitionList.append(Tdef)\r
81 \r
82 def StoreFunctionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText, LeftBraceLine, LeftBraceOffset, DeclLine, DeclOffset):\r
83 FuncDef = CodeFragment.FunctionDefinition(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset), (LeftBraceLine, LeftBraceOffset), (DeclLine, DeclOffset))\r
84 FileProfile.FunctionDefinitionList.append(FuncDef)\r
85 \r
86 def StoreVariableDeclaration(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText):\r
87 VarDecl = CodeFragment.VariableDeclaration(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset))\r
88 FileProfile.VariableDeclarationList.append(VarDecl)\r
89 \r
90 def StoreFunctionCalling(self, StartLine, StartOffset, EndLine, EndOffset, FuncName, ParamList):\r
91 FuncCall = CodeFragment.FunctionCalling(FuncName, ParamList, (StartLine, StartOffset), (EndLine, EndOffset))\r
92 FileProfile.FunctionCallingList.append(FuncCall)\r
93\r
94}\r
95\r
96translation_unit\r
97 : external_declaration*\r
98 ;\r
99\r
100\r
101/*function_declaration\r
102@after{\r
103 print $function_declaration.text\r
104}\r
105 : declaration_specifiers IDENTIFIER '(' parameter_list ')' ';'\r
106 ;\r
107*/\r
108external_declaration\r
109options {k=1;}\r
110/*@after{\r
111 print $external_declaration.text\r
112}*/\r
113 : ( declaration_specifiers? declarator declaration* '{' )=> function_definition\r
114 | declaration\r
115 | macro_statement (';')?\r
116 ;\r
117 \r
118\r
119\r
120function_definition\r
121scope {\r
122 ModifierText;\r
123 DeclText;\r
124 LBLine;\r
125 LBOffset;\r
126 DeclLine;\r
127 DeclOffset;\r
128}\r
129@init {\r
130 $function_definition::ModifierText = '';\r
131 $function_definition::DeclText = '';\r
132 $function_definition::LBLine = 0;\r
133 $function_definition::LBOffset = 0;\r
134 $function_definition::DeclLine = 0;\r
135 $function_definition::DeclOffset = 0;\r
136}\r
137@after{\r
138 self.StoreFunctionDefinition($function_definition.start.line, $function_definition.start.charPositionInLine, $function_definition.stop.line, $function_definition.stop.charPositionInLine, $function_definition::ModifierText, $function_definition::DeclText, $function_definition::LBLine, $function_definition::LBOffset, $function_definition::DeclLine, $function_definition::DeclOffset)\r
139}\r
140 : d=declaration_specifiers? declarator\r
141 ( declaration+ a=compound_statement // K&R style\r
142 | b=compound_statement // ANSI style\r
143 ) { \r
144 if d != None:\r
145 $function_definition::ModifierText = $declaration_specifiers.text\r
146 else:\r
147 $function_definition::ModifierText = ''\r
148 $function_definition::DeclText = $declarator.text\r
149 $function_definition::DeclLine = $declarator.start.line\r
150 $function_definition::DeclOffset = $declarator.start.charPositionInLine\r
151 if a != None:\r
152 $function_definition::LBLine = $a.start.line\r
153 $function_definition::LBOffset = $a.start.charPositionInLine\r
154 else:\r
155 $function_definition::LBLine = $b.start.line\r
156 $function_definition::LBOffset = $b.start.charPositionInLine\r
157 }\r
158 ;\r
159\r
160declaration\r
161 : a='typedef' b=declaration_specifiers? \r
162 c=init_declarator_list d=';' \r
163 {\r
164 if b != None:\r
165 self.StoreTypedefDefinition($a.line, $a.charPositionInLine, $d.line, $d.charPositionInLine, $b.text, $c.text)\r
166 else:\r
167 self.StoreTypedefDefinition($a.line, $a.charPositionInLine, $d.line, $d.charPositionInLine, '', $c.text)\r
168 } \r
169 | s=declaration_specifiers t=init_declarator_list? e=';' \r
170 {\r
171 if t != None:\r
172 self.StoreVariableDeclaration($s.start.line, $s.start.charPositionInLine, $t.start.line, $t.start.charPositionInLine, $s.text, $t.text)\r
173 }\r
174 ;\r
175\r
176declaration_specifiers\r
177 : ( storage_class_specifier\r
178 | type_specifier\r
179 | type_qualifier\r
180 )+\r
181 ;\r
182\r
183init_declarator_list\r
184 : init_declarator (',' init_declarator)*\r
185 ;\r
186\r
187init_declarator\r
188 : declarator ('=' initializer)? \r
189 ;\r
190\r
191storage_class_specifier\r
192 : 'extern'\r
193 | 'static'\r
194 | 'auto'\r
195 | 'register'\r
196 | 'STATIC'\r
197 ;\r
198\r
199type_specifier\r
200 : 'void'\r
201 | 'char'\r
202 | 'short'\r
203 | 'int'\r
204 | 'long'\r
205 | 'float'\r
206 | 'double'\r
207 | 'signed'\r
208 | 'unsigned'\r
209 | s=struct_or_union_specifier\r
210 {\r
211 if s.stop != None:\r
212 self.StoreStructUnionDefinition($s.start.line, $s.start.charPositionInLine, $s.stop.line, $s.stop.charPositionInLine, $s.text)\r
213 }\r
214 | e=enum_specifier\r
215 {\r
216 if e.stop != None:\r
217 self.StoreEnumerationDefinition($e.start.line, $e.start.charPositionInLine, $e.stop.line, $e.stop.charPositionInLine, $e.text)\r
218 }\r
219 | (IDENTIFIER type_qualifier* declarator)=> type_id\r
220 ;\r
221\r
222type_id\r
223 : IDENTIFIER\r
224 //{self.printTokenInfo($a.line, $a.pos, $a.text)}\r
225 ;\r
226\r
227struct_or_union_specifier\r
228options {k=3;}\r
229 : struct_or_union IDENTIFIER? '{' struct_declaration_list '}'\r
230 | struct_or_union IDENTIFIER\r
231 ;\r
232\r
233struct_or_union\r
234 : 'struct'\r
235 | 'union'\r
236 ;\r
237\r
238struct_declaration_list\r
239 : struct_declaration+\r
240 ;\r
241\r
242struct_declaration\r
243 : specifier_qualifier_list struct_declarator_list ';'\r
244 ;\r
245\r
246specifier_qualifier_list\r
247 : ( type_qualifier | type_specifier )+\r
248 ;\r
249\r
250struct_declarator_list\r
251 : struct_declarator (',' struct_declarator)*\r
252 ;\r
253\r
254struct_declarator\r
255 : declarator (':' constant_expression)?\r
256 | ':' constant_expression\r
257 ;\r
258\r
259enum_specifier\r
260options {k=3;}\r
261 : 'enum' '{' enumerator_list ','? '}'\r
262 | 'enum' IDENTIFIER '{' enumerator_list ','? '}'\r
263 | 'enum' IDENTIFIER\r
264 ;\r
265\r
266enumerator_list\r
267 : enumerator (',' enumerator)*\r
268 ;\r
269\r
270enumerator\r
271 : IDENTIFIER ('=' constant_expression)?\r
272 ;\r
273\r
274type_qualifier\r
275 : 'const'\r
276 | 'volatile'\r
277 | 'IN'\r
278 | 'OUT'\r
279 | 'OPTIONAL'\r
280 | 'CONST'\r
281 | 'UNALIGNED'\r
282 | 'VOLATILE'\r
283 | 'GLOBAL_REMOVE_IF_UNREFERENCED'\r
284 | 'EFIAPI'\r
285 | 'EFI_BOOTSERVICE'\r
286 | 'EFI_RUNTIMESERVICE'\r
52302d4d 287 | 'PACKED'\r
30fdf114
LG
288 ;\r
289\r
290declarator\r
291 : pointer? ('EFIAPI')? ('EFI_BOOTSERVICE')? ('EFI_RUNTIMESERVICE')? direct_declarator\r
292// | ('EFIAPI')? ('EFI_BOOTSERVICE')? ('EFI_RUNTIMESERVICE')? pointer? direct_declarator\r
293 | pointer\r
294 ;\r
295\r
296direct_declarator\r
297 : IDENTIFIER declarator_suffix*\r
298 | '(' ('EFIAPI')? declarator ')' declarator_suffix+\r
299 ;\r
300\r
301declarator_suffix\r
302 : '[' constant_expression ']'\r
303 | '[' ']'\r
304 | '(' parameter_type_list ')'\r
305 | '(' identifier_list ')'\r
306 | '(' ')'\r
307 ;\r
308\r
309pointer\r
310 : '*' type_qualifier+ pointer?\r
311 | '*' pointer\r
312 | '*'\r
313 ;\r
314\r
315parameter_type_list\r
316 : parameter_list (',' ('OPTIONAL')? '...')?\r
317 ;\r
318\r
319parameter_list\r
320 : parameter_declaration (',' ('OPTIONAL')? parameter_declaration)*\r
321 ;\r
322\r
323parameter_declaration\r
324 : declaration_specifiers (declarator|abstract_declarator)* ('OPTIONAL')?\r
325 //accomerdate user-defined type only, no declarator follow.\r
326 | pointer* IDENTIFIER\r
327 ;\r
328\r
329identifier_list\r
330 : IDENTIFIER\r
331 (',' IDENTIFIER)*\r
332 ;\r
333\r
334type_name\r
335 : specifier_qualifier_list abstract_declarator?\r
336 | type_id\r
337 ;\r
338\r
339abstract_declarator\r
340 : pointer direct_abstract_declarator?\r
341 | direct_abstract_declarator\r
342 ;\r
343\r
344direct_abstract_declarator\r
345 : ( '(' abstract_declarator ')' | abstract_declarator_suffix ) abstract_declarator_suffix*\r
346 ;\r
347\r
348abstract_declarator_suffix\r
349 : '[' ']'\r
350 | '[' constant_expression ']'\r
351 | '(' ')'\r
352 | '(' parameter_type_list ')'\r
353 ;\r
354 \r
355initializer\r
356\r
357 : assignment_expression\r
358 | '{' initializer_list ','? '}'\r
359 ;\r
360\r
361initializer_list\r
362 : initializer (',' initializer )*\r
363 ;\r
364\r
365// E x p r e s s i o n s\r
366\r
367argument_expression_list\r
368 : assignment_expression ('OPTIONAL')? (',' assignment_expression ('OPTIONAL')?)*\r
369 ;\r
370\r
371additive_expression\r
372 : (multiplicative_expression) ('+' multiplicative_expression | '-' multiplicative_expression)*\r
373 ;\r
374\r
375multiplicative_expression\r
376 : (cast_expression) ('*' cast_expression | '/' cast_expression | '%' cast_expression)*\r
377 ;\r
378\r
379cast_expression\r
380 : '(' type_name ')' cast_expression\r
381 | unary_expression\r
382 ;\r
383\r
384unary_expression\r
385 : postfix_expression\r
386 | '++' unary_expression\r
387 | '--' unary_expression\r
388 | unary_operator cast_expression\r
389 | 'sizeof' unary_expression\r
390 | 'sizeof' '(' type_name ')'\r
391 ;\r
392\r
393postfix_expression\r
394scope {\r
395 FuncCallText;\r
396}\r
397@init {\r
398 $postfix_expression::FuncCallText = '';\r
399}\r
400 : p=primary_expression {$postfix_expression::FuncCallText += $p.text}\r
401 ( '[' expression ']'\r
402 | '(' a=')'{self.StoreFunctionCalling($p.start.line, $p.start.charPositionInLine, $a.line, $a.charPositionInLine, $postfix_expression::FuncCallText, '')}\r
403 | '(' c=argument_expression_list b=')' {self.StoreFunctionCalling($p.start.line, $p.start.charPositionInLine, $b.line, $b.charPositionInLine, $postfix_expression::FuncCallText, $c.text)}\r
404 | '(' macro_parameter_list ')'\r
405 | '.' x=IDENTIFIER {$postfix_expression::FuncCallText += '.' + $x.text}\r
406 | '*' y=IDENTIFIER {$postfix_expression::FuncCallText = $y.text}\r
407 | '->' z=IDENTIFIER {$postfix_expression::FuncCallText += '->' + $z.text}\r
408 | '++'\r
409 | '--'\r
410 )*\r
411 ;\r
412 \r
413macro_parameter_list\r
414 : parameter_declaration (',' parameter_declaration)*\r
415 ;\r
416\r
417unary_operator\r
418 : '&'\r
419 | '*'\r
420 | '+'\r
421 | '-'\r
422 | '~'\r
423 | '!'\r
424 ;\r
425\r
426primary_expression\r
427 : IDENTIFIER\r
428 | constant\r
429 | '(' expression ')'\r
430 ;\r
431\r
432constant\r
433 : HEX_LITERAL\r
434 | OCTAL_LITERAL\r
435 | DECIMAL_LITERAL\r
436 | CHARACTER_LITERAL\r
437 | (IDENTIFIER* STRING_LITERAL+)+ IDENTIFIER*\r
438 | FLOATING_POINT_LITERAL\r
439 ;\r
440\r
441/////\r
442\r
443expression\r
444 : assignment_expression (',' assignment_expression)*\r
445 ;\r
446\r
447constant_expression\r
448 : conditional_expression\r
449 ;\r
450\r
451assignment_expression\r
452 : lvalue assignment_operator assignment_expression\r
453 | conditional_expression\r
454 ;\r
455 \r
456lvalue\r
457 : unary_expression\r
458 ;\r
459\r
460assignment_operator\r
461 : '='\r
462 | '*='\r
463 | '/='\r
464 | '%='\r
465 | '+='\r
466 | '-='\r
467 | '<<='\r
468 | '>>='\r
469 | '&='\r
470 | '^='\r
471 | '|='\r
472 ;\r
473\r
474conditional_expression\r
475 : e=logical_or_expression ('?' expression ':' conditional_expression {self.StorePredicateExpression($e.start.line, $e.start.charPositionInLine, $e.stop.line, $e.stop.charPositionInLine, $e.text)})?\r
476 ;\r
477\r
478logical_or_expression\r
479 : logical_and_expression ('||' logical_and_expression)*\r
480 ;\r
481\r
482logical_and_expression\r
483 : inclusive_or_expression ('&&' inclusive_or_expression)*\r
484 ;\r
485\r
486inclusive_or_expression\r
487 : exclusive_or_expression ('|' exclusive_or_expression)*\r
488 ;\r
489\r
490exclusive_or_expression\r
491 : and_expression ('^' and_expression)*\r
492 ;\r
493\r
494and_expression\r
495 : equality_expression ('&' equality_expression)*\r
496 ;\r
497equality_expression\r
498 : relational_expression (('=='|'!=') relational_expression )*\r
499 ;\r
500\r
501relational_expression\r
502 : shift_expression (('<'|'>'|'<='|'>=') shift_expression)*\r
503 ;\r
504\r
505shift_expression\r
506 : additive_expression (('<<'|'>>') additive_expression)*\r
507 ;\r
508\r
509// S t a t e m e n t s\r
510\r
511statement\r
512 : labeled_statement\r
513 | compound_statement\r
514 | expression_statement\r
515 | selection_statement\r
516 | iteration_statement\r
517 | jump_statement\r
518 | macro_statement\r
519 | asm2_statement\r
520 | asm1_statement\r
521 | asm_statement\r
522 | declaration\r
523 ;\r
524\r
525asm2_statement\r
526 : '__asm__'? IDENTIFIER '(' (~(';'))* ')' ';'\r
527 ;\r
528 \r
529asm1_statement\r
530 : '_asm' '{' (~('}'))* '}'\r
531 ;\r
532\r
533asm_statement\r
534 : '__asm' '{' (~('}'))* '}'\r
535 ;\r
536 \r
537macro_statement\r
538 : IDENTIFIER '(' declaration* statement_list? expression? ')'\r
539 ;\r
540 \r
541labeled_statement\r
542 : IDENTIFIER ':' statement\r
543 | 'case' constant_expression ':' statement\r
544 | 'default' ':' statement\r
545 ;\r
546\r
547compound_statement\r
548 : '{' declaration* statement_list? '}'\r
549 ;\r
550\r
551statement_list\r
552 : statement+\r
553 ;\r
554\r
555expression_statement\r
556 : ';'\r
557 | expression ';'\r
558 ;\r
559\r
560selection_statement\r
561 : 'if' '(' e=expression ')' {self.StorePredicateExpression($e.start.line, $e.start.charPositionInLine, $e.stop.line, $e.stop.charPositionInLine, $e.text)} statement (options {k=1; backtrack=false;}:'else' statement)?\r
562 | 'switch' '(' expression ')' statement\r
563 ;\r
564\r
565iteration_statement\r
566 : 'while' '(' e=expression ')' statement {self.StorePredicateExpression($e.start.line, $e.start.charPositionInLine, $e.stop.line, $e.stop.charPositionInLine, $e.text)}\r
567 | 'do' statement 'while' '(' e=expression ')' ';' {self.StorePredicateExpression($e.start.line, $e.start.charPositionInLine, $e.stop.line, $e.stop.charPositionInLine, $e.text)}\r
568 | 'for' '(' expression_statement e=expression_statement expression? ')' statement {self.StorePredicateExpression($e.start.line, $e.start.charPositionInLine, $e.stop.line, $e.stop.charPositionInLine, $e.text)}\r
569 ;\r
570\r
571jump_statement\r
572 : 'goto' IDENTIFIER ';'\r
573 | 'continue' ';'\r
574 | 'break' ';'\r
575 | 'return' ';'\r
576 | 'return' expression ';'\r
577 ;\r
578\r
579IDENTIFIER\r
580 : LETTER (LETTER|'0'..'9')*\r
581 ;\r
582 \r
583fragment\r
584LETTER\r
585 : '$'\r
586 | 'A'..'Z'\r
587 | 'a'..'z'\r
588 | '_'\r
589 ;\r
590\r
591CHARACTER_LITERAL\r
592 : ('L')? '\'' ( EscapeSequence | ~('\''|'\\') ) '\''\r
593 ;\r
594\r
595STRING_LITERAL\r
596 : ('L')? '"' ( EscapeSequence | ~('\\'|'"') )* '"'\r
597 ;\r
598 \r
599HEX_LITERAL : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ;\r
600\r
601DECIMAL_LITERAL : ('0' | '1'..'9' '0'..'9'*) IntegerTypeSuffix? ;\r
602\r
603OCTAL_LITERAL : '0' ('0'..'7')+ IntegerTypeSuffix? ;\r
604\r
605fragment\r
606HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;\r
607\r
608fragment\r
609IntegerTypeSuffix\r
610 : ('u'|'U')\r
611 | ('l'|'L')\r
612 | ('u'|'U') ('l'|'L')\r
613 | ('u'|'U') ('l'|'L') ('l'|'L')\r
614 ;\r
615\r
616FLOATING_POINT_LITERAL\r
617 : ('0'..'9')+ '.' ('0'..'9')* Exponent? FloatTypeSuffix?\r
618 | '.' ('0'..'9')+ Exponent? FloatTypeSuffix?\r
619 | ('0'..'9')+ Exponent FloatTypeSuffix?\r
620 | ('0'..'9')+ Exponent? FloatTypeSuffix\r
621 ;\r
622\r
623fragment\r
624Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;\r
625\r
626fragment\r
627FloatTypeSuffix : ('f'|'F'|'d'|'D') ;\r
628\r
629fragment\r
630EscapeSequence\r
631 : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')\r
632 | OctalEscape\r
633 ;\r
634\r
635fragment\r
636OctalEscape\r
637 : '\\' ('0'..'3') ('0'..'7') ('0'..'7')\r
638 | '\\' ('0'..'7') ('0'..'7')\r
639 | '\\' ('0'..'7')\r
640 ;\r
641\r
642fragment\r
643UnicodeEscape\r
644 : '\\' 'u' HexDigit HexDigit HexDigit HexDigit\r
645 ;\r
646\r
647WS : (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}\r
648 ;\r
649\r
fb0b35e0 650// ignore '\' of line concatenation\r
30fdf114
LG
651BS : ('\\') {$channel=HIDDEN;}\r
652 ;\r
653 \r
fb0b35e0 654// ignore function modifiers\r
30fdf114
LG
655//FUNC_MODIFIERS : 'EFIAPI' {$channel=HIDDEN;}\r
656// ;\r
657 \r
658UnicodeVocabulary\r
659 : '\u0003'..'\uFFFE'\r
660 ;\r
661COMMENT\r
662 : '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}\r
663 ;\r
664\r
665\r
666LINE_COMMENT\r
667 : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}\r
668 ;\r
669\r
670// ignore #line info for now\r
671LINE_COMMAND \r
672 : '#' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}\r
673 ;\r