#include "in2pos.h" #include "libdados.h" int main() { char *entre=NULL,*pos=NULL; /* Expressões em entre-fixa e pós-fixa respectivamente */ char acao[10]; /* Acao a ser tomada conforme indicado na entrada */ /* ------------------------------------------------------------ VÁLIDO APENAS PARA LINUX Declarações para verificação do uso da memória dinâmica. A variável 'lixo' está sendo usada apenas para contornar um problema do funcionamento das funções da biblioteca 'malloc': a memória por ela apontada é desalocada logo a seguir! ------------------------------------------------------------ */ void *lixo = malloc(1); /* truque: variável auxiliar */ struct mallinfo info; int MemDinInicial, MemDinFinal; free(lixo); /* truque */ info = mallinfo(); MemDinInicial = info.uordblks; /* ------------------------------------------------------- */ /* Executa o teste */ fscanf(stdin,"%s",acao); while(strcmp(acao,"t")!=0) { switch(*acao) { case 'l': /* Ler expressão em entre-fixa */ if (entre != NULL) free(entre); entre = LeExpressao(); break; case 'g': /* Grava expressão em pós-fixa */ if (pos != NULL) GravaExpressao(pos); break; case 'b': /* Verifica balanceamento de parênteses */ if (Balanceada(entre)) fprintf(stdout,"Balanceada\n"); else fprintf(stdout,"Não Balanceada\n"); break; case 'c': /* Converte de entre- para pós-fixa */ if (pos != NULL) free(pos); if (entre != NULL) pos = EntreParaPosFixa(entre); break; case 'a': /* Avalia expressão pós-fixa */ if (pos != NULL) fprintf(stdout,"%s = %d\n",pos,AvaliaExpressao(pos)); break; default: fprintf(stderr,"Ação %s inválida\n",acao); exit(-1); } fscanf(stdin,"%s",acao); } if (entre != NULL) free(entre); if (pos != NULL) free(pos); /* ------------------------------------------------------------ Verificação do uso da memória dinâmica. ------------------------------------------------------------ */ info = mallinfo(); MemDinFinal = info.uordblks; if (MemDinInicial!=MemDinFinal) printf("\n\nMemória dinâmica não foi totalmente liberada (%d, %d)\n", MemDinInicial,MemDinFinal); /* ------------------------------------------------------------ */ printf("\n\nFim da execução.\n\n"); return 0; } /* testpilha */ /* author: Gustavo Sverzut Barbieri (http://www.gustavobarbieri.com.br) */