You are on page 1of 11

CH.

2 L'ANALYSE LEXICALE
2.1 L'analyseur lexical
2.2 Le texte d'entre
2.3 Les units lexicales
2.4 Les diagrammes de transition
2.5 Les automates finis
2.1 L'analyseur lexical
programme
source
analyseur
lexical
analyseur
syntaxique
table des symboles
unit lexicale
(sur requte)
Rle :
lire les caractres d'entre ;
raliser un pr-traitement du programme source ;
transmettre l'analyseur syntaxique des units lexicales ;
initialiser la table des symboles ;
garder un lien entre compilateur et utilisateur.
Intrts de l'analyse lexicale :
Conception modulaire plus simple du compilateur ;
Simplification de l'criture de l'analyseur syntaxique ;
Techniques spcifiques d'entre du texte ;
Portabilit accrue (modifications de l'alphabet d'entre) ;
Existence de techniques gnrales d'analyse lexicale ;
Problmes voisins (traitement de texte, ...)
Lexmes, units lexicales, modles, attributs :
Lexme=chane de caractres ;
Unit lexicale=type de lexmes (pour la syntaxe) ;
Modle=rgle dcrivant quelles chanes correspondent
un modle donn ;
Attribut=informations additionnelle (pour la smantique).
lexmes
vitesse
3.1416
:=
<
=
"bonjour"
begin
unit lexicale
identificateur
nombre_flottant
affectation
op_relation
op_relation
littral
dbut_bloc
Attribut
pointeur vers table des symboles
reprsentation ANSI du nombre
aucun
code pour infrieur
code pour gal
tableau de caractres
aucun
Exemples (PASCAL) :
Facteurs modifiant la complexit de l'analyse lexicale :
Le placement dans la ligne est-il important ?
Quelle est la signification des blancs ?
Les mots cls sont-ils rservs ?
Erreurs lexicales : peu (caractres interdits, ...)
2.2 Le texte d'entre
Ncessit d'optimiser la phase de lecture.
Utilisation d'un tampon linaire ou circulaire.
Couple de pointeurs pour grer le problme des
"caractres de pr-vision"
Exemple :
etiq:vrai:=valeur=.1;
1 23 4 5 67 8
Fonctions appropries dans certains langages :
get et unget en C
2.3 Les units lexicales
Alphabet : binaire, ASCII, ... ;
Mot : chane de caractres ; mot vide
Langage : ensemble de mots ;
exemples : , {}, {begin, end}
Oprations sur les langages :
Union ensembliste : L M ;
Concatnation : LM ;
Fermeture positive : L
+
= L
i
Fermeture de Kleene : L* = L
i

N.B. Ni la complmentation, ni lintersection.

=

1 i

=

