Documente Academic
Documente Profesional
Documente Cultură
erale Presentation gen Code Intermediaire Traduction classique des expressions de controle Traduction avec court-circuit des expressions de controle eration Gen de code
2011-2012
1 / 23
Code Intermediaire
Code Intermediaire
` produire et facile a ` Le langage intermediaire doit etre facile a traduire dans le langage cible Pourquoi passer par un langage intermediaire
Le langage cible depend enorm ement de la machine sur laquelle il va tourner. Utiliser un langage intermediaire permet de porter plus rapidement le compilateur. Il existe de nombreux Loptimisation du code est facilite. algorithmes et methodes doptimisation de code pour les codes intermediaires les plus utilises.
2011-2012
3 / 23
Code Intermediaire
` 3 adresses Code a
Specication x := y op z : op est un operateur binaire ; x := op y : op est un operateur unaire ; x := y ; dans la sequence goto L : L est letiquette dun enonc e ; if x relop y goto L : relop est un operateur de comparaison comme <, , , =
2011-2012
4 / 23
Code Intermediaire
` 3 adresses Code a
` 3 adresses Code a
Exemple 1 `3 Le fragment de code C : a=b*c+b*(b-c)*(-c) devient en code a adresses : (1) (2) (3) (4) t1 t2 t3 t4 := := := := b*c b-c b*t2 -c (5) t5 := t3*t4 (6) t6 := t1+t5 (7) a := t6
en optimisant le nombre de registres on aura : (1) (2) (3) (4) t1 t2 t2 t3 := := := := b*c b-c b*t2 -c (5) t2 := t2*t3 (6) t1 := t1+t2 (7) a := t1
2011-2012
5 / 23
Code Intermediaire
` 3 adresses Code a
` 3 adresses Code a
Exemple 2 Soit le fragment de code C suivant : z=0; do{ x++; if (y<10) { z=z+2*x; h=5; } else h=-5; y+=h; } while (x<=50 && z<=5*y);
Yousra Bendaly Hlaoui (ISITCOM) eration Gen de code 2011-2012 6 / 23
Code Intermediaire
` 3 adresses Code a
` 3 adresses Code a
Exemple 2 Le fragment de code C devient : (1)t1 := 0 (2)z := t1 (3)t2 := x+1 (4)x := t2 (5)t3 := y<10 (6)if t3=vrai goto(8) (7)goto (14) (8)t4 := 2*x (9)t5 := z+t4 (10)z := t5 (11)t6 := 5 (12)h := t6 (23)... (13)goto (16) (14)t7 := -5 (15)h := t7 (16)t8 := y+h (17)y := t8 (18)t9 := x<=50 (19)t10 := 5*y (20)t11 := z<=t10 (21)t12 := t9 et t11 (22)if t12=vrai goto(3)
2011-2012
7 / 23
Code Intermediaire
3 4
a ` ladresse qui contiendra la valeur du place contient le nom lie ` lexecution. symbole a code contient une sequence dinstructions en code intermediaire. Cette sequence est le resultat de la traduction du symbole. ` chaque appel newtemp() engendre un nouveau nom temporaire a ` trois adresses gen() engendre une instruction de code a
eration Gen de code 2011-2012 8 / 23
Code Intermediaire
` Regle semantique
S.code := E.code || gen(id.place, :=, E.place) ; E.place := id.place ; E.code := E.place := E(1) .place ; E.code := E(1) .code ; E.place := newtemp() ; E.code := E(1) .code || E(2) .code || gen(E.place, :=, E(1) .place, +, E(2) .place) ; E.place := newtemp() ;
E E E
E.code := E(1) .code || E(2) .code || gen(E.place, :=, E(1) .place, *, E(2) .place) ; E.place := newtemp() ;
E E
2011-2012
9 / 23
Code Intermediaire
Code Intermediaire
` 3 adresses : Code a t1 := x > 7 si (t1 = 0) aller ` a Lsinon S1.code aller ` a Lfin Lsinon: S2.code Lfin:
Yousra Bendaly Hlaoui (ISITCOM) eration Gen de code 2011-2012 11 / 23
Code Intermediaire
` 3 adresses : Code a si (x <= 7) aller ` a Lsinon S1.code aller ` a Lfin Lsinon: S2.code Lfin:
Yousra Bendaly Hlaoui (ISITCOM) eration Gen de code 2011-2012 12 / 23
Traduction classique de Si
Production ` Regle semantique S.Lsinon := newLabel S.Lsortie := newLabel S.code := E.code|| ` S.Lsinon) ;|| gen(si E.place = 0 aller a ` S(1) .code || gen(aller aS.Lsortie) || (2) gen(S.Lsinon :) || S .code || gen(S.Lsortie :)
S si E alors S sinon S
2011-2012
14 / 23
Ldebut: E.code if E.place= 0 goto Lapres S(1) .code goto Ldebut Lapres:
2011-2012
15 / 23
Traduction de selon...faire
Exemple S selon E faire C C cas num : S ; C|sinon S er e : Exemple de code Code gen E.code selon E faire if E.place = 12 goto Lfin12 cas 12 : S1; S1.code cas 14 : S2; goto Lsortie sinon S3 Lfin12: if E.place = 14 goto Lfin14 S2.code goto Lsortie Lfin14: S3.code Lsortie:
Yousra Bendaly Hlaoui (ISITCOM) eration Gen de code 2011-2012 16 / 23
E E et E
2011-2012
17 / 23
2011-2012
18 / 23
Production
S si B alors S sinon S
BE > E
` Regle semantique S.Lsortie := newLabel B.Lvrai := newLabel B.Lfaux := S.Lsinon := newLabel S.code := B.code||gen(S.Lsinon :) ;|| S(1) .code || gen(gotoS.Lsortie) || gen(S.Lsinon :) || S(2) .code ||gen(S.Lsortie :) B.code := E(1) .code||E(2) .code|| gen(if E(1) .place > E(2) .place goto B.Lvrai)) || gen(goto B.Lfaux)
2011-2012
19 / 23
Production
S tantque B faire S
BE > E
` Regle semantique S.Ldebut := newLabel B.Lvrai := new Label B.Lfaux := S.Lsuivant :=new Label S.Lsuivant := S.Ldebut :=new Label S.code := gen(S.debut :)||B.code || gen(B.Lvrai :)||S.code|| gen(goto S.Ldebut :) B.code := E(1) .code||E(2) .code|| gen(if E(1) .place > E(2) .place goto B.Lvrai)) || gen(goto B.Lfaux)
2011-2012
21 / 23
2011-2012
22 / 23
2011-2012
23 / 23