-------------------------------------------------------------------------------- EXAMEN DE TRAVAUX PRATIQUES DE COMPILATION Le sujet est compose de trois exercices independants, vous repondrez aux questions directement dans ce fichier, et vous placerez les sources demandees dans le repertoire correspondant. Toutes les compilations seront gerees par un unique fichier makefile. *** Duree de l'epreuve : 2 H 30 *** A la fin de l'examen, vous lancerez la commande: $ /home/partage/validexam I61 pour valider votre travail. Prevoir 5 minutes pour cette ultime tache. Documents autorises : sources personnelles. nom : @auteur -------------------------------------------------------------------------------- Exercice 1 : expression reguliere 30 minutes -------------------------------------------------------------------------------- Il s'agit d'ecrire un programme en langage C pour realiser une commande match.exe qui prend en argument une expression reguliere et une chaine puis retourne 0 si le motif apparait dans la chaine et 1 sinon. [ a ] Ecrire une source match.c. [ b ] demonstration : [ c ] Donner une solution en bash. -------------------------------------------------------------------------------- Exercice 2 : analyseur lexical 30 minutes -------------------------------------------------------------------------------- Il s'agit d'ecrire un programme en flex pour realiser une commande sum.exe qui effectue la somme des nombres d'un fichier sur les differentes colonnes. La commande ignore les champs qui ne sont pas des nombres et le caractère # incremente le compteur de champs. Par exemple, avec le fichier : foo bar 1 2 3 4 titi 6 toto bidule # # 7 truc le resultat sera : 5 8 10 car le fichier est vu 1 2 3 4 6 7 [ a ] Ecrire une source scan.l en supposant que le nombre champs numerique par ligne est inferieur a 64. [ b ] commentaires et explications : [ c ] demonstration -------------------------------------------------------------------------------- Exercice 3 : analyseur syntaxique 60 minutes -------------------------------------------------------------------------------- Il s'agit d'ecrire un programme en bison pour realiser une calculette set.exe qui interprete des expresssions ensemblistes. Le nombre d'objets sera limite a 32 pour pouvoir utiliser les operations bit a bit. A := { alpha, beta, gamma, delta, epsilon}; B := { phi, lambda, zeta }; C := { alpha, delta, kappa}; X := (A UNION B ) INTER C; Y := (A INTER C ) UNION ( B INTER C); X == Y; La calculette ecrit 'vrai'. On envisage une calculette avec 26 variables : A, B, C, ... Les noms des objets seront definis par l'utilisateur. [ a ] Ecrire une source set.y pour gerer les operations et relations habituelles sur les ensembles : intersection, union, complementaire, inclusion, egalite. [ b ] commentaires et explications [ c ] demonstration