Skip to content
Snippets Groups Projects
Commit ca3c3701 authored by BAZIZI Zakaria's avatar BAZIZI Zakaria
Browse files

Merge branch 2024_compilation:main into main

parents 15d87b1c a3c337bc
No related branches found
No related tags found
No related merge requests found
......@@ -34,5 +34,129 @@ public class ColorGraph {
}
}
/*-------------------------------------------------------------------------------------------------------------*/
/* associe une couleur à tous les sommets se trouvant dans la pile */
/*-------------------------------------------------------------------------------------------------------------*/
public void select()
{
int t;
while(!stack.empty()){
t = stack.pop();
removed.remove(t);
if(color[t] == NOCOLOR)
color[t] = chooseAvailableColor(neighborsColor(t));
if(color[t] == NOCOLOR)
System.out.println("cannot find a color for vertex "+ t);
}
}
/*-------------------------------------------------------------------------------------------------------------*/
/* récupère les couleurs des voisins de t */
/*-------------------------------------------------------------------------------------------------------------*/
public IntSet neighborsColor(int t)
{
IntSet colorSet = new IntSet(colorNb);
for(NodeList p = int2Node[t].succ(); p!=null; p=p.tail)
if(color[p.head.label()] != NOCOLOR)
colorSet.add(color[p.head.label()]);
return colorSet;
}
/*-------------------------------------------------------------------------------------------------------------*/
/* recherche une couleur absente de colorSet */
/*-------------------------------------------------------------------------------------------------------------*/
public int chooseAvailableColor(IntSet colorSet)
{
for(int c=0; c < colorSet.getSize(); c++)
if(!colorSet.isMember(c))
return c;
return NOCOLOR;
}
/*-------------------------------------------------------------------------------------------------------------*/
/* calcule le nombre de voisins du sommet t */
/*-------------------------------------------------------------------------------------------------------------*/
public int neighborsNb(int t)
{
int nb = 0;
for(NodeList p = this.int2Node[t].succ(); p!=null; p=p.tail)
if(!removed.isMember(p.head.label()))
nb++;
return nb;
}
/*-------------------------------------------------------------------------------------------------------------*/
/* simplifie le graphe d'interférence g */
/* la simplification consiste à enlever du graphe les temporaires qui ont moins de k voisins */
/* et à les mettre dans une pile */
/* à la fin du processus, le graphe peut ne pas être vide, il s'agit des temporaires qui ont au moins k voisin */
/*-------------------------------------------------------------------------------------------------------------*/
public int simplify()
{
boolean removedAtLeastOneTemp = true;
while(removedAtLeastOneTemp && stack.size() != vertexNb){
removedAtLeastOneTemp = false;
for(int t = 0; t < vertexNb; t++){
if(!removed.isMember(t)){
int n = neighborsNb(t);
// System.out.println("node " + t + " has " + n + " neighbours");
int precolored = (color[t] == NOCOLOR)? 0 : 1;
if(n < (colorNb - precolored)){
stack.push(t);
removed.add(t);
// System.out.println("remove vertex " + t);
removedAtLeastOneTemp = true;
}
}
}
}
return stack.size();
}
/*-------------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------------------*/
public void spill()
{
int t;
while(stack.size() != vertexNb){ /* some nodes have not been pushed */
for(t=0; t < vertexNb; t++){
if(!removed.isMember(t)){ /* t i still in the graph */
System.out.println("vertex " + t + " is a potential spill");
spill.add(t);
removed.add(t);
stack.push(t);
simplify();
}
}
}
}
/*-------------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------------------*/
public void color()
{
this.simplify();
this.spill();
this.select();
}
public void affiche()
{
System.out.println("vertex\tcolor");
for(int i = 0; i < vertexNb; i++){
System.out.println(i + "\t" + color[i]);
}
}
}
......@@ -19,7 +19,7 @@ fibo fbegin #entree fonction
fend
1 fend
main fbegin #entree fonction
param 9
param 3
@7 = call fibo
write @7
fend
......@@ -18,16 +18,16 @@ ERR_LEX_CODE = 6
SC_COEFF = 4
SA_DIFF_COEFF = 0
TS_DIFF_COEFF = 0
SA_COEFF = 3
SA_COEFF = 4
C3A_DIFF_COEFF = 0
C3A_COEFF = 3
C3A_COEFF = 4
PRE_NASM_DIFF = 0
PRE_NASM_COEFF = 3
NASM_DIFF_COEFF = 0
NASM_COEFF = 3
EXE_COEFF = 0
ERR_TS_COEFF = 2
ERR_TYPE_COEFF = 2
ERR_TYPE_COEFF = 0
# Paths relative to this file (evaluate.py)
inputPath = "./input/"
......
......@@ -10,5 +10,5 @@ entier fibo( entier n )
main()
{
ecrire( fibo( 9 ) );
ecrire( fibo( 3 ) );
}
......@@ -72,7 +72,7 @@ main : push ebp ;sauvegarde la valeur de ebp
push ecx ;sauvegarde de ecx
push edx ;sauvegarde de edx
sub esp, 0 ;allocation des variables locales
push 9 ;Param
push 3 ;Param
sub esp, 4 ;allocation mémoire pour la valeur de retour
call fibo
pop eax ;récupération de la valeur de retour
......
55
3
......@@ -72,7 +72,7 @@ main : push ebp ;sauvegarde la valeur de ebp
push ecx ;sauvegarde de ecx
push edx ;sauvegarde de edx
sub esp, 0 ;allocation des variables locales
push 9 ;Param
push 3 ;Param
sub esp, 4 ;allocation mémoire pour la valeur de retour
call fibo
pop @7 ;récupération de la valeur de retour
......
(SaProg null (SaLDecFonc (SaDecFonc fibo entier (SaLDecVar (SaDecVarSimple n entier) null) null (SaInstBloc (SaLInst (SaInstSi (SaExpInf (SaExpVar (SaVarSimple n)) 2) (SaInstBloc (SaLInst (SaInstRetour 1) null)) (SaInstBloc (SaLInst (SaInstRetour (SaExpAdd (SaExpAppel (SaAppel fibo (SaLExp (SaExpSub (SaExpVar (SaVarSimple n)) 1) null))) (SaExpAppel (SaAppel fibo (SaLExp (SaExpSub (SaExpVar (SaVarSimple n)) 2) null))))) null))) null))) (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstEcriture (SaExpAppel (SaAppel fibo (SaLExp 9 null)))) null))) null)))
(SaProg null (SaLDecFonc (SaDecFonc fibo entier (SaLDecVar (SaDecVarSimple n entier) null) null (SaInstBloc (SaLInst (SaInstSi (SaExpInf (SaExpVar (SaVarSimple n)) 2) (SaInstBloc (SaLInst (SaInstRetour 1) null)) (SaInstBloc (SaLInst (SaInstRetour (SaExpAdd (SaExpAppel (SaAppel fibo (SaLExp (SaExpSub (SaExpVar (SaVarSimple n)) 1) null))) (SaExpAppel (SaAppel fibo (SaLExp (SaExpSub (SaExpVar (SaVarSimple n)) 2) null))))) null))) null))) (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstEcriture (SaExpAppel (SaAppel fibo (SaLExp 3 null)))) null))) null)))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment