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:
| M | tfd.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