एक व्यावहारिक दृष्टिकोण जो कई उदाहरणों में काम करता है [लेकिन हमेशा नहीं, मुझे पता है] भाषा में तारों के घोंसले के ढांचे को खोजने की कोशिश कर रहा है । "नेस्टेड निर्भरता" को स्ट्रिंग के विभिन्न हिस्सों में एक ही समय में उत्पन्न करना होगा।
इसके अलावा हमारे पास मूल टूलबॉक्स है :
संघनन: यदि आप भाषा को दो लगातार भागों में विभाजित कर सकते हैं तो इस उत्पादन का उपयोग करेंS→S1S2
संघ: संबंध तोड़ना भागों में विभाजितS→S1∣S2
यात्रा: S→S1S∣ε
उदाहरण 1
यहां घोंसले के शिकार के लिए एक उदाहरण (धन्यवाद राफेल)।
L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
को 2 l से बदलें । अब हम परिस्थितियों में n छोड़ सकते हैं ।n2ln
बदलें द्वारा कश्मीर > ओ या कश्मीर < ओ (असमंजस में हैं? ओ है 'ओह' नहीं 'शून्य')। संघ के लिए उपकरण लागू करें। हम यहां k > o के साथ काम करते हैं। इसके अलावा k > o iff k = s + o और s > 0 जहां s एक नया चर है। K को s + o से बदलें ।k≠ok>o or k<ook>ok>ok=s+os>0sks+o
L1={bs+oal(bc)ma2lbo∣l,m,o,s∈N,s>0,m≥2}
कुछ सरल पुनर्लेखन।
L1={bbsboalbcbc(bc)m(aa)lbo∣l,m,o,s∈N}
अब हम घोंसले के ढांचे को देखते हैं, और एक व्याकरण का निर्माण शुरू करते हैं।
, T → b U ,(देखें:और पुनरावृत्ति यहाँ)S1→TVT→bUU→bU∣ε
ओ बीV→bVb∣W (हम दोनों तरफ का निर्माण करते हैं)o b
W→aWaa∣X
, वाई → ख ग ख ग , जेड → ख ग Z | εX→YZY→bcbcZ→bcZ∣ε
उदाहरण 2
K={akblcm∣l=m+k}
एक पहले "स्पष्ट" फिर से लिखना।
K={akbm+kcm∣m,k≥0}={akbmbkcm∣m,k≥0}
भाषाविज्ञान में इसे "क्रॉस-सीरियल निर्भरता" कहा जाता है: इंटरलेविंग (आमतौर पर) दृढ़ता से गैर-संदर्भहीनता को इंगित करता है। बेशक m + k = k + m और हम बच गए हैं।k,m,k,mm+k=k+m
K={akbk+mcm∣m,k≥0}={akbkbmcm∣m,k≥0}
प्रस्तुतियों के साथ , एक्स → एक एक्स ख | ε , Y → ख वाई सी | εS→XYX→aXb∣εY→bYc∣ε
इसी तरह K′={akblcm∣m=k+l}={akblclck∣k,l≥0}
साथ प्रस्तुतियों , एक्स → ख एक्स सी | εS→aSc∣XX→bXc∣ε
अंतिम टिप्पणी: ये तकनीकें आपको एक उम्मीदवार के संदर्भ-मुक्त व्याकरण के साथ आने में मदद करती हैं जो आपकी भाषा को अच्छी तरह से पहचानेंगी। एक शुद्धता प्रमाण की अभी भी आवश्यकता हो सकती है, यह सुनिश्चित करने के लिए कि व्याकरण वास्तव में आपकी भाषा को पहचानने के लिए काम करता है (और कुछ नहीं, और कुछ भी कम नहीं)।