Chapitre 2-Analyse Lexicale

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

Cours de Compilation

Chapitre 2

1
III- L'analyse lexicale - Plan:
1- Le rôle d'un analyseur lexical
2- Terminologie
3- Spécification des unités lexicales
3.1- Chaînes et langages
3.2- Opérations sur les langages
3.3- Expressions régulières
3.4- Définitions régulières
4- Reconnaissance des unités lexicales
5- Le langage FLEX
5.1- Structure d'un programme FLEX
5.2- Ecriture d'un analyseur lexical avec FLEX

2
III- L'analyse lexicale
6- Automates à états finis (AEF)
6.1- Automates à états finis non déterministes (AFN)
6.2- Tables de transition
6.3- Automates à états finis déterministes (AFD)
7- Grammaires régulières
8- Des expressions régulières aux automates
8.1- Conversion d'un AFN en AFD
8.2- Construction d'un AFN à partir d'une expression
régulière
8.3- Minimisation du nombre d'états d'un AFD

3
1- Le rôle d'un analyseur lexical:
L'analyseur lexical est chargé de lire le texte d'entrée,
caractère par caractère, de la gauche vers la droite et isoler
les mots et leur classe.

De plus, il doit:
- éliminer les blancs (espaces, tabulations, fin de lignes)
et les commentaires.
- détecter les erreurs et associer des messages d'erreurs.

4
1- Le rôle d'un analyseur lexical:
table des
symboles

unité lexicale
texte Analyse et attributs Analyse reste
d'entrée lexicale prochaine syntaxique
unité lexicale

traitement
des erreurs

Interaction entre analyseur lexical et analyseur syntaxique.


5
2- Terminologie
- Unité lexicale: est un symbole terminal de la
grammaire du langage.

- Modèle: est une règle qui décrit un ensemble de chaînes


associées à la même unité lexicale.

- lexème: est une suite de caractères du texte d'entrée qui


concorde avec le modèle.

Exemple: 35 est un lexème (un mot) qui appartient à l'unité


lexicale (la classe) nombre.

6
2- Terminologie
Remarques:
Dans de nombreux langages, les classes suivantes couvrent la
plupart des unités lexicales:
1- Une unité lexicale pour chaque mot clé.
2- Des unités lexicales pour les opérateurs, soit individuellement,
soit par classes.
3- Une unité lexicale pour les identificateurs (noms de variables,
fonctions, tableaux, structures...).
4- Une ou plusieurs unités lexicales pour les nombres et les
chaînes.
5- Une unité lexicale pour chacun des signes de ponctuation, tels
que les parenthèses gauche et droite, la virgule , le point-virgule...

7
3- Spécification des unités lexicales
3.1- Chaînes et langages:
Définitions générales:
- Un alphabet Σ ou une classe de caractères définit un
ensemble fini de symboles.
Exemples: {0,1} : l'alphabet binaire
ASCII : l'alphabet informatique

- Une chaîne ou un mot sur un alphabet Σ est une séquence


finie de symboles extraits de cet ensemble.

8
3- Spécification des unités lexicales
- La longueur d'une chaîne s est notée: |s|
La longueur de la chaîne vide notée ε : |ε| = 0

- L'ensemble des mots sur l'alphabet Σ est noté Σ ∗

- Un mot u∈Σ∗ est facteur du mot w ∈ Σ


∗ s'il existe v, v'∈Σ∗

tels que: w = v u v'.

- Un mot fini u est périodique si u = xn pour n2.≥


Tout mot non périodique est dit primitif.

9
3- Spécification des unités lexicales
Soit une chaîne s :
- préfixe de s est une chaîne obtenue en supprimant un
nombre quelconque (même nul) de symboles à la fin de s.
- suffixe de s est une chaîne obtenue en supprimant un
nombre quelconque (même nul) de symboles au début de s.
- sous-chaîne de s est une chaîne obtenue en supprimant un
préfixe et un suffixe.
- sous-suite de s est une chaîne obtenue en supprimant un
nombre quelconque (même nul) de symboles non
nécessairement consécutifs.
- Un langage est un ensemble quelconque de chaînes
construites sur un alphabet fixé.
10
3- Spécification des unités lexicales
3.2- Opérations sur les langages:
Soit L et M deux langages:

