ba_op
expr : expr OP_LAND term { $$ = ba_op(B_AT_OP_LAND, $1, $3); }
| expr OP_LOR term { $$ = ba_op(B_AT_OP_LOR, $1, $3); }
term : term OP_EQ fterm { $$ = ba_op(B_AT_OP_EQ, $1, $3); }
| term OP_NE fterm { $$ = ba_op(B_AT_OP_NE, $1, $3); }
| term OP_LE fterm { $$ = ba_op(B_AT_OP_LE, $1, $3); }
| term OP_LT fterm { $$ = ba_op(B_AT_OP_LT, $1, $3); }
| term OP_GE fterm { $$ = ba_op(B_AT_OP_GE, $1, $3); }
| term OP_GT fterm { $$ = ba_op(B_AT_OP_GT, $1, $3); }
| term '+' fterm { $$ = ba_op(B_AT_OP_PLUS, $1, $3); }
| term '-' fterm { $$ = ba_op(B_AT_OP_MINUS, $1, $3); }
| term '&' fterm { $$ = ba_op(B_AT_OP_BAND, $1, $3); }
| term '^' fterm { $$ = ba_op(B_AT_OP_XOR, $1, $3); }
| term '|' fterm { $$ = ba_op(B_AT_OP_BOR, $1, $3); }
fterm : fterm '*' factor { $$ = ba_op(B_AT_OP_MULT, $1, $3); }
| fterm '/' factor { $$ = ba_op(B_AT_OP_DIVIDE, $1, $3); }
| fterm '%' factor { $$ = ba_op(B_AT_OP_MODULO, $1, $3); }
| STR '(' PVAR ',' expr ')' { $$ = ba_op(B_AT_FN_STR, $3, $5); }
bf->bf_condition = bs_new(B_AC_TEST, ba_op(op, term, ba), NULL);
bop = ba_op(B_AT_OP_NE, NULL, ba);
struct bt_arg *ba_op(enum bt_argtype, struct bt_arg *, struct bt_arg *);