Adloun

informatique (MP2I/MPI) · Chapitre 30 · Exercice de TD

Compter les arbres d'analyse

Grammaires non contextuelles · niveau 2

Énoncé

Soit la grammaire .

  • Combien d'arbres d'analyse pour n+n+n ? pour n+n+n+n ?
  • Reconnaître la suite obtenue.
  • Pourquoi cela ne se voit-il pas sur la valeur calculée ?

Corrigé

1. Deux arbres pour n+n+n — selon que le de la racine est le premier ou le second. Cinq pour n+n+n+n.

2. On compte, par programmation dynamique sur les intervalles du mot :

Motnn+nn+n+n termes
Arbres

Ce sont les nombres de Catalan , où est le nombre de . Ce n'est pas un hasard : un arbre d'analyse est ici un arbre binaire à nœuds internes — l'objet du chapitre chap:arbres —, et compter ces arbres, c'est compter les parenthésages de termes, exactement comme au chapitre chap:dynamique pour le produit de matrices. L'accord a été vérifié jusqu'à : arbres pour six .

3. Parce que l'addition est associative : et valent tous deux . La grammaire est ambiguë, mais l'ambiguïté n'a pas de conséquence observable sur la valeur.

C'est précisément ce qui rend le défaut dangereux. Remplaçons par : la même grammaire donne encore deux arbres pour 8-3-2, mais ils valent et . Une grammaire ambiguë ne devient un bogue que le jour où l'opérateur cesse d'être associatif — et ce jour-là, le bogue est déjà en production. On ne teste pas une grammaire sur l'addition.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre