void print_tac(FILE* out, struct node_tac * code) { struct node_tac *list = code; if(list) { // se a lista não estiver vazia print_inst_tac(out, *list->inst); while(list->next != code) { // enquanto houver um próximo elemento list = list->next; print_inst_tac(out, *list->inst); } } }
/** \brief Imprime no arquivo apontado por 'out' o conteudo da lista apontada * por 'code'. * * @param out um ponteiro sobre um arquivo (aberto) aonde ira ser escrita a lista (uma linha por elemento). * @param code o ponteiro para a lista a ser impressa. * * Obs.: cada linha impressa no arquivo deve comecar por um numero inteiro * (3 digitos) seguido de ':'. O numero deve ser o numero da linha. * Exemplo: * 001: instrucao_qualquer * 002: outra_instrucao * ..... * 999: ultima_instrucao * 000: agora_tem_instrucao_demais */ void print_tac(FILE* out, struct node_tac * code){ fprintf(out, "%d\n%d\n", vars_size,temps_size); struct node_tac * tac_pointer; tac_pointer = code; while(tac_pointer){ fprintf(out, "%03d: ", tac_pointer->number-1); print_inst_tac(out,*(tac_pointer->inst)); tac_pointer=tac_pointer->next; } }