- Union de L et M : L U M = { ∀s / s ∈ L ou s ∈ M}

- Concaténation de L et M : LM = { st / s ∈ L et t ∈ M}


- Fermeture de Kleene de L : L* =U i=0 Li
L* dénote un nombre quelconque (même nul) de
concaténation de L.
On note L0 = {ε}

- Fermeture positive de L : L+ = Ui=1 Li
11
3- Spécification des unités lexicales
Exemples:
Soit L = {A,B,...,Z} U {a,b,...,z}
et C = {0,1,...9}
A partir de L et C, nous pouvons produire d'autres langages.

- L U C : ensemble des lettres et chiffres,


- LC : ensemble des chaînes constituées d'une lettre suivie d'un
chiffre,
- L4 : ensemble des chaînes constituées de 4 lettres,
- C+ : ensemble des entiers naturels,
- L(LUC)* : ensemble des chaînes constituées d'une lettre suivie
d'une chaîne de lettres et de chiffres ou d'une chaîne vide.

12
3- Spécification des unités lexicales
3.3- Expressions régulières:
Une expression régulière est une notation qui permet de
décrire un ensemble (une classe) de chaînes de caractères.

Exemple: Un nombre entier non signé est une chaîne constituée


d'une suite de chiffres, au moins un.

L'expression régulière associée est: (chiffre)+

+ est un opérateur unaire post-fixe qui veut dire un ou


plusieurs fois.

13
3- Spécification des unités lexicales
Les règles qui définissent les expressions régulières sur un
alphabet Σ sont:

ε est une expression régulière qui dénote {ε} c-à-d


l'ensemble dont le seul élément est la chaîne vide ε.

si a est un symbole de l'alphabet Σ, alors a est une expression


régulière qui dénote {a}, c-à-d l'ensemble constitué de la chaîne a.

14
3- Spécification des unités lexicales
soit r et s deux expressions régulières qui dénotent les langages
L(r) et L(s), alors:

(r) | (s) est une expression régulière qui dénote (L(r)) U (L(s)).

(r)(s) est une expression régulière qui dénote (L(r))(L(s)).

(r)* est une expression régulière qui dénote (L(r))*.

Les langages dénotés par les expressions régulières sont


appelés langages réguliers.

15
3- Spécification des unités lexicales
Exemples:
a|b*c : les chaînes constituées, soit d'un a, ou d'un
nombre quelconque, éventuellement nul, de la lettre b suivie
de la lettre c.
a | b = {a,b}
(a|b)(a|b) = {aa,ab,ba,bb}

Définition:
Si deux expressions r et s dénotent le même langage, on
dit qu'elles sont équivalentes et on écrit: r=s
Exemple: (a|b)= (b|a)

16
3- Spécification des unités lexicales
Propriétés algébriques sur les expressions régulières:

Soit r,s et t des expressions régulières.

r|s = s|r : l'opérateur| (ou) est commutatif.


r|(s|t) = (r|s)|t : l'opérateur | est associatif.
(rs)t = r(st) : la concaténation est associative.
r(s|t)=rs|rt :la concaténation est distributive par rapport au |
ε r = r ε = r : ε est l'élément neutre de la concaténation.
r* =(r|ε)* : ε est inclus dans une fermeture.
r** = r* : * est idempotent
Remarque: la chaîne vide ε = s0
17
3- Spécification des unités lexicales
Notations:
* est un opérateur unaire poste-fixe qui veut dire zéro, un ou
plusieurs fois.

+ est un opérateur unaire poste-fixe qui veut dire un ou


