Vous êtes sur la page 1sur 65

COURS DE

LA COMPILATION
Section : SMI - Semestre 5
A.U: 2022-2023
abderrahim.tragha@univh2c.ma

1
C’EST QUOI LA COMPILATION ?

➤ Un outil essentiel pour la réalisation des programmes informatiques: le


compilateur.
➤ Un compilateur est un logiciel particulier qui traduit un programme écrit
(par le programmeur) dans un langage de haut niveau en instructions
excusables (par un ordinateur)

2
CHAINE DE DÉVELOPPEMENT D’UN PROGRAMME
Problème à résoudre

’ ’

’ ’
3
DÉFINITION

➤ Un compilateur est un logiciel (programme) de traduction


automatique d’un programme écrit dans un langage source en un
programme équivalent écrit dans le langage machine.
➤ Exemple de langages compilés: Pascal, C, C++, Ada, Fortran, Cobol,

➤ Remarque : il ne faut pas confondre les compilateurs avec les


interprèteurs

4
UN INTERPRÉTEUR

une instruction

’ ’

5
DIFFÉRENCE ENTRE INTRPÈTEUR ET COMPILATEUR

➤ Au lieu de produire un programme cible comme dans le cas d’un


compilateur, un interprèteur exécute lui même les opérations
spécifiées par le programme source.
➤ Exemple de langages interprétés : Basic, scheme, CaML, LISP,
Prolog, Perl, …

6
➤ Il existent des langages à mi-chemin de l’interprétation et la
compilation. On les appelle langages P-Codes ou Pseudo-Codes.
➤ Le code source est traduit (compilé) dans une forme binaire
compacte (du pseudo code ou P-code) qui n’est pas encore du code
machine.
➤ Lorsque l’on exécute le programme, ce code est interprété.
➤ Par exemple en Java, le prog. source est compilé pour obtenir un
fichier (.class) byte code qui sera interprété par une machine
virtuelle. De même pour le langage Python.

7
POURQUOI CE COURS ?

➤ Présenter les principes de base d’un compilateur


➤ Savoir les idées et les techniques développées dans ce domaine. qui
sont si générales et fondamentales qu’un informaticien les utilisent
très souvent dans sa carrière.
➤ Mieux comprendre les contraintes imposées par les différents
langages quand on écrit un programme dans un certain langage

8
STRUCTURE D’UN
COMPILATEUR

9
COMPOSITION D’UN COMPILATEUR
Il se compose de deux phases
➤ Phase d’Analyse :
• reconnaitre les variables, les instructions, les opérations
• élaborer la structure syntaxique du programme
• ainsi que certaines propriétés sémantiques
➤ Phase production :
• Produire le code cible et l’optimiser

10
PHASE D’ANALYSE

➤ Analyse lexicale

➤ Analyse syntaxique

➤ Analyse sémantique

11
PHASE DE PRODUCTION

➤ Production de code
• Produire les instructions en langage cible

➤ Optimisation du code
• Améliorer le code produit afin que le programme résultant
soit plus rapide

12
PHASES EN PARALLÈLE
➤ Gestion de la table des symboles
if (i< a+b) // un simple test
X= 2* X ;

➤ Gestion des erreurs

13
14
ANALYSE LEXIQUE

