2009-03-04 13 views
7

पिछले कुछ वर्षों में, "रेगेक्स" पैटर्न मिलान उस बिंदु पर अधिक से अधिक शक्तिशाली हो रहा है जहां मुझे आश्चर्य है: क्या यह वास्तव में केवल संदर्भ-संवेदनशील-व्याकरण मिलान है? क्या यह संदर्भ-मुक्त-व्याकरण मिलान का एक भिन्नता/विस्तार है? यह अभी कहां है और हम इसे क्यों नहीं कहते हैं कि पुरानी, ​​प्रतिबंधित "नियमित अभिव्यक्ति" की बजाय?आधुनिक प्रोग्रामिंग भाषाओं में वास्तव में "संदर्भ संवेदनशील व्याकरण" में "regex" है?

उत्तर

9

विशेष रूप से नियमित, संदर्भ-मुक्त, या संदर्भ-संवेदनशील व्याकरण की तुलना में नियमित अभिव्यक्तियों को नियमित रूप से अधिक जटिल बनाते हैं। नाम ऐतिहासिक रूप से उगाया जाता है (कई शब्द)। विकिपीडिया में this section और पर्ल से देखें।

+0

आप 'नियमित language' और' नियमित expression' के बीच अंतर की व्याख्या कर सकते हैं? –

+1

क्या यह वास्तव में सीएसजी से अधिक शक्तिशाली है? क्या आप एक उदाहरण दे सकते हैं? – notnot

+0

नियमित व्याकरण द्वारा नियमित भाषा का वर्णन किया जा सकता है (http://en.wikipedia.org/wiki/Regular_grammar देखें), जबकि नियमित अभिव्यक्ति एक पैटर्न मिलान करने वाली भाषा है जो कम प्रतिबंधित है और इसलिए प्रक्रिया के लिए अधिक जटिल है। –

3

तरह से मैं इसे देख:

  • नियमित भाषाओं:
    • राज्य मशीन द्वारा मेल खाने वाले। केवल एक चर व्याकरण में वर्तमान "स्थान" का प्रतिनिधित्व करने के लिए मिलान किया जा करने के लिए इस्तेमाल किया जा सकता है: Recursion
    • लागू नहीं किया जा सकता है
  • विषय से मुक्त भाषाओं:
    • ढेर मशीन द्वारा मेल खाने वाले। व्याकरण में वर्तमान "स्थान" को एक या दूसरे रूप में एक ढेर द्वारा दर्शाया जाता है। नहीं कुछ भी है कि
  • संदर्भ के प्रति संवेदनशील भाषाओं से पहले हुई "याद" कर सकते हैं:
    • अधिकांश प्रोग्रामिंग भाषाओं
    • सभी अधिकांश मानव भाषाओं

मैं नियमित रूप से की जानते हो अभिव्यक्ति पार्सर्स जो आपको पार्सर के सामने आने वाले किसी चीज़ के खिलाफ मिलान करने की अनुमति देता है, एक संदर्भ-से कुछ प्राप्त करना nsitive व्याकरण।

फिर भी, नियमित अभिव्यक्ति पारसर्स, हालांकि परिष्कृत वे हो सकता है, नियमों का पुनरावर्ती आवेदन है, जो विषय से मुक्त व्याकरण के लिए एक निश्चित आवश्यकता है के लिए अनुमति नहीं है।

अवधि regex, मेरी राय में, ज्यादातर वाक्य रचना उन नियमित व्याकरण (सितारों और प्रश्न चिह्न) को व्यक्त करने के लिए इस्तेमाल करने के लिए संदर्भित करता है।

+0

लुकहेड/लुकहेंड और नेमिंग निश्चित रूप से मानक नियमित अभिव्यक्तियों के बाहर बैठकर कुछ जोड़ता है - स्मृति। तो क्या हम पीडीए स्तर पर नहीं हैं? – notnot

+1

यह सामान्य रूप से सच नहीं है कि प्राकृतिक भाषा संदर्भ-संवेदनशील है, देखें http://www.eecs.harvard.edu/~shieber/Biblio/Papers/shieber85.pdf –

+0

आह, यह अच्छी चीजें – notnot

3

आधुनिक नियमित अभिव्यक्ति कार्यान्वयन कि classic regular expression definition के नियमों को तोड़ने में सुविधाओं रहे हैं।

उदाहरण Microsoft’s .NET Balancing Group(?<name1-name2> …) के लिए:

^(?:0(?<L>)|1(?<-L>))*(?(L)(?!))$ 

यह करता है से मेल खाते हैं भाषा एल ₀₁ = {ε, 01, 0011, 000,111, ...}। लेकिन यह भाषा Pumping Lemma के अनुसार नियमित नहीं है।

+0

मुझे पता है कि यह क्लासिक रेगेक्स से परे है, लेकिन मैं सोच रहा हूं कि कितना आगे है। ऊपर फैबियन का लिंक दिलचस्प है। – notnot

संबंधित मुद्दे