Vous êtes sur la page 1sur 82

Universit Mohammed V - Agdal

Facult des sciences


Dpartement d'Informatique

Cours de Compilation

SMI - S5
Prof. M.D. RAHMANI
mrahmani@fsr.ac.ma
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1
III- L'analyse lexicale - Plan:
1- Le rle d'un analyseur lexical
2- Terminologie
3- Spcification des units lexicales
3.1- Chanes et langages
3.2- Oprations sur les langages
3.3- Expressions rgulires
3.4- Dfinitions rgulires
4- Reconnaissance des units lexicales
5- Le langage FLEX
5.1- Structure d'un programme FLEX
5.2- Ecriture d'un analyseur lexical avec FLEX

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 2


III- L'analyse lexicale
6- Automates tats finis (AEF)
6.1- Automates tats finis non dterministes (AFN)
6.2- Tables de transition
6.3- Automates tats finis dterministes (AFD)
7- Grammaires rgulires
8- Des expressions rgulires aux automates
8.1- Conversion d'un AFN en AFD
8.2- Construction d'un AFN partir d'une expression
rgulire
8.3- Minimisation du nombre d'tats d'un AFD

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 3


1- Le rle d'un analyseur lexical:
L'analyseur lexical est charg de lire le texte d'entre,
caractre par caractre, 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.
- dtecter les erreurs et associer des messages d'erreurs.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 4


1- Le rle d'un analyseur lexical:
table des
symboles

unit lexicale
texte Analyse et attributs Analyse reste
d'entre lexicale prochaine syntaxique
unit lexicale

traitement
des erreurs

Interaction entre analyseur lexical et analyseur syntaxique.


Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 5
2- Terminologie
- Unit lexicale: est un symbole terminal de la
grammaire du langage.

- Modle: est une rgle qui dcrit un ensemble de chanes


associes la mme unit lexicale.

- lexme: est une suite de caractres du texte d'entre qui


concorde avec le modle.

Exemple: 35 est un lexme (un mot) qui appartient l'unit


lexicale (la classe) nombre.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 6


2- Terminologie
Remarques:
Dans de nombreux langages, les classes suivantes couvrent la
plupart des units lexicales:
1- Une unit lexicale pour chaque mot cl.
2- Des units lexicales pour les oprateurs, soit individuellement,
soit par classes.
3- Une unit lexicale pour les identificateurs (noms de variables,
fonctions, tableaux, structures...).
4- Une ou plusieurs units lexicales pour les nombres et les
chanes.
5- Une unit lexicale pour chacun des signes de ponctuation, tels
que les parenthses gauche et droite, la virgule , le point-virgule...

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 7


3- Spcification des units lexicales
3.1- Chanes et langages:
Dfinitions gnrales:
- Un alphabet ou une classe de caractres dfinit un
ensemble fini de symboles.
Exemples: {0,1} : l'alphabet binaire
ASCII : l'alphabet informatique

- Une chane ou un mot sur un alphabet est une squence


finie de symboles extraits de cet ensemble.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 8


3- Spcification des units lexicales
- La longueur d'une chane s est note: |s|
La longueur de la chane vide note : || = 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 priodique si u = xn pour n 2.


Tout mot non priodique est dit primitif.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 9


3- Spcification des units lexicales
Soit une chane s :
- prfixe de s est une chane obtenue en supprimant un
nombre quelconque (mme nul) de symboles la fin de s.
- suffixe de s est une chane obtenue en supprimant un
nombre quelconque (mme nul) de symboles au dbut de s.
- sous-chane de s est une chane obtenue en supprimant un
prfixe et un suffixe.
- sous-suite de s est une chane obtenue en supprimant un
nombre quelconque (mme nul) de symboles non
ncessairement conscutifs.
- Un langage est un ensemble quelconque de chanes
construites sur un alphabet fix.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 10
3- Spcification des units lexicales
3.2- Oprations sur les langages:
Soit L et M deux langages:

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

- Concatnation de L et M : LM = { st / s L et t M}


