1 lexer grammar CTFLexer;
8 /*******************************************************************************
9 * Copyright (c) 2010, 2015 Ericsson, Ecole Polytechnique de Montréal and others
11 * All rights reserved. This program and the accompanying materials are
12 * made available under the terms of the Eclipse Public License v1.0 which
13 * accompanies this distribution, and is available at
14 * http://www.eclipse.org/legal/epl-v10.html
17 * Matthew Khouzam - Initial API and implementation
18 * Simon Marchi - Initial API and implementation
19 * Etienne Bergeron - Update to Antlr 3.5 syntax
20 *******************************************************************************/
22 package org.eclipse.tracecompass.ctf.parser;
35 DOUBLETOK : 'double' ;
38 FLOATINGPOINTTOK : 'floating_point' ;
40 INTEGERTOK : 'integer' ;
44 SIGNEDTOK : 'signed' ;
45 STREAMTOK : 'stream' ;
46 STRINGTOK : 'string' ;
47 STRUCTTOK : 'struct' ;
49 TYPEALIASTOK : 'typealias' ;
50 TYPEDEFTOK : 'typedef' ;
51 UNSIGNEDTOK : 'unsigned' ;
52 VARIANTTOK : 'variant' ;
55 COMPLEXTOK : '_Complex' ;
56 IMAGINARYTOK : '_Imaginary' ;
60 * Callsite tokens (CTF v1.9)
62 CALLSITETOK : 'callsite' ;
66 * These tokens are not part of the CTF standard.
67 * There are planned to be in CTF v1.9
69 NANNUMBERTOK : 'NaN' ;
70 INFINITYTOK : '+inf' ;
71 NINFINITYTOK : '-inf' ;
80 TYPE_ASSIGNMENT : ':=' ;
94 fragment BACKSLASH : '\\' ;
96 /* Helpers for integer literals */
97 fragment DIGIT : '0'..'9' ;
98 fragment OCT_DIGIT : '0'..'7' ;
99 fragment OCT_PREFIX : '0' ;
100 fragment NONZERO_DIGIT : '1'..'9' ;
101 fragment HEX_DIGIT : DIGIT | ('a'..'f') | ('A'..'F') ;
102 fragment HEX_PREFIX : '0' ('x' | 'X') ;
107 OCTAL_LITERAL : OCT_PREFIX (OCT_DIGIT)+ INTEGER_TYPES_SUFFIX? ;
108 DECIMAL_LITERAL : DIGIT+ INTEGER_TYPES_SUFFIX? ;
109 HEX_LITERAL : HEX_PREFIX HEX_DIGIT+ INTEGER_TYPES_SUFFIX? ;
112 * Integer suffix for long, long long and unsigned.
114 * Matches all possible combination of L, LL and U.
116 fragment INTEGER_TYPES_SUFFIX
117 : ('l' ('l')? | 'L' ('L')?) // l, ll
119 | ('u' | 'U') ('l' ('l')? | 'L' ('L')?) // ul, ull
120 | ('l' ('l')? | 'L' ('L')?) ('u'| 'U') // lu, llu
126 fragment ESCAPE_SEQUENCE
127 : BACKSLASH ('\'' | '"' | '?' | BACKSLASH | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' )
134 * Octal escape sequence
136 fragment OCTAL_ESCAPE
137 : BACKSLASH ('0'..'3') ('0'..'7') ('0'..'7')
138 | BACKSLASH ('0'..'7') ('0'..'7')
139 | BACKSLASH ('0'..'7')
143 * Hexadecimal escape sequence
145 fragment HEXADECIMAL_ESCAPE : BACKSLASH 'x' HEX_DIGIT+ ;
148 * Unicode escape sequence
150 fragment UNICODE_ESCAPE
151 : BACKSLASH 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
152 | BACKSLASH 'U' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
156 /* Used in both character and string literal */
157 fragment STRINGPREFIX : 'L';
162 CHARACTER_LITERAL : STRINGPREFIX? SINGLEQUOTE CHAR_CONTENT+ SINGLEQUOTE ;
163 fragment CHAR_CONTENT : (ESCAPE_SEQUENCE | ~(BACKSLASH | SINGLEQUOTE)) ;
164 fragment SINGLEQUOTE : '\'';
169 STRING_LITERAL : STRINGPREFIX? DOUBLEQUOTE STRING_CONTENT* DOUBLEQUOTE ;
170 fragment STRING_CONTENT : (ESCAPE_SEQUENCE | ~(BACKSLASH | DOUBLEQUOTE)) ;
171 fragment DOUBLEQUOTE : '"' ;
176 WS : (' ' | '\r' | '\t' | '\u000C' | '\n') { $channel = HIDDEN; } ;
181 // About the greedy option: see page 100-101 of The Definitive ANTLR reference
182 // COMMENT : '/*' ( options { greedy = false; } : . )* '*/' { $channel = HIDDEN; } ;
183 COMMENT : COMMENT_OPEN .* COMMENT_CLOSE { $channel = HIDDEN; } ;
184 fragment COMMENT_OPEN : '/*';
185 fragment COMMENT_CLOSE : '*/';
188 * Single line comment
190 LINE_COMMENT : '//' ~('\n')* '\n' { $channel = HIDDEN; } ;
195 IDENTIFIER : NONDIGIT (NONDIGIT | DIGIT)* ;
196 fragment NONDIGIT : ('_') | ('A'..'Z') | ('a'..'z') ;