Vous êtes sur la page 1sur 9

RICM3 – Automates et Grammaires

Durée : 2h00, sans document.

— Le sujet est sur 30 points, il comporte 33 questions réparties en 6 exercices indépendants.


— Le sujet est divisé en deux parties à rédiger sur des copies séparées.
— Répondez aux exercices 1,2,3 sur une copie et 4,5,6 sur une autre copie.
— Tous les appareils électroniques sont interdits à l’exception des montres, et encore,
à condition qu’elles ne communiquent pas.
— Le barème est donné à titre indicatif.
— Répondez sur votre copie sauf pour les questions avec pointillés
— N’oubliez pas de mettre votre nom ou votre numéro d’étudiant sur le sujet

Exercice 1 : Une grammaire qui reconnaît ... (5 pt)

Q1. (1 pt) Donnez une grammaire ou des équations de langage (dites équations d’Arden) qui
génèrent le langage reconnu par l’automate ci-dessous :

b a
a

$

/ 1 j 2
T
a,b
b

solution

équations d’Arden  grammaire


 
 S → L1 L1 →  L2 → a · L2
L1 =  + b · L1 + a · L2 L1 → b · L1 L2 → b · L2

L2 = (a + b) · (L1 + L2 ) 
 L1 → a · L2 L2 → a · L1
L2 → b · L1

Q2. (1 pt) Donnez une grammaire qui reconnaît les expressions bien parenthésées écrites sur l’al-
phabet à 5 symboles { (, [, e, ], ) } (la virgule et les accolades ne font pas partie de l’alphabet).
Exemple : "([)]" et "(()" sont mal parenthésées. "e", "[()[]]" et "([(ee)e])" sont bien paren-
thésées.

solution

S → e
S → S · S
S → (·S·)
S → [·S·]
Q3. (1 pt) Les palindromes sont les mots qui sont inchangés par renversement.
Exemple : "", "a", "abba", "abcba" sont des palindromes sur l’alphabet {a, b, c }.
Donnez une grammaire qui reconnait les palindromes sur l’alphabet {a, b, c}.
solution
S → 
S → a
S → b
S → c
S → a · S · a
S → b · S · b
S → c · S · c

