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