lib: compile liblttng-ctl as C++
[lttng-tools.git] / src / common / filter / filter-lexer.l
CommitLineData
953192ba
MD
1%{
2/*
3 * filter-lexer.l
4 *
5 * LTTng filter lexer
6 *
ab5be9fa 7 * Copyright 2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
953192ba 8 *
ab5be9fa 9 * SPDX-License-Identifier: LGPL-2.1-only
953192ba 10 *
953192ba
MD
11 */
12
13#include <stdio.h>
14#include "filter-ast.h"
15#include "filter-parser.h"
4bd69c5f 16#include <lttng/lttng-export.h>
953192ba 17
953192ba
MD
18static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
19 __attribute__((unused));
20static int input (yyscan_t yyscanner) __attribute__((unused));
21
22%}
23
24%x comment_ml comment_sl string_lit char_const
25%option reentrant yylineno noyywrap bison-bridge
26%option extra-type="struct filter_parser_ctx *"
27 /* bison-locations */
e90d8561
MD
28
29D [0-9]
30L [a-zA-Z_]
31H [a-fA-F0-9]
32E ([Ee][+-]?{D}+)
33P ([Pp][+-]?{D}+)
34FS (f|F|l|L)
35IS ((u|U)|(u|U)?(l|L|ll|LL)|(l|L|ll|LL)(u|U))
36
953192ba
MD
37INTEGER_SUFFIX [ \n\t]*(U|UL|ULL|LU|LLU|Ul|Ull|lU|llU|u|uL|uLL|Lu|LLu|ul|ull|lu|llu)
38DIGIT [0-9]
39NONDIGIT [a-zA-Z_]
40HEXDIGIT [0-9A-Fa-f]
41OCTALDIGIT [0-7]
42UCHARLOWERCASE \\u{HEXDIGIT}{4}
43UCHARUPPERCASE \\U{HEXDIGIT}{8}
bff988fa 44ID_EXTRA_CHAR (":")
a1f68b22 45ID_NONDIGIT {NONDIGIT}|{UCHARLOWERCASE}|{UCHARUPPERCASE}|{ID_EXTRA_CHAR}
953192ba
MD
46IDENTIFIER {ID_NONDIGIT}({ID_NONDIGIT}|{DIGIT})*
47ESCSEQ \\(\'|\"|\?|\\|a|b|f|n|r|t|v|{OCTALDIGIT}{1,3}|u{HEXDIGIT}{4}|U{HEXDIGIT}{8}|x{HEXDIGIT}+)
48%%
49
50 /*
51 * Using start conditions to deal with comments
52 * and strings.
53 */
54
55"/*" BEGIN(comment_ml);
56<comment_ml>[^*\n]* /* eat anything that's not a '*' */
57<comment_ml>"*"+[^*/\n]* /* eat up '*'s not followed by '/'s */
58<comment_ml>\n ++yylineno;
59<comment_ml>"*"+"/" BEGIN(INITIAL);
60
61"//" BEGIN(comment_sl);
62<comment_sl>[^\n]*\n ++yylineno; BEGIN(INITIAL);
63
64L\' BEGIN(char_const); return CHARACTER_CONSTANT_START;
65\' BEGIN(char_const); return CHARACTER_CONSTANT_START;
66<char_const>\' BEGIN(INITIAL); return SQUOTE;
67
68L\" BEGIN(string_lit); return STRING_LITERAL_START;
69\" BEGIN(string_lit); return STRING_LITERAL_START;
70<string_lit>\" BEGIN(INITIAL); return DQUOTE;
71
72<char_const,string_lit>ESCSEQ return ESCSEQ;
73<char_const,string_lit>\n ; /* ignore */
74<char_const,string_lit>. setstring(yyextra, yylval, yytext); return CHAR_STRING_TOKEN;
75
e90d8561
MD
76
770[xX]{H}+{IS}? setstring(yyextra, yylval, yytext); return HEXADECIMAL_CONSTANT;
780[0-7]*{IS}? setstring(yyextra, yylval, yytext); return OCTAL_CONSTANT;
79[1-9]{D}*{IS}? setstring(yyextra, yylval, yytext); return DECIMAL_CONSTANT;
80
81{D}+{E}{FS}? setstring(yyextra, yylval, yytext); return FLOAT_CONSTANT;
82{D}*"."{D}+{E}?{FS}? setstring(yyextra, yylval, yytext); return FLOAT_CONSTANT;
83{D}+"."{D}*{E}?{FS}? setstring(yyextra, yylval, yytext); return FLOAT_CONSTANT;
840[xX]{H}+{P}{FS}? setstring(yyextra, yylval, yytext); return FLOAT_CONSTANT;
850[xX]{H}*"."{H}+{P}?{FS}? setstring(yyextra, yylval, yytext); return FLOAT_CONSTANT;
860[xX]{H}+"."{H}*{P}?{FS}? setstring(yyextra, yylval, yytext); return FLOAT_CONSTANT;
87
953192ba
MD
88"[" return LSBRAC;
89"]" return RSBRAC;
90"(" return LPAREN;
91")" return RPAREN;
92"{" return LBRAC;
93"}" return RBRAC;
94"->" return RARROW;
95
96"*" return STAR;
97"+" return PLUS;
98"-" return MINUS;
99
100"%" return MOD_OP;
101"/" return DIV_OP;
102">>" return RIGHT_OP;
103"<<" return LEFT_OP;
104
105"==" return EQ_OP;
106"!=" return NE_OP;
107"<=" return LE_OP;
108">=" return GE_OP;
109"<" return LT_OP;
110">" return GT_OP;
111"&&" return AND_OP;
112"||" return OR_OP;
113"!" return NOT_OP;
114
115":=" return ASSIGN;
116":" return COLON;
117";" return SEMICOLON;
118"..." return DOTDOTDOT;
119"." return DOT;
120"=" return EQUAL;
121"," return COMMA;
122"^" return XOR_BIN;
123"&" return AND_BIN;
124"|" return OR_BIN;
125"~" return NOT_BIN;
586dc72f 126"$"{IDENTIFIER} printf_debug("<GLOBAL_IDENTIFIER %s>\n", yytext); setstring(yyextra, yylval, yytext); return GLOBAL_IDENTIFIER;
953192ba
MD
127{IDENTIFIER} printf_debug("<IDENTIFIER %s>\n", yytext); setstring(yyextra, yylval, yytext); return IDENTIFIER;
128[ \t\n]+ ; /* ignore */
129. return ERROR;
130%%
4bd69c5f
SM
131
132/*
133 * The lexer symbols were (e.g. lttng_yy_create_buffer) were mistakenly
134 * exported in the past, so must stay exported. Since it is difficult to tweak
135 * how the lexer functions are emitted, the strategy used here was to use a
136 * different prefix for the symbols (`lttng_filter_`) and define aliases with
137 * the old prefix (`lttng_`).
138 *
139 * The `MAKE_ALIAS` macro defines one such alias.
140 */
141LTTNG_EXPORT
142YY_BUFFER_STATE lttng_yy_create_buffer(FILE *file, int size, yyscan_t yyscanner);
143YY_BUFFER_STATE lttng_yy_create_buffer(FILE *file, int size, yyscan_t yyscanner)
144{
145 return yy_create_buffer(file, size, yyscanner);
146}
147
148LTTNG_EXPORT
149void lttng_yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner);
150void lttng_yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner)
151{
152 return yy_delete_buffer(b, yyscanner);
153}
154
155LTTNG_EXPORT
156void lttng_yy_flush_buffer (YY_BUFFER_STATE b, yyscan_t yyscanner);
157void lttng_yy_flush_buffer (YY_BUFFER_STATE b, yyscan_t yyscanner)
158{
159 return yy_flush_buffer(b, yyscanner);
160}
161
162LTTNG_EXPORT
163YY_BUFFER_STATE lttng_yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner);
164YY_BUFFER_STATE lttng_yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner)
165{
166 return yy_scan_buffer(base, size, yyscanner);
167}
168
169LTTNG_EXPORT
170YY_BUFFER_STATE lttng_yy_scan_bytes(const char *bytes, int len, yyscan_t yyscanner);
171YY_BUFFER_STATE lttng_yy_scan_bytes(const char *bytes, int len, yyscan_t yyscanner)
172{
173 return yy_scan_bytes(bytes, len, yyscanner);
174}
175
176LTTNG_EXPORT
177YY_BUFFER_STATE lttng_yy_scan_string(const char *yy_str, yyscan_t yyscanner);
178YY_BUFFER_STATE lttng_yy_scan_string(const char *yy_str, yyscan_t yyscanner)
179{
180 return yy_scan_string(yy_str, yyscanner);
181}
182
183LTTNG_EXPORT
184void lttng_yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner);
185void lttng_yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner)
186{
187 return yy_switch_to_buffer(new_buffer, yyscanner);
188}
189
190LTTNG_EXPORT
191void *lttng_yyalloc(yy_size_t s, yyscan_t yyscanner);
192void *lttng_yyalloc(yy_size_t s, yyscan_t yyscanner)
193{
194 return yyalloc(s, yyscanner);
195}
196
197LTTNG_EXPORT
198void lttng_yyfree(void *p, yyscan_t yyscanner);
199void lttng_yyfree(void *p, yyscan_t yyscanner)
200{
201 return yyfree(p, yyscanner);
202}
203
204LTTNG_EXPORT
205int lttng_yyget_column(yyscan_t yyscanner);
206int lttng_yyget_column(yyscan_t yyscanner)
207{
208 return yyget_column(yyscanner);
209}
210
211LTTNG_EXPORT
212int lttng_yyget_debug(yyscan_t yyscanner);
213int lttng_yyget_debug(yyscan_t yyscanner)
214{
215 return yyget_debug(yyscanner);
216}
217
218LTTNG_EXPORT
219YY_EXTRA_TYPE lttng_yyget_extra(yyscan_t yyscanner);
220YY_EXTRA_TYPE lttng_yyget_extra(yyscan_t yyscanner)
221{
222 return yyget_extra(yyscanner);
223}
224
225LTTNG_EXPORT
226FILE *lttng_yyget_in(yyscan_t yyscanner);
227FILE *lttng_yyget_in(yyscan_t yyscanner)
228{
229 return yyget_in(yyscanner);
230}
231
232LTTNG_EXPORT
233int lttng_yyget_leng(yyscan_t yyscanner);
234int lttng_yyget_leng(yyscan_t yyscanner)
235{
236 return yyget_leng(yyscanner);
237}
238
239LTTNG_EXPORT
240int lttng_yyget_lineno(yyscan_t yyscanner);
241int lttng_yyget_lineno(yyscan_t yyscanner)
242{
243 return yyget_lineno(yyscanner);
244}
245
246LTTNG_EXPORT
247YYSTYPE *lttng_yyget_lval(yyscan_t yyscanner);
248YYSTYPE *lttng_yyget_lval(yyscan_t yyscanner)
249{
250 return yyget_lval(yyscanner);
251}
252
253LTTNG_EXPORT
254FILE *lttng_yyget_out(yyscan_t yyscanner);
255FILE *lttng_yyget_out(yyscan_t yyscanner)
256{
257 return yyget_out(yyscanner);
258}
259
260LTTNG_EXPORT
261char *lttng_yyget_text(yyscan_t yyscanner);
262char *lttng_yyget_text(yyscan_t yyscanner)
263{
264 return yyget_text(yyscanner);
265}
266
267LTTNG_EXPORT
268int lttng_yylex_init(yyscan_t *scanner);
269int lttng_yylex_init(yyscan_t *scanner)
270{
271 return yylex_init(scanner);
272}
273
274LTTNG_EXPORT
275void lttng_yypop_buffer_state(yyscan_t yyscanner);
276void lttng_yypop_buffer_state(yyscan_t yyscanner)
277{
278 return yypop_buffer_state(yyscanner);
279}
280
281LTTNG_EXPORT
282void lttng_yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner);
283void lttng_yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner)
284{
285 return yypush_buffer_state(new_buffer, yyscanner);
286}
287
288LTTNG_EXPORT
289void *lttng_yyrealloc(void *p, yy_size_t s, yyscan_t yyscanner);
290void *lttng_yyrealloc(void *p, yy_size_t s, yyscan_t yyscanner)
291{
292 return yyrealloc(p, s, yyscanner);
293}
294
295LTTNG_EXPORT
296void lttng_yyset_column(int _column_no, yyscan_t yyscanner);
297void lttng_yyset_column(int _column_no, yyscan_t yyscanner)
298{
299 return yyset_column(_column_no, yyscanner);
300}
301
302LTTNG_EXPORT
303void lttng_yyset_debug(int debug_flag, yyscan_t yyscanner);
304void lttng_yyset_debug(int debug_flag, yyscan_t yyscanner)
305{
306 return yyset_debug(debug_flag, yyscanner);
307}
308
309LTTNG_EXPORT
310void lttng_yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner);
311void lttng_yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner)
312{
313 return yyset_extra(user_defined, yyscanner);
314}
315
316LTTNG_EXPORT
317void lttng_yyset_in(FILE *_in_str, yyscan_t yyscanner);
318void lttng_yyset_in(FILE *_in_str, yyscan_t yyscanner)
319{
320 return yyset_in(_in_str, yyscanner);
321}
322
323LTTNG_EXPORT
324void lttng_yyset_lineno(int _line_number, yyscan_t yyscanner);
325void lttng_yyset_lineno(int _line_number, yyscan_t yyscanner)
326{
327 return yyset_lineno(_line_number, yyscanner);
328}
329
330LTTNG_EXPORT
331void lttng_yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner);
332void lttng_yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner)
333{
334 return yyset_lval(yylval_param, yyscanner);
335}
336
337LTTNG_EXPORT
338void lttng_yyset_out(FILE *_out_str, yyscan_t yyscanner);
339void lttng_yyset_out(FILE *_out_str, yyscan_t yyscanner)
340{
341 return yyset_out(_out_str, yyscanner);
342}
This page took 0.061639 seconds and 4 git commands to generate.