Sémantique des déclarations pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) www.zegour.uuuq.com email: d_zegour@esi.dz
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 Forme intermédiaire = + Tables de compilation
Sémantique des déclarations pour le langage Z minimal: Analyse sémantique Analyse syntaxique Analyse sémantique = + Fonctions sémantiques
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 } F2 F3 F4 F1 F1
Sémantique des déclarations pour le langage Z minimal: Fonctions sémantiques <Li> Idf {, Idf }* F1 F1 Vé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 F1 < LI >
Sémantique des déclarations pour le langage Z minimal: Fonctions sémantiques <S> <Li>[Sep <Typ> ] F2 F3 F4 Par défaut le type est Entier. Initialiser donc une variable, soit Type, avec ‘E’ ( ‘Entier’) F2 Si le type est spécifié modifier la valeur de la variable Type avec le type spécifié F3 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, , ) F4 < S >
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’ ‘L’ ‘E ’ ‘E’ 1 2 ‘C’ 1 1 2 2 3 TABCONS 4 5 ‘DE’ 1 2 … TABOB 1 2 3 Quadruplés pour les déclarations LONGZDD En fin de compilation, programme source = table des quadruplés + TABOB + TABCONS + LONGZDD
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