कांटैक्स्ट फ्री लैंग्वेज

औपचारिक भाषा सिद्धांत में, संदर्भ-मुक्त भाषा (सीएफएल) संदर्भ-मुक्त व्याकरण (सीएफजी) द्वारा उत्पन्न औपचारिक भाषा है।

प्रोग्रामिंग भाषाओं में संदर्भ-मुक्त भाषाओं के कई अनुप्रयोग होते हैं, विशेष रूप से, अधिकांश अंकगणितीय अभिव्यक्तियाँ संदर्भ-मुक्त व्याकरणों द्वारा उत्पन्न होती हैं।

संदर्भ-मुक्त व्याकरण
विभिन्न संदर्भ-मुक्त व्याकरण ही संदर्भ-मुक्त भाषा उत्पन्न कर सकते हैं। भाषा का वर्णन करने वाले कई व्याकरणों की तुलना करके भाषा के आंतरिक गुणों को किसी विशेष व्याकरण के बाहरी गुणों से अलग किया जा सकता है।

ऑटोमेटा
सभी संदर्भ-मुक्त भाषाओं का सेट पुशडाउन ऑटोमेटा द्वारा स्वीकृत भाषाओं के सेट के समान है, जो इन भाषाओं को पार्सिंग के लिए उत्तरदायी बनाता है। इसके अलावा, किसी दिए गए सीएफजी के लिए, व्याकरण (और इस प्रकार संबंधित भाषा) के लिए पुशडाउन ऑटोमेटन का उत्पादन करने का सीधा तरीका है, हालांकि दूसरे तरीके से जाना (एक ऑटोमेटन दिए गए व्याकरण का निर्माण करना) उतना सीधा नहीं है।

उदाहरण
संदर्भ-मुक्त भाषा का उदाहरण है $$L = \{a^nb^n:n\geq1\}$$, सभी गैर-रिक्त सम-लंबाई वाले तारों की भाषा, जिनके पूरे पहले भाग हैं $a$'s, और जिसके पूरे दूसरे भाग हैं $b$'एस। $L$ व्याकरण द्वारा उत्पन्न होता है $$S\to aSb ~|~ ab$$. यह भाषा नियमित भाषा नहीं है. इसे पुशडाउन ऑटोमेटन#औपचारिक परिभाषा द्वारा स्वीकार किया जाता है $$M=(\{q_0,q_1,q_f\}, \{a,b\}, \{a,z\}, \delta, q_0, z, \{q_f\})$$ कहाँ $$\delta$$ को इस प्रकार परिभाषित किया गया है:
 * $$\begin{align}

\delta(q_0, a, z) &= (q_0, az) \\ \delta(q_0, a, a) &= (q_0, aa) \\ \delta(q_0, b, a) &= (q_1, \varepsilon) \\ \delta(q_1, b, a) &= (q_1, \varepsilon) \\ \delta(q_1, \varepsilon, z) &= (q_f, \varepsilon) \end{align}$$ असंदिग्ध सीएफएल सभी सीएफएल का उचित उपसमूह हैं: स्वाभाविक रूप से अस्पष्ट भाषा सीएफएल हैं। स्वाभाविक रूप से अस्पष्ट सीएफएल का उदाहरण संघ है $$\{a^n b^m c^m d^n | n, m > 0\}$$ साथ $$\{a^n b^n c^m d^m | n, m > 0\}$$. यह सेट संदर्भ-मुक्त है, क्योंकि दो संदर्भ-मुक्त भाषाओं का मिलन हमेशा संदर्भ-मुक्त होता है। लेकिन (गैर-संदर्भ-मुक्त) उपसमुच्चय में स्ट्रिंग्स को स्पष्ट रूप से पार्स करने का कोई तरीका नहीं है $$\{a^n b^n c^n d^n | n > 0\}$$ जो इन दोनों भाषाओं का प्रतिच्छेदन है।

डाइक भाषा
डाइक भाषा व्याकरण द्वारा उत्पन्न होती है $$S\to SS ~|~ (S) ~|~ \varepsilon$$.

संदर्भ-मुक्त पार्सिंग
भाषा की संदर्भ-मुक्त प्रकृति पुशडाउन ऑटोमेटन के साथ पार्स करना आसान बनाती है।

