This commit is contained in:
Florent Madelaine 2024-03-18 10:46:18 +01:00
parent 479ac312c2
commit 6a5de77fdb
3 changed files with 117 additions and 0 deletions

View File

@ -43,6 +43,17 @@ Note that JFLAP proposes an activity for this construction.
There is also an inverse transformation from automaton to regexp, also available on JFLAP. There is also an inverse transformation from automaton to regexp, also available on JFLAP.
This shows that languages defined by a regexp and languages recognized by a finite automaton form the same class of languages, commonly known as regular languages. This shows that languages defined by a regexp and languages recognized by a finite automaton form the same class of languages, commonly known as regular languages.
#### Les ingrédients.
Constructions qu'on doit détailler.
1. comment construire un automate pour le langage a
1. comment construire un automate pour L1.L2 si on connaît un automate A1 pour L1 et un automate A2 pour L2
1. comment construire un automate pour L1+L2 si on connaît un automate A1 pour L1 et un automate A2 pour L2
1. comment construire un automate pour L* si on connaît un automate A pour L
1. comment décrire sans ambiguité l'ordre des opérations dans une expression régulière
(écrire l'expression sous forme d'un arbre)
1. comment combiner toutes ses idées.
### grep ### grep

View File

@ -0,0 +1,106 @@
# Exercices REGEXP
REGEXP. abb britannique de Regular Expression.
## Exo 1
L'alphabet de travail est a,b
Pour chaque description en français, proposez une expression régulière.
* tous les mots sur l'alphabet qui sont de longueur 2.
(a+b).(a+b)
On peut faire le calcul.
(a+b).(a+b) = a.(a+b)+b.(a+b)
avec
a.(a+b) = a.a + a.b
et
b.(a+b) = b.a + b.b
Donc
(a+b).(a+b) = a.a + a.b + b.a + b.b
En général on n'écrit pas les . qui sont implicites :
(a+b).(a+b)= aa+ab+ba+bb
* tous les mots qui sont de longueur 1.
a+b
* N'importe quel mot
(a+b)*
= epsilon + (a+b) + (a+b)(a+b) + (a+b)(a+b)(a+b) + ...
* attention
a+b*
ça signifie le langage qui contient
a+ epsilon + b + bb + bbb + bbbb etc
* tous les mots qui commencent par un a.
a.(a+b)*
* tous les mots qui terminent par un b.
(a+b)*.b
* tous les mots qui commencent par un a et terminent par un b.
a.(a+b)*.b
* les mots qui commencent et terminent par la même lettre.
(idée c'est soit je commence et termine par a, soit je commence et termine par b).
a.(a+b)*.a + b.(a+b)*.b
selon l'interprétation du français de la consigne, on peut considérer que le mot
a
commence et termine par a.
donc il devrait être accepté.
Avec interprétation, on va écrire directement
a + b + a.(a+b)*.a + b.(a+b)*.b
* les mots qui contiennent deux a consécutifs.
informellement :
... aa ...
en regexp
(a+b)*.a.a.(a+b)*
* les mots qui contiennent consécutivement bab
(a+b)*.b.a.b.(a+b)*
* les mots de longueur paire
On peut regrouper les lettres par paquet de 2.
epsilon + ((a+b).(a+b))*
* les mots avec un nombre pair de a
cette question sur l'alphabet {a}
epsilon + (a.a)*
maintenant sur l'alphabet {a,b}, je dois autoriser des b un peu partout.
epsilon + (b*.a.b*.a.b*)*
## Exo 2
On souhaite fabriquer un automate à partir d'une expression régulière.
Exemple de a.(a+b)*

BIN
Brevets/US5732138.pdf Normal file

Binary file not shown.