La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Interprétation/Génération de code pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)

Présentations similaires


Présentation au sujet: "Interprétation/Génération de code pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)"— Transcription de la présentation:

1 Interprétation/Génération de code pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) http://zegour.esi.dz/ email: d_zegour@esi.dzd_zegour@esi.dz

2 Interprétation/Génération de code pour le langage Z minimal : Introduction Une fois la sémantique réalisée, il reste à générer le code à partir de la forme interne ou interpréter directement la forme interne. Génération de code  Code d’une machine virtuelle  Langage d’assemblage d’une machine donnée  Langage binaire d’une machine donnée Interprétation Exécuter la forme intermédiaire avec un langage de programmation (Pascal, C,..) : Spécifique à un type de machines Portabilité

3 Interprétation/Génération de code pour le langage Z minimal : Introduction La génération de code implique la connaissance du code cible Il s’agit de remplacer la forme interne ( ensemble de table et paramètres ) par un code exprimé dans le langage cible. ( Une fois le code généré, on a plus besoin des tables) Ou mieux encore: Dans la phase sémantique, au lieu de générer les quadruplets, on génère directement le code. ( Compilateur à une passe ) On a tendance à confondre Sémantique et Génération de code.

4 Interprétation/Génération de code pour le langage Z minimal : Résultats (Sémantique) SOIT A, B, C DES ENTIERS ; Res UN ENTIER ; DEBUT LIRE ( A ) ; B := 5 ; C := 12 ; Res :=((A+B) / C) + ( B-C ) ; ECRIRE ( Res ) FIN ‘5’ ‘12’ TABCONS 0 1 En fin de compilation, programme source = table des quadruplés + TABOB + TABCONS + TABCOMP + LONGZDD ‘L’‘E’0 ‘L’‘E’1 ‘L’‘E’2 ‘L’‘E’3 ‘C’‘E’0 ‘C’‘E’1 ‘X’‘E’4 ‘X’‘E’5 ‘X’‘E’6 ‘X’‘E’7 0 1 2 TABOB 8 LONGZDD 3 4 Quadruplés générés ‘DE’0 1 2 3 ‘Lire’01 ‘Aff’14 25 ‘+E’016 ‘/E’627 ‘-E’128 ‘+E’789 ‘Aff’39 ‘Ecrire’11 5 6 7 8 9 0 3 TABCOMP 0 1

5 Interprétation/Génération de code pour le langage Z minimal : Algorithme général - Allocation de la zone de données // tableau d’adresses de longueur LONGZDD - Conversion des constantes numériques, allocation d’espace pour les constantes et rangement des adresses dans un tableau - Pour chaque quadruplé (Cop, P1, P2, P3) faire : Selon le code - récupérer les données dans les tables de compilation - traiter le quadruplé Finpour - Libération de l’espace mémoire utilisée par la zone de données et les objets du programme

6 Interprétation/Génération de code pour le langage Z minimal : Environnement Nil … Zone de données (ZDD) … CONST  Allocation de la zone de données : tableau d’adresses de longueur LONGZDD :  Conversion des constantes numériques, allocation d’espace pour les constantes et rangement des adresses dans un tableau Constante 2 Constante 1 Espace mémoire pour les variables,constantes, … Constante n ( Doit être initialisée à Nil )

7 Interprétation/Génération de code pour le langage Z minimal : Stratégie d’allocation Pour l’instant il existe 3 types d’objets ‘L’ : variable locale ( Entière ) ‘C’ : constante ‘X’ : variable temporaire créée par le compilateur (Entière ou Booléenne)  L’espace pour les variables locales est alloué au début à la rencontre des quadruplés ‘DE’  L’espace pour les constantes est aussi alloué au début à l’initialisation de l’environnement d’exécution.  L’espace pour les auxiliaires est alloué quand on leur affecte une valeur pour la première fois. Si l’adresse d’un auxiliaire est Nil, il y a allocation de l’espace pour celle ci ( sinon, l’espace est déjà alloué)

