2009-11-17 20 views
6

क्या किसी को पता है कि क्या पाइथन (किसी भी संस्करण) ने नियमित अभिव्यक्तियों का मूल्यांकन करने के लिए एनएफए (गैर-निर्धारक फिनिट ऑटोमाटा) का उपयोग किया है या क्या यह किसी अन्य तंत्र का उपयोग करता है? यदि उपलब्ध हो तो लिंक/संदर्भ प्रदान करें।क्या पाइथन फिर से मॉड्यूल में नियमित अभिव्यक्ति मूल्यांकन के लिए एनएफए का उपयोग करता है?

+1

पर विषय का एक बड़ा चर्चा नहीं है के बाद से सबसे आरई इंजन आजकल के लिए गैर नियमित भाषाओं मिलान किया जा करने की अनुमति मुझे संदेह है कि कोई भी आधुनिक आरई इंजन वास्तव में अब भी एनएफए या डीएफए का उपयोग करता है। – Joey

+0

ठीक है, चूंकि एक आरई इंजन नियमित रूप से आरई के उप-समूह की पहचान कर सकता है, और ये सामान्य उपयोग में हैं, इसलिए उन परिदृश्यों के लिए अनुकूलित करना समझ में आता है। तो यह पूरी तरह से संभव है कि वे कभी-कभी एनएफए या डीएफए का उपयोग करते हैं। – MSalters

उत्तर

5

एनएफए।

फ़्रिड्ल के देखें मास्टरिंग रेगुलर एक्सप्रेशन, 3 संस्करण, अध्याय 4 - तालिका 4-1, पेज 145

गूगल पुस्तकों इसे करने के लिए a preview है।

+0

अच्छा संदर्भ। धन्यवाद। – Johan

+0

आपका स्वागत है जोहान। –

4

यह एक DFA पर एक एमएस की तुलना में कम समय लगना चाहिए:

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

100 के साथ बदलें 25 और यह एक जीवन भर के लिए समाप्त नहीं होंगे।

यह इस प्रकार से एक DFA (ग्रेप) पर दिखाई देता है:

$ 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 

http://swtch.com/~rsc/regexp/regexp1.html