plusieurs fois.
r+ = r r* = r*r
r* = r+|ε
? est un opérateur unaire poste-fixe qui veut dire zéro ou une fois.
r? = r|ε
[a-z] désigne un élément (une lettre) de cette classe.
[a-z] = a|b|c...|z
18
3- Spécification des unités lexicales
Conventions:

1- L' opérateur unaire poste-fixe * a la plus haute priorité et


est associatif à gauche.
2- Les opérateurs + et ? ont la même priorité et la même
associativité que *.
2- La concaténation a la deuxième priorité et est associative à
gauche.
3- Le | a la plus faible priorité et est associatif à gauche.

Selon ces conventions, (a)|((b)*(c)) est équivalente à a|b*c

19
3- Spécification des unités lexicales
Exemples d'expressions régulières:

Un identificateur: lettre(lettre|chiffre)*
= [a-zA-Z][a-zA-Z0-9]*

Un entier signé ou non: (+|-)? (chiffre)+


= [+-]?[0-9]+
Un nombre décimal:(+|-)? (chiffre)+ (.(chiffre)+)?

Un réel:
(+|-)?(chiffre)+(.(chiffre)+)?((e|E)(+|-)?(chiffre)+)?
= [+-]?[0-9]+(.[0-9]+)?((e|E)(+|-)?[0-9]+)?
20
3- Spécification des unités lexicales
3.4- Définitions régulières:
Une définition régulière est une suite de définitions de la
forme:
d1 r1 Chaque di est un nom distinct
d2 r2 et chaque ri est une expression
régulière sur les symboles :
Σ U {d1,d2,...,di-1}
dn rn

Nous allons voir quelques exemples de définitions régulières :

21
3- Spécification des unités lexicales
Exemples:
1- Définition régulière d'un identificateur:
lettre A|B|...|Z|a|b|...|z
chiffre 0|1|2...|9
id lettre(lettre|chiffre)*

2- Définition régulière des entiers signés et non signés:


chiffre 0|1|2...|9
entier [+|-]?(chiffre)+

22
3- Spécification des unités lexicales
3- Définition régulière d'un réel:
L'alphabet Σ={0,1,...,9,.,e,E,+,-}

Une définition régulière sera:


chiffre 0|1|2...|9
chiffres (chiffre)+
p_entiere (+|-)? chiffres
p_decimale (.chiffres)?
p-puissance ((e|E)(+|-)? chiffres)?
reel p_entiere p_decimale p_puissance

23
4- Reconnaissance des unités lexicales
Soit le fragment de grammaire des instructions conditionnelles:
inst si (exp) alors inst
|si (exp) alors inst sinon inst
|autre_inst
exp terme operel terme
|terme
terme id
|nb
Les terminaux de cette grammaire sont:
si, alors, sinon, (, ), operel, id et nb.
Pour les reconnaître, nous allons d'abord donner les définitions
régulières associées.
24
4- Reconnaissance des unités lexicales
4.1- Définitions régulières des terminaux de la grammaire:
A noter qu'il faut reconnaitre les blancs aussi pour les ignorer.
delim espace|tabulation|fin_de_ligne
blanc (delim)+
IF si
THEN alors
ELSE sinon
operel <|<=|==|<>|>=|>
id [A-Za-z][A-Za-z0-9]*
nb (+|-)?[0-9]+(.[0-9])?((+|-)?(e|E)[0-9]+)?

Remarque: Les commentaires et les blancs sont


traités comme des modèles qui ne retournent
aucune unité lexicale.
25
4- Reconnaissance des unités lexicales
4.2- Diagramme de transition:
Un diagramme de transition est un organigramme orienté qui
décrit les actions à réaliser par l'analyseur lexical.
Il est constitué d'états et de transition entre états, définis par
les notations suivantes:
un état
un arc ou une transition
état d'acceptation, c-à-d que le lexème est
reconnu.
* état d'acceptation avec recul

Remarque: en pratique, une transition correspond à la


