Exemple #1
0
// Multiply or divide two factors.
void parser::eval_exp3(double &result)
{
	register char op;
	double temp;
	
	eval_exp4(result);
	
	while((op = *token) == '*' || op == '/' || op == '%') {
		
		get_token();
		eval_exp4(temp);
		
		switch(op) {
			case '*':
				result = result * temp;
				break;
			case '/':
				result = result / temp;
				break;
			case '%':
				result = (int) result % (int) temp;
				break;
		}
	}
}
Exemple #2
0
void eval_exp3(int *value)
{
    char    op;
    int partial_value, t;
    eval_exp4(value);
    while((op = *token) == '*' || op == '/' || op == '%') {
        get_token();
        eval_exp4(&partial_value);
        switch(op) { 
            case '*':
                *value = *value * partial_value;
                break;
            case '/':
                *value = (*value) / partial_value;
                break;
            case '&':
                *value = (*value) & partial_value;
                break;
            case '|':
                *value = (*value) | partial_value;
                break;
            case '%':
                t = (*value) / partial_value;
                *value = *value-(t * partial_value); 
                break; 
        }
    }
}
Exemple #3
0
/* Multiplica ou divide dois fatores */
void Parser::eval_exp3(double *answer) {
  register char op;
  double temp;

  eval_exp4(answer);
  while ((op = *token) == '*' || op == '/' || op == '%') {
    get_token();
    eval_exp4(&temp);
    switch(op) {
      case '*':
	*answer = *answer * temp;
	break;
      case '/':
	*answer = *answer / temp;
	break;
      case '%':
	*answer = (int)*answer % (int)temp;
	break;
    }
  }
}
Exemple #4
0
/* Multiply or divide two factors. */
void eval_exp3(int *value)
{
  register char  op;
  int partial_value, t;
  eval_exp4(value);
  while((op = *token) == '*' || op == '/' || op == '%') {
    get_token();
    eval_exp4(&partial_value);
    switch(op) { /* mul, div, or modulus */
      case '*':
        *value = *value * partial_value;
        break;
      case '/':
        *value = (*value) / partial_value;
        break;
      case '%':
        t = (*value) / partial_value;
        *value = *value-(t * partial_value);
        break;
    }
  }
}
/* Умножение или деление двух множителей. */
void eval_exp3(int *value) {
	register char  op;
	int partial_value;// t;
	eval_exp4(value);
	while((op = *token) == '*' || op == '/' || op == '%') {
		get_token();
		eval_exp4(&partial_value);
		switch(op) { /* умножение, деление или деление целых */
		case '*':
			*value = *value * partial_value;
			break;
		case '/':
			if(partial_value == 0) {
				sntx_err(DIV_BY_ZERO);
			}
			*value = (*value) / partial_value;
			break;
		case '%':
			*value = (*value) % partial_value;
			break;
		}
	}
}
Exemple #6
0
// Multiply or divide two factors. 
void eval_exp3(int &value)
{
	char  op;
	int partial_value, t;
	char okops[] = {
		'(', INC, DEC, '-', '+', 0
	};

	eval_exp4(value);

	while ((op = *token) == '*' || op == '/'
		|| op == '%') {
		get_token();

		if (token_type == DELIMITER &&
			!strchr(okops, *token))
			throw InterpExc(SYNTAX);

		eval_exp4(partial_value);

		switch (op) { // mul, div, or modulus 
		case '*':
			value = value * partial_value;
			break;
		case '/':
			if (partial_value == 0)
				throw InterpExc(DIV_BY_ZERO);
			value = (value) / partial_value;
			break;
		case '%':
			t = (value) / partial_value;
			value = value - (t * partial_value);
			break;
		}
	}
}
Exemple #7
0
/* Processa um expoente */
void Parser::eval_exp4(double *answer) {
  double temp, ex;
  register int t;

  eval_exp5(answer);
  if (*token=='^') {
    get_token();
    eval_exp4(&temp);
    ex = *answer;
    if (temp == 0.0) {
      *answer = 1.0;
      return;
    }
    *answer = pow (ex,double (temp));
  }
}
Exemple #8
0
// Process an exponent
void parser::eval_exp4(double &result)
{
	double temp, ex;
	register int t;
	
	eval_exp5(result);
	
	if(*token== '^') {
		
		get_token();
		eval_exp4(temp);
		
		ex = result;
		
		if(temp==0.0) {
			result = 1.0;
			return;
		}
		
		for(t=(int)temp-1; t>0; --t) result = result * (double)ex;
	}
}