Post on 12-Mar-2016
description
Sémantique des instructions pour le langage Z minimal
Pr ZEGOUR DJAMEL EDDINEEcole Supérieure d’Informatique (ESI)http://zegour.esi.dz/ email: d_zegour@esi.dz
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 gaucheC : 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 variablesD : non utilisé
Quadruplé de l’écriture : B : pointeurs dans TABCOMP vers la liste des variables contenant les résultats des
expressions à écrireC : Nombre de variablesD : non utilisé
(‘Aff’, B, C , D )
(‘Lire’, B, C , D )
(‘Ecrire’, B, C , D )
Sémantique des instructions pour le langage Z minimal: Syntaxe
< Lis > < Inst > { ; < Inst > }* <Inst> Idf := <Exp> |
Lire ( Idf {, Idf }* ) |
Ecrire (<Exp> {,<Exp>}* )
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
< Lis > < Inst > { ; < Inst > }* <Inst> Idf := <Exp> |
Lire ( Idf {, Idf }* ) |
Ecrire (<Exp> {,<Exp> }* ) F1 F2 F3
F4 F5 F6
F7 F8
Sémantique des instructions pour le langage Z minimal: Fonctions sémantiques
F1
F2
F3
Soit Temp le résultat de <Exp>. 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 <Exp>. 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 (<Exp> {,<Exp> }* ) F1 F2 F3
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 }* ) |F4 F5 F6
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 <Exp>. 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 := <Exp> |F7 F8
Sémantique des instructions pour le langage Z minimal : ExempleSOIT 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
‘DE’ 1
‘DE’ 2
‘DE’ 3
‘Lire’ 0 1
‘Aff’ 1 4
‘Aff’ 2 5
‘+E’ 0 1 6
‘/E’ 6 2 7
‘-E’ 1 2 8
‘+E’ 7 8 9
‘Aff’ 3 9
‘Ecrire’ 1 1
5
6
7
8
90
3
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.