Traduction
Licence Informatique 3ème année --- TD 5
Analyse syntaxique avec Bison
Dans ce TD, nous allons manipuler un petit analyseur d'expressions numériques. Nous
découvrirons la gestion de mots-clé, et nous verrons comment gérer
des valeurs de types différents.
Le résultat de ce TD doit être envoyé par mail avant vendredi 12 mars minuit
à votre chargé de TD. Le titre du mail doit être Traduction TD5 XXX,
où XXX est votre nom de famille.
Étude de programme
Téléchargez les fichiers flex
et bison
suivants:
calc.lex
calc.y
makefile
Compilez ces programmes.
- Que fait le programme
calc
ainsi obtenu ?
- A quoi sert l'option -d de
bison ? Si on ajoute l'option -v, on obtient un fichier
supplémentaire. Que contient-il ?
- Que fait la déclaration
%union {
int entier;
float reel;
}
dans le fichier calc.y ?
Améliorons le programme
- Modifiez le code
bison
pour que l'on puisse utiliser les opérateurs -
(binaire et unaire) et /
, ainsi que les parenthèses. Vous devrez utiliser les
priorités et associativités usuelles.
- On souhaite utiliser 26 variables, désignées par les lettres majuscules. Ajoutez du
code C pour gérer ces variables à l'aide d'un tableau.
- Modifiez le code
flex
de façon à ce que, quand on lit un nom de variable, l'analyseur
lexical renvoie un token IDENT
, et stocke dans yylval
un caractère désignant la variable.
- Modifiez le code
bison
pour qu'on puisse utiliser ces variables dans les
expressions. Exemple: 1.2+(A*6)
- Modifiez le code
bison
pour que l'on puisse affecter à une variable la valeur d'une
expression. Exemple: C=1.2+(A*6)
- Ajoutez les fonctions mathématiques: log, exp,
cos, sin, tan, sqrt et pow.
- Gérez le symbole $ dont la valeur est le résultat de la ligne précédente.