%token FLAG %token LPAREN RPAREN %token OR AND %token NOT %token EOF %left OR %left AND %nonassoc NOT %start filter %% filter: | f = expr; EOF { f } expr: | f = FLAG { Filter.Flag (Config.of_string f) } | LPAREN; e = expr; RPAREN { e } | e1 = expr; AND; e2 = expr { Filter.And (e1, e2) } | e1 = expr; OR; e2 = expr { Filter.Or (e1, e2) } | NOT; e = expr { Filter.Not e }