consommation d'un caractère et un seul.
26
4- Reconnaissance des unités lexicales
1- Diagramme de transition des blancs:

delim
début delim autre *
0 1 2
(ne rien retourner)

Remarque: autre veut dire, autre que les autres arcs sortants du
même état.

Dans ce cas, autre veut dire autre qu'un délimiteur.

27
4- Reconnaissance des unités lexicales
2- Diagramme de transition des identificateurs:

lettre|chiffre
début lettre autre *
3 4 5
retourne(id,pointeur sur lexème)

Remarque: autre veut dire, autre que lettre et chiffre.

28
4- Reconnaissance des unités lexicales
Diagramme de transition des entiers signés ou non:
chiffre
début +|- chiffre autre *
0 1 2 3

chiffre

Remarque: autre veut dire, autre que les chiffres.

29
4- Reconnaissance des unités lexicales
Diagramme de transition des nombres décimaux non signés:
chiffre chiffre
début chiffre chiffre autre *
0 1 2 3 4

Expression régulière: (chiffre)+.(chiffre)+

Remarque: Nous exigeons par ce diagramme au moins un


chiffre après le point.

30
4- Reconnaissance des unités lexicales
3- Diagramme de transition des nombres réels:

autre
c c c
début +|- c c e|E 11 +|- 12 c autre 14 *
6 7 8 9 10 13

c e|E c

autre
A l'état 14 d'acceptation avec recul, nous retournons l'unité lexicale
nb et un pointeur sur le lexème reconnu.

31
4- Reconnaissance des unités lexicales
4- Diagramme de transition des opérateurs de relation

Expression régulière: <|<=|<>|>|>=|==|<>


= (operel, PGE)
17

16
> 18 * (operel, PGQ)
autre
début =
19
= 20 (operel, EGA)
15

> 22 (operel, DIF)


< (operel, PPE)
21 23
=
autre * (operel, PPQ)
24
32
4- Reconnaissance des unités lexicales
5- Diagramme de transition des parenthèses
Expression régulière: '('|')'

26
'(' (po)

début 25

')' 27
(pf)

33
4- Reconnaissance des unités lexicales
4.3- La table de symboles:
La table des symboles est une structure de données constituée
des champs suivants:

- un pointeur (ptrlex) pointant sur l'adresse de la 1ère occurence


d'un lexème figurant dans le tampon (lexèmes);

- une chaîne de caractères (unilex) qui contient l'unité lexicale


du lexème detecté;

- un attribut qui est un indice de la position du lexème dans la table


des symboles.

35
4- Reconnaissance des unités lexicales
Supposons que le texte d'entrée est: "si gamma=10 alors aire >= 78 sinon g>1.3"
La table des symboles aura la forme suivante:
ptrlex unilex indice
0 si 1
3 id 2
9 operel 3
11 nb 4
14 alors 5
20 id 6
25 operel 7
28 nb 8
31 sinon 9
37 id 10
39 operel 11
41 nb 12
36
4- Reconnaissance des unités lexicales
La chaîne engendrée est:
"si$gamma$=$10$alors$aire$>=78$sinon$g$>$1.3"

Pour implanter la table des symboles, nous avons besoin des 2


fonctions suivantes:

- une fonction d'insertion;

- une fonction de recherche.

37
4- Reconnaissance des unités lexicales
L'algorithme de la fonction d'insertion:

Fonction inserer
début
indice indice+1;création d'une nouvelle entrée de la TS
TS[indice].ptrlex l'adresse du début du lexème dans le
tampon lexèmes
TS[indice].unilex l'unité lexicale associée
retourner(indice)
fin inserer

