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

 

Chapitre précédent               Chapitre 12 : Expressions sur les chaînes de caractères               Chapitre suivant


12.1 Introduction

12.2 Quadruplets

12.3 Syntaxe

12.4 Fonctions sémantiques

12.5 Exemple


 

 

12.1 Introduction 

On distingue les variables:

- Chaîne de caractères (CHAINE) : tableau de caractères.

- Caractère (CAR) : un seul caractère.

Il n y a qu’une seule opération : + (concaténation).

Une expression peut contenir un mélange entre variables chaîne de caractères et caractères.

Le résultat est toujours une chaîne de caractères. Le résultat de l’affectation dépend de la variable réceptrice. Si cette dernière est de type CAR, le résultat est tronqué à un seul caractère.

La sémantique des expressions sur les chaînes de caractères consiste à générer les quadruplets appropriés afin de faciliter leur interprétation.

 

12.2 Quadruplets

Il n y a qu’un type de quadruplet: (‘+S’, B, C , D ). Il désigne la concaténation de chaînes de caractères (‘+S’).

Les paramètres B, C et D sont définis comme suit:

B, C : pointeurs dans TABOB vers les opérandes.

D : pointeur dans TABOB sur l’objet qui va contenir le résultat.

 

12.3 Syntaxe

Augmentons la grammaire du langage Z minimal avec les règles relatives aux expressions sur les chaînes de caractères. Les contextes à traiter sont en surbrillance au niveau de la grammaire.

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 | Chaine | Car 

 

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 | Chaine

 

12.4 Fonctions sémantiques

Déclarations

Les fonctions sémantiques sont insérées dans les règles comme suit:

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

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

<Typ>     →     Entier | Booleen | Chaine F1 | Car F1

 

Elle sont décrites comme suit:

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 déclaré comme CAR :

- 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 ‘C’.

- Générer le quadruplet (‘DC’+Type, Pt, , )

 

Pour chaque Identificateur déclaré comme CHAINE :

- 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 ‘S’.

- Générer le quadruplet (‘DCC’+Type, Pt, , )

 

  Expressions chaînes de caractères 

Elles sont insérées dans les règles comme suit:

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

<Exps>       →     <Terme>  F3 { Opa F4 <Terme> F5 }*

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

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

 

Leurs descriptions sont les suivantes:

F1

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

Retourner (Pt1).

 

F2

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

Retourner (Pt1).

 

F3

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

 

F4

Sauvegarder l’opérateur dans une variable Op.

 

F5

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).

 

12.5 Exemple

La figure 15 montre les tables de compilation créées par le compilateur. Nous n’avons montré dans QUADRUPLES que les quadruplets relatifs à l’expression figurant dans l’instruction d’écriture.

 

 

Figure 15: Tables de compilation (Chaînes de caractères)