15
ANALYSEUR LEXICALE
➤ les taches principales :
• lire les caractères (un par un) du programme initial
• donner la suite des unités lexicales à l’analyseur syntaxique qui vas les
traiter
➤ les taches secondaires :
• éliminer les informations inutiles (commentaires, retours à la ligne,
espaces superflus, …
• créer la table de symboles rencontrés dans le programme initial
• détecter certaines erreurs (caractères non autorisés, nombre mal
écrit, …)

16
UNITÉS LEXICALES ET LEXÈMES
➤ Une unité lexicale est une suite de caractères qui a une signification collective.
- les chaines <, <=, >, >=, ==, <> sont des opérateurs relationnels. L’unité lexicale
OPREL (par exemple)
- les chaines toto, Tab, MONTANT, Tax2 sont des identificateurs unité lexicale IDENT
- if, else, while sont des mots réservés (mots clés)
( , ) , ; sont des séparateurs
➤ Un modèle est une règle associée à une unité lexicale qui décrit l’ensemble des
chaines du programme qui peuvent correspondre à cette unité lexicale
➤ On appelle lexème toute suite de caractère du programme source qui concorde
avec le modèle d’une unité lexicale.

17
Exemples :

Unité lexicale Modèle Lexème

suite non vide de caractères


IDENT composée de lettres, chiffres et ‘_’ et toto, Tab1, SMI_S5,
ne commence pas par un chiffre

suite non vide de chiffre peut


NOMBRE 314, -5, +120
commencer par ‘-‘ ou ‘+’

NOMBRE suivi d’un point suivi d’un


256.04E-1, 1000.0e5,
REEL NOMBRE suivi ou non de ‘E’ ou ‘e’
874.20
suivi d’un NOMBRE

18
TECHNIQUES UTILISÉES PAR L’ANALYSEUR LEXICAL & LES
PRINCIPES DE BASE

➤ Pour décrire les modèles on utilise les expressions régulières


➤ Pour vérifier si un lexème correspond à une unité lexicale on utilise les
automates finis

19
OUTILS POUR CONSTRUIRE UN ANALYSEUR LEXICAL
(Fast Lexer) est un compilateur pour la génération automatique
d’analyseurs lexicaux.
➤ Flex prend en entrée un fichier source Flex et produit en sortie un
fichier contenant le code C (ou C ++) du future analyseur lexical.
➤ Un fichier Flex est un fichier texte qui contient des spécifications
d’unités lexicales (sou forme d’expressions régulières) suivies
d’actions(à exécuter) écrites en langage C

20
ANALYSE
SYNTAXIQUE

21
ANALYSEUR SYNTAXIQUE
➤ L’analyseur syntaxique reçoit une suite d’unités lexicales de la part
de l’analyseur lexical et doit vérifier si cette suite peut être
engendrée par la grammaire du langage. (analyse descendante ou
ascendante)
➤ cela en essayant de construire un arbre de dérivation ou arbre
syntaxique.
➤ Si la suite des unité lexicales n’est pas en conforme avec la
grammaire le message d’une erreur sera affiché
➤ Sinon (aucune erreur n’est détecté) l’analyser génère un arbre
syntaxique est généré par l’analyseur syntaxique

22
EXEMPLE :
➤ if (x>10) a=a+b ;
cond if

> =

x 10 a +

a b

23
TECHNIQUES UTILISÉES PAR L’ANALYSEUR
SYNTAXIQUE
➤ les grammaires hors contexte

➤ les automates à pile

24
OUTILS POUR L’ANALYSEUR SYNTAXIQUE

➤ Parmi les outils de construction des analyseurs syntaxique : Yacc


qui est un utilitaire d’Unix et bison produit Gnu.
➤ Yacc/bison accepte en entrée la description d’un langage sous
forme de règles grammaticale

http://langevin.univ-tln.fr/CDE/LEXYACC/Lex-Yacc.html 25
LES EXPRESSIONS
RÉGULIÈRES

26
NOTIONS DE BASE
➤ Alphabet : ensemble fini et non vide ∑ de symbols
➤ Mot ou chaine : une séquence de symboles de ∑ juxtaposés. la
longueur d’un mot w est le nombre des symboles qui le
composent et sera noté |w|
(Exemple: dans ∑={a, b, c, …,z} |abd|=3, |errahim| =7 ,
dans ∑={0, 1, espace} |01 101|=6, |10|=2 et |0|=1 )
➤ Le mot de longueur 0 est le mot vide(ou la chaine vide) et sera
notée 𝜀
➤ Langage : ensemble (fini ou non) de mots composés des
symboles de ∑

27
NOTIONS DE BASE
➤ La concaténation de deux mots U=u1u2…un et V=v1v2…vp de l’alphabet ∑ est le mot
U.V= u1u2…unv1v2…vp où ui vj ∈ ∑
(Rq : |U.V| = |U|+|V| U.𝜀 = 𝜀.U=U
Ex: U=bon V=jour U.V= bonjour mais V.U = jourbon ;
La concaténation est une loi de composition interne non commutative, elle admet comme 𝜀 élément
neutre)
➤ La concaténation de 2 langages L1 et L2 est le langage L1.L2 ={U.V tel que U∈ L1 et V ∈L2 }
➤ Soit ∑ un alphabet, on note ∑* et on l’appelle l’étoile de Kleene l’ensemble de toutes les chaines
possibles composées des symboles de ∑ dont 𝜀 est parmi eux.
➤ On note aussi ∑n l’ensemble des chaines de ∑ de longueur n

(Rq : ∑* = ∪ ∑n ∑n = ∑i.∑j si i+j=n ∑+= ∑.∑*


∑n est unn≥0
ensemble fini mais ∑* est infini)

On définit ∑+ l’ensemble de tous les mots non vide de ∑* on peut écrire ∑*= ∑+ ∪{ 𝜀 }

28
LANGAGES RÉGULIERS
➤ Problème à résoudre: comment décrire tous les mots d’un langage ?
➤ ∃ plusieurs types de langages certains sont simples à décrire et d’autres
sont difficiles. Nous nous intéressons dans un 1er temps aux langages
réguliers.
➤ Définition: (récursive) soit ∑ un alphabet,
∅ est un langage régulier sur ∑
{𝜀} est un langage régulier sur ∑
Pour tout symbole s de ∑ { s } est un langage régulier sur ∑
Si L et H sont deux langages réguliers sur ∑
alors L∪H , L.H , L* sont des langages réguliers sur ∑

29
EXPRESSIONS RÉGULIÈRES
➤ Les langages réguliers se décrivent facilement à l’aide des expressions régulières (ER).
➤ Définition: (récursive) soit ∑ un alphabet,
ø est une ER qui décrit le langage vide ∅
𝜀 est une ER qui décrit le langage {𝜀}
s est une ER qui décrit le langage {s} où s appartient à ∑
si r1 et r2 sont des ER qui décrits respectivement les langages L1 et L2
alors r1|r2 est une ER qui décrit L1 ∪ L2
r1.r2 " " " " " " L1.L2 On peut la noter seulement par r1r2
r1* " " " " " " L 1*
➤ Dans une formule des ER s’il n’y a pas des parenthèses, on conviendra la priorité décroissante : * , . ,
|
➤ Nous ajoutons l’opérateur + en posant r1+ est une ER qui décrit L1+
➤ Dans le cas où les symboles sont ordonnés on utilise l’opérateur .. : s1.. s2 pour désigner tous les
symboles qui existent entre s1 et s2 Exemple: A..E désigne A|B|C|D|E

30
EXEMPLES D’EXPRESSIONS ET DE LANGAGES
RÉGULIERS
➤ 1* décrit { 𝜀, 1, 11,111, 1111, 11111, …}

➤ ab* décrit {a}. { 𝜀, b, bb, bbb, …}= {a, ab,abb, abbb, …}


➤ a(a|b)* décrit toutes les chaines composées des a et des b qui commencent avec a
{a}.{a,b}*={a,aa,ab, aab, aaa, aba, abb, aaaa,aaab,aaba,aabb,abbb, …}
➤ (a|b)*bb décrit toutes les chaines composées des a et des b qui se terminent
par bb
➤ (0|1)(0|1)(0|1)(0|1) décrit {0 , 1}.{0, 1}.{0, 1}.{0, 1}=
➤ = {00, 01, 10, 11}. {00, 01, 10, 11}= {0000,0001, 0010,0011, O100, 0101,
0110,0111, 1000,…..,1111}
➤ a|b*c décrit {a, c, bc, bbc, bbbc, bbbbc ,….}
➤ (a*|b*)* = (a|b)* =((a|𝜀 )b*)*

31
EXEMPLES
➤ ab* décrit {a, ab, abbé, abbb, abbbb, …}
➤ a*b* décrit {𝜀, a, aa, aaa, aaaa, …, b, ab, aab, aaab, aaaab, …,bb, abb, aabb, aaabb, …, bbb, abbb,
… …} ={aibj avec i, j entiers positifs}≠
{anbn n entiers positif}
➤ (ab)* ={𝜀, ab, abab, ababab, ….}
➤ (a | b |c)*(c | ø) décrit l’ensemble de toutes les chaines composées des a,b et c dont le dernier
symbole est c ={c, ac, bc, cc, bac, abc, acc, bac, bbc, bcc, bac, cbc, ccc, …}

Questions

➤ (a* | b*) = (a | b)* ?


➤ (a | b)* b = (a | b)* ?
➤ (a*b)* = (a | b)*b ?

32
Exemples :
Unité
Modèle expression régulière
lexicale

suite non vide de caractères


IDENT composée de lettres, chiffres et ‘_’ et [a..z|A..Z|_][a..z|A..Z|_|0..9]*
ne commence pas par un chiffre

suite non vide de chiffre peut


NOMBRE 𝛂=0|(+|-|𝜀 )[1..9][0..9]*
commencer par ‘-‘ ou ‘+’

NOMBRE suivi d’un point suivi d’un


REEL NOMBRE suivi ou non de ‘E’ ou ‘e’ 𝛂 .𝛂((E|e)𝛂|𝜀 )
suivi d’un NOMBRE

33
DÉFINITION & PROPRIÉTÉS
➤ Un langage d’un alphabet est dit régulier s’il peut être décrit par une
expression régulière.

➤ Les langages réguliers sont stables par les opérations :


- Réunion en effet : L(r1)∪L(r2) = L(r1|r2)
- Concaténation " " : L(r1).L(r2) = L(r1.r2)
- L’étoile de Kleene " " : (L(r))* = L(r*)

34
PROBLÉMATIQUE
➤ Si les expressions régulières servent à développer manuellement des
modèles. Comment vérifier si un lexème concorde avec le modèle d’une
unité lexicale?

SOLUTION
➤ L’utilisation des automates finis déterministes (DFA).
➤ A chaque modèle (Expression Régulière), construire un DFA, puis
développer un programme de simulation.

35
LES AUTOMATES
FINIS

36
AUTOMATES FINIS DÉTERMINISTES (Deterministic
Finite Automata)
Fonctionnement d’un DFA : DFA

➤ La tête de lecture se déplace du gauche à droite (case par case)


➤ L’unité de contrôle change d’état selon le symbole lu
➤ Parmi les états : un désigné pour le départ, certains sont marqués finaux
➤ Le mot entré sera accepté si après l’examen de son dernier symbole, l’unité de contrôle se trouve
dans un état final.
➤ Le mot sera rejeté si l’unité de contrôle est bloquée ou si cette unité se trouve dans un état non final
après l’examen du dernier symbole.

37
EXEMPLES DFA
➤ L’ascenseur
➤ Le guichet bancaire automatique
➤ Distributeur des boissons
➤ Billetterie automatique
➤ Machine à laver
➤ Lave vaisselle
➤ …

38
DFA : DEFINITION FORMELLE
➤ Un automate fini déterministe (DFA) est défini par un 5-uplet (Q , ∑ ,
𝛿 , q0 , F) où :
Q : ensemble des états (fini)
∑ : alphabet (symboles d’entrés)
q0 : état initial ∈ Q
F : ensemble des états finaux (états d’acceptation) ⊂ Q
𝛿 : fonction de transition de Q Ⅹ ∑ vers Q
(p, s) ——> 𝛿(p,s)

39
EXEMPLES

➤ M1= ({p, q, r}, {0, 1}, 𝛿 , p , {r}) avec 𝛿 défini par la table:

𝛿 0 1
p r q
q r q
r p q

Examen des chaines : 10 ; 01101 ; 110100

le ruban: 1 0
Etat actuel : p
0 1 1 0 1
la tête de lecture :

1 1 0 1 0 0
40

ACCEPTATION (Rappel)

➤ Le DFA se trouve dans l’état initial commence l’examen d’une


chaine à partir de son 1er symbole s; se déplace dans l’état 𝛿(q0,s)
et passe à examiner le 2ème symbole. Ainsi de suite.

➤ Un mot est accepté par un DFA M si après l’examen du dernier


symbole de ce mot M se trouve dans un état final

➤ Un mot n’est pas accepté par un DFA M si M est bloqué au cours de


son examen ou bien après l’examen du dernier symbole M se
trouve dans un état non final.

41
REPRÉSENTATION GRAPHIQUE
➤ On utilise les formes suivantes afin de présenter un DFA sous la
forme d’un graphe orienté où:
➤ les noeuds sont des cercles représentant les états et
➤ les arcs sont des flèches étiquetées par les symboles
➤ si 𝛿( état1, symbole) = état2 on la présente par :

➤ L’état initial q0 sera indiqué par une petite flèche


➤ Pour les états finaux on double le cercle
Exemple:

42
FORMALISATION DE L’ACCEPTATION D’UN DFA
➤ Soit M=(Q , ∑ , δ , q0, F) avec δ: QX∑ ——> Q
➤ L(M): l’ensemble des mots acceptés par M
= { w appartenant à ∑* de tel que l’examen des symboles de w se termine
dans un état final}
Problème : Comment décrire L(M) par une formule mathématique ?
Solution: Prolonger la fonction de transition δ sur QX∑* en posant
∆ : QX∑* ——> Q avec
∆(q , ℇ) = q ∀q dans Q
∆(q , us) = δ (∆( q, u), s) ∀ u dans∑* et ∀ s dans ∑

Exemples

43
EXEMPLE ET SOLUTION
∆(q , ℇ) = q ∀q dans Q
∆(q , us) = δ (∆( q, u), s) ∀ u dans∑* et ∀ s dans ∑
➤ Remarque:
∆(q , s) = δ (q, s) pour tout symbole s de ∑
donc ∆ coïncide avec δ sur QX ∑

∆(1 , ab) = δ(∆( 1, a), b)


∆(1 , a) = δ(∆(1, ℇ), a) car a= ℇa
∆(1, ℇ) = 1 donc ∆(1 , a) = δ(1, a) = 1
et par csq: ∆(1, ab) = δ (1, b) = 2

44
EXEMPLE ET SOLUTION DU PROBLÈME

∆(1 , bababa) = δ(∆( 1, babab), a) = δ(1,a)=2 car


∆( 1, babab)= δ(∆( 1, baba),b))=δ(1, b)= 1
∆( 1, baba)= δ(∆( 1, bab),a))=δ(2,a)=1 car
∆( 1, bab)= δ(∆( 1, ba),b)=δ(2,b)=2 car
∆( 1, ba)= δ(∆( 1, b),a)= δ(δ(1,b),a)=δ(1,a)=2
➤ Notez bien:
L(M) = { w ∈ ∑* tel que: ∆(q0,w) ∈ F } est le langage accepté par l’automate M.

