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