Exercice 1: NF11 - Théorie Des Langages de Programmation TD3: Corrigé

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 6

Université de Technologie de Compiègne

NF11 - Théorie des Langages de Programmation


TD3 : Corrigé

Exercice 1
1. On donne deux dérivations gauche du mot abab :

D1 : S =⇒ aSbS =⇒ abSaSbS =⇒ abaSbS =⇒ ababS =⇒ abab


LM LM LM LM LM
D2 : S =⇒ aSbS =⇒ abS =⇒ abaSbS =⇒ ababS =⇒ abab
LM LM LM LM LM

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 :

D1 : S =⇒ aSbS =⇒ aSb =⇒ abSaSb =⇒ abSab =⇒ abab


RM RM RM RM RM
D2 : S =⇒ aSbS =⇒ aSbaSbS =⇒ aSbaSb =⇒ aSbab =⇒ abab
RM RM RM RM RM

3. Les arbres de dérivations sont donnés par les figures (3) et (3).

Figure 1 – D1 : Arbre de dérivation

Figure 2 – D2 : Arbre de dérivation

4. Cette grammaire génère le langage L composé de toutes las chaines sur a et b


tel que le nombre de a est égal au nombre de b.
Démonstration :
Soit l’hypothèse suivante, H : Le langage L est composé de n’importe quel mot
sur a et b tel que le nombre de a est égale au nombre de b. On décompose cette
hypothèse en deux parties :
— Soit wn un mot du langage L, composé de n caractères. On note par |wn |a
et |wn |b le nombre de a et de b, respectivement, dans le mot wn .
H1 : |wn |a =|wn |b , en conséquence n est pair.

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 ).

Exemple : considérons le mot "aababbab", on aura k = 6, W [1..6] = ”aababb”.


Dans W [1..6] le nombre de a est égal au nombre b est égal à 3.
En tenant compte que le premier caractère de W est égal à a et que le k ème
caractère est égal à b on peut récrire W de la manière suivante :

W = awl bwm , avec l = k − 2, m = n − k


Si W existe alors wl et / ou wm ne sont pas générés par la grammaire. Absurde,
on contredit l’hypothèse de récurrence pour wl et / ou wm où H est vrai car
l, m ≤ n.

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 :

E →E+E | E−E | E∗E | E/E


E → (E) | nb | id
La grammaire G1 est ambiguë. On donne deux dérivation gauche du mot
”id + id ∗ id” :

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

Figure 3 – Arbre de dérivation de la question 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 | 

— Étape 1 : On Remarque que A et B peuvent générer le mot vide. On


supprime A →  et B → . Il faudra modifier la grammaire de manière à
prendre en compte cette modification. Par exemple, si on considère S →
Bbb, en tenant en compte que B peut générer le mot vide et qu’on supprime
la règles B → , S → Bbb se transforme en S → Bbb | 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

— Étape 2 : On Supprime la règle de production S → A. On obtient la


grammaire G = (T {a, b}, V = {S, A, B}, S, P ), avec P :

S → aB | bS | a | Bbb | bb | 
A → aB | bS | a
B → ABb | Bb | b | Ab

— Étape 3 : On modifie les règles de productions où à droite il y a une


combinaison de terminaux et de non terminaux. On obtient la grammaire
G = (T {a, b}, V = {S, A, B, C, D}, S, P ), avec P :

C →a
D →b
S → CB | DS | a | BDD | DD | 
A → CB | DS | a
B → ABD | BD | b | AD

— Étape 4 : On modifie les règles de productions où à droite il y a plus de 2


variables. On obtient : la grammaire G = (T {a, b}, V = {S, A, B, C, D, X}, S, P ),
avec P :

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 )∗

On propose un algorithme à 4 étapes qui permet d’obtenir une grammaire


équivalente sous forme FNC.
— Étape 1 : Pour chaque variable A ∈ V , tel que A 6= S et que A peut
générer le mot vide :
— supprimer A → 
— pour chaque règle de production sous la forme :

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 )+

— Étape 2 : Pour chaque règle de production sous la forme A → B :


— Supprimer A → B.
— Pour chaque règle de production B → α, on ajoute la règle de produc-
tion A → α.
Répéter cette étape tant qu’il existe une règle de production sous la forme
A → B.
À la fin de cette étape, on obtient une grammaire tel que les règles de
productions s’écrivent sous le format suivant. Soit α = T | (V ∪ T )(V ∪
T )+ .

S → | α
A → α, A 6= S

— Étape 3 : Pour chaque règle de production sous la forme A → α, α =


(V ∪ T )∗ t(V ∪ T )+ |(V ∪ T )+ t(V ∪ T )∗ avec t ∈ T :
— ajouter la règle de production X → t
— remplacer dans α, t par X
Répéter cette étape tant qu’il existe une règle de production sous la forme
A → α, α = (V ∪ T )∗ T (V ∪ T )+ |(V ∪ T )+ T (V ∪ T )∗ .
À la fin de cette étape, on obtient une grammaire tel que les règles de
productions s’écrivent sous le format suivant. Soit α = T | V V + .

S → | α
A → α, A 6= S

— Étape 4 : Pour chaque règle de production sous la forme A → BCα, avec


α =V+ :
— ajouter la règle de production Y → BC
— remplacer dans A → BCα par A → Y α
Répéter cette étape tant qu’il existe une règle de production sous la forme
A → BCα, avec α = V + .
À la fin de cette étape, on obtient une grammaire tel que les règles de
productions s’écrivent sous le format suivant. Soit α = T | V V .

S → | α
A → α, A 6= S

La grammaire obtenue est sous forme FNC.

Vous aimerez peut-être aussi

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy