reparation

This commit is contained in:
sylvain099
2016-03-25 10:01:32 +01:00
parent 3e6f4e8c67
commit a791cdfe4b
2 changed files with 40 additions and 21 deletions

View File

@@ -20,8 +20,8 @@ void parcours_instr_pour(n_instr *n);
void parcours_instr_affect(n_instr *n); void parcours_instr_affect(n_instr *n);
void parcours_instr_appel(n_instr *n); void parcours_instr_appel(n_instr *n);
void parcours_instr_retour(n_instr *n); void parcours_instr_retour(n_instr *n);
void parcours_instr_ecrire(n_instr *n); void parcours_instr_ecrire(n_instr *n); //ok
void parcours_l_exp(n_l_exp *n); int parcours_l_exp(n_l_exp *n);
void parcours_exp(n_exp *n); // OKI void parcours_exp(n_exp *n); // OKI
void parcours_varExp(n_exp *n); // OKI void parcours_varExp(n_exp *n); // OKI
void parcours_opExp(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_appelExp(n_exp *n);
void parcours_l_dec(n_l_dec *n); void parcours_l_dec(n_l_dec *n);
void parcours_dec(n_dec *n); void parcours_dec(n_dec *n);
void parcours_foncDec(n_dec *n); void parcours_foncDec(n_dec *n); //OK
void parcours_varDec(n_dec *n); void parcours_varDec(n_dec *n); //Manque argument
void parcours_tabDec(n_dec *n); void parcours_tabDec(n_dec *n); //ok
void parcours_var(n_var *n, char * var); // OKI 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_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); void parcours_appel(n_appel *n);
#endif #endif

View File

@@ -11,6 +11,11 @@ int afficheMips = 0;
int creg = 0; int creg = 0;
extern dico_ dico; extern dico_ dico;
int tagindice = 0;
void new_tag(char * tmp){
sprintf(tmp,"a%d\n",tagindice );
}
void printMips( const char * msg ) { void printMips( const char * msg ) {
if(afficheMips) if(afficheMips)
printf("%s\n", msg); printf("%s\n", msg);
@@ -56,9 +61,11 @@ void parcours_table(n_prog *n)
{ {
printMips(".data"); printMips(".data");
parcours_l_dec(n->variables); parcours_l_dec(n->variables);
printMips(".text");
printMips("jal main"); printMips("jal main");
printMips("li $v0, 10"); printMips("li $v0, 10");
printMips("syscall"); printMips("syscall");
parcours_l_dec(n->fonctions); parcours_l_dec(n->fonctions);
int id = rechercheExecutable("main"); int id = rechercheExecutable("main");
@@ -100,8 +107,18 @@ void parcours_instr(n_instr *n)
void parcours_instr_si(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_exp(n->u.si_.test);
parcours_instr(n->u.si_.alors); parcours_instr(n->u.si_.alors);
if(n->u.si_.sinon){ if(n->u.si_.sinon){
parcours_instr(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) void parcours_instr_affect(n_instr *n)
{ {
char var[256];
int var = parcours_var(n->u.affecte_.var); parcours_var(n->u.affecte_.var,&var);
int tRegistre = parcours_exp(n->u.affecte_.exp); parcours_exp(n->u.affecte_.exp);
int iRegistre = newReg();
char tmp[250]; char tmp[250];
sprintf(tmp,"sw %s, %s ",tRegistre, var); char registre[250];
sprintf(registre,"$t%d",iRegistre);
depile(registre);
sprintf(tmp,"sw $t%d, %s ",iRegistre, var);
printMips(tmp); printMips(tmp);
} }
@@ -182,11 +203,10 @@ void parcours_instr_ecrire(n_instr *n)
parcours_exp(n->u.ecrire_.expression); parcours_exp(n->u.ecrire_.expression);
char tmp[250]; char tmp[250];
int iRegistre; int iRegistre;
iRegistre = newReg();
sprintf(tmp,"lw $t%d, %s",iRegistre, name); sprintf(tmp,"$t%d",iRegistre);
sprintf(name,"$t%d",iRegistre); depile(tmp);
printMips(tmp); sprintf(tmp, "move $a0, $t%d",iRegistre);
sprintf(tmp, "move $a0, %s", name);
printMips(tmp); printMips(tmp);
printMips("li $v0, 1"); printMips("li $v0, 1");
printMips("syscall"); printMips("syscall");
@@ -220,7 +240,6 @@ void parcours_varExp(n_exp *n)
{ {
char var[256]; char var[256];
parcours_var(n->u.var, &var); parcours_var(n->u.var, &var);
char tmp[256]; char tmp[256];
int iRegistre = newReg(); int iRegistre = newReg();
sprintf(tmp, "lw $t%d, %s", iRegistre, var); 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) { if(n->type == simple) {
parcours_var_simple(n, var); 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) { if(dico.tab[i].classe == C_VARIABLE_GLOBALE) {
sprintf(var, "$%s", n->nom); sprintf(var, "$%s", n->nom);
} else {
sprintf(var, "%d", n->adresse);
} }
/*else {
sprintf(var, "%d", n->adresse);
}*/
} }
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/