आप बिल्कुल सही हैं कि डीएफए की तुलना में नियमित अभिव्यक्तियां लिखना आसान है। हालांकि, एक अच्छा सवाल सोचना है के बारे में
इन regex matchers कैसे काम करते हैं?
रेगेक्स मैचर्स का सबसे तेज़ कार्यान्वयन कुछ प्रकार के automaton (या तो एक एनएफए या न्यूनतम-राज्य डीएफए) को आंतरिक रूप से संकलित करके काम करता है। यदि आप रेगेक्स का उपयोग करके काम कर रहे स्कैनर बनाना चाहते थे ताकि वर्णन किया जा सके कि टोकन किस मैच से मेल खाते हैं और फिर उन सभी के माध्यम से लूपिंग करते हैं, तो आप बिल्कुल ऐसा कर सकते हैं, लेकिन आंतरिक रूप से वे शायद डीएफए को संकलित करेंगे।
किसी को वास्तव में स्कैनिंग या पार्सिंग करने के लिए किसी डीएफए को कोड करना बेहद दुर्लभ है क्योंकि यह बहुत जटिल है। यही कारण है कि lex
या flex
जैसे टूल हैं, जो आपको रेगेक्स को मिलान करने के लिए निर्दिष्ट करते हैं और फिर दृश्यों के पीछे स्वचालित रूप से डीएफए को संकलित करते हैं। इस तरह, आप दोनों दुनिया के सर्वश्रेष्ठ प्राप्त करते हैं - आप वर्णन करते हैं कि रेगेक्स के लिए निकर फ्रेमवर्क का उपयोग करके क्या मिलान करना है, लेकिन आपको दृश्यों के पीछे डीएफए की गति और दक्षता मिलती है।
एक विशाल डीएफए बनाने के बारे में एक और महत्वपूर्ण जानकारी यह है कि एक एकल डीएफए बनाना संभव है जो समानांतर में कई अलग-अलग नियमित अभिव्यक्तियों से मेल खाता है। इससे दक्षता बढ़ जाती है, क्योंकि स्ट्रिंग पर मिलान करने वाले डीएफए को इस तरह से चलाना संभव है जो समसामयिक रूप से सभी संभावित रेगेक्स मैचों की खोज करेगा।
आशा है कि इससे मदद मिलती है!
मुख्य कारण यह है कि तालिका संचालित डीएफए प्रोग्राम द्वारा आसानी से उत्पन्न किया जा सकता है (उदाहरण के लिए लेक्स)। –