सदस्यता समस्या का उदाहरण निर्धारित करना; यानी स्ट्रिंग दी गई है $$w$$, पता लगाएं कि क्या $$w \in L(G)$$ कहाँ $$L$$ किसी दिए गए व्याकरण द्वारा उत्पन्न भाषा है $$G$$; मान्यता के रूप में भी जाना जाता है। चॉम्स्की सामान्य रूप व्याकरण के लिए संदर्भ-मुक्त मान्यता लेस्ली वैलिएंट द्वारा दिखाई गई थी|लेस्ली जी. वैलिएंट को बूलियन मैट्रिक्स गुणन के लिए कम किया जा सकता है, इस प्रकार इसकी जटिलता बिग ओ नोटेशन की ऊपरी सीमा को विरासत में मिली है।2.3728596). इसके विपरीत, लिलियन ली (कंप्यूटर वैज्ञानिक) ने O(n) दिखाया है3−ε) बूलियन मैट्रिक्स गुणन को O(n) तक कम किया जा सकता है3−3ε) सीएफजी पार्सिंग, इस प्रकार बाद के लिए कुछ प्रकार की निचली सीमा स्थापित करता है। संदर्भ-मुक्त भाषाओं के व्यावहारिक उपयोग के लिए व्युत्पत्ति वृक्ष तैयार करने की भी आवश्यकता होती है जो उस संरचना को प्रदर्शित करता है जिसे व्याकरण दिए गए स्ट्रिंग के साथ जोड़ता है। इस पेड़ के उत्पादन की प्रक्रिया को पदच्छेद कहा जाता है। ज्ञात पार्सर्स में समय जटिलता होती है जो पार्स की गई स्ट्रिंग के आकार में घन होती है।

औपचारिक रूप से, सभी संदर्भ-मुक्त भाषाओं का सेट पुशडाउन ऑटोमेटा (पीडीए) द्वारा स्वीकृत भाषाओं के सेट के समान है। संदर्भ-मुक्त भाषाओं के लिए पार्सर एल्गोरिदम में CYK एल्गोरिदम और अर्ली पार्सर|अर्ली CYK एल्गोरिथ्म शामिल हैं।

संदर्भ-मुक्त भाषाओं का विशेष उपवर्ग नियतात्मक संदर्भ-मुक्त भाषाएं हैं जिन्हें नियतात्मक पुशडाउन ऑटोमेटन द्वारा स्वीकृत भाषाओं के सेट के रूप में परिभाषित किया गया है और एलआर पार्सर | एलआर (के) पार्सर द्वारा पार्स किया जा सकता है। व्याकरण और पार्सर के वैकल्पिक दृष्टिकोण के रूप में अभिव्यक्ति व्याकरण को पार्स करना भी देखें।

बंद गुण
संदर्भ-मुक्त भाषाओं का वर्ग निम्नलिखित परिचालनों के तहत बंद (गणित) है। अर्थात्, यदि एल और पी संदर्भ-मुक्त भाषाएँ हैं, तो निम्नलिखित भाषाएँ भी संदर्भ-मुक्त हैं:
 * संघ (सेट सिद्धांत) $$L \cup P$$ एल और पी का
 * एल का उलटा होना
 * संयोजन $$L \cdot P$$ एल और पी का
 * क्लेन स्टार $$L^*$$ एल का
 * छवि $$\varphi(L)$$ स्ट्रिंग ऑपरेशंस#स्ट्रिंग होमोमोर्फिज्म के तहत एल का $$\varphi$$
 * छवि $$\varphi^{-1}(L)$$ स्ट्रिंग ऑपरेशंस#स्ट्रिंग होमोमोर्फिज्म के तहत एल का $$\varphi^{-1}$$
 * वृत्ताकार बदलाव#एल (भाषा) के अनुप्रयोग $$\{vu : uv \in L \}$$)
 * एल का उपसर्ग समापन (एल से स्ट्रिंग के सभी उपसर्ग (कंप्यूटर विज्ञान) का सेट)
 * औपचारिक भाषा का भागफल L/R का L द्वारा नियमित भाषा R

