Exercice 1: NF11 - Théorie Des Langages de Programmation TD3: Corrigé
Exercice 1: NF11 - Théorie Des Langages de Programmation TD3: Corrigé
Exercice 1: NF11 - Théorie Des Langages de Programmation TD3: Corrigé
Exercice 1
1. On donne deux dérivations gauche du mot abab :
la grammaire est ambiguë, car Il existe deux dérivations gauches pour le mot
abab.
2. On donne deux dérivations droite pour le mot abab :
3. Les arbres de dérivations sont donnés par les figures (3) et (3).
1
— H2 : La grammaire génère tous les mots possibles sur a et b tel que la
dernière condition est vraie.
Vérification :
— pour n = 0 la grammaire peut générer .
— pour n = 2 la grammaire peut générer :
— S =⇒ aSbS =⇒ abS =⇒ ab
LM LM LM
— S =⇒ bSaS =⇒ baS =⇒ ba
LM LM LM
Il est à noter qu’il y a 4 mots possibles sur a et b de longueur 2 : aa, ab, ba, bb.
Seuls ab et ba vérifient la conditions H1 . En conséquence : H1 et H2 sont
vraies pour n = 0 et n = 2.
On suppose que H est vraie (en particulier H1 et H2 ) jusqu’à l’ordre n.
Démonstration : Dans la suite on démontre H pour l’ordre n + 1.
Les mots wn+2 sont obtenus comme suit :
— wn+2 = awl bwm (en utilisant S −→ aSbS)
— wn+2 = bwl awm (en utilisant S −→ bSaS)
Il est clair que l + m = n. En utilisant l’hypothèse de récurrence sur l et m,
on
remarque que H1 est vraie pour wl et wm . On a :
|w
n+2 |a
= 1 + |wl |a + |wm |a
|wn+2 |b = 1 + |wl |b + |wm |b
On conclut que |wn+2 |a = |wn+2 |b car |wl |a = |wl |b et |wm |a = |wm |b (Hypothèse
de récurrence).
Concernant la deuxième partie de la démonstration Supposons qu’il existe un
mot W de n + 2 caractères ayant le même nombre de a que de b, qui n’est pas
généré par la grammaire.
Supposons que W commence par a (Le même raisonnement est valide pour un
mot qui commence par b, ce cas ne sera pas détaillé dans la démonstration).
Soit k le plus petit indice d’un caractère b tel que le nombre de a dans W [1..k]
est égal au nombre de b dans W [1..k] (où W [1..k] est la chaîne formée par les
k premières caractères de la chaîne W ).
Exercice 2
Précision : l’ensemble des terminaux de la grammaire est T = {(, ), a, b, ∗, |}
1. la grammaire génère des expressions régulières exclusivement sur a et b (impos-
sible d’avoir ). L’expression peut contenir les méta symboles parenthèses et
peut être composée des 3 opérateurs : concaténation, disjonction et fermeture.
2
Démonstration :
Soit wk un mot du langage engendré par la grammaire obtenu après avoir
appliqué k règles de production.
H : wk est une expression régulière définie sur a et b. De plus, wk peut conte-
nir les méta symboles parenthèses et peut être composée des 3 opérateurs :
concaténation, disjonction et fermeture.
Vérification : On remarque que la grammaire génère w1 = a et w1 = b deux
expression régulières obtenues après avoir appliqué une règle de production (
une des deux dernières).
On Suppose que H Vraie,∀k ≤ n.
On démontre que H est vraie pour k = n + 1. En utilisant les 4 premières
règles de production de la grammaire, on remarque que :
wi wj , ∀i, j > 0; i + j = n
w |w ,
∀i, j > 0; i + j = n
i j
wn+1 = (1)
wi ∗, i=n
(wi ) i=n
On note que H est vraie pour i et j. A partir de (1), on conclut que que wn+1
est bien une expression régulière vérifiant les conditions listées ci-dessus.
2. On considère le mot aba, et on donne ces deux dérivations :
D1 : R =⇒ RR =⇒ aR =⇒ aRR =⇒ abR =⇒ aba (2)
LM LM LM LM LM
D2 : R =⇒ RR =⇒ RRR =⇒ aRR =⇒ abR =⇒ aba (3)
LM LM LM LM LM
Exercice 3
1. L’ensemble des terminaux de cette grammaire est T = {∗, /, +, −, (, ), id, nb}
2. Soit la grammaire G = (T = {∗, /, +, −, (, ), id, nb}, V = {E, T, F }, E, P ),
avec P :
E →E+T | E−T | T
T → T ∗ F | T /F | F
F → (E) | id | nb
Attention la grammaire suivante G1 , ou toute grammaire équivalente, ne gère
pas la priorité de ∗ et / par rapport à + et − :
Soit la grammaire G1 = (T = {∗, /, +, −, (, ), id, nb}, V = {E}, E, P ), avec P :
D1 : E =⇒ E + E =⇒ id + E =⇒ id + E ∗ E =⇒ id + id ∗ E =⇒ id + id ∗ id
LM LM LM LM LM
D2 : E =⇒ E ∗ E =⇒ E + E ∗ E =⇒ id + E ∗ E =⇒ id + id ∗ E =⇒ id + id ∗ id
LM LM LM LM LM
3
Si on remplace tous les id par la valeur 5, le résultat de D1 est 30 alors que
le résultat de D2 est 50. Dans D2 la priorité de ∗ par rapport à + n’est pas
vérifiée.
3. Il existe des techniques pour obtenir une grammaire non récursive à gauche.
On les abordera dans les prochains cours.
4. On donne l’arbre représenté dans la figure 4
Exercice 4
Dans une forme FNC, les règles de productions sont sous la forme suivante :
A → BC | a
Avec a est un terminal et A, B et C des variables. De plus, seul l’axiome peut générer
le mot vide.
1. On considère la grammaire G = (T {a, b}, V = {S, A, B}, S, P ), avec P :
S → A | Bbb
A → aB | bS |
B → ABb | Bb |
4
On obtient la grammaire G = (T {a, b}, V = {S, A, B}, S, P ), avec P :
S → A | Bbb | bb |
A → aB | bS | a
B → ABb | Bb | b | Ab
S → aB | bS | a | Bbb | bb |
A → aB | bS | a
B → ABb | Bb | b | Ab
C →a
D →b
S → CB | DS | a | BDD | DD |
A → CB | DS | a
B → ABD | BD | b | AD
X → BD
C →a
D →b
S → CB | DS | a | XD | DD |
A → CB | DS | a
B → AX | BD | b | AD
La grammaire obtenue est bien sous forme F N C.
2. Les règles de production d’une grammaire de type 2 s’écrivent sous le format
suivant :
A → α, α ∈ (V ∪ T )∗
B → αAβ, avec α, β ∈ (V ∪ T )∗
ajouter l’alternative :
B → αβ
5
Répéter cette étape tant qu’il existe au moins une variable différente de
l’axiome qui peut générer le mot vide.
À la fin de cette étape on obtient une grammaire tel que les règles de
productions s’écrivent sous le format suivant :
S → α, α ∈ (V ∪ T )∗
A → β, A 6= S, β ∈ (V ∪ T )+
S → | α
A → α, A 6= S
S → | α
A → α, A 6= S
S → | α
A → α, A 6= S