/* Affichage recursif d'un arbre representant une expression. */ void pprint(TreeP tree) { if (! Pprint ) return; if (tree == NIL(Tree)) { printf("Unknown"); return; } switch (tree->op) { case ID:case STR: case VARDECL: printf("%s", tree->u.str); break; case CST: printf("%d", tree->u.val); break; case EQ: pprintTree2(tree, " = "); break; case NE: pprintTree2(tree, " <> "); break; case GT: pprintTree2(tree, " > "); break; case GE: pprintTree2(tree, " >= "); break; case LT: pprintTree2(tree, " < "); break; case LE: pprintTree2(tree, " <= "); break; case ADD: pprintPrefixTree2(tree, " + "); break; case SUB: pprintPrefixTree2(tree, " - "); break; case MUL: pprintPrefixTree2(tree, " * "); break; case DIV: pprintPrefixTree2(tree, " / "); break; case AND: pprintPrefixTree2(tree, " and "); break; case OR: pprintPrefixTree2(tree, " or "); break; case BINAND:pprintPrefixTree2(tree, " binand "); break; case BINOR: pprintPrefixTree2(tree, " binor "); break; case BINXOR:pprintPrefixTree2(tree, " xor "); break; case AFF: pprintAffectation(tree); break; case PAR: printf("("); pprint(getChild(tree, 0)); printf(")"); break; case INSTRL:pprintTree2(tree, " \n "); break; case ARGL: pprintTree2(tree, ", "); break; case PUT: pprintPUT(tree);break; case GET: pprintGet(); break; case NOT: pprintUnaire(tree, " !"); break; case PLUS: pprintUnaire(tree, " +"); break; case MINUS: pprintUnaire(tree, " -"); break; case IF: pprintIf(tree); break; case POUR: pprintPour(tree); break; case TANTQUE:pprintTantQue(tree);break; case FAIRE: pprintFaireTantQue(tree);break; default: /* On signale le probleme mais on ne quitte pas le programme pour autant * car ce n'est pas dramatique ! */ fprintf(stderr, "Erreur! pprint : etiquette d'operator inconnue(print.c): %d\n", tree->op); setError(UNEXPECTED); } }
void pprintMes(TreeP tree){ if(tree->nbChildren == 3){ pprintTree2(tree, "."); printf("("); pprint(getChild(tree, 2)); printf(")"); }else{ pprint(getChild(tree, 0)); printf("("); pprint(getChild(tree, 1)); printf(");"); } }
/* Affichage recursif d'un arbre representant une expression. */ void ppprint(TreeP tree) { //if (! verbose ) return; if (tree == NIL(Tree)) { //printf("Unknown"); return; } switch (tree->op) { case ID: case IDCL: case STR: printf("%s", tree->u.str); break; case CST: printf("%d", tree->u.val); break; case EQ: pprintTree2(tree, " = "); break; case NE: pprintTree2(tree, " <> "); break; case GT: pprintTree2(tree, " > "); break; case GE: pprintTree2(tree, " >= "); break; case LT: pprintTree2(tree, " < "); break; case LE: pprintTree2(tree, " <= "); break; case ADD: pprintTree2(tree, " + "); break; case SUB: pprintTree2(tree, " - "); break; case MUL: pprintTree2(tree, " * "); break; case DIV: pprintTree2(tree, " / "); break; case CONCAT: pprintTree2(tree, " . "); break; case BLCDECL: pprintTree2(tree, "\nis\n"); break; case DECL: pprintTree2(tree, "\n"); break; case LSTINST: pprintTree2(tree, "\n"); break; case VAR: pprintTree3(tree, "var ", " : ", " := ", ""); break; case MSGSNT: case MSGSNTS: pprintTree3(tree, "", ".", "(", ")"); break; case CAST: pprintTree2full(tree, "(as ", ": ", ")"); break; case INSTA: pprintTree2full(tree, "new ", "(", ")"); break; case INSTR: ppprint(getChild(tree, 0)); printf(";"); break; case SELECT: case SELECTS: pprintTree2(tree, "."); break; case UNARYSUB: printf("-"); ppprint(getChild(tree, 0)); break; case UNARYADD: printf("+"); ppprint(getChild(tree, 0)); break; case IF: pprintTree3(tree, "if ", " then ", " else ", ""); break; case CMPAFF: case DIRAFF: pprintTree2full(tree, "", " := ", ";"); break; case RET: printf("return;"); break; case LSTARG: pprintTree2(tree, ", "); break; default: /* On signale le probleme mais on ne quitte pas le programme pour autant * car ce n'est pas dramatique ! */ fprintf(stderr, "Erreur! pprint : etiquette d'operateur inconnue: %d\n", tree->op); setError(UNEXPECTED); } }
/* Affichage recursif d'un arbre representant une expression. */ void pprint(TreeP tree) { if (! verbose ) return; if (tree == NIL(Tree)) { printf("Unknown"); return; } if(DEBUG){ ++nbrParentheses; printf("\n"); int i; for(i = 0; i < nbrParentheses; i++){ printf(" "); }; printf("("); } switch (tree->op) { case ID: printf("%s", tree->u.str); break; case CST: printf("%d", tree->u.val); break; case STR: printf("%s", tree->u.str); break; case EQ: pprintTree2(tree, " = "); break; case NE: pprintTree2(tree, " <> "); break; case GT: pprintTree2(tree, " > "); break; case GE: pprintTree2(tree, " >= "); break; case LT: pprintTree2(tree, " < "); break; case LE: pprintTree2(tree, " <= "); break; case ADD: pprintTree2(tree, " + "); break; case SUB: pprintTree2(tree, " - "); break; case UMINUS: pprintTree1(tree, " - "); break; case MUL: pprintTree2(tree, " * "); break; case DIV: pprintTree2(tree, " / "); break; case IF: pprintIf(tree); break; case WHILE: pprintWhile(tree); break; case CONCAT: pprintTree2(tree, " & "); break; case THIS: printf("this"); break; case BLOC: pprintBloc(tree); break; case AFF: pprintAff(tree); break; case NOM: printf("%s", tree->u.str); break; case EVOID: break; case LIST: pprintList(tree); break; case INSTR: pprintInstr(tree); break; case DEC: pprintDec(tree); break; case SEL: pprintTree2(tree, "."); break; case MES: pprintMes(tree); break; case NEW: pprintNew(tree); break; case YIELD: pprintYield(tree); break; case VAR: pprintTree2(tree, ":"); break; case FINBLOC: if(DEBUG) printf("A FAIRE: FINBLOC "); break; default: /* On signale le probleme mais on ne quitte pas le programme pour autant */ fprintf(stderr, "Erreur! pprint : etiquette d'operator inconnue: %d\n", tree->op); setError(UNEXPECTED); } if(DEBUG){ printf(")"); nbrParentheses--; } }