Sunteți pe pagina 1din 11

SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008

IV. Traduction dirigée par la syntaxe :


1. Généralités :

Comme son nom l’indique, la traduction dirigée s’élabore en parallèle avec l’analyse syntaxique et
plus exactement c’est l’analyse syntaxique qui oriente la traduction.

Pour traduire une construction d’un langage de programmation, un compilateur peut avoir besoin de
garder trace de nombreuses informations, par conséquent, on parlera, de manière abstraite, d’attributs
associés à la construction, les valeurs de ces attributs sont calculées par des règles sémantiques
associées aux productions de la grammaire.

Il existe deux notations pour associer des règles sémantiques aux productions : les définitions dirigés
pas la syntaxe et les schémas de traduction

2. Définition Une définition dirigée par la syntaxe utilise une grammaire non contextuelle
pour spécifier la structure syntaxique du texte d'entrée. A chaque symbole de la grammaire,
on associe un ensemble d'attributs et, à chaque production, un ensemble de règles sémantiques
pour calculer la valeur des attributs associés aux symboles apparaissant dans cette production.
La grammaire et l'ensemble des règles sémantiques constituent la définition dirigée par la
syntaxe.

On notera X.l l’attribut d’étiquette l associé au symbole X .


S'il y a plusieurs symboles X dans une production, on les noteraX1,X2,….Xn, et X(0) s'il est en
partie gauche.
3.Structure d’une définition dirigée par la syntaxe :
Dans une DDS chaque production AB de la grammaire possède un ensemble de règles sémantiques
de la forme b :=f(c1,c2….ck) où f est une fonction et/
1- Soit b est un attribut synthétisé de A.
2- Soit b est un attribut hérité d’un des symboles en partie droite de la production.
Et c1,c2….ck sont des attributs de symboles quelconques de la production, dans les deux cas on dit
que b dépend de c1,c2….ck.
Les terminaux devraient ne posséder que des attributs synthétisés, la valeur des attributs des terminaux
est fournie par l’analyseur lexical
Exemple : soit la DDS d’un programme de calculatrice de bureau
Productions Règles sémantiques

L E n Imprimer (e.val)

EE1+T E.val := E1.val + T.val

ET E.val :=T.val

TT*F T.val :=T1.val* F.val

TF T.val := F.val

F( E ) F .val := E.val

Fchiffre F.val := chiffre.vallex

DDS d’une calculatrice de bureau


La règle associée à la production LEn définissant l’axiome L, est un appel de procédure qui imprime
la valeur engendrée par E, cette règle peut être considérée comme définissant un attribut factice du
non-terminal L
3.1 Attributs synthétisés : Un attribut est synthétisé si sa valeur, à un nœud d'un arbre syntaxique, est
déterminée à partir de valeurs d'attributs des fils de ce nœud. Les attributs synthétisés sont utilisés
intensivement en pratique. Une définition dirigée par la syntaxe qui utilise uniquement des attributs
synthétisés est appelée une définition S-attribuée.

Page
44
SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008

Les attributs synthétisés ont la propriété de pouvoir être évalués au cours d'un simple parcours
ascendant de l'arbre syntaxique. Un arbre syntaxique pour une définition S-attribuée peut toujours
être décoré en évaluant les règles sémantiques pour les attributs de chaque nœud du bas vers le haut,
des feuilles vers la racine

Exemple 2(Attributs synthétisés) : soit la définition S-attribuée présenté dans l’exemple 1 :

La figure suivante présente un arbre décoré pour la chaine d’entrée 3*5+4n(n caractère de fin de ligne)
L

E.val=19 n

E.val=15 T.val=4

T.val=15 F.val=4

T.val=3 * F.val=5 chiffre.vallex=4

F.val=3 chiffre.vallex=5

chiffre.vallex=3

Arbre syntaxique décoré pour 3*5+4n

3.2 Attributs hérités

Un attribut est hérité si sa valeur, à un nœud d'un arbre syntaxique, est déterminée à partir de valeurs
d'attributs du père et/ou des frères de ce nœud. Bien qu'il soit toujours possible de réécrire une
définition dirigée par la syntaxe de façon à n'utiliser que des attributs synthétisés, il est souvent plus
naturel d'utiliser des définitions avec attributs hérités.

