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~H„3FG…z„x&€ >S†HQH„GUzH5‡ˆ6Tx&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 >Šr‡ˆxl6T‰‹t~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{@xT€H†/%‰ƒ1
z\{’‘“”v}t~HQ3FG
{@‘“;{ P S
ŠŒ‡ˆxR6{@xT€H†/%‰ƒ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
‘n—ŽqY˜<6mHDS™|‰n/%x&€b)GIH5J X ()6RšY›'H X ‰ƒ1 }
{
v}t~HQ3FG•>xT€ ‘n—ŽqY˜<6mHDS™|‰n/%x&€b)GIH5J X ()6RšY›'H X ‰ƒ1 /* c’est le dernier */ }
{
>S†HQH„G
*#6RšY›'H: “reel”}
{
EHD‡ˆ6Tx&H5S
*#6RšY›'H: “entier”}
{
v-wa6RxTGœEy {/* pas de vérification */}
v-wa6RxTGœEw|6TxRGx&4YH†/%xT€ 1…v-wa6RxTG
šY›'H5‰n/0xT€<)GIHDJ X ‰ƒ1 $ž ()6RšY›'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 */
Šr‡ˆxl6T‰n/0xT€<)GIHDJ X (#6TšQ›H X |‰ƒ1 }
{
v}t~HQ3FG•7v}t~HQ3FGŽŸxT€ ‘n—ŽqY˜<6mHDS™|‰n/%x&€b)GIH5J X ()6RšY›'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é.
S†HQH5SŒ¡¢qŒHD˜£€'/Iq¤› X s P ˜35¥'H X €ŒSrqYxR61
S†HQH5S , H5˜'xRG%GIHr/%x&€ X HD‡K6RS†HYHQ1 (H5‡ˆ6TS†HQH désigne l’entrée de xT€ dans la table
2. des symboles)
S†HQH5S , 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¦[S†H: S†HQH5SŒ¡¢qŒHD˜£€'/I¿Àa¿ X Á%&` P Sr¦[S†H X * P Sr¦`S†HY1 }
{
>
! P Sr¦[S†H:* P Sr¦[S†H }
{
?>@%& +.,
* P Sr¦`S†H: S†HQH5SŒ¡¢qŒHD˜£€</l¿ + ¿ X @%m P Sr¦[S†H X , P Sr¦[S†HQ1 }
{
? ,
* P Sr¦`S†H: , P Sr¦`S†H }
{
, >xT€
, P Sr¦`S†H: S†HQH5S , H5˜<xTG%G0H†/%x&€ X xT€<ÂHD‡K6RS†HYH }
{
, ;354D6
, P Sr¦`S†H: S†HQH5S , 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 paS†H5Å~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=„LZŒoN 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
paS†H5Å~x&H5Sb/Ià 1 alors
P 3¤Ä 6 L /%L P 6R6TS†1 {appel à la fonction L }
P 3¤6Z
Procédure A(
Var
Début
Si fe
}
P 3¤6O
L!Oˆ/%LO£ P 6T6TS†1 {appel à la fonction L•O }
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Ô
Í ­*ΜÏA­DÐžÓ ÏÒ·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
zy
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=
zy 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
‡ paxRGIHY‰hšŽ‡ˆ6 P J<xTîQ˜£H ) { analyse syntaxique }
Dépiler( ,
S P ‡h45xl6TxTqY‡./l4„qYÅŋHD6D/0p@xRG0HQ‰hšŽ‡ˆ6 P JbxTîQ˜ˆHQ1 X ‘a1 )
Empiler(
L!O£ P 6R6TS@: Sommet(paxTGIH5‘*6T6RS™x&¦`˜'6m4 ) { analyse sémantique }
paxTGIH5‘*6T6RS™x&¦`˜'6m4 )
Dépiler(
... P
L 6R6TSÒ: P paxTGIH5‘*6TP 6RS™x&¦`˜'6m4 ) ; Dépiler(paxTGIH5‘*6T6RS™x&¦`˜'6m4 )
‘C P 6T6RS@:EVU/%Sommet(
L 6T6TS X NN X LOˆ 6R6TS†1 { action sémantique }
‘C P 6R6TS , p@xRGIH„‘(6T6TS™xT¦[˜<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