Chap. 4. Traduction dirigщe par la syntaxe ¡ ¢ бдгже § ¥ ¥ ¢ ей § ¢ § ¡
Transcription
Chap. 4. Traduction dirigщe par la syntaxe ¡ ¢ бдгже § ¥ ¥ ¢ ей § ¢ § ¡
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Chap. 4. Traduction dirigée par la syntaxe
L’analyse syntaxique n’est pas suffisante :
– elle se contente de vérifier que la construction est correcte ;
– nous devons être en mesure de :
réaliser des vérifications sémantiques ;
calculer (ou construire des arbres, générer du code,...) à l’aide
de la grammaire...
12+3*7 :
+
*
12
3
M. K RAJECKI
ou 33
7
1
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Exemple
E.v = 33
E.v = 12
T.v = 12
T.v = 3
F.v = 12
F.v = 3
12
M. K RAJECKI
T.v = 21
+
3
F.v = 7
*
7
2
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
1. Notion d’attributs et d’actions sémantiques
Définition 1 (Attribut) Un attribut est une valeur qui est associée à un
nœud de l’arbre syntaxique.
Remarques :
– Un attribut peut représenter une information (ou avoir un type)
quelconque : une chaîne de caractères, une adresse mémoire...
– Il est possible d’associer autant d’attributs que l’on désire à chaque non
terminal.
– Un nœud de l’arbre syntaxique est nommé à l’aide d’un symbole non
terminal. Chaque nœud nommé par le même non terminal aura les
mêmes attributs.
M. K RAJECKI
3
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Comment définir des relations entre attributs ?
, , M. K RAJECKI
%+-,
,
/021
35456
, la relation est
4
!!##""
()"
()"
, )"
, )"
$ #"%&'()"
$ *#"
$ *#" +., #"
$ , #"
$ !#"
$ “valeur de “35456
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Action sémantique
Définition 2 (Action sémantique) Une action sémantique est
définie par un algorithme qui permet de calculer les attributs d’un
nœud, en fonction des attributs des fils ou du père.
En pratique, les relations entre les attributs nous permettent d’écrire
les actions s’émantiques.
M. K RAJECKI
5
Langages et Compilation
Licence Informatique
Chap. 4 – Traduction dirigée par la syntaxe
Exemple
7 %& 8
9 )"2:;)"<%&'*#"<=
>
9 )"2:7(#"<=
?>@%& +.,
9 (#"A:7(#"'%& +-, #"<=
? ,
9 (#"A: , #"<=
, B/0C1
9 , #"A:;#"<=
, ;354D6
9 , #"A:E354D6F)GIHDJK=
M. K RAJECKI
6
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Attributs synthétisés et hérités
Il existe en réalité 2 types d’attributs :
Les attributs synthétisés : la valeur à un nœud de l’arbre d’un attribut
synthétisé est définie à l’aide des valeurs des attributs des fils de ce
nœud :
LM>L NN)LO 9QP 6R6TSULM:;VU/ P 6T6RSWL YX P 6R6TSULZ X NN X P 6T6RSULO<1[=
Les attributs hérités : la valeur à un nœud de l’arbre d’un attribut hérité est
calculée à l’aide des attributs du père de ce nœud :
L\7L NN#LO 9YP 6T6TSUL2](:;VU/ P 6T6RSWL^1[=
Il est également possible d’avoir besoin des valeurs des attributs des
frères de ce nœud.
M. K RAJECKI
7
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Attributs synthétisés et hérités
Les règles sémantiques impliquent des dépendances entre les attributs. Ces
dépendances peuvent être représentées par un graphe :
– les nœuds sont les attributs ;
– les arcs représentent les dépendances entre les attributs.
Exemple :
M. K RAJECKI
_7 9 #"A:>%&`#"a8*#"b=
ced f
cniojlkmd f ghd f
8
:
ceiNjlkmd f ghd f
ced f
Pour pouvoir calculer
il faut en premier lieu
calculer
et
.
,
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Attributs synthétisés et hérités
Si l’on veut utiliser les deux sortes d’attributs, il peut y avoir des boucles
dans le graphe des dépendances et donc dans le calcul de ces attributs...
Il existe un algorithme qui permet de savoir si une boucle dans le calcul des
attributs apparaît, mais la complexité de cet algorithme est exponentielle en
temps.
En pratique :
– l’utilisation de la table des symboles permet de résoudre la plupart des
problèmes rencontrés ;
– les attributs synthétisés sont très utilisés ;
– les attributs hérités sont utiles pour les déclarations de variables.
M. K RAJECKI
9
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Les déclarations
Héritage :
Utilisation d’une table des symboles :
programme
programme
declaration
intructions
declaration
intructions
i : entier
utilise(i)
i : entier
utilise(i)
TS
i : entier
M. K RAJECKI
10
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
La table des symboles
paSrqQs7tuHQ3FG'v-wa6RxTG
tuHQ3FGEy*z{ P S|v}t~HQ3FG
v}t~HQ3FGxT v.t~H3FG
zx& >SHQHGUzH56Tx&H5S
v-wa6RxTGhEy*zwa6RxTGx&4YHr/%x& |1'vnw|6TxRG
Le travail se décompose alors en deux étapes :
t~HQ3FG .
vnw|6TxRG .
Étape 2 : vérification de type dans la partie
Étape 1 : construire la
M. K RAJECKI
dans la partie
11
Langages et Compilation
Licence Informatique
Chap. 4 – Traduction dirigée par la syntaxe
Construire la table des symboles
paSrqQs >rxl6Tt~HQ3FG'vnwa6RxTG
xR6R|;y
{Initialise la table des symboles}
xR6{@x&H/%
1
doit être une variable globale ($ attribut)}
{
Deuxième solution (modification de la règle de production 3) :
tuHQ3FGu;y
xR6{@xTH/%1
z\{v}t~HQ3FG
{@;{ P S
xR6{@xTH/%1
Première solution (modification de la règle de production 1) :
M. K RAJECKI
12
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Vérification de type
Lors de la vérification de type, il faut s’assurer qu’un identificateur n’est
déclaré qu’une seule fois.
v}t~HQ3FG>xT
v}t~HQ3FG
nqY<6mHDS|n/%x&b)GIH5J X ()6RY'H X 1 }
{
v}t~HQ3FG>xT nqY<6mHDS|n/%x&b)GIH5J X ()6RY'H X 1 /* c’est le dernier */ }
{
>SHQHG
*#6RY'H: “reel”}
{
EHD6Tx&H5S
*#6RY'H: “entier”}
{
v-wa6RxTGEy {/* pas de vérification */}
v-wa6RxTGEw|6TxRGx&4YH/%xT 1
v-wa6RxTG
Y'H5n/0xT<)GIHDJ X 1 $ ()6RY'H Alors erreur}
{Si
M. K RAJECKI
13
Langages et Compilation
Licence Informatique
Chap. 4 – Traduction dirigée par la syntaxe
Une autre grammaire pour la déclaration des variables
tuHQ3FG Ey*z{ P S|v}t~HQ3FG
v}t~HQ3FG>xT /* c’est le premier */
rxl6Tn/0xT<)GIHDJ X (#6TQH X |1 }
{
v}t~HQ3FG7v}t~HQ3FGxT nqY<6mHDS|n/%x&b)GIH5J X ()6RY'H X 1 }
{
Cette solution est plus élégante.
Elle évite d’introduire de nouveaux non terminaux (
M. K RAJECKI
14
xR6R| et {@
).
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
2. Construction des arbres abstraits
La construction d’arbres abstraits permet de séparer l’étape de
traduction (génération de code) de l’analyse syntaxique.
L’ordre de construction de l’arbre syntaxique (pendant l’analyse
syntaxique) peut être différent de l’ordre d’évaluation de l’arbre
abstrait pour générer le code.
Exemple : construction des arbres abstraits pour les expressions...
M. K RAJECKI
15
Langages et Compilation
Licence Informatique
Chap. 4 – Traduction dirigée par la syntaxe
Constructions des arbres abstraits pour les expressions
Chaque nœud de l’arbre abstrait contient un champ pour chaque opérande
de l’opérateur (appelé étiquette) du nœud considéré.
SHQH5S¡¢qHD£'/Iq¤ X s P 35¥'H X SrqYxR61
SHQH5S , H5'xRG%GIHr/%x& X HDK6RSHYHQ1 (H56TSHQH désigne l’entrée de xT dans la table
2. des symboles)
SHQH5S , H5'xRG%GIHr/%h¦ X " P GI1 (" P G représente la valeur de §¦ calculée par
3. Nous définissons les 3 fonctions suivantes :
1.
l’analyseur lexical).
M. K RAJECKI
16
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Exemple
¬< ®
¬· ®
¬º ®
¨¢©ª!«
¯°±±° ±²K³&´R´R± ³µ¶ ¨ ¯°±±° ±²K³&´R´R± R¸¹ ¶ ª ¯°±±°»½¼±²hµ R¾ © ¾ ¶§¬<§¬· −
id
nb
3
vers l’entrée de x dans la TS.
M. K RAJECKI
17
Langages et Compilation
Licence Informatique
Chap. 4 – Traduction dirigée par la syntaxe
Ajout des actions sémantiques
7 %& 8
! P Sr¦[SH: SHQH5S¡¢qHD£'/I¿Àa¿ X Á%&` P Sr¦[SH X * P Sr¦`SHY1 }
{
>
! P Sr¦[SH:* P Sr¦[SH }
{
?>@%& +.,
* P Sr¦`SH: SHQH5S¡¢qHD£</l¿ + ¿ X @%m P Sr¦[SH X , P Sr¦[SHQ1 }
{
? ,
* P Sr¦`SH: , P Sr¦`SH }
{
, >xT
, P Sr¦`SH: SHQH5S , H5<xTG%G0H/%x& X xT<ÂHDK6RSHYH }
{
, ;354D6
, P Sr¦`SH: SHQH5S , H5<xTG%G0H/%§¦ X §¦Y#" P G }
{
M. K RAJECKI
18
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
3. Calcul des attributs dirigé par la syntaxe pour les
grammaires LL(1)
Rappel : pour toutes règles
EÃ rz NN'zQÃWO
:
Procédure A()
Début
Si fe
ÄÃ /R1 paSH5Å~x&H5Sb/IÃ 1 alors
Sinonsi ....
P 6T6TS
à $ÆL NN#L!O L!Ç P 6T6RS
L!Ç si LÇ Ä {ÈÊÉ
Ë 9QP 3¤6 =L 9QP 3¤6&Z=LZoN 9QP 3¤6O<=LO 9QP 3¤6OrÌ =
Soient :
–
les attributs de A ;
–
et
les attributs de
–
M. K RAJECKI
19
;
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Calcul des attributs dirigé par la syntaxe pour les
grammaires LL(1)
C P 6T6RS )
L P 6T6RS X No X LO£ P 6T6RS { pour à },..., { pour ÃUO
paSH5Å~x&H5Sb/IÃ 1 alors
P 3¤Ä 6 L /%L P 6R6TS1 {appel à la fonction L }
P 3¤6Z
Procédure A(
Var
Début
Si fe
}
P 3¤6O
L!O/%LO£ P 6T6TS1 {appel à la fonction LO }
P 3¤6OrÌ ÃWZ
Sinonsi {tester } ....
...
M. K RAJECKI
20
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Calcul des attributs dirigé par la syntaxe pour les
grammaires LL(1)
Attention aux déclarations de variables locales :
ÏÒ·
Í ·@* ÎÎ ÏAÏ ¾§ ÐÑ
ÐÑÏ ·¾
Í
il faut les déclarer qu’une seule fois :
–
–
`Ô ·DÔ
Í *ÎÏADÐÓ ÏÒ·YÐÓ ÏÒº
il faut les déclarer plusieurs fois :
–
– il faut renommer les variables.
M. K RAJECKI
21
Langages et Compilation
Licence Informatique
Chap. 4 – Traduction dirigée par la syntaxe
Éliminiation de la récursivité gauche
Exemple :
7Á%&8
7Á%&§È
>
?;354D6
9 !#"2:;!#"<%<8(#"<=
9 !#"2:;!#"<%È(#"<=
9 !#"2:7()"b=
9 ()"2:E354D6F)GIH5J=
>½L
L?EÕL
zÈeÕL
zy
Après transformation :
Les actions sémantiques ?
M. K RAJECKI
22
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Éliminiation de la récursivité gauche
¥
On définit 2 attributs pour
– un attribut hérité ;
– un attribut synthétisé.
4
L
:
> 9 LÖÂ¥!:>*#"b=eL 9 !#"A:>LÖÂ4=
L?E 9 L %& Â¥!:>LÖÂ¥*#"b=eL %& 9 LÖÂ4(:7L ×4=
zÈe 9 L %& Â¥!:>LÖÂ¥ÁÈ^*#"b=eL %& 9 LÖÂ4(:7L ×4=
zy 9 LÖÂ4:LÖÂ¥£=
?;354D6 9 ()"2:E354D6F)GIH5J=
M. K RAJECKI
23
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Éliminiation de la récursivité gauche
E.v = 8
T.v = 9
cst.lex = 9
X.s = 8
X.h = 9
T.v = 2
X.s = 8
X.h = 9+2 = 11
cst.lex = 2
T.v =3
X.s = 8
X.h = 11 − 3
cst.lex = 3
9
M. K RAJECKI
+
−
2
24
3
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Élimination de la récursivité gauche
De façon générale :
Ø Ø Ó Ú`ÔÙMÚ ØuÛ×Ü m °A®ÞÝ Ø Ó `Ô Û×Ü m °¶ Ù ÛßÜ m ° à
Ø ¯ uØ Û×Ü m °A® ¬ ¯ ÛßÜ ` ° à
Devient :
Ú Ð ÛNá ® ¬ ¯ ÛßÜ ` ° à Ð Ú ØuÛ×Ü m â
à
Ø ¯
Û
®
Ð
Ð Ù Ú Ú Ð Ó `Ô ÛNá ®ãÝ Ð ÛNá ¶ Ù ÛßÜ m ° à ÐÓ ` ÔeÚ Ð Û ® ÐÓ `Ô Û à
åä Ð Û ®âÐ Ûoá à
M. K RAJECKI
25
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
4. Calcul des attributs dirigé par la syntaxe pour les
grammaires LR(1)
Ë>L Næ N#LO
LÇ Ä {çÈÊÉ
On peut calculer les attributs lors des réductions.
il faut récupérer les
attributs des différents
pour
.
Avec les valeurs de ces attributs, on pourra calculer les attributs de .
Les attributs seront stockés sur une nouvelle pile appelée pile des attributs.
èO
è O'é#êëIëlì
è
è #é êëIëlì
...
...
pile syntaxique
M. K RAJECKI
26
pile des attributs
Licence Informatique
Langages et Compilation
Chap. 4 – Traduction dirigée par la syntaxe
Calcul des attributs dirigé par la syntaxe pour les
grammaires LR(1)
í
Procédure Réduction( : numéro de règle)
Var { tous les attributs }
9 Ë7L X NN X LO=
í parmi
paxRGIHYh6 P J<xTîQ£H ) { analyse syntaxique }
Dépiler( ,
S P h45xl6TxTqY./l4qYÅÅHD6D/0p@xRG0HQh6 P JbxTîQHQ1 X a1 )
Empiler(
L!O£ P 6R6TS@: Sommet(paxTGIH5*6T6RSx&¦`'6m4 ) { analyse sémantique }
paxTGIH5*6T6RSx&¦`'6m4 )
Dépiler(
... P
L 6R6TSÒ: P paxTGIH5*6TP 6RSx&¦`'6m4 ) ; Dépiler(paxTGIH5*6T6RSx&¦`'6m4 )
C P 6T6RS@:EVU/%Sommet(
L 6T6TS X NN X LO 6R6TS1 { action sémantique }
C P 6R6TS , p@xRGIH(6T6TSxT¦[<6m4 )
Empiler(
Cas
Fincas
M. K RAJECKI
27
Langages et Compilation
Licence Informatique
Chap. 4 – Traduction dirigée par la syntaxe
5. Conclusion
LL(1) :
– il est possible de définir des actions sémantiques où l’on veut dans une
règle de production ;
– mais le calcul des attributs est plus compliqué si la grammaire est
récursive gauche.
LR(1) :
– on ne peut exécuter une action sémantique que durant une réduction ;
– Solution :
;Ã 9QP 3¤6 =*ÃWZ 9QP 3¤6ZY=
devient :
;ïÃhZ 9QP 3¤6&Z=
ïÆ;à 9QP 3¤6 =
M. K RAJECKI
28
Licence Informatique