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