1 %parse-param {struct list_head *expr_head}
2 %define parse.error verbose
12 #include <linux/compiler.h>
13 #include <linux/list.h>
14 #include "bpf-filter.h"
16 int perf_bpf_filter_lex(void);
18 static void perf_bpf_filter_error(struct list_head *expr __maybe_unused,
21 printf("perf_bpf_filter: %s\n", msg);
33 enum perf_bpf_filter_op op;
34 struct perf_bpf_filter_expr *expr;
37 %token BFT_SAMPLE BFT_OP BFT_ERROR BFT_NUM BFT_LOGICAL_OR
38 %type <expr> filter_term filter_expr
39 %destructor { free ($$); } <expr>
40 %type <sample> BFT_SAMPLE
47 filter ',' filter_term
49 list_add_tail(&$3->list, expr_head);
54 list_add_tail(&$1->list, expr_head);
58 filter_term BFT_LOGICAL_OR filter_expr
60 struct perf_bpf_filter_expr *expr;
62 if ($1->op == PBF_OP_GROUP_BEGIN) {
65 expr = perf_bpf_filter_expr__new(0, 0, PBF_OP_GROUP_BEGIN, 1);
66 list_add_tail(&$1->list, &expr->groups);
69 list_add_tail(&$3->list, &expr->groups);
79 BFT_SAMPLE BFT_OP BFT_NUM
81 $$ = perf_bpf_filter_expr__new($1.type, $1.part, $2, $3);