trafi

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

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:
Mtfd.c | 15+++++++++++++--
Mtfd.h | 9+++++++++
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.