8 Interprétation/Génération de code pour le langage Z minimal : Déclaration Soit ZDD le tableau d’adresses représentant la zone de données - Allocation d’un espace mémoire pour un entier  ADR - Récupérer de TABOB l’adresse relative de Pt1 dans la zone de données  D // L’adresse réelle est ZDD [ D ] - Ranger dans ZDD [ D ] l’adresse ADR (‘DE’, Pt1,, )

9 Interprétation/Génération de code pour le langage Z minimal : Expression Soit ZDD le tableau d’adresses représentant la zone de données Cas des opérations binaires - Récupérer de TABOB l’adresse relative de Pt1 dans la zone de données  D1 ; L’adresse réelle est Adr_Pt1 = ZDD [ D1 ] - Récupérer de TABOB l’adresse relative de Pt2 dans la zone de données  D2 ; L’adresse réelle est Adr_Pt2 = ZDD [ D2 ] - Récupérer de TABOB l’adresse relative de Pt3 dans la zone de données  D3 ; L’adresse réelle est Adr_Pt3 = ZDD [ D3 ] - Effectuer l’opération ‘Cop’ entre les contenus de Adr_Pt1 et Adr_Pt2 - Ranger le résultat dans Adr_Pt3 (***) *** : si Adr_Pt3=Nil, allocation d’un espace d’adresse Adr_Pt3 (Oper, Pt1, Pt2, Pt3 ) Oper dans { ‘+E’, ‘-E’, ‘*E’, ‘/E’ }

10 Interprétation/Génération de code pour le langage Z minimal : Expression Soit ZDD le tableau d’adresses représentant la zone de données Cas des opérations unaires - Récupérer de TABOB l’adresse relative de Pt1 dans la zone de données  D1 ; L’adresse réelle est Adr_Pt1 = ZDD [ D1 ] - Récupérer de TABOB l’adresse relative de Pt2 dans la zone de données  D2 ; L’adresse réelle est Adr_Pt2 = ZDD [ D2 ] - Effectuer l’opération ‘Cop’ sur le contenu de Adr_Pt1 - Ranger le résultat dans Adr_Pt2 (***) *** : si Adr_Pt2=Nil, allocation d’un espace d’adresse Adr_Pt2 (Oper, Pt1,, Pt2 ) Cop dans { ‘+U’, ‘-U’ }

11 Interprétation/Génération de code pour le langage Z minimal : Affectation Soit ZDD le tableau d’adresses représentant la zone de données - Récupérer de TABOB l’adresse relative de Pt1 dans la zone de données  D1 L’adresse réelle est Adr_Pt1 = ZDD [ D1 ] - Récupérer de TABOB l’adresse relative de Pt2 dans la zone de données  D2 L’adresse réelle est Adr_Pt2 = ZDD [ D2 ] - Ranger dans Adr_Pt1 le contenu de Adr_Pt2 (***) *** : si Adr_Pt1=Nil, allocation d’un espace d’adresse Adr_Pt1 (‘Aff’, Pt1,,Pt2 )

12 Interprétation/Génération de code pour le langage Z minimal : Lecture Soit ZDD le tableau d’adresses représentant la zone de données Pour i:= 0 à N-1 - Objet := TABCOMP [Pt+i] - Récupérer de TABOB l’adresse relative de Objet dans la zone de données  D L’adresse réelle est Adr_Objet = ZDD [ D ] - Lire la donnée dans une variable DONNEE - Ranger DONNEE dans Adr_Objet Finpour (‘Lire’, Pt,N, )

13 Interprétation/Génération de code pour le langage Z minimal : Écriture Soit ZDD le tableau d’adresses représentant la zone de données Pour i:= 0 à N-1 - Objet := TABCOMP [Pt+i] - Récupérer de TABOB l’adresse relative de Objet dans la zone de données  D L’adresse réelle est Adr_Objet = ZDD [ D ] - Écrire le contenu de Adr_Objet Finpour (‘Ecrire’, Pt,N, )

14 Interprétation/Génération de code pour le langage Z minimal : Implémentation Module Alloc(Type de l’objet)  adresse de l’espace alloué, Nil si Échec


Télécharger ppt "Interprétation/Génération de code pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)"

Présentations similaires


Annonces Google