commit 177c4d6e5683de3102c29562e85afa05a512b999
parent 297af1b08f1beaca439459fe826048ab4cddb1b1
Auteur: Loïc Daignault-Pichette <loic@asteride.xyz>
Date: Wed, 22 Apr 2026 12:04:49 -0400
Ajouter un état initial standard au tfd
Il permet de simplifier l’interprétation du transducteur.
Diffstat:
2 fichiers modifiés, 22 insertions(+), 2 suppressions(-)
diff --git a/tfd.c b/tfd.c
@@ -592,6 +592,16 @@ transducteur(struct tfm *tfm)
pos = 0;
+ /* Ajouter un état initial standard. Il permet de simplifier
+ * l’interprétation. */
+ assert(TAMPON_LNGR_DEF >= 8);
+ t[pos] = 1; /* L’état contient une transition et n’est pas final. */
+ pos += 4;
+ t[pos] = TFD_SYMB_EPSILON; /* Symbole d’entrée. */
+ t[pos + 1] = TFD_SYMB_EPSILON; /* Symbole de sortie. */
+ ecrire_32(t + pos + 2, 2); /* Mène au véritable état initial. */
+ pos += 4;
+
/* Parcourir les états. */
for (ietat = 0; tampex_dedans(tfm->etats, ietat); ietat++) {
/* Ajouter l’état à la correspondance. */
@@ -622,8 +632,9 @@ transducteur(struct tfm *tfm)
}
}
- /* Ajuster écrire les références vers les états. */
- for (pos = 0, ietat = 0; tampex_dedans(t, pos); ietat++) {
+ /* Écrire les références vers les états. Commencer après l’état
+ * initial. */
+ for (pos = 8, ietat = 0; tampex_dedans(t, pos); ietat++) {
pos += 4; /* Sauter l’entête. */
for (itrans = tfm->etats[ietat].trans; itrans != -1;
itrans = tfm->trans[itrans].prch) {
diff --git a/tfd.h b/tfd.h
@@ -148,6 +148,15 @@
* 00 01 Symbole d’entrée
* 02 03 Symbole de sortie
* 04 07 Identifiant d’état
+ *
+ * Pour faciliter l’interprétation du transducteur, le premier état doit être
+ * le suivant:
+ *
+ * 00 01 1
+ * 02 07 0
+ * 08 09 TFD_SYMB_EPSILON
+ * 0A 0B TFD_SYMB_EPSILON
+ * 0C 0F 2
*/
/* Écrire une représentation .tfd du transducteur dans le fichier f.