Sémantique des expressions arithmétiques 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 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 EntierB, C : pointeurs dans TABOB vers les opérandesD : 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érandeC : non utiliséD : pointeur dans TABOB sur l’objet qui va contenir le résultat
(Oper, B, C , D )
(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
<Exp> <Exps>[ Opr <Exps>]
<Exps> [Sign] <Terme> { Opa <Terme> }*
<Terme> <Facteur>{Opm <Facteur>}*
<Facteur> Idf | Cste | ( <Exp>)
Cste désigne une constante numérique entièreIdf désigne un identificateurOpr 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<Exp> <Exps>[ Opr <Exps> ] <Exps> [Sign ]<Terme>
{ Opa <Terme> }*
<Terme> <Facteur>{Opm <Facteur> }*
<Facteur> Idf | Cste | ( <Exp>)
F1 F2
F4F3
F5 F6
F7 F8
F9 F10
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)
<Facteur>
<Facteur> Idf | Cste | ( <Exp>) F1 F2
Sémantique des expressions arithmétiques pour le langage Z minimal: Fonctions sémantiques
F3Sauvegarder l’opérateur dans une variable Op et le résultat de <Facteur> dans Temp1 (emplacement dans TABOB)
F4
Récupérer le résultat de <Facteur> 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).
<Terme>
<Terme> <Facteur>{Opm <Facteur> }*F3 F4
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 <Terme> 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)
<Exps>
<Exps> [Sign ]<Terme>F5 F6
Sémantique des expressions arithmétiques pour le langage Z minimal: Fonctions sémantiques
F7Sauvegarder l’opérateur dans une variable Op et le résultat de <Terme> dans Temp1 (emplacement dans TABOB)
Récupérer le résultat de <Terme> 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 <Terme> }* F7 F8
<Exps>
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 <Exps> dans Temp1 (emplacement dans TABOB)
F10
Récupérer le résultat de <Exps> 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).
<Exp>
<Exp> <Exps>[ Opr <Exps> ]F9 F10
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
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
‘L’ ‘E’ 3
‘C’ ‘E’ 0
‘C’ ‘E’ 1
‘C’ ‘E’ 2
‘X’ ‘E’ 4
‘X’ ‘E’ 5
‘X’ ‘E’ 6
‘X’ ‘E’ 7
0
1
2
TABOB
8
LONGZDD
3
4
Quadruplés pour l’expression
…
‘+E’ 0 1 7
‘/E’ 7 2 8
‘-E’ 1 2 9
‘+E’ 8 9 10
…
5
6
7
8
9
10
Sémantique des expressions arithmétiques pour le langage Z minimal : Implémentations
Modules sur la table des objets:
Génération de variables temporairesNew_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