0 i
Expressions rgulires :
i) Lexpression rgulire reprsente {} ;
ii) Si a est une lettre, alors cest une expression
rgulire qui reprsente{ a} ;
iii) Si r et s sont des expressions rgulires qui
reprsentent L(r) et L(s), alors :
r | s reprsente L(r) L(s) (ou r + s)
rs reprsente L(r)L(s)
r* reprsente L(r)*.
Langage rgulier
= langage reprsent par expression rgulire.
Exemples :
a | b, (a | b)*abba , a*b(a*b)* et (a | b)*b
(1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9) (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)*
Dfinition rgulire :
permet de donner des noms des expressions rgulires.
Exemples :
lettre A|B|...|Z|a|b|...|z
chiffre 0|1|...|9
id lettre ( lettre | chiffre )*
chiffres chiffre ( chiffre )*
fraction_opt . chiffres |
exposant_opt E (+|-| ) chiffres |
nb chiffres fraction_opt exposant_opt
Avec cette dfinition, id reconnat a, a0b, begin
Et nb reconnat 0, 1.0, 2E4, 1.5E-8, 0.25E-0
Mais nb ne reconnat pas 0., .1, 1E2.0
Notations abrges possibles :
r
+
= r r* ; r? = r | ; [abc] = a|b|c ; [a-z] = [ab...z ]
Exemples :
lettre [A-Za-z ]
chiffre [0-9]
id lettre ( lettre | chiffre )*
chiffres ( chiffre )
+
fraction_opt (. chiffres )
+
exposant_opt (E(+|-)? chiffres )?
nb chiffres fraction_opt exposant_opt
Langages rguliers : appropris aux dfinitions lexicales,
pas aux dfinitions syntaxiques :
les systmes de parenthsages ne sont pas rguliers.
2.4 Les diagrammes de transition
Exemple : fragment de grammaire
instr si expr alors instr
| si expr alors instr sinon instr |
expr terme oprel terme | terme
terme id | nb
partie
syntaxique
si si
alors alors
sinon sinon
oprel < | <= | = | <> | > | >=
id lettre ( lettre | chiffre)*
nb chiffre
+
( .chiffre
+
)? (E (+|-)? chiffre
+
)?
partie
lexicale
Diagrammes de transition : unit lexicale oprel
0 1 2
3
4
7
5
8
6
*
*
dbut < =
>
=
>
=
autre
autre
retourne(oprel, PPE)
retourne(oprel, DIF)
retourne(oprel, PPQ)
retourne(oprel, EGA)
retourne(oprel, PGE)
retourne(oprel, PGQ) Lastrisque * indique quil
faut restituer le dernier
caractre lu au flot dentre
Diagrammes de transition : unit lexicale id et mots cls
9 10 11
dbut
retourne(UniLexId (),
RangerId ())
lettre autre
*
lettre-chiffre
Permet aussi de distinguer les mots cls :
Table des symboles initialise par les mots cls ;
RangerId examine la table, retourne nouveau pointeur,
ou pointeur existant,
ou 0 si mot cl ;
UniLexId de mme retourne id ou lunit lexicale mot cl.
Diagrammes de transition : unit lexicale nb
12 13 14
dbut chiffre .
chiffre
15
chiffre
chiffre
17 18 19
chiffre autre
*
chiffre
16
+ ou -
E
E
chiffre
20
*
21
*
autre autre
Implantation facile en C ou PASCAL
2.5 Les automates finis
Modle proche de limplantation, permettant de rpondre
oui ou non selon que la chane de caractres en entre
rpond ou non un modle dexpression rgulire donn.
Gnralisation des diagrammes de transition.
Dans la thorie, pas daction smantique associe, mais assez
facile de la rajouter.
Utilisations autres que pour lanalyse lexicale lie un
compilateur : recherche de chanes de caractres,
traitement de textes, prtraitement, formatage.
Deux modles quivalents, dterministe (AFD) et
non dterministe (AFN).
Automate fini non dterministe (AFN) ou dterministe (AFD) :
Ensemble fini dtats E ;
Alphabet dentre fini ;
Fonction de transition ;
tat initial q
0
;
Ensemble dtats terminaux F ;
AFD : : E E
au plus une transition par couple tat-lettre ;
AFN : : E ( {}) 2
E
, ensemble des parties de E ;
plusieurs transitions possibles par couple ;
possibilits de transitions vides ou -transitions.
Mots accepts (ou reconnus) formant le langage accept.
Reprsentation sous forme de graphe de transitions.
Exemple dAFN :
2 3 4
a b
0

1
a
a
b
Le mot w = abaab est accept (ou reconnu) car il existe un
chemin de ltat initial un tat terminal tel que
la concatnation des symboles apparaissant sur les arcs
constituant ce chemin fasse w :
0 a 0 b 0 1 a 2 a 3 b 4
2 3
a
b
0 1
a
b
Exemple dAFD :
a
b
Le mot w = abaab est encore accept : la suite des lettres
constituant w est la suite des tiquettes dun chemin
(ncessairement unique) de ltat initial un tat terminal :
0 a 1 b 0 a 1 a 2 b 3
a
b
Construction dun AFN partir dune expression rgulire
(construction de Thompson).

pour : N()
pour a : N(a)
pour r | s : N(r | s )
a
N(r)
N(s)

N(r) N(s) pour rs : N(rs)


N(r)


pour r* : N(r*)
On ralise dabord une analyse syntaxique de lexpression
rgulire, puis construction de Thompson.
Exemple : r = (a | b)*aab

a
b
a a b

1 2
3 4
5 6 7 8 9 10 11
tats numrots suivant lordre de construction de lautomate.
Utilisation dun AFN pour reconnatre un mot :
Construction des chemins correspondants dans lAFN.
Exemple :
8
1
7
3
5
a
2
6
9
5
8
1
3
b
4
6
5
8
1
3
a
2
6
9
5
8
1
3
2
6
9
5
8
1
3
a
10
b 4
6
5
8
1
3
11
mot
reconnu
transitions
sur la lettre
-clture
Dterminisation dun AFN.
Principe : construire toutes les transitions possibles, compltes
par leur -clture.
Exemple:
8
1
7
3
5
2
6
9
5
8
1
3
4
6
5
8
1
3
2
6
9
5
8
1
3
10
4
6
5
8
1
3
11
a
b
a
b
b
b
a
a
b
a
Utilisation des AFN et des AFD :
Langage dfini par une expression rgulire de longueur k et
mot de longueur n .
1) Construction de lAFN en temps O(k) et place O(k) ;
Construction des chemins dans lAFN pour tester le mot
en temps O(k n) et place O(k) ;
2) Construction de lAFD en temps O(2
k
) et place O(2
k
) ;
Test du mot en temps O(n) et place O(1) ;
3) valuation paresseuse : ne calculer de lAFD que la partie
effectivement utilise par le mot tester.
Approche 1) efficace si peu de mots courts traiter ;
Approche 2) efficace si de nombreux mots longs traiter ;
Approche 3) bon compromis gnral.

You might also like