reparation
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|||||||
Reference in New Issue
Block a user