45
➤ Donner quatre chaines acceptées par l’automate :
01 ; O111; 01101;
10111001101101

les chaines de 0 et 1 contenan


➤ Quel est le langage accepté par ce DFA ? un nombre impaire des 1 et se
➤ De même pour le DFA : terminant par 1

les chaines de a et b, de longueur >1 ,


qui commencent par a et se terminent par a

46
AUTOMATES ÉQUIVALENTS = AUTOMATES QUI ACCEPTENT MÊME LANGAGE
➤ Pour le même langage nous pouvons avoir plusieurs DFA qui le
reconnaissent, par exemple: {w de{0 , 1 }* / w contient deux 1 successives
}= L((0∣1)*11(0∣1)*) est accepté par les automates :

47
DFA À NOMBRE D’ÉTATS MINIMAL

➤ Question: Parmi les DFA reconnaissant un même langage L, quel est le


meilleur?
➤ Réponse: celui qui à le plus petit nombre d’états

➤ Théorème 1 :
Soit L un langage régulier. Parmi tous les DFA reconnaissant L, il en
existe un et un seul qui a un nombre minimal d’états.

48
ALGORITHME DE MINIMISATION :
Pour un langage L, Comment peut-on en trouver un DFA qui a le nombre minimal des
états ?
1- Supprimer les états inaccessibles à partir de l’état initial, ainsi que les transitions
entrants ou sortants de ces états.
2- Supprimer les états qui n’amènent jamais à un état final, ainsi que les transitions
entrants ou sortants de ces états.
3- Diviser l’ensemble des états en deux classes
C1 : classe des états non finaux et C2 : classe des états finaux.
4- Pour chaque classe Ci , si ∃ deux états p et q et un symbole s de l’alphabet pour
lequel δ(p , s) et δ(q , s) ∉ la même classe alors diviser Ci en deux sous classes: Ci’ qui
contient p et Ci" qui contient q
5- Répéter 4- Jusqu’à ce qu’il ne reste aucune classe à diviser.
6- Le nombre des classes résultantes est le nombre minimal des états et l’automate
dont les états sont les classes est le DFA qui admet le nombre minimal des états.

49
EXEMPLE DFA À MINIMISER :
EXERCICE : MINIMISER LE NOMBRE DES ÉTATS POUR CE DFA

51
1- Eliminer l’état 9 il est inutile
3- C1 = { q1, q2, q3, q4, q5 } C2 = { q6, q7, q8 }

➤ C1 sera divisée en deux sous classes C’1={q1,q2,q5} et C’2={q3,q4}


➤ C2 " " " " " " C’3={q6} et C’4={q7,q8}

52
➤ C’1={q1,q2,q5} C’2={q3,q4} C’3={q6} et C’4={q7,q8}

Donc C’1 sera divisée en 2 sous classes : C"1={q1,q2} et C"2={q5}


C’2 sera divisée en 2 sous classes : C"3={q3} et C"4={q4}

53
Aucune classe n’est divisible donc le nombre minimal est 6 et le DFA qui
a ce nombre d’états est :

54
DFA MINIMAL DE L’EXEMPLE

55
DFA COMPLET
➤ Définition : Un automate fini déterministe est complet si de chaque état
le nombre des transitions sortantes est égal au nombre des symboles de
son alphabet
➤ Autrement dit: un DFA (Q , ∑ , δ , q0, F) est complet si : ∀q ∈ Q , ∀s ∈ ∑ ,
δ(q, s) est définie.
➤ Exemple: les deux derniers DFA sont complets. Par contre les DFA suivant
ne sont pas complets:

