src/
: les fichiers en-têtes et sources,resources/
: les fichiers représentant des automates finis prédéfinis,out/
: les fichiers sources compilés,out/png/
: les AFN générés par le programme et dessinés avec Graphviz.
grammaire.txt
: la grammaire formelle des expressions régulières acceptées par ce projet.
./test
: tests unitaires sur deux AFD et de deux AFN définis dansresources/
vérfiants que certains mots sont acceptés ou refusés par ces AF. Dessine aussi les deux AFN, leur union, leur concaténation et l'étoile de Klenne du premier dansout/png/
../mydot <expression régulière...>
: dessine les automates associés à une ou plusieurs expressions régulières dansout/png/
; exemple :./mydot a b a+b
../mygrep <expression régulière> <chaîne à tester>
: détermine si une chaîne est acceptée par une expression régulière. Dessine l'AFN final dansout/png/grep.png
.
Remarque : la commande dot
de Graphviz doit être installée pour que les images soient
créées.
make
pour générer tous les programmes ;make clean
pour supprimer le dossierout/
et les exécutables générés.
src/af.[hc]
: constantes partagées par tous les AF, ainsi qu'une fonction pour initialiser ledico
d'un AF.src/afd.[hc]
: fonctions pour intéragir avec des AFD.src/afn.[hc]
: fonctions pour intéragir avec des AFN.src/compregex.[hc]
: fonctions pour convertir une expression régulière en un AFN.src/util/misc.[hc]
: fonctions communes d'assertion et de lecture de fichiers.src/util/stack.[hc]
: fonctions pour représenter une pile d'états (ici, desint
).src/util/vstack.[hc]
: fonctions pour représenter une pile d'AFN (utilisé dans l'analyse syntaxique).src/util/set.[hc]
: fonctions pour représenter un ensemble trié d'états.src/test.c
,src/mydot.c
,src/mygrep.c
: fonctions principales des exécutables du même nom.
Le code source est intégralement commenté.
$ ./mygrep "(0+1)*0" "01101010"
"01101010" est acceptée
$ ./mygrep "(0+1)*0" "1"
"1" est rejetée
$ ./mygrep a* ""
"" est acceptée
$ ./mydot a b a+b a.b a*
Toutes les expressions régulières ont été dessinées.
La majorité des erreurs devraient être détectées ;
$ ./mydot "(a"
(a
^
erreur syntaxique: parenthèse fermante attendue
$ ./mydot "a)bc"
a)bc
^^^
erreur syntaxique: caractères en surplus
$ ./mydot a+
a+
^
erreur syntaxique: symbole attendu
Le programme se terminera immédiatement sur une erreur et ne libèrera pas la mémoire qu'il aura alloué afin de simplifier le code ; dans ce contexte, le système d'exploitation prendra le relai et les fuites sont donc négligeables.