Chapitre
2
ANALYSE LEXICALE
0. INTRODUCTION.
L'analyse lexical constitue la premi re tache r aliser par un compilateur. Elle consiste,
dabord, lire les caract res d'entr e et g n rer une suite d'unit s lexicales. Ensuite r aliser
certaines t ches secondaires comme l' limination de caract res superflus, e.g., commentaires,
tabulations, fin de lignes, et la gestion des num ros de ligne dans le programme source. Cette
gestion permet dassocier chaque erreur rencontr e, dans le programme source, la ligne dans
laquelle elle appara t.
1. UNITES LEXICALES ET LEXEMES
Commen ons, dabord, par introduire quelques d finitions.
D finition : Une unit lexicale est une cha ne de caract res qui a une signification.
D finition : Un identificateur est une unit lexicale qui repr sente le nom dune variable ou
dune fonction.
Exemples :
Les cha nes d, e, <, > sont des op rateurs relationnels. L'unit lexicale repr sentant ces
op rateurs est oprel.
Les cha nes nom, x, y, tab, multiplication sont des identificateurs.
Les cha nes if, else, while sont des mots r serv s.
Les symboles , . ; ( ) sont des s parateurs.
D finition : Un mod le est une r gle qui d crit l criture correcte dune unit lexicale.
D finition 3.3 : Un lex me est une cha ne de caract res qui concorde avec un mod le.
Exemples :
L'unit lexicale ident (identificateurs) en C a pour mod le :
Toute cha ne de caract res non vide compos e de chiffres, lettres ou du symbole "_" et qui
commencent par une lettre est un identificateur.
Lex mes possibles : ident sont : moyenne, i, a1, factoriel ...
Analyse Lexicale
12
L'unit lexicale nombre (entier sign ) a pour mod le :
Toute cha ne de chiffres non vide pr c d e, ventuellement, du caract re + ou du caract re -
est un nombre.
Lex mes possibles : -12, 83204, +0 ...
L'unit lexicale r el a pour mod le :
Tout lex me correspondant l'unit lexicale nombre suivi, ventuellement, du caract re . et
cha ne de chiffres non vide, le tout suivi ventuellement du caract re E ou e et d'un lex me
correspondant l'unit lexicale nombre. Cela peut galement tre un point suivi d'une cha ne de
chiffres, et ventuellement du caract re E ou e et d'un lex me correspondant l'unit lexicale
nombre.
Lex mes possibles : 12.4, 0.5e3, 10, -4e-1, -0.103e+2 ...
Un mod le peut tre repr sent par une expression r guli re.
2. EXPRESSIONS REGULIERES
Nous commen ons par introduire quelques notions de base de la Th orie des Langages.
D finition : Un symbole est une concat nation dun ou plusieurs caract res.
D finition : Un alphabet est un ensemble fini non vide A de symboles.
Advertisement
D finition : Soit A un alphabet, un mot est une concat nation d l ments de A. La longueur
dun mot w, not e |w|, est le nombre de symboles qui constituent ce mot. Une portion de w est
appel e facteur. Le mot vide sera not . L'ensemble constitu de tous les mots, d finis gr ce des
l ments de A, sera not A et A+=A\{ }. On note An l'ensemble des mots de A* de longueur n.
D finition : Sur les mots, on peut d finir les op rations suivantes :
(i) Concat nation : w=w1w2
(ii) Alternance : w=w1|w2, not e aussi w=w1+w2, signifie soit w=w1, soit w=w2
(iii) Puissance : wn=ww & w, n fois o n 0.
(iv) Fermeture de Kleene :
= | w | w2 | w3 | ...
Exemples :
Soit l'alphabet A={a, b, c} : Les cha nes de caract res aaba, bbbacbb, c, , ca sont des mots
de A*, de longueurs respectives 4, 7, 1, 0 et 2.
Soit l'alphabet A={aa, b, c} : La cha ne de caract res aba n'est pas un mot de A*, puisque a
A. Mais Les cha nes de caract res baab, caa, bc, aaaa sont des mots de A*de longueurs 3, 2, 2 et 2.
D finition : On appelle langage associ un alphabet A tout sous-ensemble de A*.
Exemples : Soit l'alphabet A={a, b, c}
Soit L1 l'ensemble des mots de A* ayant autant de a que de b. Le langage L1 est un langage
infini :
L1={ , ab, ba, c, cc, cabccc, accbcccbcccca, aabb, baab, bbccccaccbaabccccaccc, & }
+ ==0*nnww
Analyse Lexicale
13
Soit L2 l'ensemble de tous les mots de A*ayant exactement 4 a. Le langage L1 est un langage
infini :
L2={aaaa, abcabbbaacc, & }
D finition : Sur les langages, on peut d finir les op rations suivantes :
(i) Union : L1 L2={w tq w L1 ou w L2}.
(ii) Intersection : L1 L2={w tq w L1 et w L2}.
(iii) Concat nation : L1L2={w tq w=w1w2 o w1 L1 et w2 L2}.
(iv) Fermeture de Kleene :
(v) Fermeture positive : L+=L*\{ }
Remarque : La concat nation n fois dun langage L sera not e Ln :
LL & L=Ln
Probl me : Etant donn un langage, comment d crire tous les mots appartenant ce langage?
Autrement dit, comment d crire un langage?
Il existe plusieurs types de langage, certains tant plus facile d crire que d'autres. Dans ce
cours, on ne s'int resse quaux langages r guliers.
D finition : Un Langage R gulier (LR), d finit sur un alphabet A, est un langage v rifiant lune
des propri t s suivantes :
(i) { }est un langage r gulier sur A.
(ii) Si a est une lettre de A alors {a}est un langage r gulier sur A.
(iii) Si L est un langage r gulier sur A alors Ln et L* sont des langages r guliers sur A.
(iv) Si L1 et L2 sont des langages r guliers sur A alors L1 L2 et L1L2 sont des langages r guliers.
Il n'y a pas d'autres langages r guliers sur A
Un LR se d crit facilement par une expression r guli re.
Advertisement
D finition : Une Expression R guli re (ER), d finit sur un alphabet A, est une expression
v rifiant lune des propri t s suivantes :
(i) est une ER qui d crit le langage { }
(ii) Si a A alors a est une ER qui d crit le langage {a}.
(iii) Si e est une ER qui d crit le langage L alors (e) est une ER qui d crit le langage L
(iv) Si e est une ER qui d crit le langage L alors (e)+ est une ER qui d crit le langage L+
(v) Si e1 et e2 sont des ER qui d crivent respectivement les langages L1 et L2 alors (e1)|(e2),
not e aussi (e1)+(e2), est une ER d crivant L1 L2.
(v) Si e1 et e2 sont des ER qui d crivent respectivement les langages L1 et L2 alors (e1)(e2) est
une ER d notant L1L2.
Il n'y a pas d'autres ER.
Remarques : pour conomiser le nombre des parenth ses, on conviendra des priorit s
d croissantes suivantes : *, concat nation, |.
Exemple : ab|c=((a)((b)))|(c)
La concat nation est distributive par rapport |. On a alors : r(s|t)=rs|rt et (s|t)r=sr|tr.
U+ ==0*nnLL
Analyse Lexicale
14
Exemples :
(a|b)* d note l'ensemble des mots form s des a ou bien des b, ou le mot vide.
(a)|((b)(c))=a|bc d note l'ensemble des mots gaux soit au mot a, soit aux mots form s de 0
ou plusieurs b suivies d'un c. C'est dire, l'ensemble {a, c, bc, bbc, bbbc, bbbbc, & }.
(a|b)abb(a|b) d note l'ensemble des mots sur {a,b}contenant le facteur abb
bababab d note l'ensemble des mots sur {a,b} contenant exactement 3 a
(abbc|baba)+aa(cc|bb)*
3. AUTOMATES FINIS
Comme nous lavons dit pr c demment, lors de lanalyse lexicale, le compilateur identifie les
unit s lexicales. Une unit lexicale peut tre repr sent e par une ER.
Exemple : Une ER d crivant les identificateurs en C pourrait tre :
ident = lettre (lettre | chiffre | s p)*
lettre = A | B | & | Z| a | b | & | z
chiffre = 0 | 1 | & | 9
s p = _
La repr sentation ci-dessus est une repr sentation textuelle dune ER. Cette repr sentation est
assez fastidieuse, surtout, quand une ER fait appel plusieurs autres ER. Cest la raison pour
laquelle, on pr f re une repr sentation graphique en utilisant la notion dAutomate Fini (AF). Cette
repr sentation est plus conviviale et plus expressive.
D finition : Un Automate Fini (AF) est un graphe orient tel que :
(i) Un sommet i repr sente l tat i.
(ii) Un arc, portant l tiquette k, partant dun sommet i et arrivant un sommet j repr sente le
fait que le symbole k fait transiter de l tat i vers l tat j.
(iii) Il existe un sommet dans ce graphe d sign comme tant l tat initial, partir du quel doit
n cessairement commencer toute s quence de transition.
(iv) Il existe des sommets dans ce graphe d sign s comme tant les tats finaux, vers lesquels
peut sachever une s quence de transition.
Remarque : Un chemin partant de l tat initial et arrivant un tat final dans un AF repr sente
Advertisement
un mot du LR reconnu par cet AF.
Voici une autre d finition dun AF :
D finition : Un AF M est un quintuple (Q, A, q0, F, ) tel que :
(i) Q est lensemble des tats de M,
(ii) A est lalphabet utilis par M,
(iii q0 est l tat initial de M : Cest l tat partir du quel doit n cessairement commencer toute
s quence de transition dans M,
(iv) F est lensemble des tats finaux de M : Ceux sont les tats vers lesquels peut sachever une
s quence de transition dans M,
(v) Et est la fonction de transition entre les tats de M :
: Q A Q
(s,a) s
Analyse Lexicale
15
Th or me : Un LR est reconnu par un AF.
On distingue deux types dAF :
(i) Les Automates Finis Non D terministes (AFND),
(ii) Et les Automates Finis D terministes (AFD).
D finition : Un Automate Fini Non D terministe (AFND) est un AF tel que pour un tat peut
avoir plusieurs arcs portant la m me tiquette quittant cet tat.
D finition : Un Automate Fini D terministe (AFD) est un AF tel que :
(i) Dune part, pour chaque tat on ne peut pas avoir deux arcs portant la m me tiquette
quittant cet tat.
(ii) Dautre part, aucun tat ne poss de de -transition, i.e., transition sur lentr e .
L gende :
: tat quelconque
: tat final
Fig. 1 Un AFND repr sentant lER aa|bb.
Fig. 2 AFND repr sentant lER (a|b)*abb.
Fig. 3 AFD repr sentant lER (a|b)*abb.
Analyse Lexicale
16
Exemple : Dans lAFND de la figure Fig. 2, les transitions 1 2 et 1 4 sont des -transition.
Fig. 4 Autre AFD repr sentant lER (a|b)*abb.
Remarque : Comme le montre les figurent Fig. 2, Fig. 3 et Fig. 4, une ER peut tre
repr sent e, aussi bien, par un AFND et quun AFD. En fait, on peut transformer un AFND N en un
AFD D. Pour ce faire, on peut utiliser lalgorithme Construction_des_Sous-Ensembles. Cet
algorithme fait appelle aux d finitions suivantes :
e-fermeture(e) : Ensemble des tats de l'AFND N accessibles depuis l' tat e de N par des e-
transitions uniquement (e-transition = transition portant l' tiquette e).
e-fermeture(T) : Ensemble des tats de l'AFND N accessibles depuis un tat e appartenant T
par des e-transitions uniquement (T est un ensemble d tats de lAFND N) :
e-fermeture(T) =
Transiter(T,x) : Ensemble des tats de l'AFND N vers lesquels il existe une transition sur le
symbole x partir d'un tat e appartenant T.
D tats : Ensemble des tats de l'AFD D
Advertisement
Dtrans : Table de transition de l'AFD D
e0 : Etat de d part de l'AFND N
Algorithme Construction_des_Sous-Ensembles (Donn es N : AFND; R sultats D : AFD)
d but
Consid rer e-fermeture(e0) comme lunique tat de D tats, cet tat est non marqu
tant que il existe un tat non marqu T dans D tats faire
Marquer T
pour chaque symbole x de lalphabet faire
U:= e-fermeture(Transiter(T,x))
si U n'appartient pas D tats alors
Ajouter U comme noeud non marqu dans D tats
fsi
Dtrans : = U
ffaire
ffaire
fin
Exercice : Montrez quon peut convertir lAFND de la Fig. 2 en lAFD de la Fig. 4.
UTeefermeture )(-e
Analyse Lexicale
17
Nous pr sentons, un algorithme de construction dun AFND partir dune ER, appel aussi
algorithme de construction de Thompson. Il existe plusieurs variantes de cet algorithme, mais, nous
pr sentons ici une version simple et facile impl menter.
Pr sentons, dabord, ces r gles de constructions :
R gle 1 : Pour , construire lAFND M( ) suivant :
O i est un nouvel tat initial et f est un nouvel tat final.
R gle 2 : Pour a, a A, construire lAFND M(a) suivant :
R gle 3 : Supposons que M(s) et M(t) sont, respectivement, les AFND des ER s et t.
(a) Pour lER s|t, not e aussi s+t, construire lAFND M(s|t) suivant :
(b) Pour lER st, construire lAFND M(st) suivant :
(c) Pour lER s, construire lAFND M(s) suivant :
Analyse Lexicale
18
(d) Pour lER (s), utiliser lAFND M(s) d j construit.
Algorithme Construction de Thompson (Donn e r : ER, A : alphabet ; R sultat M(r) : AFND)
D but
(i) Pour tout r, r A { }, faire
Construire un AFND en utilisant les R gles 1 et 2
ffaire
(ii)
(ii.i) En suivant la structure syntaxique de r, combiner les AFND construits lors de l tape
(i), en utilisant la R gle 3.
(ii.ii) Affecter cette combinaison dAFND M(r)
Fin
*