एक नि: शुल्क व्याकरण क्या है?


104

क्या कोई मुझे समझा सकता है कि एक संदर्भ मुक्त व्याकरण क्या है? औपचारिक व्याकरण पर विकिपीडिया प्रविष्टि और फिर विकिपीडिया प्रविष्टि को देखने के बाद, मुझे पूरी तरह से छोड़ दिया गया और पूरी तरह से परेशान किया गया। क्या कोई इतना दयालु होगा कि यह बता सके कि ये चीजें क्या हैं?

मैं यह सोच रहा हूं क्योंकि मैं पार्सिंग की जांच करना चाहता हूं, और साथ ही, एक रेगेक्स इंजन की सीमा।

मुझे यकीन नहीं है कि ये शब्द सीधे प्रोग्रामिंग से संबंधित हैं, या यदि वे सामान्य रूप से भाषा विज्ञान से अधिक संबंधित हैं। अगर ऐसा है, तो मैं माफी माँगता हूँ, शायद ऐसा हो सकता है?


2
यह अधिक संबंधित हैAutomata Theorem
राहुल

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

1
क्या ऐसे प्रश्नों को सैद्धांतिक कंप्यूटर विज्ञान में नहीं जाना चाहिए?
पेल ब्लू डॉट

जवाबों:


110

एक संदर्भ मुक्त व्याकरण एक व्याकरण है जो कुछ गुणों को संतुष्ट करता है। कंप्यूटर विज्ञान में, व्याकरण भाषाओं का वर्णन करते हैं; विशेष रूप से, वे औपचारिक भाषाओं का वर्णन करते हैं।

एक औपचारिक भाषा सिर्फ एक सेट (वस्तुओं के एक संग्रह के लिए गणितीय शब्द) तार (प्रतीकों के अनुक्रम ... शब्द "स्ट्रिंग" के प्रोग्रामिंग उपयोग के समान है)। एक औपचारिक भाषा का एक सरल उदाहरण लंबाई तीन, {000, 001, 010, 011, 100, 101, 110, 111} के सभी बाइनरी तार का सेट है।

व्याकरण उन परिवर्तनों को परिभाषित करके काम करते हैं जिन्हें आप व्याकरण द्वारा वर्णित भाषा में एक स्ट्रिंग बनाने के लिए कर सकते हैं। व्याकरण कहेंगे कि कैसे एक शुरुआत प्रतीक (आमतौर पर एस) को प्रतीकों के कुछ स्ट्रिंग में बदलना है। पहले दी गई भाषा के लिए एक व्याकरण है:

S -> BBB
B -> 0
B -> 1

इसकी व्याख्या करने का तरीका यह है कि Sइसे प्रतिस्थापित किया जा सकता है BBB, और B0 से बदला जा सकता है, और B1. से बदला जा सकता है। इसलिए स्ट्रिंग 010 के निर्माण के लिए हम कर सकते हैं S -> BBB -> 0BB -> 01B -> 010

एक संदर्भ-मुक्त व्याकरण केवल एक व्याकरण है जहां आप जिस चीज़ को छोड़ रहे हैं (तीर के बाएं) एक एकल "गैर-टर्मिनल" प्रतीक है। एक गैर-टर्मिनल प्रतीक कोई भी प्रतीक है जिसे आप व्याकरण में उपयोग करते हैं जो आपके अंतिम तार में प्रकट नहीं हो सकता है। उपरोक्त व्याकरण में, "S" और "B" गैर-टर्मिनल प्रतीक हैं, और "0" और "1" "टर्मिनल" प्रतीक हैं। व्याकरण पसंद है

S -> AB
AB -> 1
A -> AA
B -> 0

नियमित नहीं हैं क्योंकि उनमें "एबी -> 1" जैसे नियम हैं।


12
'नियमित नहीं' से क्या आपका मतलब 'संदर्भ-मुक्त नहीं' है? (क्योंकि CFGs द्वारा भाषा प्रदर्शनीय नियमित अभिव्यक्ति द्वारा उन प्रदर्शनीय की एक सुपर सेट है)
एंटी पृथ्वी

