GROUPE 1 --- Pour finir le tp 2 - dont l'énoncé du web a été modifié TP 2 : objectif : remplir la table des identifiants, et la table des symboles pour un fichier .pas passé en paramètre, qui ne contient que des déclarations. On prend la méthodologie nouvelle : (cf nouveau tp2 * Avoir deux répertoires : o R0 dédié aux tests de vos implémentations + différents répertoires pour les tests o R1 dédié à l'intégration de vos implémentations dans le compilateur pascal les fichiers de définition de flex et bison, fournis dans le sujet du tp 4 0-oublier ce que vous avez fait, créez un nouveau rep R0 , on recollera les morceaux après. et surtout, ne passez pas à l'étape d'après avant d'avoir terminé l'étape en cours. 1-écrire le lexer et le parseur pour la grammaire (ex question5) : D -> D ; De | De De -> var LI : T | type id : T T -> int | real | boolean | array [ nb ] of T | ^ T | struct begin LD end LD -> LD ; LD | id : T LI -> LI , id | id (déclaration de variables) . dans le parseur, à droite des règles, ne rien faire pour l'instant. Modifier le makefile de façon à appeler flex et bison ou récupérer le makefile de la correction du tp 1 On fera attention : ** dans la grammire des déclarations, règle LD, il faut supprimer la récursivité à droite. ** bien gérer les mots clefs du langage "typ2" sera un identifiant, mais type est un mot-clef. donc, on ajoute un i dans la table des id si et seulement si ..... (compléter) 2-Ecrire le main qui ne fait qu'appeler le parseur sur un fichier passé en argument. tester sur des exemples bien choisis. par exemple : var x,y: int donnera l'impression x <-> 1 y <-> 2 3-Passons maintenant à la table des id. Ecrire la classe TableDesIdentificateurs : qui fera le lien identifiant <-> numéro fonctions : ** ajout dans la table d'un id ** recherche d'un id dans la table ** impression de la table Modifier parseur et main pour modifier la table des ids et l'imprimer ... Tester sur les programmes tests écrits en question 2. 4-Table des symboles : toujours sur la mm mini grammaire, !!! uniquement les types de base, en premier lieu !! On veut implémenter (penser aux méthodes d'affichage) * la classe Type et sa (ses) dérivation(s) permettant de gérer les types de base du pascal (cf le sujet du tp 4) * la classe Symbole et sa dérivation permettant de gérer les variables (cf cours sur les déclarations) *la classe TableDesSymboles permettant de stocker le symbole associé à un identificateur Faire les classes uniquement pour la gestion des types de base : int, bool, real.. puis Tester sur : var v0, v1 : integer; vreal : real; temp : string; table des identificateurs à obtenir : 1 --> v0 2 --> v1 3 --> vreal 4 --> temp table des symboles à obtenir : 1 --> variable, entier 2 --> variable, entier 3 --> variable, reel 4 --> variable, chaine Maintenant, fini de jouer ! 5 dans un rep R1 donc : -Prendre la grammaire du full pascal dispo ici : Lex http://www710.univ-lyon1.fr/~eguillou/lib/exe/fetch.php?id=compilation%3Atpcompilateur%3Alexical&cache=cache&media=compilation:pascal.l Bison http://www710.univ-lyon1.fr/~eguillou/lib/exe/fetch.php?id=compilation%3Atpcompilateur%3Asyntaxic&cache=cache&media=compilation:pascal.y Dans ce rep : 5.1- faire fonctionner lex/yacc + main et Makefile pour pouvoir parser (sans aucune action dans le yacc) la grammaire entiere, tester 5.2- table des ids . tests . tables symboles. tests. à ce stade, on est synchronisé avec la nouvelle version du tp 2, fin de la question 2 http://www710.univ-lyon1.fr/~eguillou/doku.php?id=compilation:tptsti#folded_3 avec r0 pour les tests, r1 pour la vraie version ...