1 %parse-param {struct list_head *expr_head}
2 %define parse.error verbose
8 #include <linux/compiler.h>
9 #include <linux/list.h>
10 #include "bpf-filter.h"
12 static void perf_bpf_filter_error(struct list_head *expr __maybe_unused,
15 printf("perf_bpf_filter: %s\n", msg);
27 enum perf_bpf_filter_op op;
28 struct perf_bpf_filter_expr *expr;
31 %token BFT_SAMPLE BFT_OP BFT_ERROR BFT_NUM BFT_LOGICAL_OR
32 %type <expr> filter_term filter_expr
33 %destructor { free ($$); } <expr>
34 %type <sample> BFT_SAMPLE
41 filter ',' filter_term
43 list_add_tail(&$3->list, expr_head);
48 list_add_tail(&$1->list, expr_head);
52 filter_term BFT_LOGICAL_OR filter_expr
54 struct perf_bpf_filter_expr *expr;
56 if ($1->op == PBF_OP_GROUP_BEGIN) {
59 expr = perf_bpf_filter_expr__new(0, 0, PBF_OP_GROUP_BEGIN, 1);
60 list_add_tail(&$1->list, &expr->groups);
63 list_add_tail(&$3->list, &expr->groups);
73 BFT_SAMPLE BFT_OP BFT_NUM
75 $$ = perf_bpf_filter_expr__new($1.type, $1.part, $2, $3);