manque les tableau
This commit is contained in:
@@ -2,8 +2,6 @@
|
|||||||
#include "parcours.h"
|
#include "parcours.h"
|
||||||
#include "syntabs.h"
|
#include "syntabs.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "parcours.h"
|
|
||||||
#define is_num(c)(('0' <= (c)) && ((c) <= '9'))
|
|
||||||
|
|
||||||
int contexte = C_VARIABLE_GLOBALE;
|
int contexte = C_VARIABLE_GLOBALE;
|
||||||
int adresseGlobalCourante = 0;
|
int adresseGlobalCourante = 0;
|
||||||
@@ -107,11 +105,11 @@ void parcours_instr_pour(n_instr *n)
|
|||||||
|
|
||||||
void parcours_instr_affect(n_instr *n)
|
void parcours_instr_affect(n_instr *n)
|
||||||
{
|
{
|
||||||
char * name = parcours_var(n->u.affecte_.var);
|
|
||||||
|
char * var = parcours_var(n->u.affecte_.var);
|
||||||
char * tRegistre = parcours_exp(n->u.affecte_.exp);
|
char * tRegistre = parcours_exp(n->u.affecte_.exp);
|
||||||
char tmp[250];
|
char tmp[250];
|
||||||
sprintf(tmp,"sw %s, %s ", tRegistre,name);
|
sprintf(tmp,"sw %s, %s ",tRegistre, var);
|
||||||
|
|
||||||
printMips(tmp);
|
printMips(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,11 +148,15 @@ void parcours_instr_retour(n_instr *n)
|
|||||||
void parcours_instr_ecrire(n_instr *n)
|
void parcours_instr_ecrire(n_instr *n)
|
||||||
{
|
{
|
||||||
char* name = parcours_exp(n->u.ecrire_.expression);
|
char* name = parcours_exp(n->u.ecrire_.expression);
|
||||||
|
|
||||||
char tmp[250];
|
char tmp[250];
|
||||||
|
int iRegistre;
|
||||||
|
iRegistre = newReg();
|
||||||
|
sprintf(tmp,"lw $t%d, %s",iRegistre,name);
|
||||||
|
sprintf(name,"$t%d",iRegistre);
|
||||||
|
printMips(tmp);
|
||||||
sprintf(tmp, "move $a0, %s", name);
|
sprintf(tmp, "move $a0, %s", name);
|
||||||
printMips(tmp);
|
printMips(tmp);
|
||||||
printMips("li $v0 1");
|
printMips("li $v0, 1");
|
||||||
printMips("syscall");
|
printMips("syscall");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +192,40 @@ char* parcours_varExp(n_exp *n)
|
|||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
char* parcours_opExp(n_exp *n)
|
char* parcours_opExp(n_exp *n)
|
||||||
{
|
{
|
||||||
|
int iRegistre;
|
||||||
|
iRegistre = newReg();
|
||||||
|
|
||||||
|
char * Exp1 = parcours_exp(n->u.opExp_.op1);
|
||||||
|
char * Exp2 = parcours_exp(n->u.opExp_.op2);
|
||||||
|
|
||||||
|
int iRegistre2;
|
||||||
|
iRegistre2 = newReg();
|
||||||
|
int iRegistre3;
|
||||||
|
iRegistre3 = newReg();
|
||||||
|
//GLOBALE
|
||||||
|
char tmp[256];
|
||||||
|
sprintf(tmp,"lw $t%d %s",iRegistre2, Exp1);
|
||||||
|
printMips(tmp);
|
||||||
|
sprintf(tmp,"lw $t%d %s",iRegistre3, Exp2);
|
||||||
|
printMips(tmp);
|
||||||
|
|
||||||
|
if(n->u.opExp_.op == plus) {
|
||||||
|
sprintf(tmp,"add $t%d, $t%d, $t%d",iRegistre, iRegistre2,iRegistre3);
|
||||||
|
printMips(tmp);
|
||||||
|
}
|
||||||
|
else if(n->u.opExp_.op == moins){
|
||||||
|
sprintf(tmp,"sub $t%d, $t%d, $t%d",iRegistre, iRegistre2,iRegistre3);
|
||||||
|
printMips(tmp);
|
||||||
|
}
|
||||||
|
if(n->u.opExp_.op == fois) {
|
||||||
|
sprintf(tmp,"mult $t%d, $t%d", iRegistre2,iRegistre3);
|
||||||
|
printMips(tmp);
|
||||||
|
sprintf(tmp,"mflo $t%d",iRegistre);
|
||||||
|
printMips(tmp);
|
||||||
|
}
|
||||||
|
char * back = malloc(sizeof (char) * 256);
|
||||||
|
sprintf(back,"$t%d",iRegistre);
|
||||||
|
return back;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------- -----------------------------------------*/
|
/*-------------------------------- -----------------------------------------*/
|
||||||
@@ -211,8 +246,8 @@ char* parcours_lireExp(n_exp *n)
|
|||||||
printMips("li $v0 5");
|
printMips("li $v0 5");
|
||||||
printMips("syscall");
|
printMips("syscall");
|
||||||
int iRegistre = newReg();
|
int iRegistre = newReg();
|
||||||
char tmp[250];
|
char *tmp = malloc (sizeof (char) * 256);
|
||||||
sprintf(tmp, "move $t%d $a0", iRegistre);
|
sprintf(tmp, "move $t%d, $v0", iRegistre);
|
||||||
printMips(tmp);
|
printMips(tmp);
|
||||||
sprintf(tmp, "$t%d",iRegistre);
|
sprintf(tmp, "$t%d",iRegistre);
|
||||||
return tmp;
|
return tmp;
|
||||||
@@ -316,7 +351,6 @@ void parcours_varDec(n_dec *n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
void parcours_tabDec(n_dec *n)
|
void parcours_tabDec(n_dec *n)
|
||||||
{
|
{
|
||||||
char texte[100]; // Max. 100 chars nom tab + taille
|
char texte[100]; // Max. 100 chars nom tab + taille
|
||||||
@@ -367,7 +401,7 @@ char* parcours_var_simple(n_var *n)
|
|||||||
affiche_dico();
|
affiche_dico();
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
///TODOOOOOOOOOOO
|
|
||||||
char *tmp = malloc (sizeof (char) * 256);
|
char *tmp = malloc (sizeof (char) * 256);
|
||||||
sprintf(tmp,"$%s",n->nom);
|
sprintf(tmp,"$%s",n->nom);
|
||||||
return tmp;
|
return tmp;
|
||||||
@@ -391,3 +425,4 @@ char* parcours_var_indicee(n_var *n)
|
|||||||
return n->nom;
|
return n->nom;
|
||||||
}
|
}
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
Reference in New Issue
Block a user