trafi

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

commit d82f93e6074231e3607b5e3b81cab18d52e24ba1
parent 00964abc46fe4ab3823190f62914f24ffd20258f
Auteur: Loïc Daignault-Pichette <loic@asteride.xyz>
Date:   Fri, 10 Apr 2026 13:32:39 -0400

Ajouter de nouveaux symboles spéciaux

Diffstat:
Matt.c | 16++++++++++++++++
Matt.h | 3++-
Mtfm.h | 5+++--
3 fichiers modifiés, 21 insertions(+), 3 suppressions(-)

diff --git a/att.c b/att.c @@ -231,6 +231,12 @@ ajt_symb(struct tfm *tfm, char *t, size_t noct, ssize_t *id) if (noct == 3 && memcmp(t, "@0@", noct) == 0) { *id = TFM_SYMB_EPSILON; return 0; + } else if (noct == 19 && memcmp(t, "@_IDENTITY_SYMBOL_@", noct) == 0) { + *id = TFM_SYMB_IDENTITE; + return 0; + } else if (noct == 18 && memcmp(t, "@_UNKNOWN_SYMBOL_@", noct) == 0) { + *id = TFM_SYMB_AUTRE; + return 0; } if ((*id = tfm_symb_id(tfm, t, noct)) < 0) @@ -254,6 +260,16 @@ symb_obt(struct tfm *tfm, ssize_t id, char *symb, size_t max) return -1; memcpy(symb, "@0@", 3); return 3; + case TFM_SYMB_IDENTITE: + if (max < 19) + return -1; + memcpy(symb, "@_IDENTITY_SYMBOL_@", 19); + return 19; + case TFM_SYMB_AUTRE: + if (max < 18) + return -1; + memcpy(symb, "@_UNKNOWN_SYMBOL_@", 18); + return 18; } assert(id >= 0); diff --git a/att.h b/att.h @@ -16,7 +16,8 @@ * 0 1 ᵘ u * * Certains symboles sont interprétés différemment par foma. La présente mise en - * œuvre reconnaît @0@ comme le symbole epsilon (ε). D’autres sont à venir. + * œuvre reconnaît @0@ comme le symbole epsilon (ε), @_IDENTITY_SYMBOL_@ et + * @_UNKNOWN_SYMBOL_@. * * Les lignes du deuxième type ne comptent qu’un seul champ, qu’occupe * l’identifiant d’un état à déclarer comme final. Par exemple: diff --git a/tfm.h b/tfm.h @@ -8,8 +8,9 @@ /* L’accronyme « tfm » veut dire « transducteur fini en mémoire ». */ /* Liste de symboles spéciaux. */ -#define TFM_SYMB_EPSILON -1 -#define TFM_SYMB_ETOILE -2 +#define TFM_SYMB_EPSILON -1 +#define TFM_SYMB_IDENTITE -2 +#define TFM_SYMB_AUTRE -3 /* Une structure tfm représente un transducteur fini et renferme trois tampex * pour y stocker les états, les transitions entre les états et les symboles.