a corriger

This commit is contained in:
sylvain099
2016-03-19 23:54:45 +01:00
parent 876044dc6a
commit 968a48028c
2 changed files with 49 additions and 36 deletions

View File

@@ -17,21 +17,21 @@ 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);
int parcours_exp(n_exp *n);
int parcours_varExp(n_exp *n);
int parcours_opExp(n_exp *n);
int parcours_intExp(n_exp *n);
int parcours_lireExp(n_exp *n);
int parcours_appelExp(n_exp *n);
int parcours_l_exp(n_l_exp *n);
char* parcours_exp(n_exp *n);
char* parcours_varExp(n_exp *n);
char* parcours_opExp(n_exp *n);
char* parcours_intExp(n_exp *n);
char* parcours_lireExp(n_exp *n);
char* 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_var(n_var *n);
void parcours_var_simple(n_var *n);
void parcours_var_indicee(n_var *n);
char* parcours_var(n_var *n);
char* parcours_var_simple(n_var *n);
char* parcours_var_indicee(n_var *n);
void parcours_appel(n_appel *n);
#endif

View File

@@ -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;
}
/*-------------------------------------------------------------------------*/