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;
}
Exemple #2
0
static void
accept_multiplicative_expression()
{
    parse_unary_expression();			/* - things */
    parse_multiplicative_expression();			/* * / % */
}