@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @- EXAMEN DE TRAVAUX PRATIQUES DE COMPILATION @D nom : @U host: @H L'objectif de l'exercice est de faire evoluer une calculette, un interpreteur d'expressions arithmetiques utilisant 26 variables, et les nombres entiers. Vous repondrez aux questions dans ce fichier par des copier/coller adequates, en evitant les caracteres ascii de code > 127. Duree de l'epreuve : 2 H 30 Temps estimer pour repondre aux 7 questions : 2 H 00 A la fin de l'examen, vous lancerez la commande: $ pour valider votre travail. Prevoir 5 minutes pour cette ultime tache. Documents autorises : vos sources, les documentations populaires via http. Aucuns echanges d'informations, quelque soit la nature de agent conversationnel envisage à l'exception de l'enseignant present dans la salle d'examen. @- 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. Preciser la nature des corrections effectuees : Inserer ici les resultats des commandes : $ cat make $ make clean $ make @- Exercice 2 : 15 minutes @- Decrire le role des champs de la variable yylval. Revenez plus tard sur cette question si le role d'un champs vous echappe ! 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 @- Ajouter l'operateur ternaire : @A /X ? Y : Z /Y if X else Z/{ X, Y, Z }/Y SI X SINON Z/ où X, Y, Z sont trois expressions, et le resultat vaut Y si X n'est pas nul, et Z sinon. Preciser les proprietes souhaitables de l'operateur : Decrire la nature des modifications : Inserer une demonstration : @- Exercice 4 : 15 minutes @- Modifier l'analyseur pour gerer les termes : @A /mem[ exp ]/var[ exp ]/adr[ exp ]/tab[ 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. Decrire les modifications : Inserer une demonstration : @- Exercice 5 : 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 : @A /division par zero en ligne /ligne :division par zero/erreur fatale en ligne /ligne : division impossible/ où represente le numero de la ligne. Decrire les modifications : Inserer une demonstration : @- Exercice 6 : 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 stopper l'execution du programme. @A /avertissement : non initialisee/attention :variable non initialisee en ligne / utilisee mais non initialisee en ligne /warning : n'est pas initialisee/ Decrire les modifications : @- Exercice 7 : 30 minutes @- Le fichier exemple.png a ete obtenu par la commande : $ dot -Tpng exemple.dot -o exemple.png Observer le fichier source 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. @-