// 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; } } }
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; } } }
/* 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; } } }
/* 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; } } }
// 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; } } }
/* 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)); } }
// 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; } }