38
4- Reconnaissance des unités lexicales
L'algorithme de la fonction de recherche:
Fonction chercher
début
j 0; pour parcourir la TS
trouve=faux; boolean pour arrêter la recherche
tant que (j<taille de la TS et non trouvé) faire
si TS[j].unilex=l'UL du lexème à chercher alors
si TS[j].ptrlex pointe sur le lexème
alors
trouve vrai;
retourne(j);
sinon j j+1;
sinon trouve retourne(-1)
Fin Fonction chercher
39
6- Automates à états finis (AEF)
Les automates à états finis sont des graphes orientés à l'image des
diagrammes de transition, avec certaines différences:

1- Les automates à états finis sont des reconnaisseurs; ils disent


simplement "oui" ou "non" à propos de chaque chaîne d'entrée.

2- Il y'a 2 types d'automates à états finis:


Les automates à états finis non déterministes (AFN) n'ont aucune
restrictions sur les étiquettes de leurs arcs.
Un symbole peut étiqueter plusieurs arcs partant d'un même état, et la
chaîne vide ε est une étiquette possible.
Les automates à états finis déterministes (AFD), pour lesquels, ne
peuvent pas partir plusieurs transitions du même état avec le même
caractère et n'accepte pas d'ε-transition..
50
6- Automates à états finis (AEF)
6.1- Automates à états finis non déterministes (AFN):
Un AFN se compose de:
Un ensemble fini S d'états.
Un ensemble Σ de symboles d'entrée, l'alphabet du langage.
On considère que la chaîne vide ε, n'est jamais un membre de
Σ.
Une fonction de transition qui donne pour chaque état et pour
chaque symbole de Σ U {ε}, l'ensemble des états suivants.
Un état s0 appartenant à S, qui est l'état de départ.
Un ensemble d'états F, sous-ensemble de S, l'ensemble des états
d'acceptation ou états finaux.

51
6- Automates à états finis (AEF)
6.1- Automates à états finis non déterministes (AFN):
Exemple: L'AFN qui reconnait le langage défini par l'expression
régulière : (a|b)* abb

a
début a 1
b 2
b 3
0

b
Remarque: Le non déterminisme ici est associé à deux arcs
sortants de l'état 0 avec le même symbole a.

52
6- Automates à états finis (AEF)
6.2- Tables de transition:
Nous pouvons représenter un AFN par une table de
transition, dont les lignes correspondent aux états et les colonnes
aux symboles d'entrée et à ε.
L'entrée pour un état donné et une entrée donnée est la valeur
de la fonction de transition appliquée à ces arguments.
Exemple: soit l'AFN précédant
Symbole a b ε
Etat
0 {0,1} {0} -
1 - {2} -
2 - {3} -
3 - - -
53
6- Automates à états finis (AEF)
6.3- Automates à états finis déterministes (AFD):
Un AFD est un cas particulier d'un AFN où:
- il n'y a aucun arc étiqueté par ε,
- pas plus d'un arc avec le même symbole sortant d'un état.

Un AFN est une représentation abstraite d'un algorithme de


reconnaissance des chaînes d'un langage.

Un AFD est un algorithme concret de reconnaissance de chaînes.

Remarque: Toute expression régulière et tout AFN peuvent être


convertis en un AFD.

54
6- Automates à états finis (AEF)
Exemple: L'AFD qui reconnait le langage défini par l'expression
régulière : (a|b)* abb

a a
début a 1
b 2
b 3
0
a
b b

55
6- Automates à états finis (AEF)
Exemple 2: L'automate à états finis déterministe d'un commentaire à la C
autre *
début / * * / 4
0 1 2 3

autre

Exemple 3: L'automate à états finis déterministe d'un commentaire à la C++

autre
début 0
/ /
1 2 3

:désigne le retour à la ligne


56
6- Automates à états finis (AEF)
Exemple 4: L'automate à états finis déterministe des 2 commentaires groupés.
autre *
début / * * / 4
0 1 2 3

/ autre

5 7

autre

57
6- Automates à états finis (AEF)
6.4- Algorithme d'application d'un AFD à une chaîne

Donnée:
Une chaîne d'entrée x terminée par un caractère de fin eof.
Un AFD D dont l'état initial est e0, les états finaux sont F et
la fonction de transition est trans.