- Fermeture de Kleene de L : L* =Ui =0 Li
L* dnote un nombre quelconque (mme nul) de
concatnation de L.
On note L0 = {}

- Fermeture positive de L : L = Ui =1 Li
+

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 11


3- Spcification des units 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 chanes constitues d'une lettre suivie d'un
chiffre,
- L4 : ensemble des chanes constitues de 4 lettres,
- C+ : ensemble des entiers naturels,
- L(LUC)* : ensemble des chanes constitues d'une lettre suivie
d'une chane de lettres et de chiffres ou d'une chane vide.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 12
3- Spcification des units lexicales
3.3- Expressions rgulires:
Une expression rgulire est une notation qui permet de
dcrire un ensemble (une classe) de chanes de caractres.

Exemple: Un nombre entier non sign est une chane constitue


d'une suite de chiffres, au moins un.

L'expression rgulire associe est: (chiffre)+

+ est un oprateur unaire post-fixe qui veut dire un ou


plusieurs fois.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 13


3- Spcification des units lexicales
Les rgles qui dfinissent les expressions rgulires sur un
alphabet sont:

 est une expression rgulire qui dnote {} c--d


l'ensemble dont le seul lment est la chane vide .

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


rgulire qui dnote {a}, c--d l'ensemble constitu de la chane a.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 14


3- Spcification des units lexicales
 soit r et s deux expressions rgulires qui dnotent les langages
L(r) et L(s), alors:

 (r) | (s) est une expression rgulire qui dnote (L(r)) U (L(s)).

 (r)(s) est une expression rgulire qui dnote (L(r))(L(s)).

 (r)* est une expression rgulire qui dnote (L(r))*.

 Les langages dnots par les expressions rgulires sont


appels langages rguliers.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 15


3- Spcification des units lexicales
Exemples:
a|b*c : les chanes constitues, 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}

Dfinition:
Si deux expressions r et s dnotent le mme langage, on
dit qu'elles sont quivalentes et on crit: r=s
Exemple: (a|b)= (b|a)

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 16


3- Spcification des units lexicales
Proprits algbriques sur les expressions rgulires:

Soit r,s et t des expressions rgulires.

r|s = s|r : l'oprateur| (ou) est commutatif.


r|(s|t) = (r|s)|t : l'oprateur | est associatif.
(rs)t = r(st) : la concatnation est associative.
r(s|t)=rs|rt :la concatnation est distributive par rapport au |
r = r = r : est l'lment neutre de la concatnation.
r* =(r|)* : est inclus dans une fermeture.
r** = r* : * est idempotent
Remarque: la chane vide = s0
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 17
3- Spcification des units lexicales
Notations:
* est un oprateur unaire poste-fixe qui veut dire zro, un ou
plusieurs fois.

+ est un oprateur unaire poste-fixe qui veut dire un ou


plusieurs fois.
r+ = r r* = r*r
r* = r+|
? est un oprateur unaire poste-fixe qui veut dire zro ou une fois.
r? = r|
[a-z] dsigne un lment (une lettre) de cette classe.
[a-z] = a|b|c...|z
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 18
3- Spcification des units lexicales
Conventions:

1- L' oprateur unaire poste-fixe * a la plus haute priorit et


est associatif gauche.
2- Les oprateurs + et ? ont la mme priorit et la mme
associativit que *.
2- La concatnation a la deuxime 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

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 19


3- Spcification des units lexicales
Exemples d'expressions rgulires:

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

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


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

 Un rel:
(+|-)?(chiffre)+(.(chiffre)+)?((e|E)(+|-)?(chiffre)+)?
= [+-]?[0-9]+(.[0-9]+)?((e|E)(+|-)?[0-9]+)?
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 20
3- Spcification des units lexicales
3.4- Dfinitions rgulires:
Une dfinition rgulire est une suite de dfinitions de la
forme:
d1 r1 Chaque di est un nom distinct
d2 r2 et chaque ri est une expression
. . rgulire sur les symboles :
. . U {d1,d2,...,di-1}
dn rn