3
क्या "S को B" पढ़ा जा सकता है "S को BBB द्वारा प्रतिस्थापित किया जा सकता है"?
कॉस्मो हैरिगन

4
अच्छा प्रभु, यह मैंने एसओ पर देखे गए सबसे अच्छे उत्तरों में से एक है।
राफेल डायस दा सिल्वा

1
@AntiEarth दूसरा उदाहरण एक नियमित व्याकरण नहीं है क्योंकि इसमें ऐसे नियम हैं जो एक एकल गैर-प्रतीक चिह्न से दो गैर-टर्मिनल प्रतीक उत्पन्न करते हैं, जिन्हें नियमित व्याकरण में भी अनुमति नहीं है (जैसा कि ओपी ने कहा है, यह कई गैर-प्रतीक प्रतीकों पर नियम नहीं है) छोडा)। en.wikipedia.org/wiki/Regular_grammar
awwsmm

21

भाषा सिद्धांत अभिकलन के सिद्धांत से संबंधित है। कंप्यूटर विज्ञान का और अधिक दार्शनिक पक्ष है, जो यह तय करने के बारे में है कि कौन से कार्यक्रम संभव हैं, या जो कभी भी लिखना संभव होगा, और हल करने के लिए एक एल्गोरिथ्म लिखना किस प्रकार की समस्याएं हैं।

एक नियमित अभिव्यक्ति एक नियमित भाषा का वर्णन करने का एक तरीका है। एक नियमित भाषा एक भाषा है जो एक नियत परिमित ऑटोमोटन द्वारा तय की जा सकती है।

आपको परिमित राज्य मशीनों पर लेख पढ़ना चाहिए: http://en.wikipedia.org/wiki/Finite_state_machine

और नियमित भाषाएं: http://en.wikipedia.org/wiki/Regular_language

सभी रेगुलर लैंग्वेज कॉन्टेक्ट फ्री लैंग्वेज हैं, लेकिन कॉन्टेक्स्ट फ्री लैंग्वेज हैं जो रेगुलर नहीं हैं। एक संदर्भ मुक्त भाषा एक संदर्भ मुक्त ग्रामर या एक पुशडाउन ऑटोमेटा द्वारा स्वीकार किए जाने वाले सभी तार का एक सेट है जो एक एकल स्टैक के साथ एक परिमित राज्य मशीन है: http://en.wikipedia.org/wiki/Pushdown_autadaton#PDA_and_Context-free_Languages

अधिक जटिल भाषाएं हैं जिनके लिए ट्यूरिंग मशीन की आवश्यकता होती है (कोई भी संभावित प्रोग्राम जिसे आप अपने कंप्यूटर पर लिख सकते हैं) यह तय करने के लिए कि कोई स्ट्रिंग भाषा में है या नहीं।

भाषा सिद्धांत भी P बनाम NP समस्या से संबंधित है, और कुछ अन्य रोचक चीजें हैं।

कंप्यूटर साइंस में मेरा परिचय तृतीय वर्ष की पाठ्य पुस्तक इस सामान की व्याख्या करने में बहुत अच्छा था: कम्प्यूटिंग के सिद्धांत का परिचय। माइकल Sipser द्वारा। लेकिन, मुझे इसे खरीदने के लिए $ 160 की तरह खर्च करना पड़ा और यह बहुत बड़ा नहीं है। हो सकता है कि आप एक इस्तेमाल की गई प्रति पा सकते हैं या एक पुस्तकालय में एक प्रति पा सकते हैं या कुछ ऐसा हो सकता है जो आपकी मदद कर सकता है।

संपादित करें:

रेगुलर एक्सप्रेशंस और उच्चतर भाषा कक्षाओं की सीमाओं पर पिछले 50 वर्षों में एक टन शोध किया गया है। आपको नियमित भाषाओं के लिए पम्पिंग लेम्मा में रुचि हो सकती है। यह साबित करने का एक साधन है कि एक निश्चित भाषा नियमित नहीं है:

http://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages

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

एक भाषा भी असंदिग्ध हो सकती है, जिसका अर्थ है कि एक ट्यूरिंग मशीन (जो आपके कंप्यूटर को चला सकती है प्रोग्राम कर सकती है) को यह तय करने के लिए प्रोग्राम नहीं किया जा सकता है कि क्या एक स्ट्रिंग को भाषा के रूप में स्वीकार किया जाना चाहिए या खारिज कर दिया जाना चाहिए।

मुझे लगता है कि आप जिस हिस्से में सबसे अधिक रुचि रखते हैं, वह है फिनेट स्टेट मशीन (दोनों नियतात्मक और नियतात्मक) यह देखने के लिए कि कौन सी भाषाएं एक नियमित अभिव्यक्ति तय कर सकती हैं, और यह साबित करने के लिए पम्पिंग लेम्मा कि कौन सी भाषाएं नियमित नहीं हैं।

मूल रूप से एक भाषा नियमित नहीं होती है अगर उसे किसी प्रकार की मेमोरी या गिनती करने की क्षमता की आवश्यकता होती है। कोष्ठक मिलान की भाषा उदाहरण के लिए नियमित नहीं है क्योंकि मशीन को यह याद रखने की आवश्यकता है कि क्या उसे यह जानने के लिए कि उसे बंद करना है, क्या उसने एक कोष्ठक खोला है।

अक्षर a और b के उपयोग से सभी स्ट्रिंग्स की भाषा जिसमें कम से कम तीन b's होते हैं, एक नियमित भाषा है: a ba ba ba

अक्षर a और b के उपयोग से सभी स्ट्रिंग्स की भाषा जिसमें a की तुलना में अधिक b शामिल है, नियमित नहीं है।

इसके अलावा, आपको यह नहीं समझना चाहिए कि सभी परिमित भाषा नियमित हैं, उदाहरण के लिए:

सभी वर्णों की भाषा 50 अक्षरों से कम लंबे अक्षरों का उपयोग करती है और बी जिसमें एक से अधिक बी होते हैं एक नियमित रूप से होता है, क्योंकि यह परिमित है कि हम जानते हैं कि इसे (b | abb | bab | bba | aabbb। Ababb) के रूप में वर्णित किया जा सकता है। ..) ect तक सभी संभावित संयोजनों को सूचीबद्ध किया गया है।


1
नियमित अभिव्यक्तियाँ ऐसे कार्यक्रमों का निर्णय नहीं लेती हैं जो पैटर्न के विरुद्ध तार से मेल खाते हैं। वे ऐसे भाव हैं जो नियमित सेटों को दर्शाते हैं, जिनके लिए सदस्यता की समस्या कम होती है।
डानपोर्टिन

1
यदि एक सेट नियमित है तो यह स्पष्ट रूप से निर्णायक है। मुझे यकीन नहीं है कि यह कैसे शब्द है। वे प्रभावी रूप से निर्णय कार्यक्रम हैं जिनमें स्मृति नहीं है।
पॉल

आप नियतात्मक परिमित ऑटोमेटा का वर्णन कर रहे हैं, जो नियमित भाषाओं के लिए निर्णय प्रक्रिया प्रदान करते हैं ("निर्णय कार्यक्रम जिसमें स्मृति नहीं है")। नियमित अभिव्यक्ति वे शब्द हैं जो नियमित भाषाओं को निरूपित करते हैं, न कि कार्यक्रम प्रक्रियाएं। यह मेरी एकमात्र शिकायत थी।
डैनपोर्टिन

1
मैंने इसे बदल दिया "एक नियमित अभिव्यक्ति एक नियमित भाषा का वर्णन करने का एक तरीका है। एक नियमित भाषा एक भाषा है जो एक नियत परिमित ऑटोमोटन द्वारा तय की जा सकती है।" क्या यह बेहतर है?
पॉल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.