2012-05-23 4 views
2

Je convertis un ensemble donné d'expressions régulières en un seul NFA, mais j'ai quelques problèmes. Comment convertir une expression régulière comme "ab. * C" (représentant un "a", un "b", un nombre quelconque de caractères, puis un "c")?Conversion d'une expression régulière dot-star en NFA

Mon but final est de convertir l'unique NFA en un DFA (et j'utilise l'algorithme de construction de sous-ensemble pour cela).

+0

Cela nécessite plus de contexte. La conversion est triviale une fois que vous connaissez l'algorithme (et même si vous ne le savez pas), et si vous ne le savez pas, vous ne savez pas comment vous voulez travailler avec la NFA ou comment vous comprenez une réponse, d'ailleurs. Quel est votre niveau de connaissance? –

+0

Je ne vais pas travailler directement avec le NFA, car ce que je veux travailler est juste le DFA. Je convertis des expressions régulières en DFA (par regex -> NFA -> DFA), mais le. * Est un cas que je ne gère pas correctement, car quand j'essaye de construire un automate avec des transitions croisées, je reçois un état ... l'espace explose (mais pas quand j'essaye de le construire sans les transitions croisées). –

Répondre

1

Un .* dans une expression régulière correspond à un état de bouclage dans le NFA pour chaque lettre de son alphabet.

Cet état aura également une transition pour c vers l'état d'acceptation.

Il est parfaitement correct d'avoir c à la fois dans la transition de boucle et la transition d'acceptation - c'est pourquoi il est non déterministe.