Aller au contenu

Grammaire attribuée

Un article de Wikipédia, l'encyclopédie libre.

Une grammaire attribuée est une manière formelle de définir des attributs pour les productions d'une grammaire, associant ces attributs à des valeurs. L'évaluation a lieu dans les nœuds de l'arbre syntaxique abstrait quand le langage est traité par un analyseur syntaxique ou un compilateur.

Les attributs sont divisés en deux groupes : les attributs synthétisés et les attributs hérités. Les attributs synthétisés sont le résultat des règles d'évaluation des attributs ; ils peuvent aussi utiliser les valeurs d'attributs hérités. Les attributs hérités sont passés vers les feuilles à partir des nœuds parents.

Dans certaines approches, on utilise les attributs synthétisés pour passer des informations sémantiques vers la racine de l'arbre. De même, les attributs hérités permettent de passer des informations sémantiques vers les feuilles. Par exemple, lors de la construction d'un outil de traduction de langage, tel qu'un compilateur, on peut utiliser une grammaire attribuée pour affecter des valeurs sémantiques à des constructions syntaxiques. Il est aussi possible de faire des validations sémantiques associées à une grammaire. Ces validations sémantiques représentent les règles du langage non explicitement importées par la syntaxe.

On peut aussi utiliser des grammaires attribuées pour traduire l'arbre syntaxique directement en code pour une machine spécifique, ou dans un langage intermédiaire.

Les grammaires attribuées peuvent transporter de l'information de n'importe où vers n'importe où dans l'arbre abstrait, d'une manière contrôlée et formelle. C'est leur force.

Les grammaires attribuées furent inventées par Donald Knuth et Peter Wegner. Alors que Donald Knuth conçut l'idée générale, Peter Wegner inventa les attributs hérités pendant une conversation avec Knuth. Des idées embryonnaires peuvent être retrouvées dans le travail d' Edgar T. « Ned » Irons, l'auteur de IMP.

Types de grammaires attribuées

[modifier | modifier le code]

Liens externes

[modifier | modifier le code]