Escolar Documentos
Profissional Documentos
Cultura Documentos
Exercices
A.Pr-requis du TD 0.....................................................................................7
B.Exercice 1.................................................................................................7
C.Exercice 2.................................................................................................9
D.Exercice 3...............................................................................................10
E.Exercice 4...............................................................................................10
F.Exercice 5................................................................................................10
A.Exercice 1...............................................................................................13
B.Exercice 2...............................................................................................14
C.Exercice 3...............................................................................................14
D.Exercice 4...............................................................................................15
E.Exercice 5...............................................................................................15
B.Exercice 2 : Grammaire............................................................................17
3
TD 0 - Introduction la programmation assembleur
A.Pr-requis du TD4....................................................................................23
B.Exercice 1...............................................................................................23
A.Pr-requis du TD 5 ..................................................................................27
B.Exercice 1...............................................................................................27
C.Exercice 2...............................................................................................28
A.Pr-requis du TD 6 ..................................................................................29
B.Exercice 1...............................................................................................29
C.Exercice 2...............................................................................................30
A.Pr-requis du TD 7...................................................................................31
B.Exercice 1...............................................................................................31
C.Exercice 2...............................................................................................32
IX - TD 8 - Gnration de code 35
A.Pr-requis du TD 8 ..................................................................................35
B.Exercice 1...............................................................................................35
C.Exercice 2...............................................................................................36
D.Exercice 3...............................................................................................36
A.Pr-requis du TD 9...................................................................................39
B.Exercice 1...............................................................................................39
C.Exercice 2...............................................................................................40
4
TD 0 -
I-
I
Introduction la
programmation
assembleur
Pr-requis du TD 0 7
Exercice 1 7
Exercice 2 9
Exercice 3 10
Exercice 4 10
Exercice 5 10
A.Pr-requis du TD 0
B.Exercice 1
Traduire le programme assembleur ci-dessous en langage C.
Question
[Solution n1 p 37]
5
TD 0 - Introduction la programmation assembleur
6
TD 0 - Introduction la programmation assembleur
C.Exercice 2
Gnrer le code assembleur du programme C ci-dessous.
Question
[Solution n2 p 39]
7
TD 0 - Introduction la programmation assembleur
D.Exercice 3
Gnrer le code assembleur du programme C ci-dessous.
Question
[Solution n3 p 40]
E.Exercice 4
Gnrer le code assembleur du code C ci-dessous. On supposera que le tableau est
rang e, lignes.
Question
[Solution n4 p 40]
F.Exercice 5
Dans la dclaration suivante, dterminez la formule donnant l'adresse de la case
mmoire rfrence par l'expression: tab[i][j][k].
Question
[Solution n5 p 41]
8
TD1 - Analyse
II -
II
lexicale
Exercice 1 13
Exercice 2 14
Exercice 3 14
Exercice 4 15
Exercice 5 15
A.Exercice 1
Trouver un automate reconnaissant :
Question 1
[Solution n6 p 42]
Le langage ; o L est le langage des mots ayant une seule occurrence de
Question 2
[Solution n7 p 42]
L'ensemble de nombres entiers (signs ou non) sur l'alphabet .
Question 3
[Solution n8 p 42]
L'ensemble de nombres rationnels (signs ou non) sur l'alphabet
.
Les langages suivants sont-ils reconnaissables ?
Question 4
[Solution n9 p 42]
= l'ensemble des mots sur terminant par .
i.e. .
Question 5
[Solution n10 p 43]
l'ensemble des mots sur qui sont des reprsentations binaires des
entiers naturels multiples de 3.
Un automate est complet si pour chaque tat de , et chaque lettre de , il
existe une flche de la forme , o est un tat de l'automate.
Question 6
[Solution n11 p 43]
9
TD1 - Analyse lexicale
B.Exercice 2
Les langages suivants sont-ils rguliers ?
Question 1
[Solution n12 p 44]
Le langage ; o est le langage des mots ayant une seule occurrence de
Question 2
[Solution n13 p 44]
L'ensemble de nombres entiers (signs ou non) sur l'alphabet
.
Question 3
[Solution n14 p 44]
L'ensemble de nombres rationnels (signs ou non) sur l'alphabet
.
Question 4
[Solution n15 p 44]
l'ensemble des mots sur terminant par .
i.e. .
Question 5
[Solution n16 p 44]
1.10)
C.Exercice 3
Dterminiser les automates suivants
Question 1
[Solution n17 p 44]
Question 2
[Solution n18 p 44]
10
TD1 - Analyse lexicale
D.Exercice 4
Si et sont deux langages rguliers:
Question 1
[Solution n19 p 45]
Calculer l'automate qui reconnat . En dduire l'automate
reconnaissant: .
Question 2
[Solution n20 p 46]
Calculer l'automate qui reconnait . En dduire l'automate
reconnaissant: .
Question 3
[Solution n21 p 46]
En dduire que et sont rguliers.
E.Exercice 5
Question
[Solution n22 p 46]
Trouver un scanner non dterministe qui associe chaque mot de , de
longueur , le mot si est pair, le mot sinon.
11
TD 2 - Analyse
III -
III
syntaxique
Question 1
[Solution n23 p 47]
Construire les ensembles PREMIER et SUIVANT pour cette grammaire.
Question 2
[Solution n24 p 47]
tablir la table d'analyse et montrer que cette grammaire n'est pas LL(1)
B.Exercice 2 : Grammaire
Soit la grammaire d'expressions arithmtiques dfinie par les productions suivantes
:
Question 1
[Solution n25 p 47]
Les terminaux de la grammaire sont :
13
TD 2 - Analyse syntaxique
Question 2
[Solution n26 p 48]
Cette grammaire est-t-elle rcursive gauche ? Si oui, transformez-la en
grammaire rcursive droite.
Question 3
[Solution n27 p 48]
On cherche maintenant crire un analyseur syntaxique descendant pour cette
grammaire. Quelle grammaire utiliser ?
Question 4
[Solution n28 p 48]
Simuler l'analyse de l'expression par un analyseur de type
descendant.
Question 1
[Solution n29 p 50]
Cette grammaire est-elle LL(1) ?
Question 2
[Solution n30 p 50]
Comment lve-t-on gnralement l'ambigut rencontre ?
Question 3
[Solution n31 p 51]
Analyser l'instruction suivante en utilisant le choix de la question prcdente :
14
TD 2 - Analyse syntaxique
Question 1
[Solution n32 p 51]
Cette grammaire est-elle LR(0) ?
Question 2
[Solution n33 p 51]
Cette grammaire est-elle SLR(1) ?
Question 3
[Solution n34 p 52]
S'il existe des conflits quelle convention utiliser pour les supprimer ?
Question
[Solution n35 p 52]
Montrer que cette grammaire est LALR(1) mais pas SLR(1).
15
TD3 - Analyse
IV -
IV
smantique
Question 1
[Solution n36 p 53]
Programmez cette grammaire avec lex & yacc.
Question 2
[Solution n37 p 54]
Ajouter des actions smantiques la grammaire yacc pour calculer la valeur d'une
expression arithmtique crite avec la grammaire prcdente.
17
TD3 - Analyse smantique
Question 1
[Solution n38 p 55]
Proposer une grammaire AntLR pour reprsenter cette grammaire.
Question 2
[Solution n39 p 55]
Ajouter des actions smantiques en Java la grammaire AntLR pour calculer la
valeur d'une expression arithmtique crite avec la grammaire prcdente.
Question 3
[Solution n40 p 56]
Donner un programme Java permettant de lire un fichier contenant une expression
arithmtique et utilisant le lexer et le parser crs partir de la grammaire AntLR.
18
TD 4 - Actions
V-
V
smantiques et
Yacc (table Aes
symboles simple)
Pr-requis du TD4 23
Exercice 1 23
Exercice 2 : Utilisation de Yacc 24
Exercice 3 : Utilisation de Yacc (suite) 24
A.Pr-requis du TD4
B.Exercice 1
Afin de construire une calculatrice grant les affectations de variables, on utilise la
grammaire suivante :
Question 1
[Solution n41 p 56]
Donner une interface simple de programmation d'une table de symboles adapte
notre calculatrice.
Question 2
[Solution n42 p 57]
Dans le cas d'une traduction dirige par la syntaxe S-attribue, dterminer les
19
TD 4 - Actions smantiques et Yacc (table Aes symboles simple)
Question 3
Soit le texte . Dessiner l'arbre de drivation correspondant en
mentionnant les valeurs des attributs pour chaque symbole syntaxique (terminal et
non terminal).
Question 1
[Solution n43 p 57]
Cette grammaire est-elle ambige ? Si oui, donner un exemple d'entre crant un
conflit .
Question 2
[Solution n44 p 57]
Ces conflits peuvent tre rsolus en exploitant l'associativit et les priorits usuelles
des oprateurs , , et .
L'oprateur unaire possde la plus haute priorit.
crire un analyseur lexical (avec ) et un analyseur syntaxique (avec ) pour
cette calculatrice aprs avoir lever l'ambigut de la grammaire.
Question
[Solution n45 p 59]
Modifier en consquence les spcifications et de la question prcdente.
On utilisera un tableau de type pour stocker les valeurs des variables.
20
TD 5 - Actions
VI -
VI
smantiques et
Yacc (Gestion des
types)
Pr-requis du TD 5 27
Exercice 1 27
Exercice 2 28
A.Pr-requis du TD 5
B.Exercice 1
On reprend la grammaire de calculatrice suivante:
Question 1
[Solution n46 p 60]
A-t-on besoin d'une table de symboles ? Si oui, proposez plusieurs types
d'implmentations possibles. Quelle structure de donnes est la plus utilise ?
Question 2
[Solution n47 p 61]
21
TD 5 - Actions smantiques et Yacc (Gestion des types)
Question 3
[Solution n48 p 62]
crire des spcifications et utilisant la table de symboles implmente
dans la question prcdente.
C.Exercice 2
Le but de cet exercice est d'analyser des dclarations de fonctions du type
.
On utilise pour cela la grammaire suivante:
Question 1
[Solution n49 p 66]
A l'aide de et , crivez un parseur analysant ces dclarations et affichant
pour chaque dclaration un rsum du type:
Question 2
[Solution n50 p 69]
Dans l'ventualit de dclarations multiples d'une fonction, on dsire vrifier la
cohrence des dclarations, et afficher au besoin des messages d'erreur. Modifiez
votre parseur en consquence.
22
TD 6 - Tables de
VII -
VII
symboles et
types.
Pr-requis du TD 6 29
Exercice 1 29
Exercice 2 30
A.Pr-requis du TD 6
B.Exercice 1
Dclarations de variables
On souhaite crire un compilateur pour un langage comportant des dclarations de
variables locales une procdure, du type:
Question 1
[Solution n51 p 75]
Proposez une interface adapte pour la table des symboles.
23
TD 6 - Tables de symboles et types.
Question 2
[Solution n52 p 75]
Proposez des actions smantiques (en syntaxe ) pour chaque production de la
grammaire.
C.Exercice 2
Dclarations de variables (suite)
On reprend la grammaire de l'exercice prcdent.
On souhaite maintenant traiter galement des dclarations internes un bloc (et
dont la porte se limite ce bloc), avec des blocs ventuellement imbriqus,
comme dans l'exemple suivant:
{ int c;
int a; /* re-dclaration licite de 'a' */
...
}
...
}
On tend la grammaire de l'exercice prcdent en ajoutant la rgle:
Question 1
[Solution n53 p 76]
Peut-on encore utiliser une table de symboles unique ?
Proposez un mcanisme permettant de grer les dclarations internes chaque
bloc et crivez les actions smantiques de la grammaire.
Question 2
[Solution n54 p 77]
On dsire afficher un message d'avertissement lorsqu'une variable dclare dans un
bloc en masque une autre dclare dans un bloc englobant. Modifiez les actions
smantiques en consquence.
24
TD 7 - Gnration
VIII -
VIII
de code
Pr-requis du TD 7 31
Exercice 1 31
Exercice 2 32
A.Pr-requis du TD 7
B.Exercice 1
Un compilateur pour calculatrice
On reprend la grammaire des expressions arithmtiques vue prcdemment :
Au lieu de calculer les expressions lors de l'analyse syntaxique, on dsire cette fois
gnrer du code assembleur pour architecture i386.
Ce code devra calculer chaque expression et en afficher la valeur en appelant la
fonction de la librairie C.
Question 1
[Solution n55 p 78]
Proposez une structure de donnes simple permettant de reprsenter et manipuler
un programme assembleur.
Question 2
[Solution n56 p 78]
Notre code assembleur doit pouvoir lire et affecter des variables.
25
TD 7 - Gnration de code
Question 3
[Solution n57 p 78]
On dcide dans un premier temps de gnrer un code exploitant essentiellement la
pile d'excution du processeur i386, en adoptant les conventions suivantes:
Les oprandes d'une expression sont toujours prsentes sur la pile
(l'oprande la plus droite sur le sommet de la pile).
Le rsultat d'une expression est systmatiquement empil.
crire une spcification correspondante. A cet effet, nous supposons que
chaque symbole syntaxique non terminal a un attribut qui contient le code
gnr.
Question 4
[Solution n58 p 82]
On modifie lgrement nos conventions de gnration de code en exploitant
davantage les registres du processeur:
Les oprandes d'une expression sont places dans les registres %eax et
%ecx.
Le rsultat d'une expression est systmatiquement plac dans le registre
%eax.
Modifiez en consquence votre spcification yacc.
Question 5
[Solution n59 p 85]
Le code assembleur ainsi gnr est-il directement excutable ?
Expliquez comment obtenir un binaire excutable, et compltez ventuellement
votre spcification .
Question 6
[Solution n60 p 86]
Si la fonction utilisait le passage par au lieu du passage par
des chanes de caractres, comment votre programme serait-il modifi ? on
suppose dans ce cas que les chanes de caractres ont une taille fixe de 128 octets.
C.Exercice 2
Appels de fonctions
On souhaite maintenant utiliser dans la calculatrice de l'exercice prcdent des
fonctions externes (comme par exemple , de la librairie C). Ces fonctions
devront avoir un prototype C de la forme:
Question 1
[Solution n61 p 86]
En utilisant les conventions de gnration de code de la question 1.3, crire les
actions smantiques correspondant aux appels de fonction.
26
TD 7 - Gnration de code
Question 2
[Solution n62 p 88]
Mme question en adoptant les conventions de la question 4.
27
TD 8 - Gnration
IX -
IX
de code
Pr-requis du TD 8 35
Exercice 1 35
Exercice 2 36
Exercice 3 36
A.Pr-requis du TD 8
B.Exercice 1
On souhaite gnrer du code pour valuer des expressions sur une machine
registres (pas d'opration mmoire-registre). On considre l'expression suivante :
Question 1
[Solution n63 p 89]
Dessinez l'arbre abstrait de cette expression et calculez le nombre de registres
ncessaires pour valuer cette expression (on utilisera l'algorithme de Sethi et
Ullman vu en cours). On supposera que toutes les variables sont initialement
places en mmoire.
On suppose dans la suite que notre machine ne dispose que de deux registres.
Question 2
[Solution n64 p 92]
Calculer le nombre minimal d'oprations de spill ncessaires pour valuer
l'expression.
Question 3
[Solution n65 p 94]
On souhaite ne pas gnrer de code pour une expression dont les deux oprandes
sont des constantes, i.e., c'est le compilateur lui mme qui doit calculer les sous-
expressions constantes. Proposez une mthode permettant d'implmenter une telle
optimisation dans un compilateur.
29
TD 8 - Gnration de code
C.Exercice 2
Reprenons la grammaire de la mini-calculatrice :
Question 1
[Solution n66 p 97]
On considre dans un premier temps que l'on dispose :
D'une fonction qui fournit un nouveau nom de variable temporaire
non utilis.
D'un attribut pour chaque symbole syntaxique non terminal.
D'un attribut pour chaque symbole syntaxique non terminal qui
contient le nom de la variable stockant le rsultat.
Proposez des actions smantiques pour les rgles de la grammaire qui gnrent du
code trois adresses.
Question 2
[Solution n67 p 98]
Dessinez l'arbre de drivation et donnez le code gnr pour l'entre suivante :
.
D.Exercice 3
Afin de traiter les boucles, on ajoute la grammaire de la calculatrice la production
suivante :
Question 1
[Solution n68 p 98]
Dfinir un modle de traduction de la structure de contrle for l'aide des
30
TD 8 - Gnration de code
Question 2
[Solution n69 p 99]
Proposer une traduction dirige par la syntaxe pour appliquer ce modle de
traduction et gnrer le code. On dispose:
D'un attribut pour chaque symbole syntaxique non terminal.
D'un attribut pour E qui contient le nom de la variable stockant le
rsultat.
D'une fonction qui fournit une nouvelle tiquette non utilise.
Question 3
[Solution n70 p 99]
Dessiner l'arbre de drivation et donner le code gnr pour :
31
TD 9 - Gnration
X-
X
de code et
optimisation.
Pr-requis du TD 9 39
Exercice 1 39
Exercice 2 40
A.Pr-requis du TD 9
B.Exercice 1
La grammaire de la mini-calculatrice est prsent tendue pour permettre
l'utilisation de conditionnelles:
33
TD 9 - Gnration de code et optimisation.
Question 1
[Solution n71 p 100]
Proposer une traduction dirige par la syntaxe qui gnre le code des productions
du type . On ne soucie donc pas pour l'instant de la gnration de .
Question 2
[Solution n72 p 101]
Considrons dans cette question la sous-grammaire associe au productions des
expressions boolennes . Proposer une traduction dirige par la syntaxe
(par ncessairement S-attribue) qui gnre du code pour les expressions
boolennes. On souhaite que l'valuation des expressions boolennes soit
optimise, c'est--dire que l'valuation d'une expression ( resp.
) s'arrte si est valu faux ( resp. vrai ). A cet effet, reportez-
vous au modle de traduction dit "par branchements" tel vu au cours.
Question 3
[Solution n73 p 103]
La traduction automatique de en code trois adresses produit la paire
d'instructions:
et faire en sorte que l'excution suive son cours si l'ingalit est vraie. En d'autres
termes, nous ne gnrons pas deux branchements, l'un vers une tiquette et
l'autre vers une tiquette , mais uniquement un seul branchement vers l'une
des deux tiquettes. Modifier en consquence la traduction dirige par la syntaxe
de la question prcdente.
C.Exercice 2
On tudie dans cet exercice quelques optimisations sur du code trois adresses
dcoup en blocs de base. On considre le petit programme suivant en syntaxe
mini-calculatrice:
Question 1
[Solution n74 p 104]
Traduire le programme en code trois adresses.
Question 2
[Solution n75 p 105]
Dcouper ce code trois adresses en blocs de base.
34
TD 9 - Gnration de code et optimisation.
Question 3
Reprsenter le graphe de flot de contrle ainsi obtenu.
Question 4
[Solution n76 p 105]
Effectuer la main une limination de sous-expressions communes sur chacun des
blocs.
Question 5
[Solution n77 p 105]
Effectuer une limination de code mort sur chacun des blocs.
35
Solution des
exercices
rdactionnels
37
TD 9 - Gnration de code et optimisation.
38
TD 9 - Gnration de code et optimisation.
Programme C source
39
TD 9 - Gnration de code et optimisation.
40
TD 9 - Gnration de code et optimisation.
41
TD 9 - Gnration de code et optimisation.
42
TD 9 - Gnration de code et optimisation.
RQ: Cet automate reconnat galement le mot vide. Pour l'carter, il suffit de
considrer l'automate suivant:
43
TD 9 - Gnration de code et optimisation.
44
TD 9 - Gnration de code et optimisation.
.
Les automates et reconnaissant et sont respectivement:
est:
45
TD 9 - Gnration de code et optimisation.
46
TD 9 - Gnration de code et optimisation.
Cette grammaire n'est pas LL(1) puisque la table d'analyse possde une cellule
contenant plus d'une rgle.
47
TD 9 - Gnration de code et optimisation.
Pour 3 ;2/3*(1-3)
48
TD 9 - Gnration de code et optimisation.
Table d'analyse :
Analyse de
49
TD 9 - Gnration de code et optimisation.
Table d'analyse :
50
TD 9 - Gnration de code et optimisation.
et non comme :
Analyse :
L'tat I10 prsente un conflit dcaler - rduire ; la grammaire n'est pas LR(0).
51
TD 9 - Gnration de code et optimisation.
52
TD 9 - Gnration de code et optimisation.
et
L'tat I4 prsente un conflit dcaler-rduire :
=I9 indique un dcalage vers I9 pour c.
A d . indique une rduction par la rgle A d pour chaque suivant de A et en
particulier c.
De mme l'tat I8 prsente le mme type de conflit.
La grammaire n'est pas SLR(1).
fichier yacc.y
53
TD 9 - Gnration de code et optimisation.
fichier yacc.y
54
TD 9 - Gnration de code et optimisation.
55
TD 9 - Gnration de code et optimisation.
56
TD 9 - Gnration de code et optimisation.
57
TD 9 - Gnration de code et optimisation.
58
TD 9 - Gnration de code et optimisation.
59
TD 9 - Gnration de code et optimisation.
60
TD 9 - Gnration de code et optimisation.
61
TD 9 - Gnration de code et optimisation.
exo1.l
62
TD 9 - Gnration de code et optimisation.
63
TD 9 - Gnration de code et optimisation.
64
TD 9 - Gnration de code et optimisation.
65
TD 9 - Gnration de code et optimisation.
exo2_1.l
66
TD 9 - Gnration de code et optimisation.
exo2_1.y
67
TD 9 - Gnration de code et optimisation.
68
TD 9 - Gnration de code et optimisation.
69
TD 9 - Gnration de code et optimisation.
70
TD 9 - Gnration de code et optimisation.
71
TD 9 - Gnration de code et optimisation.
72
TD 9 - Gnration de code et optimisation.
73
TD 9 - Gnration de code et optimisation.
74
TD 9 - Gnration de code et optimisation.
75
TD 9 - Gnration de code et optimisation.
76
TD 9 - Gnration de code et optimisation.
Les autres actions smantiques sont identiques celles de l'exercice prcdent sauf
que l'on utilise la table courante top().
77
TD 9 - Gnration de code et optimisation.
Or, cela tombe bien, car une analyse LR avec yacc parcourt l'expression (la
grammaire) dans cette ordre post-fix. Ceci ne serait pas aussi ais avec une
analyse LL (descendante).
Hypothses
On suppose que chaque non-terminal a un attribut, que nous appelons "code", qui
est une liste linaire chane. Cette liste contient le code que l'on gnre au fur et
mesure (des chanes de caractres). Ainsi, j'utilise une notation oriente objet
comme ceci :
: insrer le texte assembleur "add x,y,z" dans la liste
(code).
: initialise la chane vide.
: initialisation avec une chane donne en paramtre.
On suppose que les fonctions insert et init admettent un nombre quelconque de
paramtres. De plus, nous supposons que le token "ident" contient un attribut
"nom". Pour simplifier notre exercice, nous supposons que les variables sont
78
TD 9 - Gnration de code et optimisation.
alloues en mmoire. Ainsi, on peut y accder par leur nom (tiquette) en code
assembleur. Si ces variables taient alloues sur la pile, il faudrait accder la
table des symboles pour extraire le dplacement (offset) de la variable par rapport
la base de la pile %ebp. Mais, supposons que les variables sont en mmoire pour
simplifier !
Nous supposons galement que le token "const" a un attribut numrique appel
"valeur".
On suppose que l'on a dclar dans yacc une chane de caractre temporaire
"temp" utilise par les actions smantiques pour gnrer une instruction temporaire
courante.
Dans ce qui suit, le symbole d'affectation := est remplac par le token "affect".
79
TD 9 - Gnration de code et optimisation.
80
TD 9 - Gnration de code et optimisation.
81
TD 9 - Gnration de code et optimisation.
Par convention :
on stocke les rsultats des nuds intermdiaires dans le registre %eax.
Ainsi, le rsultat de l'addition ci-dessous est mis dans %eax.
on gnre le code de B, le fils droit. Le rsultat est dans %eax par
convention, puis on l'empile.
on gnre le code de A, le fils gauche. Le rsultat est dans %eax par
convention. Dpiler dans %ecx pour rcuprer le rsultat de B, effectuer le
calcul et stocker dans %eax.
Le parcours LR suit ce schma l. Il nous reste crire les actions smantiques.
Actions smantiques : le code final est dans la liste S.code
82
TD 9 - Gnration de code et optimisation.
83
TD 9 - Gnration de code et optimisation.
84
TD 9 - Gnration de code et optimisation.
85
TD 9 - Gnration de code et optimisation.
86
TD 9 - Gnration de code et optimisation.
87
TD 9 - Gnration de code et optimisation.
88
TD 9 - Gnration de code et optimisation.
89
TD 9 - Gnration de code et optimisation.
90
TD 9 - Gnration de code et optimisation.
91
TD 9 - Gnration de code et optimisation.
92
TD 9 - Gnration de code et optimisation.
Voici les sous arbres spilles dans l'arbre prcdent en supposant 2 registres
disponibles.
93
TD 9 - Gnration de code et optimisation.
94
TD 9 - Gnration de code et optimisation.
supposons que E1 est une constante (vallant 73) et que E2 ne le soit pas. Ainsi, le
code gnr pour l'arbre ci-dessus est :
<E2.code>
add R <- E2.reg + 73 /* nous ne gnrons pas de code pour E1, il suffit de mettre
sa valeur numrique comme argument. Cette valeur est calcule par le compilateur
*/
Notre mthode pour implmenter une telle solution possde en deux tapes.
1. Une premire passe avec lex&yacc construit l'arbre abstrait (de bas en haut)
et permet de calculer les constantes pendant le parsing comme dans le cas
d'une mini-calculatrice (voir les prcdents TDs). Cette premire passe
calcule galement les tiquettes L vue dans les questions prcdentes.
2. Une deuxime passe applique l'algo de Sethi Ullman sur l'arbre abstrait de
haut en bas.
Passe 1
Les routines smantiques suivantes ne calculent que les valeurs des constantes et
les attributs is_constant. Elle n'incluent pas ( tord) les instructions montrant
comment construire l'arbre abstrait ni comment calculer les tiquettes L (vues dans
les questions prcdentes). La construction de l'arbre et le calcul des tiquettes L
sont laisss aux tudiants !
Les routines smantiques suivantes sont excutes lors du parsing (premire
passe) de l'expression. Je ne dtaille ici que le traitement fait pour valuer les
attributs is_constant et val
95
TD 9 - Gnration de code et optimisation.
Passe 2
Cette passe applique l'algorithme rcursif de Sethi et Ullman, en parcourant l'arbre
de haut en bas (de la racine jusqu'aux feuilles).
96
TD 9 - Gnration de code et optimisation.
97
TD 9 - Gnration de code et optimisation.
98
TD 9 - Gnration de code et optimisation.
On suppose que l'expression E2 de fin de boucle n'est value qu'une seule fois a
l'entre de la boucle. En d'autres termes, on interdit que :
ident le compteur de boucle soit modifi l'intrieur du corps de boucle
la valeur de l'expression E2 dfinissant l'indice maximal d'itrations n'est pas
modifie dans le corps de boucle. Ce n'est pas le cas du langage C par
exemple.
Le code gnrer dans notre cas est le suivant:
99
TD 9 - Gnration de code et optimisation.
Dans le cas d'un if-then-else, I.suiv est l'etiquette de l'instruction juste apres le if-
then-else.
100
TD 9 - Gnration de code et optimisation.
Les rgles smantiques suivantes ne sont gure destines une traduction diriges
par la syntaxe S-attribue (yacc). Ceci, car elles calculent des attributs hrits,
exigeant un parcours de l'arbre syntaxique de haut en bas, et non pas de bas en
haut comme le fait yacc.
101
TD 9 - Gnration de code et optimisation.
102
TD 9 - Gnration de code et optimisation.
103
TD 9 - Gnration de code et optimisation.
On pourrait faire mieux : en effet, si on laisse l'excution du code gnr suivre son
cours, alors l'expression prcdente se rduit en :
exemple : a<b se traduit en
Cette mthode de gnration de code pour une expression logique B nous oblige
dornavant placer le code de la branche vrai juste aprs le code qui value B.
Avec la mthode des branchements standards (voir question prcdente), on avait
deux tiquettes (vrai et faux), on pouvait placer les deux branches d'un if dans
n'importe quel ordre. Or avec la mthode actuelle, la branche vraie doit apparatre
juste aprs B.code.
Les autres rgles smantiques peuvent rester inchanges. Nanmoins, elles
gnrent des tiquettes caduques (tiquettes des branches vrai).
104
TD 9 - Gnration de code et optimisation.
105
TD 9 - Gnration de code et optimisation.
106