xref: /openbmc/linux/tools/perf/util/pmu.l (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1cd82a32eSJiri Olsa %option prefix="perf_pmu_"
2*3d88aec0SIan Rogers %option reentrant
3*3d88aec0SIan Rogers %option bison-bridge
4cd82a32eSJiri Olsa 
5cd82a32eSJiri Olsa %{
6cd82a32eSJiri Olsa #include <stdlib.h>
7cd82a32eSJiri Olsa #include <linux/bitops.h>
8cd82a32eSJiri Olsa #include "pmu.h"
9cd82a32eSJiri Olsa #include "pmu-bison.h"
10cd82a32eSJiri Olsa 
11*3d88aec0SIan Rogers char *perf_pmu_get_text(yyscan_t yyscanner);
12*3d88aec0SIan Rogers YYSTYPE *perf_pmu_get_lval(yyscan_t yyscanner);
13*3d88aec0SIan Rogers 
value(yyscan_t scanner,int base)14*3d88aec0SIan Rogers static int value(yyscan_t scanner, int base)
15cd82a32eSJiri Olsa {
16*3d88aec0SIan Rogers 	YYSTYPE *yylval = perf_pmu_get_lval(scanner);
17*3d88aec0SIan Rogers 	char *text = perf_pmu_get_text(scanner);
18cd82a32eSJiri Olsa 	long num;
19cd82a32eSJiri Olsa 
20cd82a32eSJiri Olsa 	errno = 0;
21*3d88aec0SIan Rogers 	num = strtoul(text, NULL, base);
22cd82a32eSJiri Olsa 	if (errno)
23cd82a32eSJiri Olsa 		return PP_ERROR;
24cd82a32eSJiri Olsa 
25*3d88aec0SIan Rogers 	yylval->num = num;
26cd82a32eSJiri Olsa 	return PP_VALUE;
27cd82a32eSJiri Olsa }
28cd82a32eSJiri Olsa 
29cd82a32eSJiri Olsa %}
30cd82a32eSJiri Olsa 
31cd82a32eSJiri Olsa num_dec         [0-9]+
32cd82a32eSJiri Olsa 
33cd82a32eSJiri Olsa %%
34cd82a32eSJiri Olsa 
35*3d88aec0SIan Rogers {num_dec}	{ return value(yyscanner, 10); }
36cd82a32eSJiri Olsa config		{ return PP_CONFIG; }
37cd82a32eSJiri Olsa -		{ return '-'; }
38cd82a32eSJiri Olsa :		{ return ':'; }
39cd82a32eSJiri Olsa ,		{ return ','; }
40cd82a32eSJiri Olsa .		{ ; }
41cd82a32eSJiri Olsa \n		{ ; }
42cd82a32eSJiri Olsa 
43cd82a32eSJiri Olsa %%
44cd82a32eSJiri Olsa 
45*3d88aec0SIan Rogers int perf_pmu_wrap(void *scanner __maybe_unused)
46cd82a32eSJiri Olsa {
47cd82a32eSJiri Olsa 	return 1;
48cd82a32eSJiri Olsa }
49