Ce document a été produit par HEVEA.
Votre browser peut avoir a être configuré pour afficher correctement
certains symboles.
Reportez-vous à la documentation d'HEVEA.
expression ::= expression-concatenation '|' expression | expression-concatenation expression-concatenation ::= expression-repetition expression-concatenation | expression-repetition expression-repetition ::= expression-simple '*' | expression-simple expression-simple ::= '(' expression ')' | car-non-speciaux | intervalle car-non-speciaux ::= tout caractere sauf '|', '*', '[', ']', '.' | '\|' | '\*' | '\[' | '\]' | '\.' intervalle ::= '.' | '[' liste ']' | '[^' liste ']' | '[' liste '-]' | '[^' liste '-]' liste ::= non-moins liste1 liste1 ::= non-fermant liste1 non-moins ::= tout caractere sauf '-' non-fermant ::= tout caractere sauf ']'
Pour obtenir l'automate déterministe à partir de ces ensembles, il reste à appliquer l'algorithme présenté Fig. 4. Cet algorithme construit un ensemble d'états Detat, chaque état représentant un ensemble de noeuds de l'arbre, et une table de transition Dtran, représentant les transitions de l'automate. Ainsi, si Dtran[T, a] = U, alors il y a une transition dans l'automate de l'état T à l'état U étiquettée par la lettre a. Les états de Detat sont marqués pour indiquer qu'ils n'ont pas encore été examinés. L'état initial de l'automate est premier(root), les états finaux sont tous les états contenant le noeud représentant le symbole de fin.
Noeud n premier(n) dernier(n) nul(n) n est une feuille Ø Ø True étiquettée e n est une feuille i i False étiquettée i
premier(c1) È premier(c2) dernier(c1) È dernier(c2) nul(c1) ou nul(c2)
si nul(c1) alors premier(c1) È premier(c2) sinon premier(c1)
si nul(c2) alors dernier(c1) È dernier(c2) sinon dernier(c2) nul(c1) and nul(c2) premier(c1) dernier(c1) True
Construction de la fonction suivant : Soit n un noeud de l'arbre,
- si n est un noeud de concaténation avec c1 pour fils droit et c2 pour fils gauche, et si i appartient à dernier(c1), alors tous les éléments de premier(c2) sont dans suivant(i);
- si n est un noeud de répétition, et si i appartient à dernier(n), alors tous les éléments de premier(n) sont dans suivant(i);
Initialement, Detat contient un seul état non marqué constitué des noeuds de premier(root).
Tant que il reste un état T non marqué dans Detat faire
- marquer T;
- Pour chaque lettre a de l'alphabet faire
- Soit U l'ensemble des noeuds de l'arbre qui sont dans suivant(p), avec p appartenant à T, et tel que p représente la lettre a;
- Si U n'est pas vide et n'appartient pas déjà à Detat, alors ajouter U à Detat (sans le marquer);
- Dtran[T, a] = U;
Chaque groupe d'états de Pfinale représente en fait un état de l'automate minimal M'. Pour calculer les transitions de l'automate minimal, on choisit pour chaque groupe de Pfinale un état représentant. Les états de l'automate minimal seront les états représentants. Soit s un état représentant, et supposons qu'il y a une transition par la lettre a dans l'automate non minimal de s vers t. Soit r le représentant du groupe de t, alors on a une transition dans l'automate minimal de s vers r par la lettre a. L'état initial de M' sera le représentant du groupe contenant l'état initial de M, ses états finaux seront les représentants des groupes qui contiennent un état final de M. Il reste à supprimer les états morts (bouclant sur eux-mêmes pour toute lettre) non finaux, et les états non-atteignables depuis l'état initial.Pour chaque groupe G de P faire
- Partitionner G en sous-groupes, de sorte que
deux états s et t de G sont dans le même sous-groupe si et seulement si, pour toute lettre a de l'alphabet, les états s et t ont une transition par a vers des états qui appartiennent au même groupe de P;- Remplacer G dans Pnew par l'ensemble des sous-groupes calculés précédemment;
Figure 5 : Algorithme de partitionnement d'une partition P.
igrep [-z] expression-rationnelle [-f liste-de-fichiers]La grammaire des expressions rationnelles est celle présentée précédemment. Sans l'option
-f
, la commande igrep
effectue la recherche des motifs dans les fichiers indexés par la
commande stfsindex
. La liste de ces fichiers se trouve dans le
fichier $HOME/.stfs.filenames
.igrep utilise alors l'index pour optimiser sa recherche dans
l'ensemble des fichiers indexés. Si l'option -f
est présente,
igrep se comporte comme la commande grep, c'est-à-dire
qu'elle parcourt les fichiers passés en paramètre en affichant les
lignes qui contiennent un mot du langage de l'expression rationnelle.
Si il n'y a aucun fichier dans liste-de-fichiers
, igrep
lit sur son entrée standard. Si l'option -z est présente,
les fichiers compressés ou codés sont décompressés/décodés. Les
utilitaires de décompression utilisés sont uncompress et
gunzip. L'utilitaire de décodage considéré est
uudecode.Ce document a été traduit de LATEX par HEVEA.