static float parse_additive_expression(parser_state_t *self) { float left, right; if(!self->token) return NAN; left = parse_multiplicative_expression(self); while(self->token && self->token->type == T_OPERATOR) { operators_t operator= self->token->data.operator; if(operator!= O_PLUS &&operator!= O_MINUS) return left; free(self->token); self->token = get_token(self); right = parse_multiplicative_expression(self); if(operator== O_PLUS) left += right; else if(operator== O_MINUS) left -= right; } return left; }
static void accept_multiplicative_expression() { parse_unary_expression(); /* - things */ parse_multiplicative_expression(); /* * / % */ }