Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Sémantique des instructions pour le langage Z minimal: Introduction Trois types d’instructions existent dans le langage minimal : affectation, lecture, écriture Il s’agit d’insérer les fonctions sémantiques quelque part dans les règles syntaxiques pour générer les quadruplés. Une lecture/écriture permet de lire plusieurs données/expressions à la fois ( Ex : Lire(A, B,C,D, E, …) Comme un quadruplet ne suffit pas pour ranger tous les arguments des opérations de lecture ou écriture, nous utiliserons une table complémentaire : TABCOMP
Sémantique des instructions pour le langage Z minimal: la table TABCOMP Solution Ranger les arguments (adresses vers les objets ) dans TABCOMP à partir du premier emplacement disponible dans cette table Dans le quadruplé il suffit de ranger l’emplacement du premier argument et le nombre d’arguments Remarque : TABCOMP est partagée par plusieurs types de quadruplés
Sémantique des instructions pour le langage Z minimal: Quadruplés Quadruplé de l’affectation : B : pointeurs dans TABOB vers le membre gauche C : non utilisé D : pointeur dans TABOB sur l’objet qui contient le résultat de l’expression du membre droit Quadruplé de la lecture : B : pointeurs dans TABCOMP vers la liste des variables C : Nombre de variables D : non utilisé Quadruplé de l’écriture : B : pointeurs dans TABCOMP vers la liste des variables contenant les résultats des expressions à écrire C : Nombre de variables D : non utilisé (‘Aff’, B, C, D ) (‘Lire’, B, C, D ) (‘Ecrire’, B, C, D )
Sémantique des instructions pour le langage Z minimal: Syntaxe { ; }* Idf := | Lire ( Idf {, Idf }* ) | Ecrire ( {, }* )
Sémantique des instructions pour le langage Z minimal : Définition sémantique Le programme est un ensemble d’instructions. Une instruction peut être une affectation, lecture ou écriture. Affectation : –attribution de la valeur d’une expression à une variable –Les deux membres du signe d’affectation doivent être de même type Lecture : introduction des données –Les paramètres de l’opération Lire doivent être des variables du même que celles des données lues –Aucune conversion n’est entreprise par le compilateur Écriture : afficher les résultats –Les paramètres de l’opération Ecrire ne peuvent être que des expressions de type scalaire (Entier ou Booleen pour le langage Z minimal)
Sémantique des instructions pour le langage Z minimal: Fonctions sémantiques { ; }* Idf := | Lire ( Idf {, Idf }* ) | Ecrire ( {, }* ) F1F2F3 F4F5F6 F7F8
Sémantique des instructions pour le langage Z minimal: Fonctions sémantiques F1 F2 F3 Soit Temp le résultat de. Vérifier que le type de Temp peut être écrit. Ranger Temp dans TABCOM. Soit Pt son emplacement dans TABCOMP. Initialiser une variable Compte à 1 Soit Temp le résultat de. Vérifier que le type de Temp peut être écrit. Ranger Temp dans TABCOM. Il est donc rangé à l’emplacement Pt + 1. Incrémenter la variable Compte d’une unité Générer le quadruplet (‘Ecrire’, Pt, Compte, ) ECRITURE Ecrire ( {, }* ) F1F2F3
Sémantique des instructions pour le langage Z minimal: Fonctions sémantiques F4 F5 F6 Rechercher Idf dans la table des symboles pour récupérer l’objet correspondant dans TABOB (Soit Temp).Vérifier que le type de Temp peut être lu. Ranger Temp dans TABCOM. Soit Pt son emplacement dans TABCOMP. Initialiser une variable Compte à 1. Rechercher Idf dans la table des symboles pour récupérer l’objet correspondant dans TABOB (Soit Temp).Vérifier que le type de Temp peut être lu. Ranger Temp dans TABCOM. Il est donc rangé à l’emplacement Pt + 1. Incrémenter la variable Compte d’une unité Générer le quadruplet (‘Lire’, Pt, Compte, ) LECTURE Lire ( Idf {, Idf }* ) | F4F5F6
Sémantique des instructions pour le langage Z minimal: Fonctions sémantiques F7 F8 Rechercher Idf dans la table des symboles pour récupérer l’objet correspondant dans TABOB (Soit Temp1). Erreur si Idf non trouvé (non déclaré) Soit Temp2 le résultat de. Vérifier que les types de Temp1 et Temp2 sont les mêmes, sinon Erreur. Générer le quadruplet (‘Aff’, Temp1,, Temp2 ) AFFECTATION Idf := | F7F8
Sémantique des instructions pour le langage Z minimal : Exemple 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’ TABOB 8 LONGZDD 3 4 Quadruplés générés ‘DE’ ‘Lire’01 ‘Aff’14 25 ‘+E’016 ‘/E’627 ‘-E’128 ‘+E’789 ‘Aff’39 ‘Ecrire’ TABCOMP 0 1
Sémantique des instructions pour le langage Z minimal : Implémentations Modules sur la table complémentaire New_item_comp (Pointeur_objet) Indice dans la table complémentaire où le pointeur de l’objet est rangé, -1 si Echec Définir une limite pour la table complémentaire LimitTabcomp = une valeur arbitraire
Sémantique des instructions pour le langage Z minimal : Synthèse Afin de simplifier l’écriture du compilateur, on a utilisé des tables. On peut utiliser diverses structures de données. La forme intermédiaire choisie (Quadruplé) est la forme la plus simple. On peut utiliser toute autre forme interne. On n’a pas traité les optimisations. En général, elles se font sur le code intermédiaire généré. ( Ex: pour chaque nouvelle expression, réutiliser les auxiliaires déjà utilisées ou bien au sein d’une même expression réutiliser certains auxiliaires ) On peut rajouter des programmes d’optimisation Pour les raisons de clarté, les fonctions sémantiques sont des modules séparés. Les appels de modules consomment de l’espace! On peut insérer directement les codes des modules.