Download - Sémantique des instructions pour le langage Z minimal

Transcript
Page 1: Sémantique des instructions pour le langage Z minimal

Sémantique des instructions pour le langage Z minimal

Pr ZEGOUR DJAMEL EDDINEEcole Supérieure d’Informatique (ESI)http://zegour.esi.dz/ email: [email protected]

Page 2: Sémantique des instructions pour le langage Z minimal

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

Page 3: Sémantique des instructions pour le langage Z minimal

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

Page 4: Sémantique des instructions pour le langage Z minimal

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 )

Page 5: Sémantique des instructions pour le langage Z minimal

Sémantique des instructions pour le langage Z minimal: Syntaxe

< Lis > < Inst > { ; < Inst > }* <Inst> Idf := <Exp> |

  Lire ( Idf {, Idf }* ) |

  Ecrire (<Exp> {,<Exp>}* )

Page 6: Sémantique des instructions pour le langage Z minimal

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)

Page 7: Sémantique des instructions 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

Page 8: Sémantique des instructions pour le langage Z minimal

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

Page 9: Sémantique des instructions pour le langage Z minimal

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

Page 10: Sémantique des instructions pour le langage Z minimal

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

Page 11: Sémantique des instructions pour le langage Z minimal

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

Page 12: Sémantique des instructions pour le langage Z minimal

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

Page 13: Sémantique des instructions pour le langage Z minimal

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.