Langages formels – Entraînement & partiel Durée : 2 heures.
Exercice 1
1. Quel est le langage sur{a, b, c} reconnu par l’automate suivant ?
Donnez votre réponse au choix sous forme d’expression rationnelle ou de paraphrase en français.
1
start 2 3
a,b,c
b c
Solution: Expression rationnelle : (a+b+c)*bc Paraphrase : langage des mots sur se terminant parbc.
2. Déterminisez l’automate précédent.
Donnez l’automate résultant sous forme de DAG (schéma) ou de table de transitions. Justifications et étapes de calculs non demandées.
Solution:
1
start 2
3 a,c
b
c a
b
b a,c
Exercice 2
3. Proposez une grammaire algébrique sur {a, b, c} pour le langage(ancmbn)*, c’est-à-dire le langage desan1cm1bn1an2cm2bn2...ankcmkbnk où k≥0, n1, n2, ...nk≥0, m1, m2, ...mk≥0.
Solution:
G=
*
{a, b, c},{S, X, C}, S,
S → XS
| ε
X → aXb
| C C → cC
| ε
+
Deux variables ne suffisaient pas à gérer les trois sources de récursion possible (n,m etk; les grammaires du type S →aSb|SS|C surgénéraient des mots comme aababb. Attention aussi à bien générer les cas où n,m ou ksont nuls, et leurs combinaisons.
4. Donnez votre grammaire en forme normale de Chomsky.
Justifications et étapes de calculs non demandées.
Forme normale de Chomsky : grammaire ε-libre (A→ε est acceptable si et seulement si A est l’axiome et A est intatteignable) dont toutes les règles sont de l’une des deux formes suivantes :
— A→BC, avec A, B, C∈V
— A→a, avec A∈V eta∈X
Solution:
G=
*
{a, b, c},{S0, S, X, Y, A, B, C}, S0,
S0 → XS
| AY
| AB
| CC
| c
| ε
S → XS
| AY
| AB
| CC
| c
X | AY
| AB
| CC
| c
Y → XB
C → CC
| c
A → a
B → b
+
Exercice 3
Lemme d’itération pour les langages rationnels SoitL un langage rationnel.
Il existe un entier ktel que :
∀x∈Ltel que |x|> k :
∃u, v, w tels quex=uvw, avec : (i) |v| ≥1 (ii) |uv| ≤k
(iii) ∀i∈N, uviw∈L
Lemme d’itération pour les langages algébriques SoitL un langage algébrique.
Solution: Remarque sur l’application des lemmes d’itération : le lemme dit que pour tout mot du langage suffisamment long, il existe une factorisation dont l’itération reste dans le langage. Pour contredire le lemme et ainsi prouver la non-appartenance d’un langage à une classe, il faut donc montrer qu’il n’existe pas de telle factorisation, et donc énumérer à partir du mot choisi les possibilités de factorisation, en montrant à chaque fois qu’elles conduisent à des itérations qui sortent du langage.
5. En vous aidant des langages L1 = {aibicj|i, j ≥ 0} et L2 = {aibjcj|i, j ≥ 0}, montrez que les langages algébriques ne sont pas fermés pour l’intersection.
Autrement dit, que l’intersection de deux langages algébriques n’est pas forcément un langage algébrique.
Solution:
On commence par montrer que L1 etL2 sont algébriques. Le plus simple est de donner pour chacun une grammaire algébrique qui le reconnaît.
Respectivement :
G1 =
*
{a, b, c},{S, X, C}, S,
S → XC
X → aXb
| ε C → cC
| ε
+
G2 =
*
{a, b, c},{S, X, A}, S,
S → AX
X → bXc
| ε A → aA
| ε
+
On peut maintenant s’intéresser à l’intersection de L1 et L2. On remarque que L1 ∩L2 = anbncn|n≥0. Il suffit maintenant de prouver que ce langageL1∩L2 est non algébrique pour montrer que les langages algébriques ne sont pas fermés pour l’intersection.
Comme on l’a vu en TD, on peut utiliser le lemme d’itération des langages algébriques : tous les langages algébriques doivent vérifier le lemme.
Soit K la constante d’itération du langage. Le mot aKbKcK appartient au langage et sa lon- gueur est supérieure à K; pour toute factorisation uxzyv, si x ou y contient une séquence de lettres différentes, l’itération uxxzyyv n’appartiendra plus à a*b*c* (et donc a fortiori à anbncn) ; si xety ne contiennent chacun qu’une seule lettre, l’itérationuxxzyyvne respectera plus la contrainte sur l’égalité du nombre d’occurrences de chaque lettre dans le mot puisqu’elle augmentera le nombre d’occurrences de deux seulement des trois lettres (au maximum). Donc, ce langage n’est pas algébrique.
On a ainsi montré que les langages algébriques ne sont pas fermés pour l’intersection.
Exercice 4
6. Donner l’automate de la grammaire ETF : G=
E → E+T |T T → T∗F |F F → (E) |a
Solution: Principe : on commence par empiler l’axiome, et on ajoute autant de transitions-ε bouclant sur q2 qu’il y a de règles, chacune empilant la partie droite de la règle à condition que la partie gauche soit en haut de pile. Ceci requiert donc que l’alphabet de pile comprenne et l’alphabet d’entrée et l’alphabet des non-terminaux de la grammaire (Γ =X∪V ∪ {Z0}).
Ensuite, on rajoute autant de transitions qu’il y a de symboles terminaux, en bouclant toujours sur q2, chacune dépilant un charactère à la fois lu et en haut de pile. On donne enfin un état d’acceptation accessible par transition-εà condition que la pile soit vide.
1
start 2 3
ε, Z0→EZ0
ε,E →E+T ε,E →T ε,T →T∗F ε,T →F ε,F →(E) ε,F →a
a,a →ε +,+ →ε
∗,∗ →ε (,( →ε ),) →ε
ε, Z0→ε
7. Donner les états de la pile et l’arbre pour reconnaître le mota+a∗a.
Solution: États successifs de la pile : Z0
EZ0 E+T Z0 T +T Z0
a+T Z0
+T Z0 T Z0 T∗F Z0
a∗F Z0
∗F Z0 F Z0 aZ0
Arbre :
E T
F a
∗ T F a + E T F a