Nous allons voir quelques exemples de dfinitions rgulires :

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 21


3- Spcification des units lexicales
Exemples:
1- Dfinition rgulire d'un identificateur:
lettre A|B|...|Z|a|b|...|z
chiffre 0|1|2...|9
id lettre(lettre|chiffre)*

2- Dfinition rgulire des entiers signs et non signs:


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

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 22


3- Spcification des units lexicales
3- Dfinition rgulire d'un rel:
L'alphabet ={0,1,...,9,.,e,E,+,-}

Une dfinition rgulire 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

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 23


4- Reconnaissance des units 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 reconnatre, nous allons d'abord donner les dfinitions
rgulires associes.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 24
4- Reconnaissance des units lexicales
4.1- Dfinitions rgulires 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


traits comme des modles qui ne retournent
aucune unit lexicale.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 25
4- Reconnaissance des units lexicales
4.2- Diagramme de transition:
Un diagramme de transition est un organigramme orient qui
dcrit les actions raliser par l'analyseur lexical.
Il est constitu d'tats et de transition entre tats, dfinis par
les notations suivantes:
un tat
un arc ou une transition
tat d'acceptation, c--d que le lexme est
reconnu.
* tat d'acceptation avec recul

Remarque: en pratique, une transition correspond la


consommation d'un caractre et un seul.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 26
4- Reconnaissance des units lexicales
1- Diagramme de transition des blancs:

delim
dbut delim autre *
0 1 2
(ne rien retourner)

Remarque: autre veut dire, autre que les autres arcs sortants du
mme tat.

Dans ce cas, autre veut dire autre qu'un dlimiteur.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 27


4- Reconnaissance des units lexicales
2- Diagramme de transition des identificateurs:

lettre|chiffre
dbut lettre autre *
3 4 5
retourne(id,pointeur sur lexme)

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

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 28


4- Reconnaissance des units lexicales
Diagramme de transition des entiers signs ou non:
chiffre
dbut +|- chiffre autre *
0 1 2 3

chiffre

Remarque: autre veut dire, autre que les chiffres.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 29


4- Reconnaissance des units lexicales
Diagramme de transition des nombres dcimaux non signs:
chiffre chiffre
dbut chiffre . chiffre autre *
0 1 2 3 4

Expression rgulire: (chiffre)+.(chiffre)+

Remarque: Nous exigeons par ce diagramme au moins un


chiffre aprs le point.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 30


4- Reconnaissance des units lexicales
3- Diagramme de transition des nombres rels:

autre
c c c
dbut +|- c . c e|E +|- c autre *
6 7 8 9 10 11 12 13 14

c e|E c

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

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 31


4- Reconnaissance des units lexicales
4- Diagramme de transition des oprateurs de relation

Expression rgulire: <|<=|<>|>|>=|==|<>


= (operel, PGE)
17

16
> 18 * (operel, PGQ)
autre
dbut =
19
= 20 (operel, EGA)
15

> 22 (operel, DIF)


< (operel, PPE)
21 23
=
autre 24 * (operel, PPQ)
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 32
4- Reconnaissance des units lexicales
5- Diagramme de transition des parenthses
Expression rgulire: '('|')'

26
'(' (po)

dbut 25

')' 27
(pf)

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 33


4- Reconnaissance des units lexicales
4.2- Implantation des diagrammes de transition:

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 34


4- Reconnaissance des units lexicales
4.3- La table de symboles:
La table des symboles est une structure de donnes constitue
des champs suivants:

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


d'un lexme figurant dans le tampon (lexmes);

- une chane de caractres (unilex) qui contient l'unit lexicale


du lexme detect;

- un attribut qui est un indice de la position du lexme dans la table


des symboles.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 35


4- Reconnaissance des units lexicales
Supposons que le texte d'entre 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
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 36
4- Reconnaissance des units lexicales
La chane engendre 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.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 37


