a corriger
This commit is contained in:
@@ -17,21 +17,21 @@ 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);
|
||||||
void parcours_l_exp(n_l_exp *n);
|
int parcours_l_exp(n_l_exp *n);
|
||||||
int parcours_exp(n_exp *n);
|
char* parcours_exp(n_exp *n);
|
||||||
int parcours_varExp(n_exp *n);
|
char* parcours_varExp(n_exp *n);
|
||||||
int parcours_opExp(n_exp *n);
|
char* parcours_opExp(n_exp *n);
|
||||||
int parcours_intExp(n_exp *n);
|
char* parcours_intExp(n_exp *n);
|
||||||
int parcours_lireExp(n_exp *n);
|
char* parcours_lireExp(n_exp *n);
|
||||||
int parcours_appelExp(n_exp *n);
|
char* 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);
|
||||||
void parcours_varDec(n_dec *n);
|
void parcours_varDec(n_dec *n);
|
||||||
void parcours_tabDec(n_dec *n);
|
void parcours_tabDec(n_dec *n);
|
||||||
void parcours_var(n_var *n);
|
char* parcours_var(n_var *n);
|
||||||
void parcours_var_simple(n_var *n);
|
char* parcours_var_simple(n_var *n);
|
||||||
void parcours_var_indicee(n_var *n);
|
char* parcours_var_indicee(n_var *n);
|
||||||
void parcours_appel(n_appel *n);
|
void parcours_appel(n_appel *n);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "syntabs.h"
|
#include "syntabs.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "parcours.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;
|
||||||
@@ -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) {
|
||||||
if(n->type == blocInst) parcours_l_instr(n->u.liste);
|
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)
|
void parcours_instr_affect(n_instr *n)
|
||||||
{
|
{
|
||||||
parcours_var(n->u.affecte_.var);
|
char * name = parcours_var(n->u.affecte_.var);
|
||||||
parcours_exp(n->u.affecte_.exp);
|
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();
|
affiche_dico();
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nbArg = parcours_l_exp(n->args);
|
int nbArg = parcours_l_exp(n->args);
|
||||||
if(dico.tab[id].complement != nbArg) {
|
if(dico.tab[id].complement != nbArg) {
|
||||||
printf("Nombre Argument différent pour l'appel à %s\n", n->fonction);
|
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)
|
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];
|
char tmp[250];
|
||||||
sprintf(tmp, "move $a0 $t%d", tRegistre);
|
sprintf(tmp, "move $a0, %s", name);
|
||||||
printMips(tmp);
|
printMips(tmp);
|
||||||
printMips("li $v0 1");
|
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);
|
if(n->type == varExp) return parcours_varExp(n);
|
||||||
else if(n->type == opExp) return parcours_opExp(n);
|
else if(n->type == opExp) return parcours_opExp(n);
|
||||||
else if(n->type == intExp) return parcours_intExp(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
|
char *texte = malloc (sizeof (char) * 256); // Max. 50 chiffres
|
||||||
sprintf(texte, "%d", n->u.entier);
|
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("li $v0 5");
|
||||||
printMips("systcall");
|
printMips("syscall");
|
||||||
int iRegistre = newReg();
|
int iRegistre = newReg();
|
||||||
char tmp[250];
|
char tmp[250];
|
||||||
sprintf(tmp, "move $t%d $a0", iRegistre);
|
sprintf(tmp, "move $t%d $a0", iRegistre);
|
||||||
printMips(tmp);
|
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);
|
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) {
|
if(n->type == simple) {
|
||||||
parcours_var_simple(n);
|
return parcours_var_simple(n);
|
||||||
}
|
}
|
||||||
else if(n->type == indicee) {
|
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);
|
int i = rechercheExecutable(n->nom);
|
||||||
if( i < 0) {
|
if( i < 0) {
|
||||||
@@ -359,10 +367,14 @@ void parcours_var_simple(n_var *n)
|
|||||||
affiche_dico();
|
affiche_dico();
|
||||||
exit(1);
|
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);
|
int i = rechercheExecutable(n->nom);
|
||||||
if( i < 0) {
|
if( i < 0) {
|
||||||
@@ -376,5 +388,6 @@ void parcours_var_indicee(n_var *n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
parcours_exp( n->u.indicee_.indice );
|
parcours_exp( n->u.indicee_.indice );
|
||||||
|
return n->nom;
|
||||||
}
|
}
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|||||||
Reference in New Issue
Block a user