-------------------------------------------------------------------------------- EXAMEN DE TRAVAUX PRATIQUES DE COMPILATION Thu Apr 12 09:31:25 2012 nom : pl host: localhost.localdomain 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 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 : expression reguliere -------------------------------------------------------------------------------- Il s'agit d'ecrire un programme en langage C pour realiser une commande match.exe qui prend en agument un mot et une expression reguliere et retourne 0 ou 1 en fonction de la concordance. [ a ] Ecrire une source match.c. [ b ] Inserer une demonstration. [ c ] Donner une solution en bash. -------------------------------------------------------------------------------- Exercice 2 : analyseur lexical -------------------------------------------------------------------------------- Il s'agit d'ecrire un programme en flex pour realiser une commande sum.exe effectue la somme des nombres par colonne. La commande ignore les champs qui ne sont pas des nombres et le caractère # incrémente le compteur de champs. Par exemple, le resultat de la commande sur le fichier : foo bar 1 2 3 4 titi 6 toto bidule # 7 truc sera 5 14 9 car le fichier est vu 1 2 3 4 5 # 7 [ a ] Ecrire une source scan.l [ b ] Inserer une demonstration -------------------------------------------------------------------------------- Exercice 3 : analyseur syntaxique -------------------------------------------------------------------------------- Il s'agit d'ecrire un programme en bison pour realiser une calculette set.exe qui interprete des operations sur les ensembles de moins de 32 objets. 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 'yes'. [ a ] Ecrire une source parse.y pour gerer les operations et relations habituelles sur les ensembles : intersection, union, complementaire, inclusion, egalite. [ b ] Inserer une demonstration