sémantique des déclarations pour le langage z minimal pr zegour djamel eddine ecole supérieure...
TRANSCRIPT
Sémantique des déclarations pour le langage Z minimal
Pr ZEGOUR DJAMEL EDDINE
Ecole Supérieure d’Informatique (ESI)
http://zegour.esi.dz/
email: [email protected]
Sémantique des déclarations pour le langage Z minimal: Introduction
L’analyseur sémantique = ensemble de fonctions sémantiques déduites à partir de la définition du langage
Rôle des fonctions sémantiques : générer une forme intermédiaire en tenant compte des concepts prédéfinis(organisation de la mémoire, attribution des adresses, tables de compilation, … )
Il s’agit d’une forme très proche du langage machine : Quadruplets, Triplets, …
Les fonctions sémantiques sont insérées quelque part dans les règles syntaxiques.
Sémantique des déclarations pour le langage Z minimal: Quadruplets
Le programme source est transformé et découpé en opérations élémentaires très proches du langage machine
Opération élémentaire = Quadruplet
Quadruplet = (A, B, C, D)
A : Code Opération
B, C, D : Paramètres de l’opération
Les paramètres de l’opération sont des pointeurs vers les tables de
compilation
Sémantique des déclarations pour le langage Z minimal: Résultats de la phase sémantique
Quadruplés
Tables de compilation
+ =Forme intermédiaire
Sémantique des déclarations pour le langage Z minimal: Analyse sémantique
Analyse syntaxique
Fonctions sémantiques
+ =Analyse sémantique
Sémantique des déclarations pour le langage Z minimal: Quadruplés pour déclarations
Comme l’allocation des variables est dynamique,
Pour chaque déclaration de variable nous devons générer le quadruplet (A, B, C, D)
tel que
A est de la forme ‘D’+’type’ (Type est le type de la variable)
B : pointeur dans TABOB vers l’objet
C et D non utilisés
Pour le langage minimal, un seul type de quadruplé :
(‘DE’, B, , )
Sémantique des déclarations pour le langage Z minimal: le problème
Où insérer les fonctions sémantiques dans l’analyseur syntaxique
pour faire les vérifications qu’il faut
et
générer pour chaque déclaration de variable le quadruplé correspondant à une déclaration ?
Sémantique des déclarations pour le langage Z minimal: Syntaxe des déclarations
<Algo Z> [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin [;]
<Ps> <S>;{ [~Soit|Soient~] <S>;}*
<S> <Li>[Sep <Typ> ~]
<Li> Idf {, Idf}*
<Typ> Entier
Sep dans { :, Un, Une, Des }
Sémantique des déclarations pour le langage Z minimal: Définition sémantique
La partie déclaration consiste à définir l’ensemble des variables utilisées dans le programme source
Pour le langage Z minimal, seules les variables entières sont autorisées
Un identificateur ne doit pas désigner deux variables différentes
Le type peut ne pas être donné. Par défaut c’est Entier (Règle<S>)
Sémantique des déclarations pour le langage Z minimal: Fonctions sémantiques
<Algo Z> [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin [;]
<Ps> <S>;{ [~Soit|Soient~] <S>;}*
<S> <Li>[Sep <Typ> ]
<Li> Idf {, Idf }*
<Typ> Entier
Sep dans { :, Un, Une, Des }
F1 F1
F3 F4F2
Sémantique des déclarations pour le langage Z minimal: Fonctions sémantiques
F1Vérifier que l’identificateur Idf n’est pas déclaré, sinon Erreur (non dans L et non dans la table des symboles)
Sauvegarder l’identificateur Idf dans une liste L
< LI >
<Li> Idf {, Idf }*F1 F1
Sémantique des déclarations pour le langage Z minimal: Fonctions sémantiques
F4
Pour chaque Idf dans L :
- Le mettre dans la table des symboles
- Lui attribuer une adresse relative et le mettre dans la table des objets (soit Pt son emplacement)
-Générer le quadruplé (‘D’+Type, Pt, , )
Par défaut le type est Entier. Initialiser donc une variable, soit Type, avec ‘E’ ( ‘Entier’)
F3Si le type est spécifié modifier la valeur de la variable Type avec le type spécifié
F2
< S >
<S> <Li>[Sep <Typ> ] F2 F3 F4
Sémantique des déclarations pour le langage Z minimal : Exemple
Soit
A, B, C des Entiers;
Debut
A := 3;
B := 5;
C := 12;
Fin
‘3’
‘5’
’12’
TABCONS
0
1
2
En fin de compilation, programme source = table des quadruplés + TABOB + TABCONS + LONGZDD
‘L’ ‘E ’ 0
‘L’ ‘E’ 1
‘L’ ‘E’ 2
‘C’ ‘E’ 0
‘C’ ‘E’ 1
‘C’ ‘E’ 2
0
1
2
TABOB
3
LONGZDD
0
1
2
Quadruplés pour les déclarations
‘DE’ 0
‘DE’ 1
‘DE’ 2
…
3
4
5
Sémantique des déclarations pour le langage Z minimal : Implémentation
Module sur la table des quadruplés:
New_quadruple (P1,P2,P3,P4) Indice dans la table des quadruplés où le quadruplé est créé, -1 si Échec
Définir une limite pour la table des quadruplés
LimitQuad = une valeur arbitraire