%option prefix="perf_pmu_" %option reentrant %option bison-bridge %{ #include <stdlib.h> #include <linux/bitops.h> #include "pmu.h" #include "pmu-bison.h" char *perf_pmu_get_text(yyscan_t yyscanner); YYSTYPE *perf_pmu_get_lval(yyscan_t yyscanner); static int value(yyscan_t scanner, int base) { YYSTYPE *yylval = perf_pmu_get_lval(scanner); char *text = perf_pmu_get_text(scanner); long num; errno = 0; num = strtoul(text, NULL, base); if (errno) return PP_ERROR; yylval->num = num; return PP_VALUE; } %} num_dec [0-9]+ %% {num_dec} { return value(yyscanner, 10); } config { return PP_CONFIG; } - { return '-'; } : { return ':'; } , { return ','; } . { ; } \n { ; } %% int perf_pmu_wrap(void *scanner __maybe_unused) { return 1; }