É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
- Vérifier qu'elle engendre bien .
- Est-elle ambiguë ?
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 :
- avec le premier vide, le
ben position , et le dernier engendrantab; - avec le premier engendrant
ba, leben position , et le dernier vide.
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.