Résultat:
"oui" si D accepte x
"non" dans le cas contraire.

58
6- Automates à états finis (AEF)
Méthode:
Appliquer l'algorithme suivant à la chaîne d'entrée x.
La fonction de transition (e,c) donne l'état vers lequel il existe
un arc provenant de l'état e pour le caractère c.
La fonction carcactereSuivant retourne le caractère suivant
de la chaîne d'entrée x.
e = e0 ;
c = caractereSuivant();
tant que (c!=eof){
s = trans(e,c);
c=caractereSuivant();
}
si (s ∈ F) retourner "oui"
sinon retourner "non";

59
7- Grammaires régulières
7.1- Définition:
Une grammaire est régulière si toutes ses productions
vérifient une des 2 formes:

A aB
ou A a

avec A et B des non-terminaux et a un terminal ou ε.


Ces grammaires régulières sont appelées des grammaires
linéaires droites.

60
7- Grammaires régulières
Par analogie, il est possible de définir des grammaires
linéaires gauches:

A Ba
ou A a

Remarque:
Les grammaires régulières sont une sous-classe des
grammaires hors contextes.
Elles permettent de décrire les langages réguliers.

61
7- Grammaires régulières
7.2- Correspondance entre une grammaire régulière et un
automate:
Nous pouvons faire la correspondance entre un automate et
une grammaire régulière de la manière suivante:

- Chaque état de l'automate correspond à un non terminal de


la grammaire.
- Chaque transition correspond à une production de la
grammaire.
- L'état initial de l'automate correspond à l'axiome de la
grammaire.
- Un état final correspond à la production de la chaine vide ε.

62
8- Des expressions régulières aux automates
8.1- Conversion d'un AFN en un AFD:

Il s'agit de remplacer la relation de transition par une fonction


partielle qui à un état et un caractère associe au plus un nouvel
état.

L'idée est, si l'automate initial est construit sur un ensemble S


d'états, de construire un nouvel automate avec comme états des
ensembles d'états de S.

