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
[Link] := [Link] || gen([Link], :=, [Link]) ; [Link] := [Link] ; [Link] := [Link] := E(1) .place ; [Link] := E(1) .code ; [Link] := newtemp() ; [Link] := E(1) .code || E(2) .code || gen([Link], :=, E(1) .place, +, E(2) .place) ; [Link] := newtemp() ;
E E E
[Link] := E(1) .code || E(2) .code || gen([Link], :=, E(1) .place, *, E(2) .place) ; [Link] := newtemp() ;
E E
[Link] := E(1) .code || gen([Link], :=, -, 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 [Link] aller ` a Lfin Lsinon: [Link] 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 [Link] aller ` a Lfin Lsinon: [Link] 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 [Link] := newLabel [Link] := newLabel [Link] := [Link]|| ` [Link]) ;|| gen(si [Link] = 0 aller a ` S(1) .code || gen(aller [Link]) || (2) gen([Link] :) || S .code || gen([Link] :)
S si E alors S sinon S
si (x <= 7) aller ` a Lsinon [Link] aller ` a Lfin Lsinon: [Link] 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 [Link] := newLabel [Link] := gen([Link] :)|| S(1) .code || [Link] || gen(if [Link] = 0 goto [Link])
Lbegin: S(1) .code [Link] if [Link] = 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
[Link] := new Label [Link] := new Label S tantque S faire E [Link] := gen([Link] :)||[Link] ||gen(if [Link] = 0 goto [Link])||S(1) .code|| gen(goto [Link] :)||gen([Link] :)
Ldebut: [Link] if [Link]= 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 [Link] selon E faire if [Link] = 12 goto Lfin12 cas 12 : S1; [Link] cas 14 : S2; goto Lsortie sinon S3 Lfin12: if [Link] = 14 goto Lfin14 [Link] goto Lsortie Lfin14: [Link] 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 [Link] := new Temp [Link] := new Label [Link] := new Label [Link] :=[Link]|| gen(if E(1) .place = 0 goto [Link])|| gen([Link] := 0) ||gen(goto [Link]) || gen([Link] :)|| [Link] || gen([Link] := E(2) .place)|| gen([Link] :)
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 [Link] if [Link] = 0 goto Lvrai [Link] := 0 goto Lfin Lvrai: [Link] [Link] := [Link] 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 [Link] := newLabel [Link] := newLabel [Link] := [Link] := newLabel [Link] := [Link]||gen([Link] :) ;|| S(1) .code || gen([Link]) || gen([Link] :) || S(2) .code ||gen([Link] :) [Link] := E(1) .code||E(2) .code|| gen(if E(1) .place > E(2) .place goto [Link])) || gen(goto [Link])
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 [Link] [Link] if [Link] > [Link] goto Lalors goto Lsinon Lalors: [Link] goto Lsortie Lsinon: [Link] 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 [Link] := newLabel [Link] := new Label [Link] := [Link] :=new Label [Link] := [Link] :=new Label [Link] := gen([Link] :)||[Link] || gen([Link] :)||[Link]|| gen(goto [Link] :) [Link] := E(1) .code||E(2) .code|| gen(if E(1) .place > E(2) .place goto [Link])) || gen(goto [Link])
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: [Link] [Link] if [Link] > [Link] goto Lvrai goto Lsuivant Lvrai: [Link] 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