Post on 04-Apr-2015
Expressions logiques
Pr ZEGOUR DJAMEL EDDINE
Ecole Supérieure d’Informatique (ESI)
www.zegour.uuuq.com
email: d_zegour@esi.dz
Sémantique des expressions logiques: Introduction
Les expressions logiques sont traitées de la même façon que les expressions arithmétiques
Ou est considéré comme + et – Et est considéré comme * et /
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.
Aucune optimisation n’est considérée
Sémantique des expressions logiques : Quadruplés
Opérateurs binaires :
Oper= Op || Type , Op dans {Ou, Et } et Type = ‘B’ pour Booléen
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 dans {Non}
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 )
(Oper, B, C , D )
Expressions logiques : Déclarations
Sep dans {:, Un, Une, Des}
Cste désigne une constante numérique entière
Idf désigne un identificateur
Opr dans { <, <=, >, >=, =, <> }
Opa dans { +, -, }
Opm dans { *, /, }
Sign dans {+, -}
Ou
Et
Expressions logiques : Déclarations
<Algo Z> [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin [;]
<Ps> <S>;{ [~Soit|Soient~] <S>;}*
<S> <Li>[Sep <Typ> ]
<Li> Idf {, Idf}*
<Typ> Entier |Booleen
Expressions logiques : Instructions
< Lis > < Inst > { ; < Inst > }*
<Inst> Idf := <Exp> |
Lire ( Idf {, Idf }* ) |
Ecrire (<Exp> {,<Exp>}* ) |
Expressions logiques : Expressions
<Exp> <Exps>[ Opr <Exps>]
<Exps> [Sign] <Terme> { Opa <Terme> }*
<Terme> <Facteur>{Opm <Facteur>}*
<Facteur> Idf | Cste | ( <Exp>) |
Non <Facteur> | Vrai | Faux
Sémantique des expressions logiques : déclaration des variables booléennes
Pour chaque Identificateur déclaré comme BOOLEEN :
- 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é (‘DB’, Pt, , )
Sémantique des expressions logiques : Fonctions sémantiques
<Exp> <Exps>[ Opr <Exps> ] <Exps> <Terme>
{ Opa <Terme> }*
<Terme> <Facteur>{Opm <Facteur> }*
<Facteur> Idf | Cste | ( <Exp>)
Non <Facteur> | Vrai | Faux
F1
F2
F5F4
F6
F7 F8
F3 F3
Opm=‘ET’
Opa=‘OU’
Sémantique des expressions logiques : Fonctions sémantiques
F1
F2
Vérifier que l’identificateur Idf est déclaré, sinon Erreur. Soit Pt1 son emplacement dans TABOB. Retourner (Pt1)
Générer une variable temporaire dans TABOB. Soit Ptx son emplacement dans TABOB.Générer le quadruplet (‘Non’, pt1, , Ptx). Retourner (Ptx).
<Facteur>
<Facteur> Idf | Cste | ( <Exp>)
Non <Facteur> | ~Vrai | Faux~
F1
F2 F3
F3 Si la constante n’existe pas la mettre dans TABCONS et TABOB. Soit Pt1 son emplacement dans TABOB. Retourner (Pt1)
Sémantique des expressions logiques : Fonctions sémantiques
F4Sauvegarder l’opérateur dans une variable Op et le résultat de <Facteur> dans Temp1 (emplacement dans TABOB)
F5
Récupérer le résultat de <Facteur> 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).
<Terme>
<Terme> <Facteur>{Opm <Facteur> }*F4 F5
Sémantique des expressions logiques : Fonctions sémantiques
F6Sauvegarder le résultat de <Terme> dans Temp1 (emplacement dans TABOB). Retourner (Temp1)
<Exps>
<Exps> <Terme> F6
Sémantique des expressions logiques : Fonctions sémantiques
F7Sauvegarder l’opérateur dans une variable Op
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
<Exps> (suite)
{ Opa <Terme> }* F7 F8
Sémantique des expressions logiques : Exemple
soit a , b, c des booleens;
debut
a:=faux;b:=vrai;c:= faux;
ecrire( non(a ou b) et c)
fin
‘Faux’
‘Vrai’
TABCONS
0
1
En fin de compilation, programme source = table des quadruplés + TABOB + TABCONS + LONGZDD
‘L’ ‘B’ 0
‘L’ ‘B’ 1
‘L’ ‘B’ 2
‘C’ ‘B’ 0
‘C’ ‘B’ 1
‘X’ ‘B’ 4
‘X’ ‘B’ 5
‘X’ ‘B’ 6
0
1
2
TABOB6
LONGZDD
3
4
Quadruplés pour l’expression
…
‘OU’ 0 1 5
‘NON’ 5 6
‘ET’ 6 2 7
…
5
6
7