Exemple 3 ( Attributs hérités) : un exemple d’attribut hérité est la déclaration d’identificateurs typés.
On veut reconnaitre les expressions type x1,x2………………xn avec type un non-terminal
correspondant à int ou real et déclarer les identificateurs du bon type dans la table des symboles par
l’action add( x,type, T) qui ajoute le type de chaque identificateur à son entrée dans la table des
symboles

D T L L.typh := T.typ
Tint T.typ := int
T real T.typ := real
LL1 ,id L1.typh:=L.typh ; add( id.entrée, L.typh)
Lid add (id.entrée, L.typh)
DDS avec l’attribut hérité L.typh
D

T.typ=real L.typh= real

Real L.typh=real , id1

id2

Arbre syntaxique avec un attribut hérité typh à chaque nœud étiqueté L

Page
45
SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008

4. Graphes de dépendances :

Si un attribut b à un nœud d’un arbre syntaxique dépend d’un attribut c, la règle sémantique
définissant b en ce nœud doit être évaluée après la règle sémantique qui définit c.

les interdépendances entre les attributs hérités et synthétisés aux nœuds d’un arbre syntaxique peuvent
être décrites par un graphe orienté appelé graphe de dépendances.
En introduisant un attribut factice b pour toute règle sémantique qui consiste en appel de procédure.
Le graphe a un sommet pour chaque attribut
Il ya un arc du sommet correspondant à c au sommet correspondant à b si l’attribut b dépend de c
Dans le cas des attributs synthétisés les arrêtes sont dirigées des fils vers le père
Dans le cas des attributs hérités on peut avoir une arête du père vers le fils ou d’un frère à un autre.
Plus précisément, le graphe de dépendance pour un arbre syntaxique donné est construit de la façon
suivante :
Pour chaque nœud n de l’arbre syntaxique faire
Pour chaque attribut a du symbole de la grammaire étiquetant n faire
Construire un sommet dans le graphe de dépendance pour a ;
Pour chaque nœud n de l’arbre syntaxique faire
Pour chaque règle sémantique b := f( c1,c2…,ck) associée à la production appliquée en n faire
Pour i :=1 à K faire
Construire un arc du sommet correspondant à ci au sommet correspondant à b ;
Exemple 4 :

Production règle sémantique

E E1 + E2 E.val= E1.val + E2.val

E ●val

E1 ●val + E2 ●val

Les lignes pointillées représentent l’arbre syntaxique et ne font pas partie du graphe de dépendance

Exemple5 :voici le graphe de dépendances pour l’arbre syntaxique de l’exemple 3 :


Chacune des procédures add (id.entrée, L.typh) associées aux
productions définissant L conduit à la création d’un attribut factice

Remarque : si le graphe de dépendance contient un cycle, l'évaluation des attributs est alors impossible

L’évaluation de ces règles sémantiques stocke le type real dans l’entrée de chaque identificateur dans
la table des symboles.

Plusieurs méthodes ont été proposées pour évaluer les règles sémantiques :

Page
46
SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008

Méthodes fondées sur l’arbre syntaxique :-déterminent un ordre d’évaluation à partir d’un tri
topologique du graphe de dépendance construit d’après l’arbre syntaxique, ceci pour chaque texte
d’entrée.

-Echec dans le cas d’un graphe cyclique.

Méthodes fondées sur les règles sémantiques : -au moment de la construction du compilateur, on
analyse les règles sémantiques associées aux productions, soit à la main soit par un outil spécialisé

-pour chaque production, l’ordre d’évaluation des attributs associés est pré calculé et sera utilisé au
moment de l’évaluation.

Méthode à ordre fixe : -choix d’un ordre d’évaluation sans tenir compte des règles sémantiques,
l’ordre d’évaluation est imposé par la méthode d’analyse.

Les deux dernières méthodes ne font pas appel à un graphe de dépendance : efficacité en temps et en mémoire.

5. Evaluation ascendante des définitions S-attribuées

Maintenant nous pouvons commencer à étudier comment implanter des traducteurs à partir de
ces définitions, les attributs synthétisés peuvent être évalués par un analyseur syntaxique ascendant au
fur et à mesure que le texte d’entrée est lu.

