Td 3 langages de programmation Théorie des langages-tél...

Théorie des langages : Td 3 langages de programmation

Télécharger PDF

Université de Technologie de Compiègne - Théorie des Langages de Programmation : TD3

Exercice 1

On donne deux dérivations gauche du mot abab :

D1 : SLM aSbSLM abSaSbSLM abaSbSLM ababSLM abab

D2 : SLM aSbSLM abSLM abaSbSLM ababSLM abab

Cette grammaire est ambiguë, car il existe deux dérivations gauche pour le mot abab.

On donne également deux dérivations droite pour le mot abab :

D1 : SRM aSbSRM aSbRM abSaSbRM abSabRM abab

D2 : SRM aSbSRM aSbaSbSRM aSbaSbRM aSbabRM abab

Cette grammaire génère le langage L composé de toutes les chaînes sur a et b telles 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 égal au nombre de b. On décompose cette hypothèse en deux parties :

H1 : Si wn est un mot du langage L, composé de n caractères, alors |wn|a = |wn|b (le nombre de a est égal au nombre de b). En conséquence, n est pair.

H2 : La grammaire génère tous les mots possibles sur a et b tels que la condition H1 est vraie.

Vérification :

— Pour n = 0, la grammaire peut générer ε (le mot vide).

— Pour n = 2, la grammaire peut générer :

SLM aSbSLM abSLM ab

SLM bSaSLM baSLM ba

Il est à noter qu’il existe 4 mots possibles sur a et b de longueur 2 : aa, ab, ba, bb. Seuls ab et ba vérifient la condition 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. On démontre ensuite H pour l’ordre n + 2.

Les mots wn+2 sont obtenus comme suit :

wn+2 = a wl b wm (en utilisant S ⇒ aSbS)

wn+2 = b wl a wm (en utilisant S ⇒ bSaS)

Il est clair que l + m = n. En utilisant l’hypothèse de récurrence sur wl et wm, on remarque que H1 est vraie pour wl et wm. On a :

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

Pour 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, mais 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 commençant par b). 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].

Exemple : considérons le mot "aababbab", on a k = 6, W[1..6] = "aababb". Dans W[1..6], le nombre de a est égal au nombre de b et est égal à 3.

En tenant compte que le premier caractère de W est a et que le k-ème caractère est b, on peut écrire W de la manière suivante : W = a wl b wm, avec l = k − 2 et m = n − k.

Si W existe, alors wl et/ou wm ne sont pas générés par la grammaire. Cela 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. Cette grammaire génère des expressions régulières exclusivement sur a et b (impossible d’avoir ε). L’expression peut contenir les méta-symboles parenthèses et peut être composée des trois 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 contenir les méta-symboles parenthèses et peut être composée des trois opérateurs : concaténation, disjonction et fermeture.

Vérification : On remarque que la grammaire génère w1 = a et w1 = b, deux expressions régulières obtenues après avoir appliqué une règle de production (une des deux dernières).

On suppose que H est vraie, ∀k ≤ n. On démontre que H est vraie pour k = n + 1. En utilisant les quatre premières règles de production de la grammaire, on remarque que :

wn+1 =

wiwj (concaténation), ∀i, j > 0 avec i + j = n

wi|wj (disjonction), ∀i, j > 0 avec i + j = n

wi (fermeture), où i = n (1)

On note que H est vraie pour wi et wj. À partir de (1), on conclut 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 : RLM RRLM aRLM aRRLM abRLM aba

D2 : RLM RRRLM aRRLM abRLM aba

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 les règles de production suivantes :

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 les règles de production suivantes :

E ⇒ E + E | E − E | E ∗ E | E / E

E ⇒ (E) | nb | id

La grammaire G1 est ambiguë. On donne deux dérivations gauche du mot "id + id ∗ id" :

D1 : ELM E + ELM id + ELM id + E ∗ ELM id + id ∗ ELM id + id ∗ id

D2 : ELM E ∗ ELM E + E ∗ ELM id + E ∗ ELM id + id ∗ ELM id + id ∗ id

Si on remplace tous les id par la valeur 5, le résultat de D1 est 30 alors que le résultat de D2

Partagez vos remarques, questions ou propositions d'amélioration ici...

Enregistrer un commentaire (0)
Plus récente Plus ancienne

Publicité 1

Publicité 2