void Interpretador::termo() { fator(); string op; while (palavraAtual == "*" || palavraAtual == "/") { op = palavraAtual; palavraAtual = arquivo->proximaPalavra(); fator(); Expressao *exp1 = pilha->top(); pilha->pop(); Expressao *exp2 = pilha->top(); pilha->pop(); pilha->push(new ExpBinaria(op,exp1,exp2)); } }
/*** Função que confere um termo linha(usado pra remover recursão a esquerda) ***/ int termol() { //printf("TERMOL\n"); if(match(MULTI)) { if(fator()) { if(termol()) { return 1; } else return 1; } else return 0; } else if(match(DIVIDE)||match(DIV)||match(MOD)) { if(fator()) { if(termol()) { return 1; } else return 1; } else return 0; } else return 1; }
/*** Função que confere um termo ***/ int termo() { //printf("TERMO\n"); if(fator()) { if(termol()) { return 1; } else return 0; } else return 0; }
int termo(void) { int tipo1, tipo2; tipo1 = tipo2 = 0; tipo1 = fator(); while((tk.cod == MUL) || (tk.cod == DIV) || (tk.cod == MOD) || (tk.cod == AND)){ tk = analex(); tipo2 = fator(); if(tipo1 != tipo2){ erro(lin, 12); } } return tipo1; }
int main(void){ arv* arvore_a; int n, f; criar_arvore(arvore_a); insereArv(&arvore_a, 20); insereArv(&arvore_a, 15); insereArv(&arvore_a, 24); insereArv(&arvore_a, 11); insereArv(&arvore_a, 18); insereArv(&arvore_a, 37); printf("%s\n", avl(&arvore_a) ? "E avl" : "Nao e avl"); printf("%s\n", balan(&arvore_a) ? "Esta completamente balanceada" : "Nao esta completamente balanceada"); n = fator(&arvore_a, 24, &f); if(f) printf("Fator = %d\n", n); else printf("Nao encontrado.\n"); printf("Arvore:\n"); print(&arvore_a); destruirArv(&arvore_a); return 0; }