4- Reconnaissance des units lexicales
L'algorithme de la fonction d'insertion:

Fonction inserer
dbut
indice indice+1;cration d'une nouvelle entre de la TS
TS[indice].ptrlex l'adresse du dbut du lexme dans le
tampon lexmes
TS[indice].unilex l'unit lexicale associe
retourner(indice)
fin inserer

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 38


4- Reconnaissance des units lexicales
L'algorithme de la fonction de recherche:
Fonction chercher
dbut
j 0; pour parcourir la TS
trouve=faux; boolean pour arrter la recherche
tant que (j<taille de la TS et non trouv) faire
si TS[j].unilex=l'UL du lexme chercher alors
si TS[j].ptrlex pointe sur le lexme
alors
trouve vrai;
retourne(j);
sinon j j+1;
sinon trouve retourne(-1)
Fin Fonction chercher
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 39
4- Reconnaissance des units lexicales
Un programme de la TS en langage C:

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 40


5- Le langage FLEX
Un programme crit en langage LEX construit d'une manire
automatique un analyseur lexical.

Il prend en entre un ensemble d'expressions rgulires et de


dfinitions rgulires et produit en sortie un code cible en langage C.

Ce code en langage C doit tre compil par le compilateur du


langage C pour produire un excutable qui est un analyseur lexical
correspondant au langage dfini par les expressions rgulires d'entre.

Plusieurs langages drivs de LEX existent;


- Flex produit du C++
- Jlex produit du Java
- Lecl produit du Caml
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 41
5- Le langage FLEX
La compilation d'un code source en LEX se fait en deux tapes.

expressions lex lex.yy.c


rgulires

lex.yy.c
gcc excutable
autres modules

source
analyser excutable rsultats de l'analyse
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 42
5- Le langage FLEX
5.1- Structure d'un programme FLEX:
Un programme source en langage lex est constitu de 3 sections
dlimites par %%:
//1re partie: dclarations
%{
dclarations pour le compilateur C
%}
dfinitions rgulires
%%
// 2me partie: rgles de traduction
expressions rgulires + actions raliser
%%
// 3me partie fonctions en C
Fonctions annexes en langage C
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 43
5- Le langage FLEX
- La 1re partie est constitue de:
- dclarations en langage C des bibliothques, variables,
structures, unions...
- dclarations de dfinitions rgulires utilisables par les
rgles de traduction.

- La 2me partie a la forme:


m1 {action1} avec mi une expression rgulire ou une
m2 {action2} dfinition rgulire de la 1re partie
... .... et
mi {acioni} actioni est l'action raliser par l'analyseur
... .... lexical si un lexme est accept par mi.
mn {actionn}

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 44


5- Le langage FLEX
- La 3me partie est une suite de fonctions en C qui aident l'analyse
dans l'analyse par les rgles de traduction de la 2me partie.
Cette partie peut contenir une fonction main du langage C.
Remarques:
- Le code doit commencer la 1re colonne.
- La 1re partie et la dernire sont facultatives.
- Le fichier LEX doit avoir l'extension .l

Exemple du code en langage LEX: espace.l


%%
[ \t] {/* supprime les espaces et tabulations */}
bslama {exit(0);}
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 45
5- Le langage FLEX
5.2- Ecriture d'un analyseur lexical avec FLEX: analex.l
1re partie:
//dclarations en C
%{
#include<stdio.h>
%}
delim [ \t\n]
bl {delim}+
lettre [a-zA-Z]
chiffre [0-9]
id {lettre}({lettre}|{chiffre})*
nb (\+|\-)?{chiffre}+(\.{chiffre}+)?((e|E)(\+|\-)?{chiffre}+)?
%%
Remarque: Les caractres +, - et . sont prcds de \ pour les distinguer des
oprateurs correspondants.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 46


