6 #include <linux/compiler.h>
8 #include "expr-bison.h"
10 char *expr_get_text(yyscan_t yyscanner);
11 YYSTYPE *expr_get_lval(yyscan_t yyscanner);
13 static int __value(YYSTYPE *yylval, char *str, int base, int token)
18 num = strtoull(str, NULL, base);
26 static int value(yyscan_t scanner, int base)
28 YYSTYPE *yylval = expr_get_lval(scanner);
29 char *text = expr_get_text(scanner);
31 return __value(yylval, text, base, NUMBER);
35 * Allow @ instead of / to be able to specify pmu/event/ without
36 * conflicts with normal division.
38 static char *normalize(char *str)
46 else if (*str == '\\')
57 static int str(yyscan_t scanner, int token)
59 YYSTYPE *yylval = expr_get_lval(scanner);
60 char *text = expr_get_text(scanner);
62 yylval->str = normalize(strdup(text));
66 yylval->str = normalize(yylval->str);
76 symbol {spec}*{sym}*{spec}*{sym}*
82 start_token = expr_get_extra(yyscanner);
85 expr_set_extra(NULL, yyscanner);
94 #smt_on { return SMT_ON; }
95 {number} { return value(yyscanner, 10); }
96 {symbol} { return str(yyscanner, ID); }
111 int expr_wrap(void *scanner __maybe_unused)