0% ont trouvé ce document utile (0 vote)
130 vues23 pages

Chapitre 7

Le document décrit la génération de code intermédiaire, notamment le code à trois adresses. Il présente des exemples illustrant la production de code à trois adresses à partir d'expressions arithmétiques et de contrôle, ainsi que les techniques de traduction classique et avec court-circuit des expressions de contrôle.

Transféré par

infcom
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
130 vues23 pages

Chapitre 7

Le document décrit la génération de code intermédiaire, notamment le code à trois adresses. Il présente des exemples illustrant la production de code à trois adresses à partir d'expressions arithmétiques et de contrôle, ainsi que les techniques de traduction classique et avec court-circuit des expressions de contrôle.

Transféré par

infcom
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi