trafi

Transducteurs finis
git clone git://git.asteride.xyz/trafi.git
Journaux | Fichiers | Références

commit 24fb428a7205a50411b77ba260ea26bdb3aa404c
parent f177c026e0aac4cf6d94bff67954b6277bd5a99e
Auteur: Loïc Daignault-Pichette <loic@asteride.xyz>
Date:   Thu,  9 Apr 2026 10:54:06 -0400

Créer une fonction pour afficher un segmenteur

Diffstat:
Mtfd.c | 32++++++++++++++++++++++++++++++++
1 fichier modifié, 32 insertions(+), 0 suppressions(-)

diff --git a/tfd.c b/tfd.c @@ -43,6 +43,9 @@ static struct tfm *automate_symbs(struct tfm *tfm, uint32_t **finaux); * Renvoie un pointeur vers un tampex, ou NULL en cas d’erreur. */ static uint16_t *symboles_entree(struct tfm *tfm); +/* Afficher un segmenteur en sortie standard. */ +static void segmenteur_afficher(struct tfm *tfm); + /* Créer le transducteur à parir d’un tfm. * Renvoie un pointeur vers un tampex, ou NULL en cas d’erreur. */ static void *transducteur(struct tfm *tfm); @@ -302,6 +305,35 @@ segmenteur_tlibre(uint16_t (**segm)[2], size_t i) return 0; } +static void +segmenteur_afficher(struct tfm *tfm) +{ + size_t i; + uint16_t (*segm)[2]; + + assert(tfm); + assert(segm); + + segm = segmenteur(tfm); + + for (i = 0; tampex_dedans(segm, i); i++) { + printf("%lu\t%s%u\t%s%u", + i, + segm[i][0] & 0x01 ? "*" : "", + segm[i][0] >> 1, + segm[i][1] & 0x01 ? "*" : "", + segm[i][1] >> 1); + if (segm[i][1] & 0x01 && segm[i][1] != ((0 << 1) | 0x01)) { + fputc('\t', stdout); + fwrite(tfm->symbs + (segm[i][1] >> 1) + 1, + 1, + *(uint8_t *)(tfm->symbs + (segm[i][1] >> 1)), + stdout); + } + fputc('\n', stdout); + } +} + /* La routine fonctionne en parcourant tous les symboles d’un transducteur. À * chaque nouveau symbole, il parcourt l’automate de symboles à partir de son * premier état et passe d’état en état en suivant les caractères du symbole et