Principe général : préparer 4 automates déterministes complets

Université Paris Diderot – HE01LI – 15/16 corrigé C.C. n1
1. Soit X={a, b, c}. Proposer un automate déterministe (pas nécessairement complet) qui
reconnaît le langage sur Xde tous les mots qui contiennent soit le motif aba, soit le
motif bcb, mais pas les deux. On n’est pas obligé de passer par les algorithmes vus en
cours.
Principe général : préparer 4 automates déterministes complets : celui des mots sur
Xqui contiennent le motif aba, et celui des mots qui ne le contiennent pas (son
complément), celui des mots qui contiennent le motif bcb, et ce lui des mots qui
ne le contiennent pas (son complément).
wcontient abawne contient pas aba
10 11 12
b
a
b, c
a
a, b, c
c
20 21 22
b
a
b, c
a
a, b, c
c
wcontient bcbwne contient pas bcb
30 31
a, b a, b, c
c
40 41
a, b a, b, c
c
Ensuite, on combine ces automates selon le raisonnement suivant : dès qu’un des
deux motifs a été reconnu, il faut entrer dans un état tel que la reconnaissance
de l’autre motif envoie dans un état puits. Voilà un exemple de ce que cela peut
donner :
0
11 12
22,41
31 21
b
ba, b
b
a, b, c
a
a
c
c
a
c
a
a
2. Soit l’automate représenté par la table de transition : a b c
1 2 3 1
2 2 2 4
3 4 3 3
4 4 3 4
Proposez un automate reconnaissant le même langage mais minimal en nombre d’états.
Quel est le langage reconnu par cet automate ?
1
Université Paris Diderot – HE01LI – 15/16 corrigé C.C. n1
En appliquant l’algorithme de séparation des classes d’états, qui commence avec les
deux classes {1,2}et {3,4}, on aboutit à un point fixe avec trois classes : {1},{2}
et {3,4}. L’automate minimal est l’automate obtenu en fusionnant les états 3 et 4.
Le langage reconnu peut être décrit par l’expression rationnelle
cb|a(a|b)c(a|b|c)
3. Soit l’expression rationnelle (abc)c(cb|ε).
(a) Proposer un automate reconnaissant le même langage, en appliquant rigoureusement
l’algorithme vu en cours
L’algorithme vu en cours consiste à associer à chaque symbole un automate élé-
mentaire, et à associer à chaque opération rationnelle (produit, union, étoile)
la construction d’un automate en introduisant des ε-transitions. Voici ce que
donne l’application rigoureuse de l’algorithme vu en cours. En noir les auto-
mates élémentaires, en rouge les ε-transitions ajoutées par un produit, en orange
les ε-transitions ajoutées par une étoile de Kleene, et en bleu les ε-transitions
venant d’une union.
1
2
ε
3
a
4
ε
5
b
6
ε
7
c
ε11 12
ε
13
b
14
ε
15
c
8
ε
9
c
10
ε
16 17
ε
ε
ε
ε
(b) Éliminer les ε-transitions (on pourra commencer par éliminer les ε-transitions les plus
faciles à éliminer avant d’utiliser l’algorithme général).
On pouvait bien sûr appliquer l’algorithme vu
en cours à cet automate, ce qui est un peu
fastidieux, ou, comme suggéré dans l’énoncé,
éliminer « à la main » les ε-transitions les
plus faciles à éliminer, avant d’appliquer l’al-
gorithme, voire tenter d’enlever à la main
toutes les ε-transitions ; dans tous les cas il
est judicieux de vérifier que l’automate ré-
sultant vous semble bien reconnaître le lan-
gage initialement donné. Ici, l’automate sans
ε-transition peut finalement ressembler à ça :
b
a
c
c b
cb
c
2
Université Paris Diderot – HE01LI – 15/16 corrigé C.C. n1
4. Donnez dans le pseudo-langage de votre choix l’algorithme de transformation d’une gram-
maire algébrique quelconque en une grammaire ε-libre.
On commence par construire l’ensemble Eff des symboles non terminaux qui s’ef-
facent directement :
for (Aα)P:
if α== ε:
Eff =Eff ∪ {A}
On définit une fonction récursive qui produit un ensemble de chaînes correspondant
à toutes les parties droites possibles selon qu’on laisse ou qu’on enlève les symboles
qui s’effacent. La fonction suppose défini le produit des langages.
def rhs(α1α2. . . αk) :
if k== 0 : return {ε}
if α16∈ Eff :
return {ε}.rhs(α2. . . αk)
return {ε}.rhs(α2. . . αk)∪ {α1}.rhs(α2. . . αk)
Pour chaque règle de la grammaire d’origine, on ajoute au nouvel ensemble de règles
Ples règles obtenues par l’application de la fonction rhs qui crée autant de parties
droites que nécessaires. On élimine εpar la même occasion.
for (Aβ)P:
for γin (Aβ)P:
if γ6=ε:
P=P∪ {Aγ}
Enfin, on s’occupe du cas où l’axiome produit (directement ou indirectement) ε:
for (Sβ)P:
if εrhs(β) :
ajouter (si nécessaire) à P:Sε|Set fixer l’axiome à S
3
1 / 3 100%