Sommaire                    Définition du langage d’expérimentation          Compilateur pour le langage Z minimal          Extensions du langage Z minimal

 

                                 Chapitre 11 : Expressions logiques               Chapitre suivant


 

11.1 Introduction

11.2 Quadruplets

11.3 Syntaxe

11.4 Fonctions sémantiques

11.5 Exemple


 

 

11.1 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 /

L’objectif de la sémantique des expressions logiques est de découper l’expression en opérations élémentaires. L’expression devient ainsi un programme. Il s’agit de générer les quadruplets propres aux expressions logiques au moyen de fonctions sémantiques insérées quelque part dans les règles syntaxiques.

Dans le but de faciliter la sémantique des expressions, aucune optimisation n’est considérée.

 

11.2 Quadruplets  

- Pour les opérateurs binaires, nous considérons le quadruplet (Oper, B, C , D ).

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.

 

- Pour l’opérateur unaire le quadruplet (Oper, B, C , D )  est considéré.

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.

 

11.3 Syntaxe  

Rappelons ci-dessous la grammaire du langage Z minimal augmentée par les règles relatives aux expressions logiques en surbrillance.

<Algo Z>          [ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin [;]

<Ps>           →     <S>;{ [~Soit|Soient~] <S>;}*

<S>             →     <Li> Sep <Typ>

<Li>            →     Idf {, Idf}*

<Typ>            →     Entier | Booleen 

 

Instructions

< Lis >       →     < Inst > { ; < Inst > }*

<Inst>        →     Idf := <Exp> | Lire ( Idf {, Idf }* ) |Ecrire (<Exp> {,<Exp>}* )

 

Expressions

<Exp>        →     <Exps>[ Opr <Exps>]

<Exps>      →     [Sign] <Terme> { Opa <Terme> }* 

<Terme>   →     <Facteur>{Opm <Facteur>}*

<Facteur>      Idf | Cste | ( <Exp>) | Non <Facteur> | Vrai | Faux

 

11.4 Fonctions sémantiques  

Déclarations de booléens

Les fonctions sémantiques sont insérées dans le règles comme suit (en surbrillance) et sont décrites juste après.

<S>         →     <Li> Sep <Typ>  F3

<Li>        →     Idf  F2{, Idf  F2}*

<Typ>     →     Entier | Booleen F1

 

F1

Récupérer le type dans Type.

 

F2

- Vérifier que l’identificateur Idf n’est pas déclaré (ne figure pas dans la table des symboles TABSYM), sinon Erreur.

- Sauvegarder l’identificateur Idf dans une liste L.

 

F3

Pour chaque Identificateur  Idf déclaré comme BOOLEEN :

- Le mettre dans la table des symboles TABSYM.

- Lui attribuer une adresse relative et le mettre dans la table des objets TABOB (soit Pt son emplacement) avec le type ‘B’

- Générer le quadruplet (‘DB’, Pt, , )

 

Expressions logiques

Les fonctions sémantiques sont insérées dans le règles comme suit (en surbrillance) et sont décrites juste après.

<Exp>         →     <Exps>[ Opr <Exps> ]

<Exps>       →     <Terme> F6 { Opa F7 <Terme>  F8  }*

<Terme>    →     <Facteur>{Opm  F4 <Facteur>  F5 }*

<Facteur>  →     Idf F1  | Cste | ( <Exp>) | Non <Facteur>  F2  |  Vrai   F3 | Faux  F3 

 

F1

Vérifier que l’identificateur Idf est déclaré, sinon Erreur. Soit Pt1 son emplacement dans TABOB.

Retourner (Pt1).

 

F2

Générer une variable temporaire dans TABOB. Soit Ptx son emplacement dans TABOB.

Générer le quadruplet (‘Non’, Pt1, , Ptx).

Retourner (Ptx).

 

F3

Si la constante n’existe pas la mettre dans TABCONS et TABOB. Soit Pt1 son emplacement dans TABOB.

Retourner (Pt1).

 

F4

Sauvegarder 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 la compatibilité des types de Temp1 et Temp2.

Générer une variable temporaire. Soit Ptx son emplacement dans TABOB.

Générer le quadruplet (Op, Temp1, Temp2, Ptx).

Retourner (Ptx).

 

F6

Sauvegarder le résultat de <Terme> dans Temp1 (emplacement dans TABOB). Retourner (Temp1).

 

F7

Sauvegarder l’opérateur dans une variable Op.

 

F8

Récupérer le résultat de <Terme> dans Temp2 (emplacement dans TABOB).

Vérifier la compatibilité des types de Temp1 et Temp2.

Générer une variable temporaire. Soit Ptx son emplacement dans TABOB.

Générer le quadruplet (Op, Temp1, Temp2, Ptx).

Retourner (Ptx).

 

11.5 Exemple

La figure 14 montre les tables de compilation créées pour un programme source donné. Dans QUADRUPLES figure uniquement les quadruplets générés pour l’expression logique figurant dans l’opération d’écriture.

 

 

Figure 14: Tables de compilation (Expressions logiques)