Documente Academic
Documente Profesional
Documente Cultură
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.
L E n Imprimer (e.val)
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
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
F.val=3 chiffre.vallex=5
chiffre.vallex=3
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
Tint T.typ := int
T real T.typ := real
LL1 ,id L1.typh:=L.typh ; add( id.entrée, L.typh)
Lid add (id.entrée, L.typh)
DDS avec l’attribut hérité L.typh
D
id2
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 :
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
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.
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.
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 TT*F Val[future-sommet]:=val[s-2]*val[s]
+4 E 15 ET
4 E+ 15
N E+4 15 – 4
N E+F 15 – 4 F id
N E+ T 15 – 4 TF
Page
48
SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008
N E 19 EE+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
AX1X2………..Xn, ne dépend que :
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 :
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 :
Page
52
SAOUDI Lalia Traduction dirigée par la syntaxe 2007/2008
* 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
Page
54