2009-11-17 6 views
6

Est-ce que quelqu'un sait si Python (toute version) a utilisé les NFA (Automates Finis Non-Déterministes) pour évaluer les expressions régulières ou utilise-t-il un autre mécanisme? S'il vous plaît fournir des liens/référence si disponible.Est-ce que Python utilise les NFA pour l'évaluation d'expression régulière dans le module re?

+1

Comme la plupart des moteurs de RE permettent de nos jours pour des langues non régulières à correspondre Je doute que tout moteur RE moderne utilise encore les NFA ou les DFA. – Joey

+0

Eh bien, comme un moteur RE peut identifier un sous-ensemble de RE qui sont régulières, et ceux-ci sont d'usage courant, il est logique d'optimiser pour ces scénarios. Il est donc tout à fait possible qu'ils utilisent parfois les NFA ou les DFA. – MSalters

Répondre

5

NFA.

Mastering Regular Expressions de Voir Friedl, 3e édition, chapitre 4 - tableau 4-1, à la page 145.

livres Google a a preview à lui.

+0

Bonne référence. Merci. – Johan

+0

De rien Johan. –

4

Cela devrait prendre moins d'une ms sur un DFA:

$ time python3 -c 'import re; re.match("a?"*25+"a"*25, "a"*25)' 
real 0m7.273s 

Change 25 avec 100 et il ne mettra pas fin à une vie.

Voici à quoi il ressemble sur un DFA (grep):

$ time echo "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |grep "a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
real 0m0.063s 

Il y a une grande discussion sur le sujet http://swtch.com/~rsc/regexp/regexp1.html