प्रतिच्छेदन, पूरक और अंतर के अंतर्गत असंबद्धता
संदर्भ-मुक्त भाषाएँ प्रतिच्छेदन के अंतर्गत बंद नहीं होती हैं। इसे भाषाओं को लेकर देखा जा सकता है $$A = \{a^n b^n c^m \mid m, n \geq 0 \}$$ और $$B = \{a^m b^n c^n \mid m,n \geq 0\}$$, जो दोनों संदर्भ-मुक्त हैं। उनका चौराहा है $$A \cap B = \{ a^n b^n c^n \mid n \geq 0\}$$, जिसे संदर्भ-मुक्त भाषाओं के लिए पंपिंग लेम्मा द्वारा गैर-संदर्भ-मुक्त दिखाया जा सकता है। परिणामस्वरूप, संदर्भ-मुक्त भाषाओं को पूरकता के तहत बंद नहीं किया जा सकता है, क्योंकि किसी भी भाषा ए और बी के लिए, उनके प्रतिच्छेदन को संघ और पूरक द्वारा व्यक्त किया जा सकता है: $$A \cap B = \overline{\overline{A} \cup \overline{B}} $$. विशेष रूप से, संदर्भ-मुक्त भाषा को अंतर के अंतर्गत बंद नहीं किया जा सकता है, क्योंकि पूरक को अंतर द्वारा व्यक्त किया जा सकता है: $$\overline{L} = \Sigma^* \setminus L$$. हालाँकि, यदि L संदर्भ-मुक्त भाषा है और D नियमित भाषा है तो दोनों का प्रतिच्छेदन होता है $$L\cap D$$ और उनका अंतर $$L\setminus D$$ संदर्भ-मुक्त भाषाएँ हैं।

निर्णायकता
औपचारिक भाषा सिद्धांत में, नियमित भाषाओं के बारे में प्रश्न आमतौर पर निर्णय लेने योग्य होते हैं, लेकिन संदर्भ-मुक्त भाषाओं के बारे में अक्सर नहीं होते हैं। यह तय करने योग्य है कि क्या ऐसी भाषा सीमित है, लेकिन यह नहीं कि क्या इसमें हर संभव स्ट्रिंग शामिल है, नियमित है, असंदिग्ध है, या अलग व्याकरण वाली भाषा के बराबर है।

निम्नलिखित समस्याएँ मनमाने ढंग से दिए गए संदर्भ-मुक्त व्याकरण ए और बी के लिए अनिर्णीत समस्या हैं:
 * समतुल्यता: है $$L(A)=L(B)$$?
 * असंगति: है $$L(A) \cap L(B) = \emptyset $$ ? हालाँकि, संदर्भ-मुक्त भाषा और नियमित भाषा का प्रतिच्छेदन संदर्भ-मुक्त होता है, इसलिए समस्या का वह प्रकार जहां बी नियमित व्याकरण है, निर्णय योग्य है (नीचे शून्यता देखें)।
 * नियंत्रण: है $$L(A) \subseteq L(B)$$ ? फिर, समस्या का वह प्रकार जहां बी नियमित व्याकरण है, निर्णय योग्य है, जबकि जहां ए नियमित है वह आम तौर पर नहीं है।
 * सार्वभौमिकता: है $$L(A)=\Sigma^*$$?
 * नियमितता: है $$L(A)$$ नियमित भाषा?
 * अस्पष्टता: प्रत्येक व्याकरण के लिए है $$L(A)$$ अस्पष्ट?

मनमानी संदर्भ-मुक्त भाषाओं के लिए निम्नलिखित समस्याएं निर्णय योग्य हैं:
 * शून्यता: संदर्भ-मुक्त व्याकरण ए दिया गया है $$L(A) = \emptyset$$ ?
 * परिमितता: संदर्भ-मुक्त व्याकरण ए दिया गया है $$L(A)$$ परिमित?
 * सदस्यता: संदर्भ-मुक्त व्याकरण जी, और शब्द दिया गया $$w$$, करता है $$w \in L(G)$$ ? सदस्यता समस्या के लिए कुशल बहुपद-समय एल्गोरिदम CYK एल्गोरिदम और अर्ली पार्सर|अर्ली का एल्गोरिदम हैं।

होपक्रॉफ्ट, मोटवानी, उल्मन (2003) के अनुसार, येहोशुआ बार-हिलेल|बार-हिलेल, पर्ल्स और शमीर के 1961 के पेपर में संदर्भ-मुक्त भाषाओं के कई मौलिक समापन और (अन)निर्णय गुणों को दिखाया गया था।

ऐसी भाषाएँ जो संदर्भ-मुक्त नहीं हैं
सेट $$\{a^n b^n c^n d^n | n > 0\}$$ संदर्भ-संवेदनशील भाषा है, लेकिन इस भाषा को उत्पन्न करने वाला कोई संदर्भ-मुक्त व्याकरण मौजूद नहीं है। इसलिए संदर्भ-संवेदनशील भाषाएँ मौजूद हैं जो संदर्भ-मुक्त नहीं हैं। यह साबित करने के लिए कि कोई दी गई भाषा संदर्भ-मुक्त नहीं है, कोई संदर्भ-मुक्त भाषाओं के लिए पंपिंग लेम्मा का उपयोग कर सकता है या कई अन्य विधियाँ, जैसे ओग्डेन की लेम्मा या पारिख की प्रमेय।