Q4. (1 pt) Donnez l’arbre de dérivation qui permet à la grammaire suivante de générer le mot
"abccba".
1 3 4
S −→  S −→ S · S S −→ b · S · a
2 5
S −→ c · S S −→ a · S · b
solution
S
↓3
z }| {
S · S
↓5 ↓2
z }| { z }| {
a · S · b c · S
↓1 ↓2
z}|{ z }| {
 c · S
↓4
z }| {
b · S · a
↓1
z}|{


Q5. (1 pt) Ajoutez des attributs synthétisés sur la Figure 1 afin que la grammaire précédente
calcule le nombre de a, de b et de c du mot et retourne le résultat sous la forme d’un triplet (na , nb , nc ).

Exercice 2 : Un automate à une pile (aup) qui reconnaît ... (5 pt)

On considère l’alphabet Σ = {a, b}.

Q6. (1.5 pt) Donnez un aup qui reconnaît le langage {an bn | n ∈ N}


solution

a b
• •
γ/ γ γ /γ

 
/ 1  / 2
γ/γ
Nom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prénom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

S {(0, 0, 0)}
↓1


S {(na , nb , nc + 1)}
↓2
c · S {(na , nb , nc )}

S {(na + n0a , nb + n0b , nc + n0c )}


↓3
S {(na , nb , nc )} · S {(n0a , n0b , n0c )}

S {(na + 1, nb + 1, nc )}
↓4
b · S {(na , nb , nc )} · a

S {(na + 1, nb + 1, nc )}
↓5
a · S {(na , nb , nc )} · b

Figure 1 – Pour répondre à la question Q5

Q7. Question de cours (1 pt) Rappelez les conditions pour qu’un mot m soit reconnu par un
automate à une pile A.

solution

Un mot m est reconnu par un automate à une pile A si il existe une exécution de A qui commence dans l’état
initial de A avec une pile vide qui consomme toutes les lettres/symboles du mot m et atteint un état accepteur
avec une pile vide.

Q8. (0.5 pt) Décrire par une phrase en français le langage L = {ω ∈ {a, b}∗ | |ω|a = |ω|b }
Indication : On rappelle que |ω|` est le nombre d’occurences du symbole ` dans le mot ω.

solution

L est le langage formé des mots sur l’alphabet Σ = { a, b} qui ont autant de a que de b (sans tenir compte de
l’ordre des lettres).

Q9. (0.5 pt) Donnez trois mots de Σ∗ qui appartiennent au langage L et trois mots de Σ∗ qui
n’appartiennent pas à L. En particulier, que dire du mot  ?

solution

, abab, baab ∈ L
a, b, abb ∈
/L
Q10. (1.5 pt) Donnez un aup qui reconnaît le langage L.

solution

version non-déterministe version déterministe


b a
b
γ/ b γ /γ
γ
a b
a
γ/ a
γ γ /γ

/ 
_ a
a ' 
/ 1 γ/ γ
b
7 2_
a
b /γ γ/ γb
γ
b
a /γ a , b
γ
a b
a a b
γ/ γ γ / γb

Exercice 3 : Calculatrice booléenne (8 pt)

Dans cet exercice on suppose qu’on dispose


— d’un parser Var : char stream → string
capable de reconnaître les identificateurs tels que "x", "x1", "nom-de-variable" et
— d’un parser Expr : char stream → expr
capable de reconnaître des expressions arithmétiques telles que "123", "x*y" ou "x + 2*y - z".
On suppose que le type caml expr est défini.
On considère la grammaire constituée des 8 règles suivantes, de germe Prop , qui définit le langage des
propositions (c’est-à-dire les expressions booléennes) :
1 5
Prop −→ ( · Prop · ) Lit −→ ! · Prop
2 6
Prop −→ Lit · OpProp OpProp −→ 
3 7
Lit −→ Var OpProp −→ && · Prop
4 8
Lit −→ ( · Expr · = · Expr · ) OpProp −→ || · Prop

Q11. (1 pt) Donnez un arbre de dérivation correspondant au flot [h !(b && !(b)) && (x+y = z+1) i]

Parsing de proposition On définit en caml le type prop des propositions booléennes dont les
constructeurs permettent de représenter des variables, des booléens, des équations entre expressions,
des conjonctions, des disjonctions, des négations.

type prop = V of string | B of bool | EQ of expr * expr


| ET of prop * prop | OU of prop * prop | NEG of prop

Q12. (1.5 pt) Complétez la grammaire de la Figure 2 avec des attributs afin de générer la propo-
sition (de type prop) correspondant au flot passé en paramètre au parser Prop .
Exemple : Appliqué au flot [h a || (2 * x = y) i] le parser Prop produit
la proposition OU( V("a") , EQ(e1 ,e2 ) ) de type prop où e1 (respectivement e2 ) est l’expression
de type expr retournée par l’appel au parser Expr [h 2 * x i] (respectivement au parser Expr [h y i]).
Q13. (1 pt) Donnez la proposition de type prop produite par le parser Prop de la question Q12
appliqué au flot [h !(b && !(b)) && (x+y = z+1) i].
solution
et(neg(et(v("b"), neg(v("b")))), eq(Expr [h x+y i], Expr [h z+1 i]))

Simplification On décide de simplifier les conjonctions lors la reconnaissance.

Q14. (1.5 pt) Complétez le code caml de la fonction simpl afin qu’elle applique des règles simpli-
cations de conjonctions telles que (p ∧ ¬p) ≡ false, (p ∧ true ) ≡ p, . . .
let (negation: prop → prop) = function
| B(b) → B(not b)
| Neg(p) → p
| p → Neg(p)

let rec (simpl: prop → prop) = fun prop →


match prop with
| Et( B(false), _) | Et(_, B(false) ) → B(false)
| Et( B(true), p2) → simpl p2
| Et(p1, B(true) ) → simpl p1
| Et(p1,p2) when p1 = p2 → simpl p1
| Et(p1,p2) when (negation p1) = p2
→ B(false)
| Neg(p) → negation (simpl p)
| Et(p1,p2) → Et(simpl p1, simpl p2)
| Ou(p1,p2) → Ou(simpl p1, simpl p2)
| _ → prop

Q15. (0.75 pt) Que donne la fonction simpl sur la proposition issue de la reconnaissance de
[h !(b && !(b)) && (x+y = z+1) i].
solution
On obtient la proposition eq(Expr [h x+y i], Expr [h z+1 i]) qui correspond à (x + y = z + 1).

Q16. (1 pt) Donnez les modifications à apporter à la grammaire pour qu’elle effectue la simplification
lors de la reconnaissance.
solution
Il suffit de modifier les règles 1 et 2 de la grammaire comme suit :
Prop {simpl p } Prop {simpl p }
↓1 ↓2
( · Prop { p} · ) Lit { p1 } · {p1 } OpProp {p }

Q17. (1.25 pt) On aimerait ajouter l’opérateur d’implication => au langage des propositions. Donnez
les modifications à apporter à la grammaire pour traiter l’implication.
solution
Rappelons que (A ⇒ B) ≡ (¬A ∨ B). Il suffit donc d’ajouter la régle suivante à la grammaire
{p1 } OpProp { ou(neg(p1 ), p2 )}
↓9
=> · Prop {p2 }
Nom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prénom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Prop {p}
↓1
( · Prop {p} · )

Prop {p}
↓2
Lit {p1 } · {p1 } OpProp {p}

Lit {v(v)}
↓3
Var {v }

Lit {eq(e1 , e2 )}
↓4
( · Expr {e1 } · = · Expr {e2 } · )

Lit {neg(p)}
↓5
! · Prop {p}

{p1 } OpProp {p1 }


↓6


{p1 } OpProp {et(p1 , p2 )}


↓7
&& · Prop {p2 }

{p1 } OpProp {ou(p1 , p2 )}


↓8
|| · Prop {p2 }

Figure 2 – Pour répondre à la question Q12

Exercice 4 : Questions de cours (4 pt)

On considère l’alphabet Σ = {a, b, c}. On note · l’opérateur de concaténation de mots.

Q18. (0.5 pt) Dessinez l’automate obtenu par élimination des -transitions dans l’automate ci-
dessous

a b



/ 1 j *
2
a
solution
a b
a,b
$
/ 1 j 2
a U
a

Q19. (0.5 pt) Donnez un automate qui reconnaît le langage Σ∗


solution
a,b,c


/
Q20. (0.5 pt) Donnez un automate complet qui reconnaît le langage Σ
solution
a,b,c


/ a,b,c
/ a,b,c,
/

Q21. (0.5 pt) Donnez un automate qui reconnaît le langage complémentaire de Σ


solution
a,b,c


/ a,b,c
/ a,b,c
/

Q22. (0.5 pt) Donnez la définition de L1 • L2 où • est l’opérateur de concaténation de langages.

solution

L1 • L2 = { ω1 .ω2 | ω1 ∈ L1 , ω2 ∈ L2 }

Q23. (0.5 pt) Décrivez en une phrase en français le langage reconnu par l’expression régulière Σ • Σ∗
solution

L’automate reconnaît les mots d’au moins une lettre, écrits sur l’alphabet { a, b, c }.

Q24. (0.5 pt) Donnez un automate qui reconnaît le langage associé à Σ • Σ∗ .


solution
a,b,c


/ a,b,c
/

Q25. (0.5 pt) Donnez un automate qui reconnaît Σ∗ \ (Σ • Σ∗ )


solution
a,b,c


/ a,b,c
/ ou sa version minimale /

Exercice 5 : Déterminisation d’un automate à deux états initiaux (4 pt)

On considère l’automate suivant qui comporte deux états initiaux et un état accepteur :

A 1i 2 3i 4a
a 1, 2 3 4
b 1 3 4
Q26. (1 pt) Rappelez la définition de l’acceptation d’un mot par un automate non-déterministe.

solution

Un mot est reconnu/accepté par un automate s’il existe une exécution de l’automate
1. qui commence/débute dans un état initial
2. qui consomme toutes les lettres du mot
3. qui se termine dans un état accepteur

Q27. (1 pt) Donnez l’arbre d’exécution de l’automate sur le mot « aabb ». Dessinez toutes les
branches, celles qui n’acceptent pas le mot et celles qui l’acceptent.

solution

a a b b


 1, aabb −→ 1, abb −→ 1, bb −→ 1, b −→ 1,  : acc

 a
 1, aabb −→ a b b
1, abb −→ 2, bb −→ 3, b −→ 4,  : acc

a a b


 1, aabb −→ 2, abb −→ 3, bb −→ 4, b 6→

 a
 3, aabb −→

4, abb 6→

Q28. (1.5 pt) Déterminisez l’automate et donnez le résultat sous forme de tableau.

solution

Det(A) {1} {1, 2} {1, 2, 3} {1, 2, 3, 4}a {1, 2, 4}a {1, 3}i {1, 3, 4}a {1, 4}a
a {1, 2} {1, 2, 3} {1, 2, 3, 4} {1, 2, 3, 4} {1, 2, 3} {1, 2, 4} {1, 2, 4} {1, 2}
b {1} {1, 3} {1, 3, 4} {1, 3, 4} {1, 3} {1, 4} {1, 4} {1}

Q29. (0.25 pt) Étant donné un automate non-déterministe A et AD sa version déterminisée.


Que représente un état de AD ?

solution

Les états de AD sont les sous-ensembles de copies de A s’exécutant en parallèle à partir d’un état différent.
Par exemple, l’état { 1, 3} de AD signifie que la suite du mot sera analysée en parallèle par une copie de A dans
l’état 1 et une copie de A dans l’état 3.

Q30. (0.25 pt) Étant donné un automate non-déterministe A à n états, quel est le nombre maximal
d’états que peut avoir la version déterminisée AD ?

solution

AD aura au maximum 2n états car 2n est le nombre de sous-ensembles différents qu’on peut construire avec
n éléments/états.
Exercice 6 : Minimisation (4 pt)

Pour chacun des automates A1 , A2 et A3 sur Σ = {a, b}


1. Calculez les classes d’équivalence des états par l’algorihtme du cours
2. Donnez l’automate miminisé sous forme de tableau

A1 1i 2a 3a A2 1ai 2a 3a A3 1i 2 3
Q31. a 2 1 2 Q32. a 2 1 2 Q33. a 2 1 2
b 3 3 b 3 3 b 3 3

solution

— (1.5 pt) On commence par compléter l’automate A1 avec un état puit 0. On calcule les classes d’équiva-
lence
* initial partition = { {0,1,2,3} }

states 0 ~/~ 2 : NOT same accepting status


So, {0,1,2,3} is splitted into {0,1} |_| {2,3}

states 0 ~/~ 1 : NOT same behavior on symbol ’a’


So, {0,1} is splitted into {0} |_| {1}

states 2 ~/~ 3 : NOT same behavior on symbol ’a’


So, {2,3} is splitted into {2} |_| {3}

* final partition = { {0} , {1} , {2} , {3} }


L’automate A1 est déjà minimal.
— On commence par compléter l’automate A2 avec un état puit 0. On calcule les classes d’équivalence
* initial partition = { {0,1,2,3} }

states 0 ~/~ 1 : NOT same accepting status


So, {0,1,2,3} is splitted into {0} |_| {1,2,3}

states 1 ~/~ 3 : NOT same behavior on symbol ’b’


So, {1,2,3} is splitted into {1,2} |_| {3}

* final partition = { {0} , {1,2} , {3} }


Finalement, l’automate minimisé est

A2 m Eq{0} Eq{1, 2}a i Eq{3}a


a Eq{0} Eq{1, 2} Eq{1, 2}
b Eq{0} Eq{3} Eq{0}

— Aucun état accepteur donc le langage de A3 est L (A3 ) = ∅ et l’automate minimal qui reconnaît ∅ sur
Σ = { a, b} est
A3 m Eq{1, 2, 3}i
a Eq{1, 2, 3}
b Eq{1, 2, 3}

Vous aimerez peut-être aussi