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