5- Le langage FLEX
2me partie:
{bl} {/* supprimer de la sortie */}
sinon {printf("\n Mot cl: ELSE\n");}
si {printf("\n Mot cl: IF\n");}
alors {printf("\n Mot cl: THEN\n");}
{id} {printf("\n Identificateur:%s\n",yytext);}
{nb} {printf("\n Nombre:%s\n",yytext);}
"<=" {printf("\n Operateur relationnel: PPE\n");}
"<>" {printf("\n Operateur relationnel: DIF\n");}
"<" {printf("\n Operateur relationnel: PPQ\n");}
">=" {printf("\n Operateur relationnel: PGE\n");}
"<" {printf("\n Operateur relationnel: PGQ\n");}
"==" {printf("\n Operateur relationnel: EGA\n");}
"(" {printf("\n PO\n");}
")" {printf("\n PF\n");}
. {printf("\n%s: Caractre non reconnu\n",yytext);}
%%
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 47
5- Le langage FLEX
3me partie:

int main()
{
FILE *fichier;
printf("Nom du fichier analyser");
scanf("%s",&fichier);
yyin=fichier;
yylex();
return 0;
}

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 48


5- Le langage FLEX
Remarques:
"." est un oprateur qui veut dire tous caractre sauf le retour la
ligne.
"^" est un oprateur pour le complmentaire d'une classe.
yytext est un pointeur sur la chane analyse.
yyin correspond l'entre
yylex() est la fonction principale du programme crit en LEX.
Options de compilation:
Avec LEX: 1/ lex analex.l produit lex.yy.c
2/ cc lex.yy.c -ll pour library lex
Avec FLEX: 1/ flex analex.l produit lex.yy.c
2/ gcc lex.yy.c -lfl pour library fast lex
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 49
6- Automates tats finis (AEF)
Les automates tats finis sont des graphes orients l'image des
diagrammes de transition, avec certaines diffrences:

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


simplement "oui" ou "non" propos de chaque chane d'entre.

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


 Les automates tats finis non dterministes (AFN) n'ont aucune
restrictions sur les tiquettes de leurs arcs.
Un symbole peut tiqueter plusieurs arcs partant d'un mme tat, et la
chane vide est une tiquette possible.
 Les automates tats finis dterministes (AFD), pour lesquels, ne
peuvent pas partir plusieurs transitions du mme tat avec le mme
caractre et n'accepte pas d'-transition..
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 50
6- Automates tats finis (AEF)
6.1- Automates tats finis non dterministes (AFN):
Un AFN se compose de:
 Un ensemble fini S d'tats.
 Un ensemble de symboles d'entre, l'alphabet du langage.
On considre que la chane 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 dpart.
 Un ensemble d'tats F, sous-ensemble de S, l'ensemble des tats
d'acceptation ou tats finaux.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 51


6- Automates tats finis (AEF)
6.1- Automates tats finis non dterministes (AFN):
Exemple: L'AFN qui reconnait le langage dfini par l'expression
rgulire : (a|b)* abb

a
dbut a 1 b 2 b 3
0

