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