ctf: better enum and variant verification
[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/*
91fd06f5 12 * Lexer grammers
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
MK
45/*
46 * Callsite tokens (v1.9)
47 */
48CALLSITETOK : 'callsite' ;
49
866e5b51
FC
50
51/*
52 * Spec still to come.
53 */
54NANNUMBERTOK : 'NaN' ;
55INFINITYTOK : '+inf' ;
56NINFINITYTOK : '-inf' ;
57
58/*
59 * Symbols
60 */
61SEPARATOR : ',' ;
62COLON : ':' ;
63ELIPSES : '...' ;
64ASSIGNMENT : '=' ;
65TYPE_ASSIGNMENT : ':=' ;
66LT : '<' ;
67GT : '>' ;
68OPENBRAC : '[' ;
69CLOSEBRAC : ']' ;
70LPAREN : '(' ;
71RPAREN : ')' ;
72LCURL : '{' ;
73RCURL : '}' ;
74TERM : ';' ;
75POINTER : '*' ;
76SIGN : '+' | '-' ;
77ARROW : '->' ;
78DOT : '.' ;
79fragment BACKSLASH : '\\' ;
80
866e5b51
FC
81
82/*
83 * Integer literals
84 */
85OCTAL_LITERAL : '0' ('0'..'7')+ INTEGER_TYPES_SUFFIX? ;
86
87DECIMAL_LITERAL : DIGIT+ INTEGER_TYPES_SUFFIX? ;
88
89HEX_LITERAL : HEX_PREFIX HEX_DIGIT+ INTEGER_TYPES_SUFFIX? ;
90fragment HEX_DIGIT : DIGIT | ('a'..'f') | ('A'..'F') ;
91fragment HEX_PREFIX : '0' ('x' | 'X') ;
92
93/* Helpers for integer literals */
94fragment DIGIT : '0'..'9' ;
95fragment NONZERO_DIGIT : '1'..'9' ;
96
97
98/**
99 * Integer suffix for long, long long and unsigned.
100 *
101 * Matches all possible combination of L, LL and U.
91fd06f5 102 */
866e5b51 103fragment INTEGER_TYPES_SUFFIX :
91fd06f5
EB
104 ('l' ('l')? | 'L' ('L')?) // l, ll
105 | ('u' | 'U') // u
106 | ('u' | 'U') ('l' ('l')? | 'L' ('L')?) // ul, ull
107 | ('l' ('l')? | 'L' ('L')?) ('u'| 'U') // lu, llu
108 ;
866e5b51
FC
109
110/**
111 * Escape sequences
112 */
113fragment ESCAPE_SEQUENCE :
91fd06f5
EB
114 BACKSLASH ('\'' | '"' | '?' | BACKSLASH | 'a' | 'b' | 'f' | 'n' | 'r' | 't' | 'v' )
115 | OCTAL_ESCAPE
116 | UNICODE_ESCAPE
117 | HEXADECIMAL_ESCAPE
118 ;
866e5b51
FC
119
120/**
121 * Octal escape sequence
122 */
123fragment OCTAL_ESCAPE :
124 BACKSLASH ('0'..'3') ('0'..'7') ('0'..'7')
125 | BACKSLASH ('0'..'7') ('0'..'7')
126 | BACKSLASH ('0'..'7')
127 ;
128
129/**
130 * Hexadecimal escape sequence
131 */
132fragment HEXADECIMAL_ESCAPE : BACKSLASH 'x' HEX_DIGIT+ ;
133
134/**
135 * Unicode escape sequence
136 */
137fragment UNICODE_ESCAPE :
138 BACKSLASH 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
139 | BACKSLASH 'U' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
140 ;
141
142
143/* Used in both character and string literal */
144fragment STRINGPREFIX : 'L';
145
146/*
147 * Character literal
148 */
149CHARACTER_LITERAL : STRINGPREFIX? SINGLEQUOTE CHAR_CONTENT+ SINGLEQUOTE ;
150fragment CHAR_CONTENT : (ESCAPE_SEQUENCE | ~(BACKSLASH | SINGLEQUOTE)) ;
151fragment SINGLEQUOTE : '\'';
152
153/*
154 * String literal
155 */
156STRING_LITERAL : STRINGPREFIX? DOUBLEQUOTE STRING_CONTENT* DOUBLEQUOTE ;
157fragment STRING_CONTENT : (ESCAPE_SEQUENCE | ~(BACKSLASH | DOUBLEQUOTE)) ;
158fragment DOUBLEQUOTE : '"' ;
159
160/**
161 * Whitespaces
162 */
163WS : (' ' | '\r' | '\t' | '\u000C' | '\n') { $channel=HIDDEN; } ;
164
165/**
166 * Multiline comment
91fd06f5 167 */
866e5b51
FC
168// About the greedy option: see page 100-101 of The Definitive ANTLR reference
169// COMMENT : '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;} ;
170COMMENT : COMMENT_OPEN .* COMMENT_CLOSE { $channel = HIDDEN; } ;
171fragment COMMENT_OPEN : '/*';
172fragment COMMENT_CLOSE : '*/';
173
174/**
175 * Single line comment
176 */
177LINE_COMMENT : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} ;
178
179/**
180 * Identifiers
181 */
182IDENTIFIER : NONDIGIT (NONDIGIT | DIGIT)* ;
183fragment NONDIGIT : ('_') | ('A'..'Z') | ('a'..'z') ;
This page took 0.038019 seconds and 5 git commands to generate.