4ff2fdf3adbb57f6a1a8ba54fc5fdd4ed0482a4e
[deliverable/tracecompass.git] / ctf / org.eclipse.tracecompass.ctf.parser / src / main / antlr3 / org / eclipse / tracecompass / ctf / parser / CTFLexer.g
1 lexer grammar CTFLexer;
2
3 options {
4 language = Java;
5 }
6
7 @lexer::header {
8 /*******************************************************************************
9 * Copyright (c) 2010, 2015 Ericsson, Ecole Polytechnique de Montréal and others
10 *
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
15 *
16 * Contributors:
17 * Matthew Khouzam - Initial API and implementation
18 * Simon Marchi - Initial API and implementation
19 * Etienne Bergeron - Update to Antlr 3.5 syntax
20 *******************************************************************************/
21
22 package org.eclipse.tracecompass.ctf.parser;
23 }
24
25 /*
26 * Lexer tokens
27 */
28
29 /*
30 * Keywords
31 */
32 ALIGNTOK : 'align' ;
33 CONSTTOK : 'const' ;
34 CHARTOK : 'char' ;
35 DOUBLETOK : 'double' ;
36 ENUMTOK : 'enum' ;
37 EVENTTOK : 'event' ;
38 FLOATINGPOINTTOK : 'floating_point' ;
39 FLOATTOK : 'float' ;
40 INTEGERTOK : 'integer' ;
41 INTTOK : 'int' ;
42 LONGTOK : 'long' ;
43 SHORTTOK : 'short' ;
44 SIGNEDTOK : 'signed' ;
45 STREAMTOK : 'stream' ;
46 STRINGTOK : 'string' ;
47 STRUCTTOK : 'struct' ;
48 TRACETOK : 'trace' ;
49 TYPEALIASTOK : 'typealias' ;
50 TYPEDEFTOK : 'typedef' ;
51 UNSIGNEDTOK : 'unsigned' ;
52 VARIANTTOK : 'variant' ;
53 VOIDTOK : 'void' ;
54 BOOLTOK : '_Bool' ;
55 COMPLEXTOK : '_Complex' ;
56 IMAGINARYTOK : '_Imaginary' ;
57 ENVTOK : 'env' ;
58 CLOCKTOK : 'clock' ;
59
60
61 /*
62 * These tokens are not part of the CTF standard.
63 * There are planned to be in CTF v1.9
64 */
65 NANNUMBERTOK : 'NaN' ;
66 INFINITYTOK : '+inf' ;
67 NINFINITYTOK : '-inf' ;
68
69 /*
70 * Symbols
71 */
72 SEPARATOR : ',' ;
73 COLON : ':' ;
74 ELIPSES : '...' ;
75 ASSIGNMENT : '=' ;
76 TYPE_ASSIGNMENT : ':=' ;
77 LT : '<' ;
78 GT : '>' ;
79 OPENBRAC : '[' ;
80 CLOSEBRAC : ']' ;
81 LPAREN : '(' ;
82 RPAREN : ')' ;
83 LCURL : '{' ;
84 RCURL : '}' ;
85 TERM : ';' ;
86 POINTER : '*' ;
87 SIGN : '+' | '-' ;
88 ARROW : '->' ;
89 DOT : '.' ;
90 fragment BACKSLASH : '\\' ;
91
92 /* Helpers for integer literals */
93 fragment DIGIT : '0'..'9' ;
94 fragment OCT_DIGIT : '0'..'7' ;
95 fragment OCT_PREFIX : '0' ;
96 fragment NONZERO_DIGIT : '1'..'9' ;
97 fragment HEX_DIGIT : DIGIT | ('a'..'f') | ('A'..'F') ;
98 fragment HEX_PREFIX : '0' ('x' | 'X') ;
99
100 /*
101 * Integer literals
102 */
103 OCTAL_LITERAL : OCT_PREFIX (OCT_DIGIT)+ INTEGER_TYPES_SUFFIX? ;
104 DECIMAL_LITERAL : DIGIT+ INTEGER_TYPES_SUFFIX? ;
105 HEX_LITERAL : HEX_PREFIX HEX_DIGIT+ INTEGER_TYPES_SUFFIX? ;
106
107 /**
108 * Integer suffix for long, long long and unsigned.
109 *
110 * Matches all possible combination of L, LL and U.
111 */
112 fragment INTEGER_TYPES_SUFFIX
113 : ('l' ('l')? | 'L' ('L')?) // l, ll
114 | ('u' | 'U') // u
115 | ('u' | 'U') ('l' ('l')? | 'L' ('L')?) // ul, ull
116 | ('l' ('l')? | 'L' ('L')?) ('u'| 'U') // lu, llu
117 ;
118
119 /**
120 * Escape sequences
121 */
122 fragment ESCAPE_SEQUENCE
123 : BACKSLASH ('\'' | '"' | '?' | BACKSLASH | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' )
124 | OCTAL_ESCAPE
125 | UNICODE_ESCAPE
126 | HEXADECIMAL_ESCAPE
127 ;
128
129 /**
130 * Octal escape sequence
131 */
132 fragment OCTAL_ESCAPE
133 : BACKSLASH ('0'..'3') ('0'..'7') ('0'..'7')
134 | BACKSLASH ('0'..'7') ('0'..'7')
135 | BACKSLASH ('0'..'7')
136 ;
137
138 /**
139 * Hexadecimal escape sequence
140 */
141 fragment HEXADECIMAL_ESCAPE : BACKSLASH 'x' HEX_DIGIT+ ;
142
143 /**
144 * Unicode escape sequence
145 */
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
149 ;
150
151
152 /* Used in both character and string literal */
153 fragment STRINGPREFIX : 'L';
154
155 /*
156 * Character literal
157 */
158 CHARACTER_LITERAL : STRINGPREFIX? SINGLEQUOTE CHAR_CONTENT+ SINGLEQUOTE ;
159 fragment CHAR_CONTENT : (ESCAPE_SEQUENCE | ~(BACKSLASH | SINGLEQUOTE)) ;
160 fragment SINGLEQUOTE : '\'';
161
162 /*
163 * String literal
164 */
165 STRING_LITERAL : STRINGPREFIX? DOUBLEQUOTE STRING_CONTENT* DOUBLEQUOTE ;
166 fragment STRING_CONTENT : (ESCAPE_SEQUENCE | ~(BACKSLASH | DOUBLEQUOTE)) ;
167 fragment DOUBLEQUOTE : '"' ;
168
169 /**
170 * Whitespaces
171 */
172 WS : (' ' | '\r' | '\t' | '\u000C' | '\n') { $channel = HIDDEN; } ;
173
174 /**
175 * Multiline comment
176 */
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 : '*/';
182
183 /**
184 * Single line comment
185 */
186 LINE_COMMENT : '//' ~('\n')* '\n' { $channel = HIDDEN; } ;
187
188 /**
189 * Identifiers
190 */
191 IDENTIFIER : NONDIGIT (NONDIGIT | DIGIT)* ;
192 fragment NONDIGIT : ('_') | ('A'..'Z') | ('a'..'z') ;
This page took 0.035901 seconds and 4 git commands to generate.