SlideShare une entreprise Scribd logo
1  sur  3
Télécharger pour lire hors ligne
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 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
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.

Contenu connexe

Similaire à Chap2compil

slides3 slides3 slides3 slides3 slides3 slides3
slides3 slides3 slides3 slides3 slides3 slides3slides3 slides3 slides3 slides3 slides3 slides3
slides3 slides3 slides3 slides3 slides3 slides3
mia884611
 
Cours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdfCours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdf
Hailisara
 
cour de compilation
cour de compilation cour de compilation
cour de compilation
Ens Kouba
 
Exercicescorrigesdivers
ExercicescorrigesdiversExercicescorrigesdivers
Exercicescorrigesdivers
Karim Amane
 

Similaire à Chap2compil (20)

compilation1-2020.pdf
compilation1-2020.pdfcompilation1-2020.pdf
compilation1-2020.pdf
 
Langage de programmation analyse-(lex).pdf
Langage de programmation analyse-(lex).pdfLangage de programmation analyse-(lex).pdf
Langage de programmation analyse-(lex).pdf
 
slides3 slides3 slides3 slides3 slides3 slides3
slides3 slides3 slides3 slides3 slides3 slides3slides3 slides3 slides3 slides3 slides3 slides3
slides3 slides3 slides3 slides3 slides3 slides3
 
c2.pdf
c2.pdfc2.pdf
c2.pdf
 
Cours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdfCours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdf
 
Asd
AsdAsd
Asd
 
Ktab asd
Ktab asdKtab asd
Ktab asd
 
Algo inf102 2007
Algo inf102 2007Algo inf102 2007
Algo inf102 2007
 
langage C++
langage C++langage C++
langage C++
 
cour de compilation
cour de compilation cour de compilation
cour de compilation
 
POO en C++: Les fonctions
POO en C++: Les fonctionsPOO en C++: Les fonctions
POO en C++: Les fonctions
 
Devtalk01@snv: list comprehension
Devtalk01@snv: list comprehensionDevtalk01@snv: list comprehension
Devtalk01@snv: list comprehension
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
1 rappel d'excel
1 rappel d'excel1 rappel d'excel
1 rappel d'excel
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
Algorithme et Programmation
Algorithme et ProgrammationAlgorithme et Programmation
Algorithme et Programmation
 
Cours compilation
Cours compilationCours compilation
Cours compilation
 
eExercices corrigesdivers
eExercices corrigesdiverseExercices corrigesdivers
eExercices corrigesdivers
 
Exercicescorrigesdivers
ExercicescorrigesdiversExercicescorrigesdivers
Exercicescorrigesdivers
 
Cours programmation en langage C.pdf
Cours  programmation  en  langage  C.pdfCours  programmation  en  langage  C.pdf
Cours programmation en langage C.pdf
 

Chap2compil

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