IFT313 Introduction aux langages formels Froduald Kabanza Département d’informatique Université de Sherbrooke Grammaires attribuées
Objectifs Se familiariser avec la notion de grammaire attribuée. IFT313 © Froduald Kabanza
Références [2] Appel, A. and Palsberg. J. Modern Compiler Implementation in Java. Second Edition. Cambridge, 2004. Section 3.2 IFT313 © Froduald Kabanza
Actions sémantiques et grammaires attribuées Une action sémantique est un code associé à une règle de la grammaire et exécuté lorsqu’il y a une prédiction de la règle durant l’analyse. Un attribut est une donnée associée à un symbole d’une règle de grammaire. Par exemple, si le symbole est un terminal, ça pourrait être la valeur du token (valeur double d’un token réel). Si le symbole est un non terminal, l’attribut pourrait être une donnée calculée en utilisant les actions sémantiques. Une grammaire avec des attributs est appelée une grammaire attribuée. Un attribut peut être synthétique (calculé) ou hérité (valeur copiée d’un enfant ou parent). Plus tard, quand on verra l’analyse LR, on parlera de réduction au lieu de prédiction de règle. Ce sera la même chose. Les actions sémantiques seront exécutées lorsqu’il y a une réduction de la règle de grammaire. IFT313 © Froduald Kabanza
Attributs déterminés par l’analyseur lexical Par exemple, pour un lexème des nombres, on peut calculer certains attributs au moment de l’analyse lexicale. Attributs d’un nombre: Type : {Réel, Entier, Long, LongDouble, …) Valeur Nombre = [0-9]+ // entier ordinaire 32 bits Nombre = [0-9]+L // entier long (64 bits) Nombre = [0-9]*.[0-9]+ // réel double (64 bits) Nombre = [0-9]*.[0-9]+f // réel float (32 bits) IFT313 © Froduald Kabanza
Attributs déterminés par l’analyseur lexical Texte: int a = (int) 304.29; Lexèmes: <IntKW> <identifier> <EQ> <LPAREN> <IntKW> <RPAREN> <Nombre> Lexèmes attribués: <IntKW> <identifier, name=‘a’> <EQ> <LPAREN> <IntKW> <RPAREN> <Nombre, type=Real, value=304.29> <EOF> IFT313 © Froduald Kabanza
Attributs calculés par des règles de la grammaire E E op E E num op + | - | * | / Mot d’entrée: 2.1 * 2 E Type=réel, value=4.2 op * Type=real, value=2.1 E E Type=integer, value=2 num num Type=reall, value=2.1 Type=integer, value=2 IFT313 © Froduald Kabanza
Conclusion Les attributs dans une grammaire sont utiles pour faire l’analyse sémantique. Dans ce cours, nous nous limiterons à des cas simples, soit d’interpréter directement une expression ou en construisant un arbre syntaxique abstrait. Ces utilisations se font en une seule passe. IFT313 © Froduald Kabanza