diff --git a/header/parcours.h b/header/parcours.h index 6754b5f..d69ecc7 100644 --- a/header/parcours.h +++ b/header/parcours.h @@ -20,8 +20,8 @@ void parcours_instr_pour(n_instr *n); void parcours_instr_affect(n_instr *n); void parcours_instr_appel(n_instr *n); void parcours_instr_retour(n_instr *n); -void parcours_instr_ecrire(n_instr *n); -void parcours_l_exp(n_l_exp *n); +void parcours_instr_ecrire(n_instr *n); //ok +int parcours_l_exp(n_l_exp *n); void parcours_exp(n_exp *n); // OKI void parcours_varExp(n_exp *n); // OKI void parcours_opExp(n_exp *n); // OKI @@ -30,12 +30,12 @@ void parcours_lireExp(n_exp *n); // OKI void parcours_appelExp(n_exp *n); void parcours_l_dec(n_l_dec *n); void parcours_dec(n_dec *n); -void parcours_foncDec(n_dec *n); -void parcours_varDec(n_dec *n); -void parcours_tabDec(n_dec *n); +void parcours_foncDec(n_dec *n); //OK +void parcours_varDec(n_dec *n); //Manque argument +void parcours_tabDec(n_dec *n); //ok void parcours_var(n_var *n, char * var); // OKI void parcours_var_simple(n_var *n, char * var); // OKI // modifier pour var non global -void parcours_var_indicee(n_var *n); +void parcours_var_indicee(n_var *n, char * var); void parcours_appel(n_appel *n); #endif diff --git a/src/parcours.c b/src/parcours.c index 7109e7d..652147c 100644 --- a/src/parcours.c +++ b/src/parcours.c @@ -11,6 +11,11 @@ int afficheMips = 0; int creg = 0; extern dico_ dico; +int tagindice = 0; +void new_tag(char * tmp){ + sprintf(tmp,"a%d\n",tagindice ); +} + void printMips( const char * msg ) { if(afficheMips) printf("%s\n", msg); @@ -56,9 +61,11 @@ void parcours_table(n_prog *n) { printMips(".data"); parcours_l_dec(n->variables); + printMips(".text"); printMips("jal main"); printMips("li $v0, 10"); printMips("syscall"); + parcours_l_dec(n->fonctions); int id = rechercheExecutable("main"); @@ -100,8 +107,18 @@ void parcours_instr(n_instr *n) void parcours_instr_si(n_instr *n) { + + //TODOOOOOOOOOOOOOOOOOOOOOOOOOO + /*int iRegistre = newReg(); + + char e[250]; + new_tag(&e); + printMips("li $t%d, -1",iRegistre);*/ + parcours_exp(n->u.si_.test); + parcours_instr(n->u.si_.alors); + if(n->u.si_.sinon){ parcours_instr(n->u.si_.sinon); } @@ -137,11 +154,15 @@ void parcours_instr_pour(n_instr *n) void parcours_instr_affect(n_instr *n) { - - int var = parcours_var(n->u.affecte_.var); - int tRegistre = parcours_exp(n->u.affecte_.exp); - char tmp[250]; - sprintf(tmp,"sw %s, %s ",tRegistre, var); + char var[256]; + parcours_var(n->u.affecte_.var,&var); + parcours_exp(n->u.affecte_.exp); + int iRegistre = newReg(); + char tmp[250]; + char registre[250]; + sprintf(registre,"$t%d",iRegistre); + depile(registre); + sprintf(tmp,"sw $t%d, %s ",iRegistre, var); printMips(tmp); } @@ -182,11 +203,10 @@ void parcours_instr_ecrire(n_instr *n) parcours_exp(n->u.ecrire_.expression); char tmp[250]; int iRegistre; - - sprintf(tmp,"lw $t%d, %s",iRegistre, name); - sprintf(name,"$t%d",iRegistre); - printMips(tmp); - sprintf(tmp, "move $a0, %s", name); + iRegistre = newReg(); + sprintf(tmp,"$t%d",iRegistre); + depile(tmp); + sprintf(tmp, "move $a0, $t%d",iRegistre); printMips(tmp); printMips("li $v0, 1"); printMips("syscall"); @@ -220,7 +240,6 @@ void parcours_varExp(n_exp *n) { char var[256]; parcours_var(n->u.var, &var); - char tmp[256]; int iRegistre = newReg(); sprintf(tmp, "lw $t%d, %s", iRegistre, var); @@ -428,8 +447,7 @@ void parcours_tabDec(n_dec *n) } /*-------------------------------------------------------------------------*/ - -void parcours_var(n_var *n, , char * var) +void parcours_var(n_var *n , char * var) { if(n->type == simple) { parcours_var_simple(n, var); @@ -455,9 +473,10 @@ void parcours_var_simple(n_var *n, char * var) if(dico.tab[i].classe == C_VARIABLE_GLOBALE) { sprintf(var, "$%s", n->nom); - } else { + } + /*else { sprintf(var, "%d", n->adresse); - } + }*/ } /*-------------------------------------------------------------------------*/