b
Remarque: Le non dterminisme ici est associ deux arcs
sortants de l'tat 0 avec le mme symbole a.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 52
6- Automates tats finis (AEF)
6.2- Tables de transition:
Nous pouvons reprsenter un AFN par une table de
transition, dont les lignes correspondent aux tats et les colonnes
aux symboles d'entre et .
L'entre pour un tat donn et une entre donne est la valeur
de la fonction de transition applique ces arguments.
Exemple: soit l'AFN prcdant
Symbole a b
Etat
0 {0,1} {0} -
1 - {2} -
2 - {3} -
3 - - -
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 53
6- Automates tats finis (AEF)
6.3- Automates tats finis dterministes (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 mme symbole sortant d'un tat.

Un AFN est une reprsentation abstraite d'un algorithme de


reconnaissance des chanes d'un langage.

Un AFD est un algorithme concret de reconnaissance de chanes.

Remarque: Toute expression rgulire et tout AFN peuvent tre


convertis en un AFD.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 54


6- Automates tats finis (AEF)
Exemple: L'AFD qui reconnait le langage dfini par l'expression
rgulire : (a|b)* abb

a a
dbut a 1 b 2 b 3
0
a
b b

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 55


6- Automates tats finis (AEF)
Exemple 2: L'automate tats finis dterministe d'un commentaire la C
autre *
dbut / * * / 4
0 1 2 3

autre

Exemple 3: L'automate tats finis dterministe d'un commentaire la C++

autre
dbut / /
0 1 2 3

:dsigne le retour la ligne


Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 56
6- Automates tats finis (AEF)
Exemple 4: L'automate tats finis dterministe des 2 commentaires groups.
autre *
dbut / * * / 4
0 1 2 3

/ autre

5 7

autre

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 57


6- Automates tats finis (AEF)
6.4- Algorithme d'application d'un AFD une chane

Donne:
Une chane d'entre x termine par un caractre de fin eof.
Un AFD D dont l'tat initial est e0, les tats finaux sont F et
la fonction de transition est trans.

Rsultat:
"oui" si D accepte x
"non" dans le cas contraire.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 58


6- Automates tats finis (AEF)
Mthode:
Appliquer l'algorithme suivant la chane d'entre x.
La fonction de transition (e,c) donne l'tat vers lequel il existe
un arc provenant de l'tat e pour le caractre c.
La fonction carcactereSuivant retourne le caractre suivant
de la chane d'entre x.
e = e0 ;
c = caractereSuivant();
tant que (c!=eof){
s = trans(e,c);
c=caractereSuivant();
}
si (s F) retourner "oui"
sinon retourner "non";

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 59


7- Grammaires rgulires
7.1- Dfinition:
Une grammaire est rgulire si toutes ses productions
vrifient une des 2 formes:

A aB
ou A a

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


Ces grammaires rgulires sont appeles des grammaires
linaires droites.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 60


7- Grammaires rgulires
Par analogie, il est possible de dfinir des grammaires
linaires gauches:

A Ba
ou A a

Remarque:
Les grammaires rgulires sont une sous-classe des
grammaires hors contextes.
Elles permettent de dcrire les langages rguliers.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 61


7- Grammaires rgulires
7.2- Correspondance entre une grammaire rgulire et un
automate:
Nous pouvons faire la correspondance entre un automate et
une grammaire rgulire de la manire 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 .

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 62


7- Grammaires rgulires
Exemples:

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 63


8- Des expressions rgulires 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 caractre associe au plus un nouvel
tat.

L'ide 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.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 64


8- Des expressions rgulires aux automates
8.1- Conversion d'un AFN en un AFD:
Dfinition:
On dfinit 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 lments p P.
Remarque: De tels successeurs peuvent tre obtenus par une plusieurs
transitions.
On dfinit l'ensemble des successeurs d'un tat p pour un caractre
a et on note Succ(p,a), l'ensemble des tats q tels que:
a
p q
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 65
8- Des expressions rgulires 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 manire gnrale P(E) l'ensemble des parties E
et plus spcifiquement PS l'ensemble des parties de S.
Un automate dterministe reconnaissant le mme 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, yS.yq'
a
x q.x y
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 66
8- Des expressions rgulires aux automates
8.2- Construction d'un AFN partir d'une expression rgulire:

Algorithme de Mc Naughton-Yamada-Thomson:
Donnes: Une expression rgulire r sur un alphabet .

Rsultat: Un AFN N acceptant L(r).

Mthode:
- Dcomposer r en sous expressions constitutives.
- Les rgles de construction d'un AFN contiennent des rgles
de base pour traiter les sous-expressions .

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 67


8- Des expressions rgulires aux automates
Algorithme de Mc Naughton-Yamada-Thomson:
Soit r une expression rgulire,
Cas de base:
si r = , l'automate est:

dbut dbut
i f
ou

si r = a , l'automate est:
dbut a
i f

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


Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 68
8- Des expressions rgulires aux automates
Cas composs:
1- si r = r1 | r2 , l'automate associ r est:

r1
dbut
i f

r2

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


tats initiaux des automates associs r1 et r2.
Les anciens tats initiaux deviennent des tats ordinaires, de
mme pour les tats finaux
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 69
8- Des expressions rgulires aux automates
2- si r = r1 r2 , l'automate associ r est:

dbut r1 r2

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


final de r2 devient tat final de r.
.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 70


8- Des expressions rgulires aux automates
3- si r = r1* = | r1+ , l'automate associ r est:

dbut r1
i f


La rptition 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
crer un nouvel tat initial et un tat final et de les relier avec une
transition .

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 71


8- Des expressions rgulires aux automates
Exemple: Soit l'expression rgulire a | b c*
- Pour 'a' , 'b' et 'c', on a les automates:

dbut a
1 2

dbut b
4 5

dbut 7 c
8

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 72


8- Des expressions rgulires aux automates
Exemple: Soit l'expression rgulire a | b c*
- Pour c* , on a:

dbut c
6 7 8 9


- Pour b c* , on a:

dbut b c
4 5 6 7 8 9

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 73


8- Des expressions rgulires aux automates
Exemple: Soit l'expression rgulire a | b c*
- Pour a|bc* , on a:

dbut a
0 1 2 3


b c
4 5 6 7 8 9


L'expression rgulire quivalente:
a|b|bcc* = a|b|bc+ = a|bc*

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 74


8- Des expressions rgulires 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.

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 75


8- Des expressions rgulires 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 j.

x
i j

x
k

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 76


8- Des expressions rgulires aux automates
Elimination des -transitions:
1- Augmentation des transitions:
2- Un tat est final s'il existe est une suite d'-transitions qui
mnent un tat final. a

dbut a
0 1 2 3


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

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 77


8- Des expressions rgulires aux automates
Elimination des -transitions:
3- On supprime les -transitions:
4- On supprime les tats inaccessibles partir de l'tat initial.
a

dbut a
0 1 2 3

b c
4 5 6 7 8 9

b c c
c

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 78


8- Des expressions rgulires aux automates
Elimination des -transitions:
3- On supprime les -transitions:
4- On supprime les tats inaccessibles partir de l'tat initial.
a

dbut
0 2

5 8

b c
c

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 79


8- Des expressions rgulires aux automates
8.3- Minimisation du nombre d'tats d'un AFD:
But: Obtenir un automate ayant le minimum d'tats possible.

Principe: On dfinit les classes d'quivalence d'tats par


raffinements successifs.
Chaque classe d'quivalence obtenue forme un seul et mme
tat du nouvel automate.

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

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 80


Le reste est en cours de prparation !

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 81


A titre d'exemple, voici le contrle de l'anne dernire
Universit Mohammed V-Agdal Session dautomne 2012
Facult des sciences SMI S5
Dpartement dInformatique
Contrle 1 : Compilation
(dure : 1h 30)
Exercice 1 :
Donner les expressions rgulires qui dcrivent les lexmes sur lalphabet {a,b,c} suivants :
1- les lexmes sur {a,b,c} qui commencent par b
2- les lexmes sur {a,b,c} qui contiennent exactement trois b
3- les lexmes sur {a,b,c} qui contiennent au moins trois b
4- les lexmes sur {a,b,c} qui contiennent au plus trois b
5- les lexmes sur {a,b,c} de longueur deux ne contenant pas la lettre b
Exercice 2 :
Simplifier les expressions rgulires suivantes :
1- a | aa* | e
2- (aa)* | a(aa)*
Exercice 3 :
Soit la grammaire des expressions boolennes suivante :
A A ou A | A et A | non A | (A) | vrai | faux
1- Cette grammaire est elle ambige ? justifiez votre rponse.
2- Donner une dfinition dirige par la syntaxe qui calcule le nombre de vrai dans une expression.
3- Appliquer cette dfinition dirige par la syntaxe pour construire un arbre syntaxique dcor de la phrase:
non vrai ou faux et vrai .

Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 82

Vous aimerez peut-être aussi