Sémantique des expressions arithmétiques pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Sémantique des expressions arithmétiques pour le langage Z minimal: Introduction Nous considérons plutôt les expressions arithmétiques et relationnelles Arithmétiques du genre (A+B)/C, Relationnelles du genre (A+B) > C Objectif : découper l’expression en opérations élémentaires. (Expression devient un programme) Il s’agit de générer les quadruplés. Il s’agit d’insérer Les fonctions sémantiques quelque part dans les règles syntaxiques.
Sémantique des expressions arithmétiques pour le langage Z minimal: Quadruplés Opérateurs binaires : Oper = Op || Type, Op dans {+, -, *, /} et Type = ‘E’ pour Entier B, C : pointeurs dans TABOB vers les opérandes D : pointeur dans TABOB sur l’objet qui va contenir le résultat Opérateurs unaires : Oper = Op || Type, Op dans {+, -} et Type = ‘U’ (Entier pris par défaut ) B : pointeur dans TABOB vers l’opérande C : non utilisé D : pointeur dans TABOB sur l’objet qui va contenir le résultat (Oper, B, C, D )
Sémantique des expressions arithmétiques pour le langage Z minimal: Quadruplés Opérateurs binaires : Oper = Op, Op dans {, >=, =, <>} B, C : pointeurs dans TABOB vers les opérandes D : pointeur dans TABOB sur l’objet qui va contenir le résultat (Oper, B, C, D )
Sémantique des expressions arithmétiques pour le langage Z minimal: Syntaxe [ Opr ] [Sign] { Opa }* {Opm }* Idf | Cste | ( ) Cste désigne une constante numérique entière Idf désigne un identificateur Opr dans {, >=, =, <> }; Opa dans { +, - } Opm dans { *, / }; Sign dans {+, -};
Sémantique des expressions arithmétiques pour le langage Z minimal : Définition sémantique Une expression est une suite d’opérandes et d’opérateurs. Les opérandes sont des variables et/ou des constantes. La priorité des opérateurs est définie par la grammaire. Pas de conversion, toute incompatibilité de type entraîne une erreur. Le compilateur crée des variables temporaires pour ranger les résultats intermédiaires. Le compilateur ne fait pas les optimisations ( Réduction du nombre de variables temporaires utilisées).
Sémantique des expressions arithmétiques pour le langage Z minimal: Fonctions sémantiques [ Opr ] [Sign ] { Opa }* {Opm }* Idf | Cste | ( ) F1F2 F4F3 F5F6 F7F8 F9F10
Sémantique des expressions arithmétiques pour le langage Z minimal: Fonctions sémantiques F1 F2 Vérifier que l’identificateur Idf est déclaré, sinon Erreur. Soit Pt1 son emplacement dans TABOB. Retourner (Pt1) Si la constante n’existe pas la mettre dans TABCONS et TABOB. Soit Pt1 son emplacement dans TABOB. Retourner (Pt1) Idf | Cste | ( ) F1F2
Sémantique des expressions arithmétiques pour le langage Z minimal: Fonctions sémantiques F3 Sauvegarder l’opérateur dans une variable Op et le résultat de dans Temp1 (emplacement dans TABOB) F4 Récupérer le résultat de dans Temp2 (emplacement dans TABOB). Vérifier la compatibilité des types de Temp1 et Temp2. Générer une variable temporaire dans TABOB. Soit Ptx son emplacement dans TABOB.Générer le quadruplet (Op, Temp1, Temp2, Ptx). Retourner (Ptx). {Opm }* F3F4
Sémantique des expressions arithmétiques pour le langage Z minimal: Fonctions sémantiques F5 F6 Sauvegarder l’opérateur unaire dans une variable Op Sauvegarder le résultat de dans Temp1 (emplacement dans TABOB). Vérifier l’incompatibilité de Op et Temp1. Générer une variable temporaire dans TABOB. Soit Ptx son emplacement dans TABOB. Générer le quadruplet (Op, Temp1,, Ptx). Retourner (Ptx) [Sign ] F5F6
Sémantique des expressions arithmétiques pour le langage Z minimal: Fonctions sémantiques F7 Sauvegarder l’opérateur dans une variable Op et le résultat de dans Temp1 (emplacement dans TABOB) Récupérer le résultat de dans Temp2 (emplacement dans TABOB). Vérifier l’incompatibilité des types de Temp1 et Temp2. Générer une variable temporaire dans TABOB. Soit Ptx son emplacement dans TABOB.Générer le quadruplet (Op, Temp1, Temp2, Ptx). Retourner (Ptx). F8 { Opa }* F7F8
Sémantique des expressions arithmétiques pour le langage Z minimal: Fonctions sémantiques F9 Sauvegarder l’opérateur dans une variable Op et le résultat de dans Temp1 (emplacement dans TABOB) F10 Récupérer le résultat de dans Temp2 (emplacement dans TABOB). Vérifier l’incompatibilité des types de Temp1 et Temp2. Générer une variable temporaire dans TABOB. Soit Ptx son emplacement dans TABOB.Générer le quadruplet (Op, Temp1, Temp2, Ptx). Retourner (Ptx). [ Opr ] F9F10
Sémantique des expressions arithmétiques pour le langage Z minimal : Exemple SOIT A, B, C DES ENTIERS ; Res UN ENTIER ; DEBUT A := 3 ; B := 5 ; C := 12 ; Res := ( ( A+B ) / C)+(B-C ) ; FIN ‘3’ ‘5’ ’12’ TABCONS En fin de compilation, programme source = table des quadruplés + TABOB + TABCONS + LONGZDD ‘L’‘E’0 ‘L’‘E’1 ‘L’‘E’2 ‘L’‘E’3 ‘C’‘E’0 ‘C’‘E’1 ‘C’‘E’2 ‘X’‘E’4 ‘X’‘E’5 ‘X’‘E’6 ‘X’‘E’ TABOB 8 LONGZDD 3 4 Quadruplés pour l’expression … ‘+E’017 ‘/E’728 ‘-E’129 ‘+E’8910 …
Sémantique des expressions arithmétiques pour le langage Z minimal : Implémentations Modules sur la table des objets: Génération de variables temporaires New_temp (type) Indice dans la table des objet où l’objet est rangé, -1 si Échec Vérification de la compatibilité Error_exp (Opérateur, Opérande1, Opérande2) Détecte les erreurs sémantiques dans les expressions Retrouve les types de Operande1et Opérande2 Vérifie la compatibilité entre les types et la compatibilité entre Opérateur et type Table des constantes: Nous supposons dans un premier temps : une table par procédure compilée Mise_en_tabcons (constante) indice dans la table, -1 si echec