64
8- Des expressions régulières aux automates
8.1- Conversion d'un AFN en un AFD:
Définition:
On définit l'ensemble des ε-successeurs d'un état p et on note ε-
Succ(p), l'ensemble des états q tels que:
ε
p q
On note ε-Succ(P) pour un ensemble d'états, l'union des
ε-successeurs des éléments p ∈ P.
Remarque: De tels successeurs peuvent être obtenus par une plusieurs
transitions.
On définit l'ensemble des successeurs d'un état p pour un caractère
a et on note Succ(p,a), l'ensemble des états q tels que:
a
p q
65
8- Des expressions régulières aux automates
8.1- Conversion d'un AFN en un AFD:
Algorithme: On se donne un automate (S, e0, F, Trans). L'automate
correspondant aura pour états des parties de S, c-à-d des
ensembles d'états.
On notera de manière générale P(E) l'ensemble des parties E
et plus spécifiquement PS l'ensemble des parties de S.
Un automate déterministe reconnaissant le même langage est:
- ensemble d'états : PQ
- état initial: ε-Succ(e0)
- état d'acceptation: {q ⊂ S | q ∩ F ≠ ∅}
- transition: {(q,a,q') | q,q' ∈ PQ, a∈ A, ∀y∈S.y∈q' ⇔
a
∃ x ∈ q.x y
66
8- Des expressions régulières aux automates
8.2- Construction d'un AFN à partir d'une expression régulière:

Algorithme de Mc Naughton-Yamada-Thomson:
Données: Une expression régulière r sur un alphabet Σ .

Résultat: Un AFN N acceptant L(r).

Méthode:
- Décomposer r en sous expressions constitutives.
- Les règles de construction d'un AFN contiennent des règles
de base pour traiter les sous-expressions .

67
8- Des expressions régulières aux automates
Algorithme de Mc Naughton-Yamada-Thomson:
Soit r une expression régulière,
Cas de base:
si r = ε , l'automate est:

début début ε
i f
ou

si r = a , l'automate est:
début a
i f

i est l'état initial et f est l'état final de l'AFN.


68
8- Des expressions régulières aux automates
Cas composés:
1- si r = r1 | r2 , l'automate associé à r est:

ε r1 ε
début
i f
ε ε
r2

L'état initial associé à r comporte des ε-transitions vers les


états initiaux des automates associés à r1 et r2.
Les anciens états initiaux deviennent des états ordinaires, de
même pour les états finaux
69
8- Des expressions régulières aux automates
2- si r = r1 r2 , l'automate associé à r est:

début r1 ε r2

L'état initial associé à r1 devient un état initial de r et l'état


final de r2 devient état final de r.

70
8- Des expressions régulières aux automates
3- si r = r1* = ε | r1+ , l'automate associé à r est:
ε

début ε r1 ε
i f

ε
La répétition non nulle (+) consiste à relier l'état final de
l'automate de r1 à son état initial.
Pour ajouter ε au langage reconnu par l'automate, il suffit de
créer un nouvel état initial et un état final et de les relier avec une
transition ε .

71
8- Des expressions régulières aux automates
Exemple: Soit l'expression régulière a | b c*
- Pour 'a' , 'b' et 'c', on a les automates:

début a
1 2

début b
4 5

début 7 c 8

72
8- Des expressions régulières aux automates
Exemple: Soit l'expression régulière a | b c*
- Pour c* , on a:
ε
début ε c ε
6 7 8 9

ε
- Pour b c* , on a:
ε
début b ε ε c ε
4 5 6 7 8 9

73
8- Des expressions régulières aux automates
Exemple: Soit l'expression régulière a | b c*
- Pour a|bc* , on a:

début ε a ε
0 1 2 3

ε ε
b ε ε c ε
4 5 6 7 8 9

ε
L'expression régulière équivalente:
a|b|bcc* = a|b|bc+ = a|bc*

74
8- Des expressions régulières aux automates
Elimination des ε-transitions:
Elle se fait en 4 étapes:

1- Augmentation des transitions.

2- Propagation des états finaux.

3- Suppression des ε-transitions.

4- Elimination des états inaccessibles.

75
8- Des expressions régulières aux automates
Elimination des ε-transitions:
1- Augmentation des transitions:
On construit un nouvel automate où il existe une transition
entre l'état i et l'état j étiqueté par x, s'il existe un état k tel qu'il
existe une suite d' ε-transitions de i à k et qu'il existe une
transition x de kà j.

i
x
j

ε x
k

76
8- Des expressions régulières aux automates
Elimination des ε-transitions:
1- Augmentation des transitions:
2- Un état est final s'il existe est une suite d'ε-transitions qui
mènent à un état final. a

début ε a ε
0 1 2 3
ε
ε ε
b ε ε c ε
4 5 6 7 8 9
b c c
c

77
8- Des expressions régulières aux automates
Elimination des ε-transitions:
3- On supprime les ε-transitions:
4- On supprime les états inaccessibles à partir de l'état initial.
a

début a
0 1 2 3

b c
4 5 6 7 8 9

b c c
c

78
8- Des expressions régulières aux automates
Elimination des ε-transitions:
3- On supprime les ε-transitions:
4- On supprime les états inaccessibles à partir de l'état initial.
a

début
0 2

5 8

b c
c

79
8- Des expressions régulières aux automates
8.3- Minimisation du nombre d'états d'un AFD:
But: Obtenir un automate ayant le minimum d'états possible.

Principe: On définit les classes d'équivalence d'états par


raffinements successifs.
Chaque classe d'équivalence obtenue forme un seul et même
état du nouvel automate.

Méthode:
1- Faire deux classes, A contenant les états finaux et B
contenant les états non finaux.
2- S'il existe un symbole

80

Vous aimerez peut-être aussi