Vous êtes sur la page 1sur 11

Chapitre 01: Analyse Lexicale

1 1

Plan du cours
1. 2. 3. 4. 5. 6.

Introduction Dfinitions Erreurs Lexicales Expressions Rgulires Automates Mise en uvre d'un analyseur lexical

2 2

Introduction

L'analyseur lexical constitue la premire tape d'un compilateur. Sa tche principale est de lire les caractres d'entre et de produire comme rsultat une suite d'units lexicales que l'analyseur syntaxique aura traiter.
Ensemble des lexmes Messages derreurs U.L Code source

Code source

Analyseur Lexicale

Analyseur lexical

U.L suivante

Analyseur syntaxique

Analyse smantique

Table des symboles

1. 2.

L'analyseur lexical ralise certaines tches secondaires comme: l'limination de caractres superflus (commentaires, tabulations, fin de lignes,...) La gestion des numros des lignes dans le programme source.

3 3

Dfinitions
1. 2. Unit lexicale:
Une suite de caractres qui a une signification collective.

Lexme
Toute suite de caractre du programme source qui concorde avec le modle d'une unit lexicale.

3.

modle (Rgle lexicale) :


Une rgle associe une unit lexicale qui dcrit l'ensemble des chanes du programme qui peuvent correspondre cette unit lexicale.

4.

Attributs :
informations concernant le lexme (champs dans la table des symboles) ;

4 4

Erreurs Lexicales

Peu d'erreurs sont dtectables au niveau lexical : Plusieurs stratgies sont possibles : Mode panique : on ignore les caractres qui posent problme et on continue. Cette technique transfre le problme l'analyseur syntaxique Transformations du texte source : insrer un caractre, remplacer, changer, etc. Elle se fait en calculant le nombre minimum de transformations apporter au mot qui pose problme pour en obtenir un qui ne pose plus de problmes. Cette technique de rcupration d'erreur est trs peu utilise en pratique car elle est trop coteuse implanter.

1. 2.

5 5

Expressions rgulires (ER)


Une expression rgulire est une notation pour dcrire un langage rgulier. Soit A un alphabet, une expression rgulire est donc: Les lments de A, et sont des expressions rgulires. Si et sont des ERs, alors ( | ), () et * sont des ERs.

Lordre de priorit Les oprateurs , concatnation et | sont associatifs gauche, et vrifient : 1. ( la rptition). 2. Concatnation. 3. | (lunion). Remarque est llment neutre par rapport la concatnation. (lensemble vide de caractre), est llment neutre par rapport lunion.

6 6

Dfinitions rgulires
La nomination des expressions rgulires est dite une dfinition rgulire. Ces noms seront utiliss pour construire dautres expressions rgulires. On crit donc
d1 r1 d2 r2
...

dn rn

o chaque di est un nom distinct et chaque ri est une ER sur U {d1,d2,,di-1} Exemple lettre A | B | . . . | Z | a | b | . . . | z chiffre 0 | 1 | . . . | 9 id lettre ( lettre | chiffre ) chiffres chiffre chiffre frac . chiffres | Exp ( E (+ | - | ) chiffres ) | nb chiffres frac exp
7 7

Notations abrges
Pour allger certaines critures, on complte la dfinition des ER en ajoutant les notations suivantes :

Soit x une ER dfinissant L(x) : (x)+ est une ER dfinissant L(x))+ Soit x une ER dfinissant L(x) : (x)? est une ER dfinissant L(x) {} Si c1 , c2,. . ck sont des caractres, ER c1 |c2 |... |ck peut se noter [c1c2 ... ck], [c1c2] dsigne la squence de tous les caractres c tels que c1 c c2 . Exemple Les dfinitions de lettre et chiffre peuvent : lettre : [AZaz] chiffre : [09] Les mots cls: "for", "if" Les variables: ['a'-'z']+ ['0'-'9']* Les entiers: ['0'-'9']+ Les symboles: '(', ')', '+', '*', '=' Le lexme vide: (' ' | '\n')
8 8

Automates
Un automate tats finis (AEF) est dfini par: Un ensemble fini E d'tats Un tat e0 distingu comme tant l'tat initial Un ensemble fini T d'tats distingus comme tats finaux (ou tats terminaux) Un alphabet des symboles d'entre Une fonction de transition : E E qui tout couple form d'un tat et d'un symbole de fait correspondre un ensemble (ventuellement vide) d'tats: (ei,a)={ei1,,ein} Les automates sont souvent donns sous la forme d'un graphe: les tats sont les nuds du graphe et les arcs correspondent la fonction de transition. Exemple ={a,b}, E={0,1,2,3}, e0=0, T={3} (0,a)={0,1}, (0,b)={0}, (1,b)={2}, (2,b)={3},

9 9

Construction d'un AFN partir dE.Rs


On note A(s) un automate reconnaissant une expression rgulire s
automate acceptant la chane vide automate acceptant la lettre a automate acceptant (r)(s) : 1. mettre une -transition de chaque tat terminal de A(r) vers l'tat initial de A(s) 2. les tats terminaux de A(r) ne sont plus terminaux 3. le nouvel tat initial est celui de A(r) 4. (l'ancien tat initial de A(s) n'est plus tat initial) automate reconnaissant r|s 1. crer un nouvel tat initial q 2. mettre une -transition de q vers les tats initiaux de A(r) et R(s) automate reconnaissant r+
10 10

Mise en uvre d'un analyseur lexical


Manuellement
Un automate dterministe peut trs facilement tre simul par un algorithme. Alors, on peut crire un programme reconnaissant tout mot de tout langage rgulier. Ainsi, si l'on veut faire l'analyse lexicale d'un langage rgulier, il suffit d'crire un programme simulant l'automate qui lui est associ.

Automatiquement
Il existe des outils pour crire des programmes simulant des automates partir de simples dfinitions rgulires. Par exemple : flex Exemple

11 11