Convertir NFA pour la validation des e-mails en DFA

Sep 19 2020

Quelqu'un peut-il vous aider à convertir le NFA pour cette validation par e-mail en un DFA?

Pour effectuer la conversion, j'ai d'abord créé une table de transition d'état, puis-je aider à créer DFA?

Réponses

1 ggorlen Sep 19 2020 at 04:12

Produire un DFA à partir de vos fermetures epsilon semble direct. Chaque fermeture forme un état DFA unique et les transitions dans le DFA sont l'agrégation des transitions pour les nœuds dans la fermeture epsilon du NFA. Voici le tableau de transition pour le DFA à partir de vos e-fermetures:

   | a-z | 0-9 | @ | _  | .  | com
---|-----|-----|---|----|----|-----
A^ | AB  |     |   |    |    |
AB | AB  | AB  | C |    |    |
C  | CD  | CD  |   | CD |    |
CD | CD  | CD  |   | CD | CE |
CE | CD  | CD  |   | CD |    | F
F$ |     |     |   |    |    |

Voici le DFA pour ce tableau ( voir sur graphviz ):

digraph G {
    rankdir=LR;
 
    node [shape=point]; qi;
    node [shape=doublecircle]; F;
    node [shape=circle];

    qi -> A;
    A  -> AB [label="a-z"]
    AB -> AB [label="a-z | 0-9"];
    AB -> C  [label="@"]
    C  -> CD [label="a-z | 0-9 | _"]
    CD -> CD [label="a-z | 0-9 | _"]
    CD -> CE [label="."]
    CE -> CD [label="a-z | 0-9 | _"]
    CE -> F  [label="com"]
}