Пример #1
0
/* 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);
  }
}
Пример #2
0
/* 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--;
  }
}