On considère l'AFD A
défini par ({a,b}, {0,1,2}, δ, 0, {2})
où δ
, la fonction de transition, est donnée par la table
a | b | |
---|---|---|
0 | 1 | 0 |
1 | 2 | 1 |
2 | 2 |
Pour définir un automate avec JFLAP, il faut :
jflap
Finite Automatondu menu initial
A
. babab
(sélectionner dans le menu Inputl'option
Step by State).
Inputl'option
Multiple Run).
Récupérer le fichier afn1.jff qui décrit un AFN A
. L'ouvrir avec JFLAP.
A
n'est pas déterministe ? aabb
.
Donner la trace des deux calculs acceptant de l'automate A
sur cette entrée.A
.À partir du graphe de transition de l'automate non déterministe
Convertl'option
Convert to DFA.
State Expandeur(3ème bouton de la barre d'outil).
A
.Récupérer le fichier er1.jff qui définit un AFD A
.
A
.On veut expliciter une expression régulière qui décrit le langage reconnu par l'automate A
.
À partir du graphe de transition de l'automate
source
avec une transition
étiquetée par le mot vide (avec JFLAP, c'est par défaut le symbole λ,
qu'on obtient en tapant immédiatement sur 'entrée' lors de l'ajout d'une
transition) sur l'état initial.destination
avec des transitions étiquetées par le mot vide des états finaux vers cet état destination
.source
devient l'unique état initial et l'état
destination
l'unique état final.Puis
InputConvertl'option
Convert FA to RE.
A
. JFLAP permet de construire un automate avec ε
-transitions
qui reconnaît le langage associé à une expression rationnelle donnée
(c'est l'algorithme de Thompson qui est appliqué) :
Regular Expressiondu menu initial.
Convert to NFApuis utiliser la commande
Do Steppour visualiser les différentes étapes de la construction).
a
ou ab
ε
-transitions qui reconnaît le langage associé.On considère sur l'alphabet {a,b}
, le langage L1
formé de tous les mots contenant exactement deux a
et le langage L2
formé de tous les mots contenant exactement trois b
.
A1
qui reconnaît le langage L1
et un AFD A2
qui reconnaît le langage L2
.A1
et A2
pour construire un automate A∪
avec ε
-transitions qui reconnaît le langage L1 ∪ L2
.A∪
. Que mémorise chacun des états de cet automate ? Pouvez vous trouver
un automate déterministe reconnaissant le même langage avec moins
d'états ?A
(à 6 états) qui reconnaît le langage décrit par 101+001*
.A
construire sans ajouter d'états un automate avec ε
-transitions qui reconnaît le langage décrit par (101+001*)*
. 00100, 1010011, λ
. Et enregistrer votre automate dans le fichier automateEtoile.jff
.On souhaite vérifier que l'automate construit reconnaît bien le langage décrit par (101+001*)*
.
L'idée est de construire un deuxième automate avec ε
-transitions à partir de l'expression rationnelle (101+001*)*
comme vu précédemment. Puis de déterminer l'équivalence entre ces deux automates (sélection de l'option Compare Equivalence
dans le menu Test
).
automateEtoile
reconnaît effectivement le langage décrit par (101+001*)*
.A1
(à 3 états) qui reconnaît le langage décrit par 01(11)*
et un AFD A2
(à 2 états) qui reconnaît le langage décrit par (00+10)*
.A1
et A2
, construire un automate A⊗
avec ε
-transitions qui reconnaît le langage L1 ⋅ L2
.A⊗
. 1
La commande jflap
est un simple script shell qui fait :
#!/bin/sh exec java -jar /usr/local/jflap/JFLAP.jar "$@"Vous pouvez facilement disposer de cette commande en téléchargeant JFLAP.jar.