-------------------------------------------------------------------------------- EXAMEN DE TRAVAUX PRATIQUES DE COMPILATION Thu Apr 12 09:31:25 2012 nom : pl host: localhost.localdomain L'objectif de l'exercice est de faire evoluer une calculette, un interpreteur d'expressions arithmetiques dont les termes sont des nombres entiers ou des identificateurs a une lettre pour adresser 26 memoires. Vous repondrez aux questions dans ce fichier par des copier/coller adequates, en evitant les caracteres ascii de code > 127. Duree de l'epreuve : 3 H 00 Temps estimer pour repondre aux questions : 2 H 15 A la fin de l'examen, vous lancerez la commande: $ /home/partage/validexam compil pour valider votre travail. Prevoir 5 minutes pour cette ultime tache. Documents autorises : vos sources, ainsi que les documents populaires sur le langage C, gcc, make, flex, bison, graphiz, dot. -------------------------------------------------------------------------------- Exercice 1 : 15 minutes -------------------------------------------------------------------------------- Apres avoir consulter les differents fichiers sources, faire les modifications necessaires pour que la compilation de calc.exe se termine correctement sans pour autant que la calculette ne soit operationnelle. [a] Preciser la nature des corrections effectuees : [b] Inserer ici les resultats des commandes : $ cat make $ make clean $ make -------------------------------------------------------------------------------- Exercice 2 : 15 minutes -------------------------------------------------------------------------------- [a] Decrire le role des champs de la variable yylval. Revenez plus tard sur cette question si le role d'un des champs vous echappe ! [b] En utilisant l'option -E de gcc et la commande grep, sans utiliser la commande make, mettre en evidence le type de la variable yylval. copier/coller les commandes et le resultat de ces commandes : -------------------------------------------------------------------------------- Exercice 3 : 15 minutes -------------------------------------------------------------------------------- Completer la calculette pour gerer les operations habituelles : addition, soustraction, multiplication, division et affectation. Les operandes seront des nombres ou bien des identifcateurs reduits a une lettre. [ a ] Donner la grammaire utilisee : [ b ] Inserer une demonstration : -------------------------------------------------------------------------------- Exercice 4 : 15 minutes -------------------------------------------------------------------------------- Ajouter l'operateur ternaire : X ? Y : Z où X, Y, Z sont trois expressions, et le resultat vaut Y si X n'est pas nul, et Z sinon. [a] Preciser les proprietes souhaitables de l'operateur : [b] Decrire la nature des modifications : [c] Inserer une demonstration : -------------------------------------------------------------------------------- Exercice 5 : 15 minutes -------------------------------------------------------------------------------- Modifier l'analyseur pour gerer les termes : mem[ exp ] i.e. une expression designant la variable d'adresse v, ou la valeur v de exp est inferieure ou egale a 26. En particuler, si v = 0 alors le terme correspond la variable A. [ a ] Decrire les modifications : [ b ] Inserer une demonstration : -------------------------------------------------------------------------------- Exercice 6 : 15 minutes -------------------------------------------------------------------------------- Modifier les analyseurs pour proteger le programme contre les divisions par zero. En cas de division par zero, le programme devra s'arrêter avec le message d'erreur : division par zero en ligne represente le numero de la ligne. [ a ] Decrire les modifications : [ b ] Inserer une demonstration : -------------------------------------------------------------------------------- Exercice 7 : 15 minutes -------------------------------------------------------------------------------- Modifier les sources pour alerter l'utilisateur sur les l'utilisation d'une memoire non initialisee. La encore, il conviendra de preciser la ligne d'avertissement, mais sans pour autant stopper l'execution du programme. avertissement : non initialisee Decrire les modifications : -------------------------------------------------------------------------------- Exercice 8 : 30 minutes -------------------------------------------------------------------------------- Le fichier file/exemple.png a ete obtenu par la commande : $ dot -Tpng exemple.dot -o exemple.png Observer le fichier source file/exemple.dot. Modifier les sources de l'analyseur pour creer un fichier calc.dot utilisable par la commande dot obtenir une image de l'arbre syntaxique. Vous pouvez utiliser ou vous inspirer des les fonctions de node.c pour arriver a vos fins. A cet effet, notez que l'emploi de la fonction variadique mknode, et de la fonction newnode peuvent suffire. [ a ] Resumer les modifications : [ b ] Inserer une demonstration : -------------------------------------------------------------------------------- 0