a corriger
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include "syntabs.h"
|
||||
#include "util.h"
|
||||
#include "parcours.h"
|
||||
#define is_num(c)(('0' <= (c)) && ((c) <= '9'))
|
||||
|
||||
int contexte = C_VARIABLE_GLOBALE;
|
||||
int adresseGlobalCourante = 0;
|
||||
@@ -50,7 +51,7 @@ void parcours_l_instr(n_l_instr *n)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
int parcours_instr(n_instr *n)
|
||||
void parcours_instr(n_instr *n)
|
||||
{
|
||||
if(n) {
|
||||
if(n->type == blocInst) parcours_l_instr(n->u.liste);
|
||||
@@ -106,8 +107,12 @@ void parcours_instr_pour(n_instr *n)
|
||||
|
||||
void parcours_instr_affect(n_instr *n)
|
||||
{
|
||||
parcours_var(n->u.affecte_.var);
|
||||
parcours_exp(n->u.affecte_.exp);
|
||||
char * name = parcours_var(n->u.affecte_.var);
|
||||
char * tRegistre = parcours_exp(n->u.affecte_.exp);
|
||||
char tmp[250];
|
||||
sprintf(tmp,"sw %s, %s ", tRegistre,name);
|
||||
|
||||
printMips(tmp);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
@@ -126,7 +131,6 @@ void parcours_appel(n_appel *n)
|
||||
affiche_dico();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int nbArg = parcours_l_exp(n->args);
|
||||
if(dico.tab[id].complement != nbArg) {
|
||||
printf("Nombre Argument différent pour l'appel à %s\n", n->fonction);
|
||||
@@ -143,15 +147,15 @@ void parcours_instr_retour(n_instr *n)
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
void parcours_instr_ecrire(n_instr *n)
|
||||
{
|
||||
int tRegistre = parcours_exp(n->u.ecrire_.expression);
|
||||
char* name = parcours_exp(n->u.ecrire_.expression);
|
||||
|
||||
char tmp[250];
|
||||
sprintf(tmp, "move $a0 $t%d", tRegistre);
|
||||
sprintf(tmp, "move $a0, %s", name);
|
||||
printMips(tmp);
|
||||
printMips("li $v0 1");
|
||||
printMips("systcall");
|
||||
printMips("syscall");
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
@@ -167,9 +171,8 @@ int parcours_l_exp(n_l_exp *n)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
int parcours_exp(n_exp *n)
|
||||
char* parcours_exp(n_exp *n)
|
||||
{
|
||||
|
||||
if(n->type == varExp) return parcours_varExp(n);
|
||||
else if(n->type == opExp) return parcours_opExp(n);
|
||||
else if(n->type == intExp) return parcours_intExp(n);
|
||||
@@ -179,40 +182,45 @@ int parcours_exp(n_exp *n)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
int parcours_varExp(n_exp *n)
|
||||
char* parcours_varExp(n_exp *n)
|
||||
{
|
||||
parcours_var(n->u.var);
|
||||
return parcours_var(n->u.var);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
int parcours_opExp(n_exp *n)
|
||||
char* parcours_opExp(n_exp *n)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
int parcours_intExp(n_exp *n)
|
||||
char* parcours_intExp(n_exp *n)
|
||||
{
|
||||
char texte[ 50 ]; // Max. 50 chiffres
|
||||
sprintf(texte, "%d", n->u.entier);
|
||||
char *texte = malloc (sizeof (char) * 256); // Max. 50 chiffres
|
||||
int iRegistre = newReg();
|
||||
sprintf(texte, "li $t%d, %d",iRegistre, n->u.entier);
|
||||
printMips(texte);
|
||||
sprintf(texte,"$t%d",iRegistre);
|
||||
return texte;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
int parcours_lireExp(n_exp *n)
|
||||
char* parcours_lireExp(n_exp *n)
|
||||
{
|
||||
printMips("li $v0 5");
|
||||
printMips("systcall");
|
||||
printMips("syscall");
|
||||
int iRegistre = newReg();
|
||||
char tmp[250];
|
||||
sprintf(tmp, "move $t%d $a0", iRegistre);
|
||||
printMips(tmp);
|
||||
return iRegistre;
|
||||
sprintf(tmp, "$t%d",iRegistre);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
int parcours_appelExp(n_exp *n)
|
||||
char* parcours_appelExp(n_exp *n)
|
||||
{
|
||||
parcours_appel(n->u.appel);
|
||||
}
|
||||
@@ -336,18 +344,18 @@ void parcours_tabDec(n_dec *n)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
void parcours_var(n_var *n)
|
||||
char* parcours_var(n_var *n)
|
||||
{
|
||||
if(n->type == simple) {
|
||||
parcours_var_simple(n);
|
||||
return parcours_var_simple(n);
|
||||
}
|
||||
else if(n->type == indicee) {
|
||||
parcours_var_indicee(n);
|
||||
return parcours_var_indicee(n);
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
void parcours_var_simple(n_var *n)
|
||||
char* parcours_var_simple(n_var *n)
|
||||
{
|
||||
int i = rechercheExecutable(n->nom);
|
||||
if( i < 0) {
|
||||
@@ -359,10 +367,14 @@ void parcours_var_simple(n_var *n)
|
||||
affiche_dico();
|
||||
exit(1);
|
||||
}
|
||||
///TODOOOOOOOOOOO
|
||||
char *tmp = malloc (sizeof (char) * 256);
|
||||
sprintf(tmp,"$%s",n->nom);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
void parcours_var_indicee(n_var *n)
|
||||
char* parcours_var_indicee(n_var *n)
|
||||
{
|
||||
int i = rechercheExecutable(n->nom);
|
||||
if( i < 0) {
|
||||
@@ -376,5 +388,6 @@ void parcours_var_indicee(n_var *n)
|
||||
}
|
||||
|
||||
parcours_exp( n->u.indicee_.indice );
|
||||
return n->nom;
|
||||
}
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
Reference in New Issue
Block a user