From 33cd7ed170878670f7f4f74f35c7eb155aee667d Mon Sep 17 00:00:00 2001 From: sylvain099 Date: Sun, 20 Mar 2016 22:11:44 +0100 Subject: [PATCH] manque les tableau --- src/parcours.c | 63 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 14 deletions(-) diff --git a/src/parcours.c b/src/parcours.c index affbb3c..be085d6 100644 --- a/src/parcours.c +++ b/src/parcours.c @@ -2,8 +2,6 @@ #include "parcours.h" #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; @@ -107,11 +105,11 @@ void parcours_instr_pour(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 tmp[250]; - sprintf(tmp,"sw %s, %s ", tRegistre,name); - + char tmp[250]; + sprintf(tmp,"sw %s, %s ",tRegistre, var); printMips(tmp); } @@ -150,11 +148,15 @@ void parcours_instr_retour(n_instr *n) void parcours_instr_ecrire(n_instr *n) { char* name = parcours_exp(n->u.ecrire_.expression); - 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); printMips(tmp); - printMips("li $v0 1"); + printMips("li $v0, 1"); printMips("syscall"); } @@ -190,10 +192,43 @@ char* parcours_varExp(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; } -/*-------------------------------------------------------------------------*/ +/*-------------------------------- -----------------------------------------*/ char* parcours_intExp(n_exp *n) { @@ -211,8 +246,8 @@ char* parcours_lireExp(n_exp *n) printMips("li $v0 5"); printMips("syscall"); int iRegistre = newReg(); - char tmp[250]; - sprintf(tmp, "move $t%d $a0", iRegistre); + char *tmp = malloc (sizeof (char) * 256); + sprintf(tmp, "move $t%d, $v0", iRegistre); printMips(tmp); sprintf(tmp, "$t%d",iRegistre); return tmp; @@ -316,7 +351,6 @@ void parcours_varDec(n_dec *n) } /*-------------------------------------------------------------------------*/ - void parcours_tabDec(n_dec *n) { char texte[100]; // Max. 100 chars nom tab + taille @@ -367,7 +401,7 @@ char* parcours_var_simple(n_var *n) affiche_dico(); exit(1); } - ///TODOOOOOOOOOOO + char *tmp = malloc (sizeof (char) * 256); sprintf(tmp,"$%s",n->nom); return tmp; @@ -391,3 +425,4 @@ char* parcours_var_indicee(n_var *n) return n->nom; } /*-------------------------------------------------------------------------*/ + \ No newline at end of file