Adloun

Écrire une grammaire – et vérifier qu'elle n'est pas ambiguë

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 30 — Grammaires non contextuelles

Énoncé

Soit l'ensemble des mots sur comptant autant de a que de b. On propose

Corrigé

1. Elle engendre .

Tout mot engendré est dans : par induction, chaque règle ajoute autant de a que de b.

Tout mot de est engendré : par récurrence forte sur . Si , la troisième règle convient. Sinon, notons la « hauteur ». On a . Supposons commençant par a — le cas symétrique se traite de même. Alors vaut après la première lettre et à la fin : soit le premier indice où redevient . La lettre en est nécessairement un b, et l'on écrit avec et de hauteur nulle et plus courts que . L'hypothèse de récurrence les engendre.

Le décompte confirme : pour les longueurs , la grammaire engendre mots, soit exactement les mots de — vérifié par énumération de tous les mots jusqu'à la longueur .

2. Oui, elle est ambiguë, et le plus court témoin est abab, qui a deux arbres :

Autrement dit, le b apparié au premier a n'est pas déterminé : la règle ne dit pas lequel des deux b.

Ce que l'exercice met en scène. On vérifie d'ordinaire qu'une grammaire engendre le bon langage, et l'on s'arrête là. C'est insuffisant : celle-ci est correcte au sens du langage et inutilisable telle quelle pour un compilateur. La correction d'une grammaire a donc deux volets, et le second se teste — il suffit de compter les arbres de tous les mots courts.

Pour la rendre non ambiguë, il faut fixer l'appariement, par exemple en exigeant que le b choisi soit le premier qui ramène la hauteur à zéro — c'est-à-dire en imposant au premier de la règle de rester de hauteur strictement positive. Cela demande deux non-terminaux de plus.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.