56
COMMENT RENDRE UN DFA COMPLET

➤ Si un DAF n’est pas complet alors pour le rendre complet:

1. On ajoute un nouveau état non final p (qu’on appelle état-


poubelle ou état-puit)

2. Pour toute transition δ(q, s) qui n’est pas définie


on ajoute δ(q, s)=p

3. Pour tout symbole s on ajoute δ(p, s)=p .

57
COMMENT RENDRE UN DFA COMPLET
➤ Par exemple pour la complétion des DFA précédents :

58
OBJECTIF 1 :
➤ Nous allons montrer qu’à toute expression régulière correspond un
DFA. Autrement dit : l’équivalence entre les langages réguliers et les
DFA.

➤ Pour cela nous sommes obligé d’étudier d’autres types d’automates


finis.

59
AUTOMATES FINIS NON DÉTERMINISTES (NFA)

➤ les NFA fonctionnent comme les DFA sauf ils autorisent le choix
entre plusieurs transitions pour le même état et le même symbole :

➤ Définition formelle:
Un NFA est la donnée d’un 5-uplet (Q , ∑ , 𝛿 , q0 , F)
où : Q , ∑ , q0 , F ont les mêmes significations déjà vues en DFA
et 𝛿 de Q Ⅹ ∑ vers l’ensemble des parties de Q
𝛿(p,s) ∈ P(Q) ∀(p, s) ∈ Q Ⅹ ∑
➤ Exemple:

