1. Chapitre 2
Analyse Lexicale
2.1 Introduction
L'analyse lexicale est la première étape de la compilation. Son rôle consiste à lire les
caractères du texte à compiler et à produire un ensemble de mots appelés unités lexicales.
Ces unités lexicales seront traité lors de l'analyse syntaxique.
Pendant l'analyse lexicale, le compilateur eectue aussi certaines taches secondaires
comme :
L'élimination des commentaires et des espaces (caractère blanc, tabulation, n de
ligne).
La liaison entre les messages d'erreurs et le programme source, (garder la trace du
nombre de caractère n de ligne rencontrés pour pouvoir associer un numéro de
ligne à un message d'erreur).
2.2 Unités lexicales, modèles et lexèmes
Dénition 1 Une unité lexicale est un ensemble regroupant des chaines de caractères,
(des mots), qui ont une signication collective semblable.
Exemple : l'unité lexicale IDENT regroupe toutes les chaines de caractères qui corres-
pondent à des identicateurs de variables de fonction, etc.
Dénition 2 Un modèle est une règle associée à une unité lexicale qui décrit l'ensemble
des mots du langage qui peuvent correspondre à cette unité lexicale.
Exemple : en langage C, l'unité lexicale IDENT a pour modèle toute chaine de caractères
composée de chires, lettres ou du symbole _ et qui ne commence pas par un chire.
Dénition 3 On appelle lexème toute chaine de caractère du programme source qui
concorde avec le modèle d'une unité lexicale.
Exemple : i, x2, ctr, inverse_matrice sont des lexèmes de l'unité lexicale IDENT du
langage C. 2013, −47 sont des lexèmes de l'unité NOMBRE du langage C. 3.14, 1.35E −6
sont des lexèmes de l'unité REEL du langage C.
1
2. 2 CHAPITRE 2. ANALYSE LEXICALE
L'analyseur lexical est le sous programme du compilateur qui eectue l'analyse lexicale.
Sont rôle principal est d'identier les unités lexicales auxquelles appartiennent les chaines
de caractères rencontrées dans le chier source. L'analyseur lexical est en interaction avec
les autres sous-programmes du compilateur, en particulier, avec l'analyseur syntaxique.
La gure suivante résume cette interaction :
A la réception d'une commande prochaine unité lexicale de la part de l'analyseur
syntaxique, l'analyseur lexical lit les caractères d'entrée jusqu'à ce qu'il puisse obtenir
la prochaine unité lexicale. Cette interaction est implémentée en faisant de l'analyseur
lexical un sous programme de l'analyseur syntaxique.
2.3 Mise en ÷uvre d'un analyseur lexical
Les expressions régulières étudiées en théorie des langages constituent l'outil principal
pour la spécication des unités lexicales. Toutefois, on se permet d'utiliser des opérateurs
supplémentaires et ceci pour des raisons de concision d'écriture. Par exemple, l'opérateur
- sera utilisé pour spécier les ensembles ordonnés de symboles. Ainsi 0 ∪ 1 ∪ 2 ∪ . . . ∪ 9
sera noté 0-9. L'opérateur ? est utilisé pour désigner zero ou une occurrence d'une expres-
sion régulière r donnée. Ainsi, r? est équivalent à r | ε. Les opérateurs supplémentaires
n'augmentent en rien de la puissance des expressions régulières. Ainsi, on continuera à
utiliser des langages réguliers au niveau lexical.
Dénition 4 Une dénition régulière est une suite de déclarations de la forme :
d1 = r1
d2 = r2
.
.
.
.
.
.
dn = dn
où les di sont des identicateurs de la dénition régulière et chaque ri est une expression
régulière sur l'alphabet Σ ∪ {d1, . . . , di−1}.
Exemple 1 : Dénition régulière de l'unité lexicale IDENT du langage C
Lettre = A-Z | a-z
Chire = 0-9
3. 2.4. CONCLUSION 3
Sep = _
IDENT = (lettre | sep)(lettre | chire | sep)*
Exemple 2 : Dénition régulière de l'unité lexicale des nombres réels du langage C
Lettre = A-Z | a-z
Chire = 0-9
Chires = chire
+
Decimal = (.Chires) ?
Exposent = (E(+|-) ? Chires) ?
Nombre = Chires Decimal Exposent
2.4 Conclusion
Les expressions régulières sont un outil puissant et pratique pour spécier les consti-
tuants élémentaires des programmes (les unités lexicales). Toutefois, elles sont inadéquates
pour la spécication de constructions plus complexes, telles que les expressions arith-
métiques ou logiques ou encore les accolades intervenant dans les blocs de programme.
L'étude de telles structures nécessite l'utilisation d'outils théorique plus puissant, à savoir,
les grammaires et les automates à pile.