Vous êtes sur la page 1sur 3

Exercice TD Compilation

Soit G=( Σ, V, A, R) avec Σ={ou, et, non, (, ), bid}, V={A} et R donné par les règles
suivantes :
A → A ou A
A → A et A
A → non A
A → (A)
A → bid
1. Prouver que cette grammaire est ambiguë
2. Sachant que : ‘non’ est plus prioritaire que ‘et’ et ‘et’ est plus prioritaire que ‘ou’, Donnez
une grammaire G’ non ambiguë et équivalente à G en éliminant l’ambiguïté.
3. La grammaire G’ est-elle récursive à gauche ? Si oui, proposer une grammaire G’’
équivalente à G’ et non récursive à gauche.
Correction

1.
pour prouver qu’une grammaire est ambiguë, il faut trouver un mot qui est dérivé de deux
manière différente à partir de l’axiome de la grammaire et en appliquant les règles de
production.
Dans notre cas, soit le mot w = bid et non bid ou bdi
1ère dérivation
A →d A et A → d A et non A→ d A et non A ou A → d A et non A ou bid → d A et non bid ou
bid → d bid et non bid ou bid
2ème dérivation
A → d A ou A → d A ou bid→ d A et A ou bid → d A et non A ou bid → d A et non bid ou bid
→ d bid et non bid ou bid
Arbre de dérivation

1ère dérivation

A et A

bid non A

A ou A

bid bid
2ème dérivation

A ou A

A et A bid

id Non A

bid

L’arbre de dérivation suit dans sa construction l’ordre d’application des règles de production.

Pour une même expression nous avons eu deux arbres de dérivation différentes donc cette
grammaire est ambiguë

2.

Pour éliminer l’ambiguïté, il faut ajouter des non terminaux selon les niveaux de priorité des
opérateurs. Le nombre des non terminaux à utiliser dans la nouvelle grammaire est égal au
nombre des niveaux de priorité (NON PAS LE NOMBRE DES OPERATEURS)

Le niveau le plus faible doit être généré par l’axiome de la grammaire

Dans notre cas on a trois niveaux de priorité, un pour ‘ou’, un pour ‘et’ et un pour ‘non’.

L’opérateur le plus faible est ‘ou’ donc il sera généré par l’axiome A

l’opérateur suivant ‘et’ sera généré par un nouveau non terminal B

et l’opérateur ‘non’ sera généré par un nouveau non terminal C

La grammaire sera donc

A → A ou B
A → B (cette règle est ajoutée pour permettre la génération d’expressions ne
contenant pas des opérateurs ‘ou’ donc on passe directement de A vers B)
B → B et C
B → C (cette règle est ajoutée pour permettre la génération d’expressions ne
contenant pas des opérateurs ‘et’ donc on passe directement de B vers C)
C → non C
C → (A) (cette règle génère des expressions entre parenthèses, ces expressions
peuvent contenir des opérateurs ‘ou’, ‘et’ ou ‘non’)
C → bid

3.
La nouvelle grammaire est récursive à gauche puisque il existe des règles de production de la
forme X → Xα | β

Pour A on a : A → A ou B | B donc α = ou B et β = B

et por B on a : B → B et C | C donc α = et C et β = C

Pour éliminer la récursivité on applique la règle du cours

A → A ou B | B devient :

A → B A’
A’ → ou B A’ | ε
B → B et C | C devient :

B → C B’
B’ → et C B’ | ε
La grammaire finale G’’ est : R’’ devient :

A → B A’
A’ → ou B A’ | ε
B → C B’
B’ → et C B’ | ε
C → non C
C → (A)
C → bid