60
EXEMPLE DE NFA:

Q={p , q ,r , t} ; ∑ ={0 , 1 } ; p est l’état initial ; F={t} et 𝛿 définie par :

➤ Un mot w de est accepté si parmi les séquences possibles des transitions étiquetées
par le symboles de w commençant de p il existe une séquence qui se termine par
l’état final t.
Pour w= 00101101 quelle sont les séquences possibles dans ce NFA 61
Formalisation de l'acceptation dans un NFA:

Soit M= (Q, ∑, 𝛿, q0, F) un NFA où 𝛿: Qx∑ ---> P(Q)

➤ Dans une 1ère étape on prolonge 𝛿 sur P(Q)X∑ en posant

Par conséquence :

➤ Dans une 2ème étape on prolonge 𝛿 sur P(Q) X∑* par :

∆ : P(Q)X∑* ——> P(Q) avec


∆(A , ℇ) = A ∀A dans P(Q)
∆(A , us) = δ (∆(A, u), s) ∀ u dans∑* et ∀ s dans ∑

➤ Exemple : calcul de ∆({p} , 0100) = ? 62


On a : ∆({p}, 0100) = δ (∆({p} , 010), 0)
Il faut alors calculer : ∆({p} , 010)
∆({p} , 010) = δ (∆({p} , 01),0)
on a alors besoin de : ∆({p} , 01)
∆({p} , 01) = δ (∆({p} , 0), 1) = δ (δ(∆({p} ,ℇ), 0),1)= δ (δ({p}, 0),1)= δ({p,q},1)={p,r}
Donc ∆({p} , 010) = δ ({p,r} , 0) = δ ({p} , 0)∪δ({r} , 0) = {p, q} ∪ ∅ ={p, q}

