Analizador de expresiones en c
#include
#include
#include
#include
#include
#define DELIMITADOR 1
#define VARIABLE 2
#define NUMERO 3
char *prog;
char token[80];
chartipo_token;
void eval_expr( double *res );
void suma_resta( double *res );
void mult_div( double *res );
void exp( double *res );
void monario( double *res );
void parentesis( double *res );
voidatomo( double *res );
void devuelve();
void serror( int error );
void obt_token( void );
int esdelim( char c );
main()
{
clrscr();
double res;
char *p;
/*clrscr();*/
p = ( char* )malloc (100);
if(!p){
printf("\nFallo de asignacion de memoria\n");
exit(0);
}
do{
/*clrscr();*/
prog = p;
printf("\n\nIntroduzca EXPRESION");
printf("\n\n ==> ");
gets(prog);
if(!*prog) break;eval_expr(&res);
printf("\nEl resultado es : \n\n %1.2f\n", res);
if(!getch()) getch();
} while(*p);
return 0;
}
void eval_expr( double *res )
{
obt_token();
if(!*token){
serror(2);return;
}
suma_resta(res);
}
void suma_resta( double *res )
{
register char op;
double temp;
mult_div(res);
while((op = *token) == '+' || op == '-')
{
obt_token();
mult_div(&temp);switch( op ){
case '-' : *res = *res - temp;
break;
case '+' : *res = *res + temp;
break;
}
}
}
void mult_div( double *res )
{
register char op;
double temp;
exp(res);
while((op =*token) == '*' || op == '/' || op == '%')
{
obt_token();
exp(&temp);
switch( op ){
case '*' : *res = *res * temp;
break;
case '/' : *res = *res / temp;
break;
case '%' : *res = (int) *res % (int)temp;
break;
}
}
}
void exp( double *res )
{
double temp, ex;
register int t;
monario(res);
if(*token == '^'){
obt_token();
exp(&temp);
ex = *res;
if(temp == 0.0){
*res = 1.0;...
Regístrate para leer el documento completo.