TP de compilation : une solution de l'exercice 2 du TP 2
2.1.
On peut créer un tableau T de 26 variables entières initialisées à 0.
Chaque fois qu'on rencontre une minuscule, la variable correspondante est
incrémentée : T[yytext[0]-65]++
.
La gestion de ces 26 compteurs et leur affichage se fait sur le même
principe que les compteurs simples vue dans des exercices précédents.
2.2.
Le problème est compliqué par le fait que le nombre maximal de mots
distincts d'un texte quelconque n'est pas connu à l'avance. On doit
programmer ici une structure de type dictionnaire analogue à une table
des symboles. Le détail du code C/C++ n'est pas indiqué ici, ce n'est
pas l'objet du TD. Comme pour l'exercice précédent, on peut se limiter
à des mots d'au plus 50 caractères sous forme de tableau comme yytext,
mais d'autres choix moins limitatifs sont possibles.
%{
#include "listes.h"
listes Liste
//----------------------------------------------------------------
// listes.h est le fichier d'en-tête d'un fichier listes.c à créer
// et qui doit contenir la gestion d'une liste de mots en
// définissant un objet de type listes (programmé en C ou C++).
// Le type listes y est défini avec trois méthodes :
// initialiser qui crée la liste
// ajouter qui ajoute la première occurrence d'un mot nouveau
// ou incrémente l'occurrence d'un
mot de la liste
// afficher qui affiche la liste des mots avec leur occurrence.
//-----------------------------------------------------------------
%}
%%
^\n
{printf("Bye!\n");}
[a-zA-Z]+ { Liste.ajouter(yytext); ECHO; }
.\n {ECHO;}
%%
main() {
Liste.initialiser;
yylex();
Liste.afficher;
}
© 2000, 2017 – A. Sigayret