IFT313
Introduction aux langages formels
Froduald Kabanza
Département d’informatique Université de Sherbrooke
Grammaires attribuées
IFT313 © Froduald Kabanza 2
Objectifs
• Se familiariser avec la notion de
grammaire attribuée.
IFT313 © Froduald Kabanza 3
Références
[2] Appel, A. and Palsberg. J. Modern Compiler Implementation in Java.
Second Edition. Cambridge, 2004.
– Section 3.2
IFT313 © Froduald Kabanza 4
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).
IFT313 © Froduald Kabanza 5
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 6
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 7
Attributs calculés par des règles de la grammaire
Grammaire:
• E E op E
• E num
• op + | - | * | / Mot d’entrée:
2.1 * 2
E
E E
num
Type=reall, value=2.1
op
Type=real, value=2.1
Type=réel, value=4.2
num
Type=integer, value=2 Type=integer, value=2*
IFT313 © Froduald Kabanza 8
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.