RAPPORT DE TRAVAUX PRATIQUES
Compilation
Enseignant :
Dr. MAHAMAT Atteib
Etudiants :
DJEPATALEM Renaud
MINGANE Gracia
Sommaire
Introduction
TAF :
1. Outil d’analyse lexical
2. Fichier LEX
Chaine de développement d’un
programme
3. Structure du fichier de spécification
LEX
Exercice 2
Exercice 3
Exercice 4
Conclusion
Page 1
Introduction
L’analyseur lexical constitue la première étape d’un
compilateur, sa tâche principale est de lire les caractères
d’entrées et de produire comme résultat une suite d’unités
lexicales que l’analyseur syntaxique aura à traiter.
Une unité lexicale est une suite de caractères qui a une
signification collective.
L’analyseur lexical réalise certaines tâches secondaires
comme l’élimination de caractère superflus
(commentaires, tabulations, retour à la ligne, …) et gère
aussi les numéros de ligne dans le programme source
pour pouvoir associer à chaque erreur rencontrée par la
suite de ligne dans laquelle elle intervient.
Page 2
I. Outil d’analyse lexical
De nombreux outils ont été bâtis pour construire des
analyseurs lexicaux à partir des notations
spécifiques basées sur des expressions régulières.
LEX est un utilitaire d’UNIX
LEX accepte en entrée des spécifications d’unités
lexicales sous forme de définitions régulières et
produit un programme écrit dans le langage de haut
niveau qui une fois compilé reconnait ces unités
lexicales.
Ce programme est donc un analyseur lexical
II. Fichier LEX
Chaine de développement d’un programme
Enregistrer le fichier sous forme : nom.l
Compiler le fichier via Lex : lex nom.l
Creation d’un nouveau fichier nommé : [Link].c
III. Structure du fichier de spécification LEX
Exercice 2
Page 3
Création d’un répertoire TP_Flex et TP1(exercice 2)
Création du fichier lex nommé binair_0_11.l
s
Création du fichier lex nommé binair_pair_0.l
Création du fichier lex nommé binair_exec_1
Page 4
1) Déclaration (en C) de variables constantes
2) Déclaration de définitions régulières
Cette deuxième partie c’est la partie qui contient la
définition des expressions régulières, donc à chaque
expression je peux lui associer les noms.
3) Règle de traduction
Ensuite il vient la troisième partie du code dans la
structure générale d’un programme en lex dont c’est la
partie qu’on appelle les règles de traductions, c’est-à-dire
chaque expression régulière je vais lui associer des
axiomes. Je vois les expressions régulières avec leurs
Page 5
noms, le délimite par les accolades, une fois il trouve ce
binaire il va me l’afficher « c’est un nombre binaire ».
yytext est un tableau de caractère dans laquelle on stocke
la chaine acceptée par une expression régulière.
4) Bloc principal et fonction auxiliaire
Le programme principal utilise la fonction prédéfinie pour
faire appel à l’analyseur lexical.
Exercice 3
1) Créer un nouveau dossier "TP1"
2) Créer un fichier flex "[Link]"
Page 6
3) Compiler le fichier "[Link]" avec la commande "flex"
4) Compiler le fichier "[Link].c" en utilisant la
commande "gcc"
5) Lancer le programme "ex1", puis taper les lignes
6) Pour terminer l’analyse lexicale, taper « Ctrl + C »
Page 7
7) Le résultat de l’analyse s’affiche sur la sortie
standard (l’écran)
8) Cette règle demande à Flex d’ignorer (point-virgule ;)
toute chaîne de caractères non reconnue par aucune
des expressions régulières écrites
9) Créer un fichier texte "[Link]"
10) Modifier le code précédent
Page 8
Exercice 4
1) Écrire un programme Flex qui extrait les
identificateurs JavaScript d’un fichier
2) Écrire un programme Flex qui extrait les instructions
d’incrémentations et de décrémentations avec des
identificateurs JavaScript.
Page 9
Page
10
Conclusion
Flex est un outil de génération automatique d’analyseurs
lexicaux.
Cette description est donnée sous la forme d’expressions
régulières étendues et du code écrit en langage C (ou C
+ +).
Un fichier Flex contient la description d’un analyseur
lexical à générer
Flex génère comme résultat un fichier contenant le code
C du futur analyseur lexical
Page
11