Sunteți pe pagina 1din 23

Chapitre VII eration Gen de code

erale Presentation gen Code Intermediaire Traduction classique des expressions de controle Traduction avec court-circuit des expressions de controle eration Gen de code

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

2011-2012

1 / 23

erale Presentation gen

erale Presentation gen

Analyse Gnration de code Intermdiaire


Code Intermdiaire

Gnration de code Cible


Code Cible
Yousra Bendaly Hlaoui (ISITCOM) eration Gen de code 2011-2012 2 / 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.

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

2011-2012

3 / 23

Code Intermediaire

` 3 adresses Code a

` 3 adresses- Specication 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 <, , , =

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

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

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

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)

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

2011-2012

7 / 23

Code Intermediaire

` 3 adresses Production de code a

` 3 adresses Production de code a


` des actions semantiques Pour produire ce code, on insere dans la grammaire du langage en utilise donc une DDS : Exemple 3 : Expressions arithmetiques eration Gen de code pour les expressions arithmetiques denies par la grammaire suivante :
S id = E E E + E |E E | E |(E )|id

` trois adresses en utilisant les La DDS engendre du code a attributs :


1

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

Yousra Bendaly Hlaoui (ISITCOM)

Code Intermediaire

` 3 adresses Production de code a

` 3 adresses Production de code a


Exemple 3 : Expression arithmetique
5

Loperateur || represente la concatenation


Production
S id := E E id E (E ) E E + E

` 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

E.code := E(1) .code || gen(E.place, :=, -, E(1) .place) ;

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

2011-2012

9 / 23

Code Intermediaire

` 3 adresses Production de code a

` 3 adresses Production de code a


Exemple3 : Expression arithmetique a := b+ -c ` 3 adresses : code a (1)t1 := -c (2)t2 := b + t1 (3)a := t2 Si Exemple 4 : Expression de controle Soit le code si (x > 7) alors S1 sinon S2 avec la grammaire S si E alors S 1 sinon S 2. eration Il existe deux techniques de gen de code pour gerer les sauts conditionnels :
1 2

Code classique ` court circuit Code a


eration Gen de code 2011-2012 10 / 23

Yousra Bendaly Hlaoui (ISITCOM)

Code Intermediaire

` 3 adresses Production de code a

` 3 adresses Production de code a


Si Exemple 4 : Expression de controle ere ` le code pour la condition ; le resultat Code classique :on gen dans une variable. Par la suite, on lit de la comparaison est placee le contenu de la variable an deffectuer un saut conditionnel.
ere ` du code calculant lexpression booleenne, E gen puis synthetise ere ` alors du ladresse de la variable contenant le resultat. S gen code qui effectue le saut selon la valeur obtenue par E.

` 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 Production de code a

` 3 adresses Production de code a


Si Exemple 4 : Expression de controle immediatement ` court circuit :la comparaison est utilisee Code a dans linstruction de saut conditionnel. Ce style de code sexecute souvent plus rapidement que le code ` gen erer. classique mais est un peu plus complexe a
es : une etiquette E rec oit deux attributs herit qui indique ou ` brancher si la condition est vrai, et une etiquette qui indique ou ` brancher si la condition est fausse.

` 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 des expressions de controle

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

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 13 / 23

Traduction classique des expressions de controle

Traduction classique de faire...tantque


Production S faire S tantque E ` Regle semantique S.debut := newLabel S.code := gen(S.debut :)|| S(1) .code || E.code || gen(if E.place = 0 goto S.debut)

Lbegin: S(1) .code E.code if E.place = 0 goto Lbegin

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

2011-2012

14 / 23

Traduction classique des expressions de controle

Traduction classique de tantque


Production ` Regle semantique
S.debut := new Label S.apres := new Label S tantque S faire E S.code := gen(S.debut :)||E.code ||gen(if E.place = 0 goto S.apres)||S(1) .code|| gen(goto S.debut :)||gen(S.apres :)

Ldebut: E.code if E.place= 0 goto Lapres S(1) .code goto Ldebut Lapres:

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

2011-2012

15 / 23

Traduction classique des expressions de controle

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

Traduction classique des expressions de controle

Traduction classique des expressions booleennes E1 ET E2


Production ` Regle semantique E.place := new Temp E.Lvrai := new Label E.Ln := new Label C.code :=E.code|| gen(if E(1) .place = 0 goto E.Lvrai)|| gen(E.place := 0) ||gen(goto E.Ln) || gen(E.Ltrue :)|| E2.code || gen(E.place := E(2) .place)|| gen(E.Lend :)

E E et E

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

2011-2012

17 / 23

Traduction classique des expressions de controle

Traduction classique des expressions booleennes :E1 ET E2


Exemple Exemple de code E1 et E2 er e : Code gen E1.code if E1.place = 0 goto Lvrai E.place := 0 goto Lfin Lvrai: E2.code E.place := E2.place Lfin:

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

2011-2012

18 / 23

Traduction avec court-circuit des expressions de controle

Traduction avec court-circuit de Si

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)

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

2011-2012

19 / 23

Traduction avec court-circuit des expressions de controle

Traduction avec court-circuit de Si


Exemple Exemple de code si E1 > E2 alors S1 sinon S2 er e : Code gen E1.code E2.code if E1.place > E2.place goto Lalors goto Lsinon Lalors: S1.code goto Lsortie Lsinon: S2.code Lsortie:
Yousra Bendaly Hlaoui (ISITCOM) eration Gen de code 2011-2012 20 / 23

Traduction avec court-circuit des expressions de controle

Traduction avec court-circuit de tantque

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)

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

2011-2012

21 / 23

Traduction avec court-circuit des expressions de controle

Traduction avec court-circuit de tantque


Exemple Exemple de code Tantque E1 > E2 faire S1 er e : Code gen Lbegin: E1.code E2.code if E1.place > E2.place goto Lvrai goto Lsuivant Lvrai: S1.code goto Ldebut Lsuivant:

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

2011-2012

22 / 23

eration Gen de code cible

eration Gen de code cible


Traduction du code intermediaire en code cible
` ` la machine cible Pose des problemes speciques a

Yousra Bendaly Hlaoui (ISITCOM)

eration Gen de code

2011-2012

23 / 23

S-ar putea să vă placă și