****************************************** * THEORIE DES LANGAGES ET COMPILATION * * EXAMEN DE TRAVAUX - PRATIQUES * * 10 Avril 2014 de 09:00 -- 12:00 * ****************************************** ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Vous repondrez aux questions posees directement dans ce fichier en precisant sommairement les commandes exactes qui vous ont permis d'aboutir a vos reponses. Vous respecterez les noms de sources et de cibles requises dans l'enonce : le répertoire d'examen contiendra un et un seul fichier makefile. Vous pouvez utiliser les informations presentes sur votre compte, la documentation en ligne de commande : -- aucun autre document n'est autorise. Le sujet contient beaucoup de question, il n'est pas necessaire de tout faire pour avoir une note maximale. /\ / \ Pour validez votre travail a la fin de l'examen : / !! \ ------ /home/partage/pl/validexam -m I61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ========================= 1. Expression Rationnelle ========================= repertoire : reg [a] Implanter en langage C un filtre pour mettre en capitale les chaines correspondant à un motif passé par la ligne de commande. La sortie de la commande se fera sur la sortie standard. Par exemple : $> echo 'abracadabra' | ./cap.exe '[^a-d]+' abRacadabRa [ source reg/cap.c ] [b Placer une cible capito dans votre makefile, pour faire une demonstration, puis inserer ici le resultat de : make capito [c] Donner une solution basee sur un filtre standard de votre choix. ===================== 2. Cadre de pile ===================== repertoire : mem Ecrire un programme en langage C pour mettre en evidence : [ a ] Le sens d'empilement, adresse croissante ou decroissante. [ source mem/stack.c] [ b ] Inserer une demonstration [ demonstration ] La mise en evidence peut s'appuyer sur une execution, ou l'observation du code assembleur, ou bien une session gdb... ======================= 3. Automate ======================= Repertoire : auto [a] Le lancement de make bug plante. Expliquer pourquoi ? [b] Réparer le code par une intervention minimale sur afnd.h : il suffit de changer 2 lignes. Lesquelles ? [c] Quelle est la taille de l'automate minimal qui reconnait les nombres ecrits en base 2 qui sont des multiples de 16 ? ======================= 4. Analyseur lexical ======================= Repertoire : flex [ a ] Completer le script canevas.sh pour obtenir une commande qui realise le meme travail que l'exercice 1. Par exemple, le resultat de $ ./canevas.sh 'y{2}' canevas.sh |& grep Y pourrait etre : YYlex(); [ source canevas.sh ] [ b ] Inserer une demonstration. make canevas ======================== 5. Analyseur syntaxique ======================== Repertoire : yacc Indication : yyparse peut etre appelee plusieurs fois dans un meme programme. On considère la grammaire d'expressions rationnelles : SRC --> [ EXP ] EXP --> EXP + EXP EXP --> EXP * EXP --> EXP . EXP EXP --> ( EXP ) EXP --> ALPHA ou le token terminal ALPHA désigne une lettre de [a-z]. Au non terminal SRC on associe deux parametres : la profondeur et la taille de l'arbre syntaxique. La profondeur est la longueur maximale d'un chemin de SRC vers une feuille. La taille est le nombre de noeuds de l'arbre syntaxique. [ 0 ] On utilise les regles d'associativite et de priorité habituelles de l'addition, la multiplication et de l'exponentiation. Quel est l'arbre syntatique de [ ( a + b ) * . c + d ] [ a ] Implanter un analyseur syntaxique re.y qui verifie la syntaxe des expressions rationnelles presentent dans une source sans faire d'action semantique. [ source re.y ] Inserer le resultat d'une demonstration [ make re ] [ b ] Implanter un analyseur syntaxique qui realise le travail de re.y tout en precisant les parametres des arbres syntaxiques. [ source parms.y ] Inserer le resultat d'une demonstration [ make parms ] [ c ] Mettre en oeuvre un analyseur qui filtre un fichier texte et qui affiche les positions (ligne, colonne) ou se trouve une expressions rationnelles, en precisant ses parametres. [ source repos.y ] Inserer le resultat d'une demonstration [ make repos ] ---------------------------------------------------------------- @auteur@@host.@code