Arbres de dérivation et arbres de syntaxe abstraite



next up previous contents index
Next: Analyse descendante récursive Up: Analyse Syntaxique Previous: Grammaires sous forme

Arbres de dérivation et arbres de syntaxe abstraite

Le but de l'analyse syntaxique est d'abord déterminer si un mot appartient ou non au langage engendré par une grammaire. Il s'agit donc, étant donné un mot de construire la suite des dérivations qui a permis de l'engendrer. Si l'on pratique ceci à la main pour de petits exemples on peut utiliser la technique classique dite ``essais-erreurs'' consistant à tenter de deviner à partir d'un mot la suite des dérivations qui ont permis de l'engendrer. Cette suite se présente bien plus clairement sous forme d'un arbre, dit arbre de dérivation dont des exemples sont donnés figures gif et gif. Il s'agit de ceux obtenus pour les mots et engendrés respectivement par la grammaire des systèmes de parenthèses et par celle des expressions infixes. On verra que ces arbres, ou plutôt une version plus compact de ceux-ci, jouent un rôle important pour la phase suivante de la compilation.   Une définition rigoureuse et complète des arbres de dérivation serait longue, contentons nous de quelques indications informelles. Dans un tel arbre, les n uds internes sont étiquetés par des lettres auxiliaires (appartenant à ) les feuilles par des lettres de l'alphabet terminal. L'étiquette de la racine est égale à l'axiome. Pour un n ud interne d' étiquette , le mot obtenu en lisant de gauche à droite les étiquettes de ses fils est tel que est une règle. Enfin, le mot dont on fait l'analyse est constitué des étiquettes des feuilles lues de gauche à droite.

Pour un mot donné du langage engendré par une grammaire, l'arbre de dérivation n'est pas nécessairement unique. L'existence de plusieurs arbres de dérivations pour un même programme signifie en général qu'il existe plusieurs interprétations possibles pour celui ci. On dit que la grammaire est ambiguë, c'est le cas pour l'imbrication des if then et if then else en Pascal. Des indications supplémentaires dans le manuel de référence du langage permettent alors de lever l'ambiguïté et d'associer un arbre unique à tout programme Pascal. Ceci permet de donner alors une interprétation unique. Toutes les grammaires données plus haut sont non-ambiguës, ceci peut se démontrer rigoureusement, toutefois les preuves sont souvent techniques et ne présentent pas beaucoup d'intérêt.

  
Figure: Arbre de dérivation de

  
Figure: Arbre de dérivation d'une expression arithmétique

  L'arbre de dérivation est parfois appelé arbre de syntaxe concrète pour le distinguer de l'arbre de syntaxe abstraite construit généralement par le compilateur d'un langage de programmation. Cet arbre de syntaxe abstraite est plus compact que le précédent et contient des informations sur la suite des actions effectuées par un programme. Chaque n ud interne de cet arbre possède une étiquette qui désigne une opération à exécuter. Il s'obtient par des transformations simples à partir de l'arbre de dérivation. On donne en exemple figure gif l'arbre de syntaxe abstraite correspondant à l'arbre de dérivation de la figure gif.

  
Figure: Arbre de syntaxe abstraite de l'expression



next up previous contents index
Next: Analyse descendante récursive Up: Analyse Syntaxique Previous: Grammaires sous forme