%{
#include <stdio.h>
#define MAX_LENGTH 20 /* Longueur maximale des mots alphabétiques */
int word_lengths[MAX_LENGTH + 1] = {0}; /* Tableau pour stocker les fréquences */
%}
%%
[a-zA-Z]{1,20} { /* Mot alphabétique de longueur <= 20 */
int len = yyleng; /* Longueur du mot trouvé */
word_lengths[len]++;
}
[a-zA-Z]{21,} { /* Mot alphabétique de longueur > 20 (ignoré) */
/* Ignorer ces mots car ils dépassent la limite */
}
[^a-zA-Z]+ { /* Séparateurs et autres caractères */
/* Ignorer */
}
%%
int main() {
printf("Entrez le texte :\n");
yylex();
/* Affichage de l'histogramme */
printf("\nHistogramme des longueurs de mots:\n");
for (int i = 1; i <= MAX_LENGTH; i++) {
if (word_lengths[i] > 0) {
printf("Longueur %2d : %d\n", i, word_lengths[i]);
}
}
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgTUFYX0xFTkdUSCAyMCAgLyogTG9uZ3VldXIgbWF4aW1hbGUgZGVzIG1vdHMgYWxwaGFiw6l0aXF1ZXMgKi8KCmludCB3b3JkX2xlbmd0aHNbTUFYX0xFTkdUSCArIDFdID0gezB9OyAgLyogVGFibGVhdSBwb3VyIHN0b2NrZXIgbGVzIGZyw6lxdWVuY2VzICovCiV9CgolJQoKW2EtekEtWl17MSwyMH0geyAgLyogTW90IGFscGhhYsOpdGlxdWUgZGUgbG9uZ3VldXIgPD0gMjAgKi8KICAgIGludCBsZW4gPSB5eWxlbmc7ICAvKiBMb25ndWV1ciBkdSBtb3QgdHJvdXbDqSAqLwogICAgd29yZF9sZW5ndGhzW2xlbl0rKzsKfQoKW2EtekEtWl17MjEsfSB7ICAvKiBNb3QgYWxwaGFiw6l0aXF1ZSBkZSBsb25ndWV1ciA+IDIwIChpZ25vcsOpKSAqLwogICAgLyogSWdub3JlciBjZXMgbW90cyBjYXIgaWxzIGTDqXBhc3NlbnQgbGEgbGltaXRlICovCn0KClteYS16QS1aXSsgeyAvKiBTw6lwYXJhdGV1cnMgZXQgYXV0cmVzIGNhcmFjdMOocmVzICovCiAgICAvKiBJZ25vcmVyICovCn0KCiUlCgppbnQgbWFpbigpIHsKICAgIHByaW50ZigiRW50cmV6IGxlIHRleHRlIDpcbiIpOwogICAgeXlsZXgoKTsKCiAgICAvKiBBZmZpY2hhZ2UgZGUgbCdoaXN0b2dyYW1tZSAqLwogICAgcHJpbnRmKCJcbkhpc3RvZ3JhbW1lIGRlcyBsb25ndWV1cnMgZGUgbW90czpcbiIpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gTUFYX0xFTkdUSDsgaSsrKSB7CiAgICAgICAgaWYgKHdvcmRfbGVuZ3Roc1tpXSA+IDApIHsKICAgICAgICAgICAgcHJpbnRmKCJMb25ndWV1ciAlMmQgOiAlZFxuIiwgaSwgd29yZF9sZW5ndGhzW2ldKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K