1 lexer grammar CTFLexer;
8 package org.eclipse.linuxtools.ctf.parser;
21 DOUBLETOK : 'double' ;
24 FLOATINGPOINTTOK : 'floating_point' ;
26 INTEGERTOK : 'integer' ;
30 SIGNEDTOK : 'signed' ;
31 STREAMTOK : 'stream' ;
32 STRINGTOK : 'string' ;
33 STRUCTTOK : 'struct' ;
35 TYPEALIASTOK : 'typealias' ;
36 TYPEDEFTOK : 'typedef' ;
37 UNSIGNEDTOK : 'unsigned' ;
38 VARIANTTOK : 'variant' ;
41 COMPLEXTOK : '_Complex' ;
42 IMAGINARYTOK : '_Imaginary' ;
46 * Callsite tokens (v1.9)
48 CALLSITETOK : 'callsite' ;
54 NANNUMBERTOK : 'NaN' ;
55 INFINITYTOK : '+inf' ;
56 NINFINITYTOK : '-inf' ;
65 TYPE_ASSIGNMENT : ':=' ;
79 fragment BACKSLASH : '\\' ;
83 * - We better leave them as identifiers and numbers...
85 /*TRUE : 'true' | 'TRUE' ;
86 FALSE : 'false' | 'FALSE' ;
94 OCTAL_LITERAL : '0' ('0'..'7')+ INTEGER_TYPES_SUFFIX? ;
96 DECIMAL_LITERAL : DIGIT+ INTEGER_TYPES_SUFFIX? ;
98 HEX_LITERAL : HEX_PREFIX HEX_DIGIT+ INTEGER_TYPES_SUFFIX? ;
99 fragment HEX_DIGIT : DIGIT | ('a'..'f') | ('A'..'F') ;
100 fragment HEX_PREFIX : '0' ('x' | 'X') ;
102 /* Helpers for integer literals */
103 fragment DIGIT : '0'..'9' ;
104 fragment NONZERO_DIGIT : '1'..'9' ;
108 * Integer suffix for long, long long and unsigned.
110 * Matches all possible combination of L, LL and U.
112 fragment INTEGER_TYPES_SUFFIX :
113 ('l' ('l')? | 'L' ('L')?) // l, ll
115 | ('u' | 'U') ('l' ('l')? | 'L' ('L')?) // ul, ull
116 | ('l' ('l')? | 'L' ('L')?) ('u'| 'U') // lu, llu
122 fragment ESCAPE_SEQUENCE :
123 BACKSLASH ('\'' | '"' | '?' | BACKSLASH | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' )
130 * Octal escape sequence
132 fragment OCTAL_ESCAPE :
133 BACKSLASH ('0'..'3') ('0'..'7') ('0'..'7')
134 | BACKSLASH ('0'..'7') ('0'..'7')
135 | BACKSLASH ('0'..'7')
139 * Hexadecimal escape sequence
141 fragment HEXADECIMAL_ESCAPE : BACKSLASH 'x' HEX_DIGIT+ ;
144 * Unicode escape sequence
146 fragment UNICODE_ESCAPE :
147 BACKSLASH 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
148 | BACKSLASH 'U' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
152 /* Used in both character and string literal */
153 fragment STRINGPREFIX : 'L';
158 CHARACTER_LITERAL : STRINGPREFIX? SINGLEQUOTE CHAR_CONTENT+ SINGLEQUOTE ;
159 fragment CHAR_CONTENT : (ESCAPE_SEQUENCE | ~(BACKSLASH | SINGLEQUOTE)) ;
160 fragment SINGLEQUOTE : '\'';
165 STRING_LITERAL : STRINGPREFIX? DOUBLEQUOTE STRING_CONTENT* DOUBLEQUOTE ;
166 fragment STRING_CONTENT : (ESCAPE_SEQUENCE | ~(BACKSLASH | DOUBLEQUOTE)) ;
167 fragment DOUBLEQUOTE : '"' ;
172 WS : (' ' | '\r' | '\t' | '\u000C' | '\n') { $channel=HIDDEN; } ;
177 // About the greedy option: see page 100-101 of The Definitive ANTLR reference
178 // COMMENT : '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;} ;
179 COMMENT : COMMENT_OPEN .* COMMENT_CLOSE { $channel = HIDDEN; } ;
180 fragment COMMENT_OPEN : '/*';
181 fragment COMMENT_CLOSE : '*/';
184 * Single line comment
186 LINE_COMMENT : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} ;
191 IDENTIFIER : NONDIGIT (NONDIGIT | DIGIT)* ;
192 fragment NONDIGIT : ('_') | ('A'..'Z') | ('a'..'z') ;