Une définition syntaxique est dite S-attribuée si elle ne comporte que des attributs synthétisés.

Un traducteur pour une définition S-attribuée peut souvent être implantée à l’aide d’un constructeur
d’analyseur syntaxique LR.

Un analyseur syntaxique ascendant utilise une pile pour garder de l’information sur les sous arbres qui
ont été reconnus. Nous pouvons ajouter des champs à la pile d’analyse pour stocker les valeurs des
attributs synthétisés.

Page
47
SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008

Les attributs synthétisés de cet arbre peuvent être évalués par un analyseur syntaxique LR au cours de
l’analyse ascendante de la phrase 3*5+4n
Flot d’entrée Etat Val Productions utilisées Fragment de code
3 *5+4

*5+4 3 3

*5+4 F 3 F id

*5+4 T 3 T F

5+4 T* 3

+4 T*5 3–5

+4 T*F 3–5 F id

+4 T 15 TT*F Val[future-sommet]:=val[s-2]*val[s]

+4 E 15 ET

4 E+ 15

N E+4 15 – 4

N E+F 15 – 4 F id

N E+ T 15 – 4 TF

Page
48
SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008

N E 19 EE+T Val[future-sommet]:=val[s-2]+val[s]

6. Evaluation L-attribuées :

Nous présentons maintenant une classe de définitions dirigées par la syntaxe, appelées L-attribuées,
dont les attributs peuvent toujours être évalués en profondeur ( L est l’abréviation de Left car
l’information véhiculée par les attributs semble se propager de gauche à droite)

Définitions L-attribuées :

Une DDS est L-attribuée si tout attribut hérité de Xj, 1<= j<=n, de la partie droite de la production
AX1X2………..Xn, ne dépend que :

1-des attributs des symboles X1,X2….,Xj-1 situés à gauche de Xj dans la production et

2-des attributs hérités de A.

Notons que toute définition S-attribuée est L-attribuée car les restrictions 1 et 2 ci-dessus ne
concernent que les attributs hérités.

Exemple :

La DDS de la figure suivante n’est pas L-attribuées :

Productions règles sémantiques Productions règles sémantiques

A LM L.h := l(A.h) AQR R.h:=r(A.h)

M.h := m(L.s) Q.h :=q(R.s)

A.s :=f(M.s) A.s := f(Q.s)

Page
49
SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008

Page
50
SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008

Page
51
SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008

7. Schéma de traduction

Un schéma de traduction est une grammaire non contextuelle dans laquelle des attributs sont
associées aux symboles de la grammaire, et des actions sémantiques, délimitées par des
accolades {}, sont insérées dans les parties droites des productions.

Exemple :

S'  {nba :=0} S


S  a { nba ++} S
Dans un STDS si on a :
S  αX { une action } Y β
L’action est exécutée après que le sous_arbre syntaxique issu de X aura été parcouru (par un
parcours en profondeur) et avant que celui issu d Y ne le soit.
Quand on conçoit un schéma de traduction, il faut respecter un certain nombre de restrictions
qui assurent que la valeur d’un attribut est bien disponible quand un action s’y réfère .
Le cas le plus simple se produit quand on ne manipule que les attributs synthétisés. Dans ce
cas on peut construire le schéma de traduction en créant une action formée d’une affectation
par règle sémantique et en plaçant cette action à la fin de la partie droite de la production :
Exemple :
T T1 * F { T.val := T1.val x F.val}
Si l’on a à la fois des attributs hérités et des attributs synthétisés, il faut être plus prudent :
1- Un attribut hérité d’un symbole en partie droite d’une production doit être calculé dans
une action situé avant ce symbole.
2- Une action ne doit pas faire référence à un attribut synthétisé d’un symbole situé à
droite de l’action.
3- Un attribut synthétisé du non-terminal en partie gauche ne peut être calculé qu’après
que tous les attributs dont il dépend ont été calculés. L’action calculant de tels attributs
peut en général être placé à la fin de la production.

Le schéma de traduction suivant, ne remplit pas la première condition :

Page
52
SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008

S A1A2 { A1.h :=1 ; A2.h := 2}


