Sommaire Définition du langage d’expérimentation Compilateur pour le langage Z minimal Extensions du langage Z minimal
Chapitre 3 : L’analyse lexicale Chapitre suivant
3.7 Algorithme général de test du Scanner
3.1 Objectifs
L’objectif principal de la phase lexicale est de reconnaître les unités lexicales contenues dans un programme. L’analyseur lexical (ou scanner) produit pour chaque unité lexicale le couple (Syn, Sem).
- Syn : code qui sera utilisée dans la phase syntaxe.
- Sem : chaîne de caractères qui sera utilisée dans la phase sémantique.
La phase lexicale élimine aussi les blancs et les commentaires.
De plus, certains types d’erreurs peuvent être signalés.
3.2 Conventions du langage
- Il faut définir une longueur maximale pour les identificateurs.
- Il n y a pas de distinction entre minuscule et majuscule.
- Les constantes numériques sont entières et de longueur inférieure à 31. Leur syntaxe peut être formulée par l’écriture [~ +|- ~] { digit }+ avec digit dans {0,1,2,…..9}.
- La longueur maximale des chaînes de caractères est égale à 256.
3.3 Les mots clés
Considérer le langage Z minimal pour:
- Recenser les mots clés du langage et leur attribuer un code. Les mettre dans une structure de données à accès rapide (table triée, arbre, H-code, …).
- Organiser les mots clés en classes.
- Développer le module de recherche sur cette structure.
- Appliquer la recherche dichotomique s’il s’agit d’une table triée.
Exemples de mots clés : SOIT, TANTQUE, …
3.4 Délimiteurs
Considérer le langage Z minimal pour:
- Recenser les délimiteurs du langage et leur attribuer un code. Les mettre dans une structure de données à accès rapide(table triée, arbre, H-code, …).
- Organiser les délimiteurs en classes.
- Développer le module de recherche sur cette structure.
- Appliquer la recherche dichotomique s’il s’agit d’une table triée.
Exemples de délimiteurs : ‘+’, ‘:’, ‘=‘, …
3.5 Le module Nextch
C’est le module de base qui fonctionne à un niveau microscopique. Il délivre le prochain caractère non blanc du texte qui peut appartenir soit à la ligne en cours soit à la prochaine ligne. Il rend un caractère spécial si la fin du texte d’entrée est rencontrée.
La première chose à faire est donc de développer ce module.
3.6 Le module Scan
C’est l’algorithme de base utilisé dans la phase lexicale. Son rôle est de récupérer le texte d’entrée caractère par caractère (utilisation de Nextch) puis d’appliquer l’automate de reconnaissance des unités lexicales qui produit le couple (Syn, Sem).
La forme générale de ce module est la suivante (PASCAL) :
CASE Classe of
1 : begin … End // identificateurs
2 : begin … End // signe +
…
n : begin … End // autre
END
3.7 Algorithme général de test du Scanner
Afin de tester notre scanner, nous pouvons appliquer l’algorithme suivant:
Répéter
Scan (Syn, Sem)
Afficher Syn et Sem
Jusqu’ à fin du fichier d’entrée (Programme)
3.8 Type des erreurs
Le scanner, durant son fonctionnement, peut déceler certains types d’erreurs. Les principales erreurs sont les suivantes:
- Identificateur trop long.
- Constante chaîne de caractères trop longue.
- Caractère invalide.
- Fin de fichier dans un commentaire : erreur fatale.
- Fin de fichier dans une chaîne de caractères: erreur fatale.
- Erreur dans une constante numérique.
- Ligne trop longue.
…