et par conséquence : ∆({p} , 0100) = δ ({p ,q} , 0) = δ ({p},0)∪δ({q} ,0) = {p,q}∪{t} = {p ,q,t}
➤ Noter bien: ∆ coïncide avec δ sur P(Q) X∑ on utilise alors δ pour noter ∆

➤ Définition : Le langage accepté par le NFA M= (Q , ∑ , 𝛿 , q0 , F) est l’ensemble:

L(M) ={ w de ∑* tel que : 𝛿 ({q0 }, w) ∩ F ≠∅ }


63
DÉTERMINISATION D’UN NFA

➤ Un DFA est un cas particulier du NFA,


donc tout langage reconnu par un DFA est reconnu par un NFA.
➤ Question: Est ce qu’on a la réciproque?
Théorème2:
Tout langage reconnu par un NFA peut être reconnu par un DFA.

Soit M = (Q , ∑ , 𝛿, q0, F) est un NFA qui reconnaît L,


Le principe de la construction est de prendre comme états du DFA les ensembles
d’états du NFA. L’état initial sera le singleton {q0}
Algorithme de déterminisation d’un NFA

64
DÉTERMINATION D’UN NFA

Algorithme de déterminisation d’un NFA

Considérons M’ = (P(Q) , ∑ , δ’, {q0}, F’) est un DFA qui reconnaît le même langage L,
avec : F’={X∈P(Q) , X∩F ≠ ∅}, δ’(X, a) = δ(X, a). ∀ a ∊ ∑
Pratiquement, on ne construit que les états accessibles à partir de {q0}, de proche en
proche : on calcule toutes les transitions qui partent de {q0}, puis on recommence
avec les nouveaux états obtenus, etc.

➤ Exemple :

65

Vous aimerez peut-être aussi