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