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.
makepour générer tous les programmes ;make cleanpour 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 ledicod'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.