A a { Imprimer ( A.h)},
En effet, nous pouvons constater que l’attribut hérité A.h de la seconde production n’est
pas défini quand on tente d’imprimer sa valeur au cours d’un parcours en profondeur de
l’arbre syntaxique de la chaine aa .( pourquoi ?)
Si l’action définissant les valeurs de A1.h et A2.h est intercalées avant les A dans la
partie droite de S AA, plutôt qu’après , alors A.h aura bien une valeur chaque fois
Imprimer( A.h) sera exécuté

8. Traduction dissociée de l’analyse syntaxique :


La traduction dirigée par la syntaxe peut se fonder sur des arbres abstraits aussi bien que des arbres
syntaxiques, dans les deux cas on attache des attributs aux nœuds de l’arbre.
Utiliser des arbres abstraits comme représentation intermédiaire permet de dissocier la traduction
de l’analyse syntaxique.
Arbre abstrait : un arbre abstrait est une forme condensée d’arbre syntaxique adaptée à la
représentation des constructions d’un langage .
La production : I si B alors I1 sinon I2peut apparaitre dans un arbre abstrait sous la forme
Exemple : + Si-alors-sinon

* 4 B L1 L2

3 5

Dans un arbre abstrait, les opérateurs et les mots clés n’apparaissent pas comme des feuilles , mais
plutôt associés au nœud intérieur qui serait le père de ces feuilles dans l’arbre syntaxique.
La traduction dirigée par la syntaxe peut se fonder sur des arbres abstraits de la meme façon que sur
des arbres syntaxique.
Construction d’arbres abstraits pour les expressions :
La construction d’un arbre abstrait pour une expression est semblable à la traduction de
l’expression en forme post fixée. on construit des sous arbres pour les sous expressions en créant un
nœud pour chaque opérateur et chaque opérande. Les fils d’un nœud opérateur sont les racines des
sous arbres représentant les sous expressions constituant les opérandes de cet opérateur.
Chaque nœud d’un arbre peut être implanté sous forme d’une structure à plusieurs champs. Dans le
nœud correspondant à un opérateur , un champ identifie l’opérateur, les autres contiennent des
pointeurs vers les nœuds correspondant aux opérandes.les nœuds peuvent avoir des champs
supplémentaires pour stocker les valeurs ou des pointeurs vers les valeurs des attributs qui leur sont attachés.
On utilisera les fonctions suivantes pour créer les nœuds des arbres abstraits pour des expressions
avec des opérateurs binaires :
1.CréerNoeud(op,gauche,droite) :crée un nœud opérateur d’étiquette op avec deux champs
contenant des pointeurs vers gauche et droit.
2. CréerFeuille(id, entrée) : crée un nœud identificateur d’étiquette id avec un champ contenant
entrée, un pointeur vers l’entrée de id dans la table des symboles
3. CréerFeuille(nb,val) : crée un nœud nombre avec un champ contenant val , la valeur du nombre.
Exemple :la séquence d’appels de fonctions ci-dessous crée l’arbre abstrait de la figure ci-dessous,
représentatnt l’expression : a-4+c :
1.P1 := créeFeuille(id,a) ; 4. P4 := créeFeuille(id,c) ;

Page
53
SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008

2.p2 := créeFeuille(nb,4) ; 5.p5 := créeNoeud(+,p3,p4) ;


3.p3 := créeNoeud(-,p1,p2) ;
Une définition dirigée par la syntaxe pour construire des arbres abstraits :
La figure ci-dessous contient une définition S-attribuée exprimant la construction d’un arbre abstrait
pour une expression contenant les opérateurs + et -.
Production règle sémantique
EE1+T E.pnoeud := créeNoeud(+,E1.pnoeud,T.pnoeud)
EE1- T E.pnoeud := créeNoeud(-,E1.pnoeud,T.pnoeud)
E T E.pnoeud := T.pnoeud
T(E) T.pnoeud :=E.pnoeud
Tid T.pnoeud := CréerFeuille(id,id.entrée)
Tnb T.pnoeud :=CréerFeuille(nb, nb.val)
Exemple : construire l’arbre abstrait pour l’expression a-4+c

Page
54

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