Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Analyse Lex

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 11

SAOUDI Lalia Analyse lexicale 2007/2008

Page 6


II. Analyse l exicale
1. Introduction :
L'analyse lexicale constitue la premire phase de compilation ; elle consiste segmenter
un texte source en un ensemble de mots quon appelle traditionnellement tokens (leur terme
exact est lexme, ce qui signifie unit lexicale, que lanalyseur syntaxique va utiliser ; cette
interaction est implante en faisant de lanalyseur lexical un sous programme de lanalyseur
syntaxique, la rception dune commande prochaine unit lexicale manant de
lanalyseur syntaxique, lanalyseur lexical lit les caractres dentres jusqu ce quil puisse
identifier la prochaine unit lexicale.
Unit lexicale
Pgm source-- analyseur lexical---------------------- analyseur syntaxique
<----------------------
Obtenir prochaine unit lexicale


Table des symboles
Il peut galement raliser certaines taches secondaires, une de ces tches est llimination
dans le programme source des commentaires et des espaces qui apparaissent sous formes de
caractres blanc tabulation ou fin de ligne.
Une autre tche consiste relier les messages derreur issus du compilateur au programme
source par exemple un analyseur lexical peut associer un message derreur au numro de
ligne.
2 . Unit lexicale
Dfinition : Une unit lexicale est une suite de caractres qui a une signification collective
Exemple :
Les chaines <,>,= sont des oprateurs relationnels, lunit lexicale est OPREL par
exemple
Dfinition Un modle est une rgle associe unit lexicale qui dcrit lensemble des
chaines du programme qui peuvent correspondre cette unit lexicale
Dfinition : on appelle lexme toute suite de caractre du pgm source qui concorde avec
le modle dune unit lexicale.
Exemple
Lunit lexicale IDENT (identificateur) en C a pour modle toute suite non vide de
caractre compos de chiffre, lettre, ou des symboles et qui commence par une lettre
Exemple de lexme pour cette unit lexicale sont a ; b ; montant, tot1.
Pour dcrire un modle dune unit lexicale on utilisera les expressions rgulires.
SAOUDI Lalia Analyse lexicale 2007/2008


Page 7


3 .Rappels:
Dans cette partie, nous introduisons quelques notions de base de la thorie des langages
Les expressions rgulires est une notation importante pour spcifier des modles. Chaque
modle reconnait un ensemble de chaines.
Rappels de notation
On appellera alphabet un ensemble fini dont les lments seront appels lettres.
Exemple : 0,1 sont les lettres de lalphabet binaire
Un mot sur un alphabet A est une suite finie dlments de A.
Un mot de longueur n compos des lettres a
1
, a
2
., an sera not a
1
a
2
a
n
, le mot vide est
not
La concatnation de deux mots w1 et w2 est note w1w2
Lensemble des mots sur A est not A*
Un langage sur un alphabet A est un ensemble de mots de A*
Oprations sur les langages
L U M= {s/sL ou sM}
LM={st/sL et tM}
L*=U
i=0
L
i
L
+
=U

i=1
L
i

4. Expression rgulire
Une expression rgulire est une formule close permettant de dsigner un ensemble de
chaines de caractres construites partir dun alphabet (ventuellement augmente de la
chaine vide). On appelle cet ensemble de chane de caractre un langage.
Une expression rgulire est une notation pour dcrire un langage rgulier.
Soit un alphabet (un ensemble de lettres), une expression rgulire est donc
1. Les lments de , et sont des expressions rgulires.
2 .Si et sont des expressions rgulires, alors ( | ), () et * sont des expressions
rgulires. ( | )reprsente lunion, () la concatnation et * la rptition (Cest donc
lunion des concatnations de avec lui mme zro fois (cest `a dire la chane vide) ou plus.
est llment neutre par rapport la concatnation et est lensemble vide de caractre,
neutre par rapport lunion.
On peut viter les parenthses dans des expressions rgulires si lon adopte les conventions
suivantes :
1- * a la plus haute priorit et est associatif gauche
2- La concatnation a la deuxime plus haute priorit
3- / a la plus faible priorit
Exemple :
SAOUDI Lalia Analyse lexicale 2007/2008


Page 8


1-Selon ces conventions, (a)/ ((b)* (c)) <--> a/b*c
Les deux expressions dnotent lensemble des chaines qui ont soit un seul a ou un nombre
quelconque ; ou nul ; de b suivi par un c
2 - Soit C={a,b}
1. lexpression rguliere a |b dnote lensemble {a,b}
2. Lexpression rgulire (a |b) (a |b) dnote {aa,ab,ba,bb} lensemble de toutes les chaines de
a et b de longueur 2
3. Lexpression rgulire a* dnote lensemble de toutes les chaines formes dun nombre
quelconque de a, c. . d {,a,aa,aaa, ..}
4. lexpression rgulire a|a*b dnote lensemble contenant la chaine a et toutes les chaines
constitues dun nombre quelconque de a (ventuellement nul) suivi de b.
Notations abrges :
1. Au moins une instance : r + =rr*
2. Zro ou une instance : r ? c une abrviation de r|
3. r=
4. Classes de caractres : la notation [abc] o a,b,c sont des symboles dalphabets dnote
lexpression rgulire a/b/c
Une classe de caractres comme [a-z] dnote lexpression rguliere a/b/c../z
On peut dcrire un identificateur comme
Identificateur = lettre (lettre | chiffre|sep)*
Tel que lettre=[a-zA-Z] Chiffre=[0-9 ] Sep=_
5.Reconnaissance des units lexicales
Un reconnaisseur pour un langage est un pgm qui prend en entre une chaine x et rpond
oui si x est un mot du langage et non autrement. On compile une expression rguliere en
un reconnaisseur en construisant un diagramme de transition gnralis appel automate
fini.
Pour illustrer cette section nous allons nous donner comme exemple le problme de la
reconnaissance des units lexicales INFEG, DIFF, INF, EGAL, SUPEG, SUP, IDENTIF,
respectivement dfinies par les expressions rgulires <=, <>, <, =, >=, > et
lettre(lettre/chiffre)*.
Par exemple, figure suivante montre les diagrammes traduisant la reconnaissance des units
lexicales INFEG, DIFF, INF, EGAL, SUPEG, SUP et IDENTIF.
SAOUDI Lalia Analyse lexicale 2007/2008


Page 9




Les automates fini peut tre dterministes ou non ; sont capables de reconnaitre
exactement ce que les expressions rgulires peuvent dnoter, cependant il ya un conflit
temps / espace ; alors les AFD peuvent conduire des reconnaiseurs plus rapide que les
AFND ; un AFD peut tre beaucoup volumineux quun AFND.
Les automates finis non dterministe
Un automate fini non dterministe (AFND) est un quintuplet A=(Q , ,,q0, F), o
-Q est in ensemble fini dtats
- est un alphabet
- : Q x u { } Q est la fonction de transition
-q0 est ltat initial
- F est lensemble des tats terminaux ou finaux
Un automate non-dterministe est un automate qui prsente la particularit suivante :
Plusieurs arcs reconnaissant le mme caractre peuvent sortir du mme tat.
Il peut y avoir des transitions, notes , qui ne correspondent une aucune reconnaissance
de caractres.
Le langage reconnu par un automate (Q , ,,q0, F) est lensemble des mots w tels qu il
existe q F tel que q0---
w
q

SAOUDI Lalia Analyse lexicale 2007/2008

Page
10


Prsentation de lautomate :
Un automate est souvent reprsent par un graphe orient dont les sommets sont les
tats et les artes tiquetes correspondent aux transitions, on distingue les tats
dacceptations que lon entourera dun cercle et ltat initial.


Exemple : construire lAFN qui reconnait le langage ( a/b) * abb.
Le langage dfini par un AFN est lensemble des chaines dentre quil accepte.
Un AFN accepte une chaine dentre x si et seulement sil existe un certain chemin dans
le graphe de transition entre ltat initial et ltat final
Automate fini dterministe.
Lautomate est dit dterministe lorsque
1. la fonction associe chaque couple (tat, lettre) un tat unique
2. aucun tat na de transition
6. EXPRESSIONS REGULIERES ET AUTOMATES
Pour tre capable de construire un automate qui reconnaisse un langage rgulier quelconque,
il suffit davoir un mcanisme qui reconnait chaque lettre, puis un mcanisme qui reconnait la
Concatnation, lunion et la fermeture de langages reconnus.
Construction dun AFN partir dune expression rguliere :
Donne : une expression rguliere r sur un alphabet
Rsultats : Un AFN qui connait L(r)
SAOUDI Lalia Analyse lexicale 2007/2008

Page
11


Mthode : On dcompose dabord r en ses sous expressions. Puis, en utilisant les rgles 1 et
2, on construit des automates pour chacune des symboles de base c..d. soit soit les
symboles de lalphabet
Ensuite en se guidant sur la structure syntaxique de lexpression rgulire r, on combine
rcursivement les AFN de chaque sous expression de r, en utilisant la rgle 3 jusqu obtenir
lAFN pour lexpression complte
Si les expressions rgulires r 1 et r 2 sont reconnues respectivement par les automates A1 et
A2, avec q0 comme tat initial et q comme un tat final alors

0-si r= alors lautomate a deux tats distincts q0 et q sans transition entre eux (q nest donc
pas atteignable)
1-si r= alors lautomate a un seul tat q0=q et pas de transitions.
2-Si R=a alors on met une seule transition entre q0 et q.
3- Si r=(r1|r2) Un automate connaissant r1|r2 est construit de la manire suivante partir des
automates A1 et A2 : son tat dentre est un nouvel tat qui possde deux transitions vers
les tats dentre de A1 et A2. Il possde un tat accepteur, qui est un nouvel tat recevant des
transitions de tous les tats accepteurs de A1 et A2.
-Si r=r1r2 lautomate est construit comme la juxtaposition de A1 et A2. Il a pour entre letat
dentre de A1, pour tats accepteurs les tats accepteurs de A2,
-Si r=r1 * on cre un nouvel tat t initial et final, on peut aller de i f directement en suivant
un arc tiquet ou bien on peut aller de i f traversant A1 une ou plusieurs fois
Exemple dautomate non-dterministe :
Nous allons illustrer ce processus sur un exemple simple, il est lmentaire gnraliser.
Considrons le langage dsign par lexpression rgulire : a(b/ c)* . Le parenthsage indique
lordre dans lequel on doit dcomposer lexpression ; il faut reconnaitre dans lordre : les
langages
b et c puis (b/ c) puis (b/c)* puis a puis a(b/c)*.
SAOUDI Lalia Analyse lexicale 2007/2008

Page
12




Exemple : Utilisez lalgorithme pour construire lAFN pour lER r= ( a/b) * abb

7. Dterminisation :
On veut maintenant obtenir un automate dterministe ( D , , d , d0 , Df) partir dun
Automate Non Dterministe ( N , , n , n0 , Nf) , la clef est de driver D et d. reste le
mme.
SAOUDI Lalia Analyse lexicale 2007/2008

Page
13


Lalgorithme utilis est appel la construction des sous ensembles ( subset construction) .
Lide est que les tats du nouvel automate sont des ensembles dtats de lancien automate.
un nouvel tat qi = { n1 ,n2nk} contient lensemble des anciens tats pouvant tre atteints
en lisant un caractre particulier depuis un tat qj. Lalgorithme utilis est le suivant :
- Q0 - fermeture (n0)
- initialiser Q avec q0
- WorkList q0
Tant que ( WorkList )
Choisir qi dans WorkList
Pour chaque caractre c
q - fermeture ( (qi ,c))
d (qi ,c) q
si q Q alors ajouter q worklist
ajouter q Q
l - fermeture dun ensemble dtats ajoute cet ensemble dtat tous les tats pouvant tre
atteint par des - transitions partir des tats de lensemble.
loprateur ( qi , c) calcule lensemble des tats atteignables en lisant c depuis les tats ni
i
de qi : si qi= { n
i
1
, n
i
2
.. n
i
k
} alors ( qi , c ) = U
n
( n
i
j
, c )
Algorithme de calcul de - fermeture ( q)
- Empiler tous les tats de q dans une pile
- Initialiser - fermeture (q) q
- Tant que pile nest pas vide faire
Dbut
Dpiler ni , le sommet de la pile
Pour chaque tat e avec un arc de ni e tiquet faire
Si e nest pas dans - fermeture (q) faire
Dbut
Ajouter e - fermeture (q)
Empiler e dans la pile
Fin Fin
Appliquons cet algorithme sur lautomate non-deterministe :

A B C
S0 q0 s1 ,s8,s6,s9,s2,s4 - -
s1 ,s8,s6,s9,s2,s4q1 - s3,s7,s9,s6,s2,s4 s5,s7,s9,s6,s2,s4
s3,s7,s9,s6,s2,s4q2 - s3,s7,s9,s6,s2,s4 s5,s7,s9,s6,s2,s4
s5,s7,s9,s6,s2,s4q3 - s3,s7,s9,s6,s2,s4 s5,s7,s9,s6,s2,s4

SAOUDI Lalia Analyse lexicale 2007/2008

Page
14



b
b
b a
b b
a
a a
8. Minimisation
Le grand nombre dtats de lautomate rsultant de la dterminisation est un problme pour
limplmentation. La minimisation permet de regrouper les tats quivalents, cest `a dire qui
ont
le mme comportement sur les mmes entres. Lalgorithme de minimisation construit une
partition
de lensemble D des tats de lautomate dterministe, chaque tat tant dans le mme sous
ensemble a le mme comportement sur les mmes entres. Lalgorithme est le suivant :
Initialement, la partition consiste en deux groupes : les tats finaux et les tats non-finaux.
Ltape principale consiste prendre un groupe dtats par exemple A= {e1,e2ek} et un
symbole a, et tudier les transitions des tats de A sur a, si ces transitions conduisent des
tats qui tombent dans au moins deux groupes diffrents de la partition courante, alors on doit
diviser A de manire que les transitions depuis chaque sous ensemble de A soient toutes
confines un seul groupe de la partition courante.
Nous rptons ce processus de division de groupes de la partition courante jusqu ce que plus
aucun groupe nait besoin dtre divis.
Soit un AFD dont lensemble dtats est E et lalphabet dentres est , nous supposons que
chaque tat a une transition sur chaque symbole dentre, si ce ntait pas le cas, nous
pourrions introduire un nouvel tat tat mort d avec des transitions depuis d vers d sur
tous les symboles, ainsi quune transition depuis ltat e vers d sur le symbole a sil n y avait
pas dj de transition de e sur a.
Algorithme : minimisation du nombre dtats dun AFD
1. Construire une partition initiale II de lensemble des tats avec deux groupes : les tats
finaux F et les tats non finaux E-F
2. Appliquer la procdure partitionner II pour construire une nouvelle partition II
n.

3. Si II
n
= II , soit II
f
= II et continuer ltape 4. Sinon rpter ltape 2 avec II = II
n

4. choisir un tat dans chaque groupe de la partition II
f
en tant que reprsentant de ce
groupe. Les reprsentants seront les tats de lAFD rduit.
5. Si lAFD rduit a un tat mort d, alors supprimer d de l AFD, supprimer aussi tout
tat non accessible depuis ltat de dpart.
Procdure Partitionner :
Nous obtenons lautomate suivant :

Exemple 2 : rendre lautomate AFN de l ER ( a /b ) * abb
dterministe
A B
C
D E
SAOUDI Lalia Analyse lexicale 2007/2008

Page
15


Pour chaque groupe G de II faire
Dbut
- Partitionner G en sous groupes de manire que deux tats e et t de G soient dans le
mme sous groupe si et seulement si , pour tout symbole a, les tats e et t ont des
transitions sur a vers des tats du mme groupe de II.
- Remplacer G dans II
n
par tous les sous groupes ainsi forms
Fin
Exemple : Revenons lAFD de lexpression rgulire : ( a /b) * abb , construire son AFD
minimis
1-II={ E , ABCD} *sur le symbole b D a une transition vers E II1={ E, D, ABC}
2- 3- sur le symbole b B a ne transition vers D II2={E, D, AC,B}

4-Dans la passe suivante on ne peux dcouper aucun des groupes, donc
IIf= {E,B,D, AC}
5-Si lon a choisi A comme reprsentant du groupe AC , on obtient
l'automate rduit , ltat A est ltat de dpart et E est le seul tat
dacceptation ( final)


9. Implmentation dun automate
Il sagit maintenant de produire une implmentation de lautomate gnr lors de la
production prcdente. Il y a essentiellement deux types dimplmentation, les analyseurs
bass sur des tables et les analyseurs cods directement.
9.1 Analyseur lexical base de table
Lanalyseur utilise un programme squelette commun tous les analyseurs lexicaux et une
table dans laquelle est stocke la fonction de transition. Pour notre exemple cela donne :
char prochain caractre
state s0
tant que (char EOF)
state (state; char)
char prochain caractre
si (state F )
alors accepter
sinon rejeter

9.2 Analyseur lexical cod directement
Le type danalyseur prcdent passe beaucoup de temps tester et manipuler la variable
dtat, on peut viter cela en codant directement letat dans letat du programme :
s0 : char prochain caractre
si (char = a)
alors goto s1
sinon goto se
s1 : char prochain caractre
si (char = b|char = c)
alors goto s1
sinon si (char = EOF)
alors accepter
sinon goto se
a b
A B C
B B D
C B C
D B B,E
SAOUDI Lalia Analyse lexicale 2007/2008

Page
16


se : rejeter
Ce type dimplmentation devient rapidement difficile grer manuellement, mais il peut tre
gnr automatiquement et sera en gnral plus rapide que lanalyseur base de table.
10. Implmentation efficace des analyseurs lexicaux :
Une procdure suivre pour implmenter un analyseur lexical pour un langage donn
pourrait se rsumer comme suit :
0- Spcifier chaque type dentit lexicale laide dune expression rgulire
1- Convertir chaque expression rgulire obtenue en 1 en un automate finis
2- Construire lautomate union de tous les automates de ltape 2
3- Rendre lautomate de ltape 3 dterministe
4- Rduire au minimum, le nombre des tats de lautomate de ltape 4.
5- Implmenter lautomate obtenu ltape 5
11. Outils danalyse lexicale :
Des nombreux outils ont t btis pour construire des analyseurs lexicaux tels que : lex ,
flex , ocamllex qui prennent en entre un fichier source contenant les expressions
rgulires et les actions associes et aprs la compilation produisent un fichier de langage
cible associ ( c pour lex et flex et ocaml pour ocamllex), qui doit tre compil par le
compilateur de code cible.

Vous aimerez peut-être aussi