"संदर्भ-मुक्त व्याकरण" शब्द का "संदर्भ-मुक्त" क्या अर्थ है?


55

उस सामग्री की मात्रा को देखते हुए जो यह समझाने की कोशिश करती है कि एक संदर्भ-मुक्त व्याकरण (सीएफजी) क्या है, मुझे यह आश्चर्यजनक लगा कि बहुत कम (मेरे नमूने में, 20 में 1 से कम) इस तरह के व्याकरण को "संदर्भ-" क्यों कहते हैं पर एक स्पष्टीकरण देते हैं। नि: शुल्क"। और, मेरे दिमाग में, कोई भी ऐसा करने में सफल नहीं होता है।

मेरा प्रश्न यह है कि संदर्भ-मुक्त व्याकरण को संदर्भ-मुक्त क्यों कहा जाता है? "संदर्भ" क्या है? मुझे इस बात का आभास था कि संदर्भ वर्तमान में किए गए निर्माण के इर्द-गिर्द अन्य भाषा के निर्माण हो सकते हैं, लेकिन ऐसा नहीं लगता है। क्या कोई सटीक स्पष्टीकरण दे सकता है?


4
सी + + के लिए "सबसे डरावने तोते" को देखें जो आपको सिखाएंगे कि संदर्भ-क्षेत्रहीनता क्यों आसान है
शाफ़्ट सनकी

6
मुझे लगा कि मुझे पता है कि एक संदर्भ-मुक्त व्याकरण तब तक था जब तक कि मैं सिर्फ कुछ गूगली परिभाषाओं को नहीं पढ़ता। अब मेरी इच्छा है कि मेरे पास एक एच-ए-स्केच और एक नरम कंबल हो ... शायद मैं सिर्फ एक अच्छे प्रश्न के लिए बाहर जाऊंगा ... +1। आगे देखिये कुछ समझदार जवाब!
ब्रायन एचएच

आपका अंतर्ज्ञान वह है जो मैं इसे समझता हूं, भले ही "वर्तमान में विश्लेषण किए गए निर्माण के आसपास अन्य भाषा के निर्माण की औपचारिक परिभाषा" उपयुक्त रूप से रहस्यमय हो। लेकिन मुझे यकीन है कि उत्तर के रूप में पोस्ट करने के लिए पर्याप्त नहीं हूं ।
तेलस्टिन

1
कॉन्टेक्स्ट-मुक्त व्याकरण और चॉम्स्की पदानुक्रम पर विकिपीडिया देखें । व्यवहार प्रोग्रामिंग भाषा में पार्सिंग का कुछ संदर्भ होता है, जिसे अक्सर "संदर्भ-मुक्त" (एलआर या एलएल) पार्सिंग के "बाहर" के रूप में संभाला जाता है, उदाहरण के लिए कुछ प्रतीक तालिका, विशेषताओं, या पर्यावरण द्वारा
1922 के आधार पर बेसिल स्टायरेंविच

1
यहाँ, एक xkcd संदर्भ है: xkcd.com/1090
CaptainCodeman

जवाबों:


61

इसका मतलब है कि इसके सभी उत्पादन नियमों में उनके बाएं हाथ में एक भी गैर-टर्मिनल है

उदाहरण के लिए, यह व्याकरण जो मेल खाते हुए कोष्ठकों (")", "() (" "," () ()) (... "...) के संदर्भ को मुक्त करता है:

S → SS
S → (S)
S → ()

हर नियम के बाएं हाथ में एक ही गैर-टर्मिनल होता है (इस मामले में यह हमेशा होता है S, लेकिन अधिक हो सकता है)।

अब इस अन्य व्याकरण पर विचार करें जो रूप के तारों को पहचानता है {a ^ nb ^ nc ^ n: n> = 1} (जैसे "abc", "aabbcc", "aaabbbccc"):

S  → abc
S  → aSBc
cB → WB
WB → WX
WX → BX
BX → Bc
bB → bb

यदि गैर-टर्मिनल Bटर्मिनल / शाब्दिक चरित्र से पहले है c, तो आप उस शब्द को फिर से लिखते हैं, WBलेकिन यदि यह पहले से है b, तो आप bbइसके बजाय विस्तार करते हैं। यह संभवत: प्रसंग-संवेदी व्याकरणों की संदर्भ-संवेदनशीलता के कारण है।

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

यह देखने के लिए कि क्रिया में, आप नेस्टेड कोष्ठकों को बाईं ओर दाईं ओर ले जा सकते हैं और जब भी आप एक मुठभेड़ करते हैं, तो हर बार बाएं कोष्ठक को एक स्टैक पर धकेल कर और एक सही कोष्ठक का सामना करते हुए पॉपिंग कर सकते हैं। यदि आप कभी भी खाली स्टैक से पॉप करने की कोशिश नहीं करते हैं, और स्ट्रिंग के अंत में स्टैक खाली है, तो स्ट्रिंग वैध है।

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

(यदि आप सोच रहे हैं कि एक परिमित स्टेट मशीन क्या पहचान सकती है, तो इसका उत्तर नियमित अभिव्यक्तियाँ हैं। लेकिन कैप्चर समूहों के साथ स्टेरॉइड्स पर रेज़ेक्सेज़ नहीं हैं और कार्यक्रम की भाषाओं में आपके द्वारा देखे जा रहे लुक-बैक / लुक-फॉरवर्ड से मेरा मतलब है कि आप जो बना सकते हैं; जैसे ऑपरेटरों के साथ [abc], |, *, +, और ?। आप देख सकते हैं कि abbbzregex से मेल खाता ab*zअभी स्ट्रिंग और regex में अपनी मौजूदा स्थिति रख कर, कोई ढेर आवश्यक है।)


14
बहुत अच्छी व्याख्या। हालांकि, ट्यूरिंग मशीन का टेप अनंत होने की आवश्यकता नहीं है, केवल असीमित है। या तो अंत में एक टेप-फैक्ट्री हो सकती है, जब मशीन इसमें कूदती है, तो बस अधिक टेप बनाती है। इस तरह, किसी भी समय, यह परिमित है।
माइक डनलैवी

2
@MikeDunlavey स्पष्टीकरण के लिए धन्यवाद, इसे ठीक किया।
डोभाल

10
लेकिन टेप कारखाने को अनंत टेप बनाने की सामग्री, या अनंत टेप बनाने की सामग्री, सामग्री बनाने की आवश्यकता होगी, या ... [स्टैक ओवरफ्लो]
फ्लेमिंगपेंग्जिन

8
@ मेहरदाद: आप दो स्टैक का उपयोग करके किसी भी संख्या में ढेरों का अनुकरण कर सकते हैं: एक ढेर पर एक दूसरे के ऊपर ढेर किए गए सभी ढेर रखें और जब आपको कुछ ढेर तक पहुंचने की आवश्यकता होती है तो ऊपरी ढेर को बंद करें और उन्हें दूसरे ढेर पर धकेल दें। यह साबित करता है कि n> 2 स्टैक 2 स्टैक से अधिक शक्तिशाली नहीं हैं। अब, क्या 2 स्टैक 1 स्टैक से अधिक शक्तिशाली हैं, जो मुझे नहीं पता। मेरा अंतर्ज्ञान नहीं कहता है, लेकिन यह इस बात पर निर्भर करता है कि स्टैक प्राइमेटिक्स क्या हैं।
जोर्ग डब्ल्यू मित्तग

10
@ JörgWMittag: दो स्टैक एक टेप के रूप में अच्छा है। हैंड-वेवी: एक स्टैक का उपयोग टेप के बाएं हाथ की ओर और दूसरे स्टैक को दाएं हाथ की तरफ, अपनी वर्तमान स्थिति के सापेक्ष करें। तो 2-PDA एक ट्यूरिंग मशीन है। आदिम के लिए आपको बस एक स्टैक से एक मूल्य पॉप करने और दूसरे पर पुश करने की आवश्यकता है, जो कि आप अपने टेप के साथ कैसे आगे बढ़ते हैं।
स्टीव जेसप

20

अन्य उत्तर काफी लंबे हैं, भले ही सटीक और सही हो। यह लघु संस्करण है।

यदि आपके पास वर्णों (टर्मिनलों और गैर-वर्णनों) की एक स्ट्रिंग है और आप स्ट्रिंग में एक गैर-विषयक को प्रतिस्थापित करना चाहते हैं, तो एक संदर्भ-मुक्त व्याकरण आपको ऐसा करने की अनुमति देता है, भले ही गैर-वर्णात्मक के आसपास के पात्रों की परवाह किए बिना।

निम्नलिखित नियमों पर विचार करें (लोअरकेस टर्मिनल हैं, अपरकेस नॉनटर्मिनल हैं):

A -> a
AB -> a

पहले नियम में, आप A इसके इर्द-गिर्द दिखाई देने वाले (संदर्भ) की परवाह किए बिना बदल सकते हैं । दूसरे नियम में, आप Aतब तक प्रतिस्थापित नहीं कर सकते जब तक इसका पालन न किया जाए B। जबकि दोनों गैर-मध्यस्थों को उस मामले में प्रतिस्थापित किया जाएगा, महत्वपूर्ण बिंदु यह है कि Aमामले के आसपास के गैर-मध्यस्थ । एक के BAसाथ a, या के Bसाथ प्रतिस्थापित नहीं किया जा सकता है a: केवल इसलिए कि Aएक Bआदेश के बाद, nonterminals का संदर्भ महत्वपूर्ण है। इसका मतलब दूसरे नियम में एक गैर-विषयक मामलों का संदर्भ है, जो इसे संदर्भ-संवेदनशील बनाता है, जबकि पहला नियम संदर्भ-मुक्त है।


यह वास्तव में अच्छी व्याख्या है, हालांकि मैं इसकी सटीकता या पूर्णता के लिए वाउच करने के लिए योग्य नहीं हूं। क्या यह सब वहाँ है?
रिक

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

@Snowman: बहुत crisp.It बेहतर होगा कि आप का कहना है कि "आप के लिए प्राप्त नहीं सकता aसे ABजब तक Aके बाद आता है Bआप को बदल नहीं सकते कहने के बजाय" A"जो संभव नहीं हो सकता, क्योंकि वास्तव में बदल रहे हैं ABनहीं है यह?
जस्टिन

@ अन्याय सही। मैंने इस पर अधिक स्पष्ट होने के लिए अपने उत्तर को अपडेट किया।

@Snowman: क्या आपको बदलने का मतलब है Aया ABदूसरे नियम (संदर्भ-संवेदनशील) में? मुझे लगता है कि आप Aअपने जवाब के अनुसार अभी भी बदलने की कोशिश कर रहे हैं ।
जस्टिन

7

भेद और शब्दावली बेहतर समझने के लिए, यह एक अच्छा विचार एक तरह एक विषय से मुक्त भाषा विपरीत है nn एक तरह एक संदर्भ के प्रति संवेदनशील एक के साथ एन बी एन सी एन । (संकेतन: ए, बी, और सी यहां शाब्दिक हैं और प्रतिपादक n का अर्थ है शाब्दिक n बार, n > 0, का कहना है।) उदाहरण के लिए, aabbcया aabbbccबाद की भाषा में नहीं है, जबकि aabbccहै।

संदर्भ-मुक्त भाषा के लिए एक n n b n n की एक जोड़ी अनुबंधित कर सकती है aऔर bइसके चारों ओर जो भी हो, (भले ही संदर्भ जिस तरह से प्रतीत होता हो) के आसपास अनुबंध कर सकता है और यह सही ढंग से कार्य करेगा, भाषा में केवल तार को स्वीकार करता है और किसी अन्य चीज को अस्वीकार करता है, अर्थात व्याकरण है S -> aSb | ab। ध्यान दें कि उत्पादन (एस) के बाईं ओर कोई टर्मिनल नहीं हैं । (दो उत्पादन नियम हैं, लेकिन हम उन्हें केवल कॉम्पैक्ट रूप से लिख रहे हैं।) स्वीकार करने वाला मूल रूप से एक स्थानीय, संदर्भ-मुक्त निर्णय ले सकता है।

इसके विपरीत, आप कुछ ऐसा नहीं कर सकते हैं कि संदर्भ-संवेदनशील भाषा के लिए n b n c n n हो , क्योंकि बाद के लिए आपको किसी भी तरह का संदर्भ याद रखना चाहिए, यानी आप कितने संकुचन कर रहे हैं, जो आप उन्हें संकुचनों से मिलाने के लिए करते हैं की ई.पू. बाद की भाषा के लिए एक व्याकरण है

S -> abc | aBSc
Ba -> aB
Bb -> bb

ध्यान दें कि आपके पास पिछले दो नियमों में बाईं ओर टर्मिनलों और गैर-टर्मिनलों दोनों हैं। बाईं ओर के टर्मिनलों के संदर्भ में गैर-टर्मिनलों का विस्तार किया जा सकता है।


बूटनोट के बारे में "अनुबंध" बनाम "विस्तार" शब्दावली आदि। हालांकि, औपचारिक व्याकरण हैं [औपचारिक रूप से, हाह] जनरेटिव, जिस तरह से वे वास्तव में पार्सर्स में लागू होते हैं, वास्तव में रिड्यूसिस्ट है, यानी आप एक गैर-टर्मिनल के लिए सब कुछ संपर्क करते हैं, मूल रूप से नियमों को "उल्टा" लागू करना, यही कारण है कि ऊपर दिए गए पहले व्याकरण भी एक कार्यक्रम में व्यावहारिक नहीं है (यह आपको प्रसिद्ध पारी-कम संघर्ष देगा क्योंकि आप तय नहीं कर सकते कि कौन सा नियम लागू करना है), लेकिन उपरोक्त दो व्याकरण संदर्भ-मुक्त और संदर्भ-संवेदनशील के बीच अंतर को स्पष्ट करने के लिए पर्याप्त है। संदर्भ-मुक्त व्याकरण में अस्पष्टता का मुद्दा जटिल है, और वास्तव में इस प्रश्न का विषय नहीं है, इसलिए मैं यहां अधिक कहने वाला नहीं हूं, खासकर जब से यह पता चला है कि विकिपीडिया पर एक अच्छा लेख है। संदर्भ-मुक्त पर इसके लेखों के विपरीत और विशेष रूप से संदर्भ-संवेदनशील भाषा पर एक! @ # $ @! # $ विशेष रूप से यदि आप विषय के लिए नए हैं ... मुझे लगता है कि यह मेरी TODO सूची में अधिक है।


5

ऊपर दिए गए जवाब बहुत अच्छी परिभाषा देते हैं कि यह क्या है। आइए देखें कि क्या मैं इसे अपने शब्दों में रख सकता हूं, ताकि आपके पास 20 के बजाय 23 स्पष्टीकरण होंगे। एक व्याकरण, किसी भी व्याकरण का पूरा उद्देश्य, यह पता लगाना है कि क्या किसी विशेष वाक्य में दी गई भाषा में एक वाक्य है। हालाँकि, हम वास्तव में व्याकरण और पार्सिंग का उपयोग करते हैं, यह पता लगाने के लिए कि वाक्य का क्या अर्थ है। यह एक वाक्य के पुराने आरेख की तरह है जो आपने स्कूल में वापस अंग्रेजी कक्षा में किया हो सकता है या नहीं। एक वाक्य एक विषय भाग और एक विधेय भाग से बना होता है, एक विषय भाग में एक संज्ञा और कुछ विशेषण होते हैं, एक विधेय भाग में एक क्रिया होती है और शायद एक वस्तु संज्ञा होती है, जिसमें कुछ और विशेषण होते हैं, आदि।

यदि अंग्रेजी के लिए एक व्याकरण था (और मुझे नहीं लगता कि कंप्यूटर विज्ञान के अर्थ में नहीं है), तो इसमें निम्नलिखित रूप के नियम होंगे, जिन्हें प्रोडक्शंस कहा जाता है।

Sentence -> SubjectPart PredicatePart
SubjectPart -> Adjective Noun

आदि...

फिर आप एक प्रोग्राम लिख सकते हैं और इसे किसी भी वाक्य को सौंप सकते हैं, और प्रोग्राम व्याकरण का उपयोग यह पता लगाने के लिए कर सकता है कि प्रत्येक शब्द का कौन सा वाक्य है, और उनका एक दूसरे से क्या संबंध है।

यदि प्रत्येक उत्पादन में, बाईं ओर केवल एक चीज होती है, तो इसका मतलब है कि जब भी आप वाक्य में दाईं ओर देखते हैं, तो आपको बाईं ओर स्थानापन्न करने की अनुमति होती है। उदाहरण के लिए जब भी आपने विशेषण संज्ञा को देखा, तो आप उस वाक्यांश के बाहर किसी भी चीज़ पर ध्यान दिए बिना "दैट्स अ सब्जेक्टपार्ट" कह सकते थे।

हालाँकि, अंग्रेज़ी (यहाँ तक कि ऊपर दिया गया अंग्रेजी का सरलीकृत विवरण) भी संदर्भ-संवेदनशील है। "विशेषण संज्ञा" हमेशा एक विषय नहीं है, यह एक PredicatePart में एक NounPhrase हो सकता है। ये संदर्भ पर निर्भर करता है। आइए अपने छद्म अंग्रेजी व्याकरण का थोड़ा विस्तार करें:

Sentence -> SubjectPart PredicatePart
SubjectPart -> Adjective Noun
PredicatePart -> VerbPhrase ObjectNounPhrase
VerbPhrase ObjectNounPhrase -> VerbPhrase Adjective Noun

यदि आप VerbPhrase के ठीक बाद आते हैं, तो आप ObjectNounPhrase में केवल "विशेषण संज्ञा" बना सकते हैं।

मूल रूप से, यदि आपके पास एक उत्पादन है और आप इसे किसी भी समय चाहें तो लागू कर सकते हैं, चाहे जो भी इसे घेरता हो, यह संदर्भ-मुक्त है।

आप हमेशा बता सकते हैं कि क्या कोई व्याकरण आसानी से मुक्त है। बस जांचें कि क्या तीर के बाईं ओर एक से अधिक प्रतीक हैं।

किसी भी भाषा को एक से अधिक व्याकरण द्वारा वर्णित किया जा सकता है। यदि किसी भाषा के लिए कुछ व्याकरण संदर्भ-मुक्त है, तो भाषा संदर्भ-मुक्त है। यह कुछ भाषाओं के लिए साबित हो सकता है कि कोई संदर्भ-मुक्त व्याकरण संभव नहीं है। मुझे लगता है कि ऊपर बताए गए सरल छद्म अंग्रेजी सब्मिट के लिए एक संदर्भ-मुक्त व्याकरण हो सकता है।

क्यों यह मायने रखता है के लिए, यह एक संदर्भ मुक्त व्याकरण पार्स करने के लिए एक सरल प्रकार के कार्यक्रम की आवश्यकता है। जैसा कि अन्य उत्तरों में कहा गया है, संदर्भ-मुक्त व्याकरण को पार्स करने के लिए ट्यूरिंग मशीन की पूरी शक्ति की आवश्यकता नहीं होती है। एक विशेष संदर्भ-मुक्त व्याकरण के लिए एक लुकहेड LR (1) पार्सर (जो एक प्रकार की पुशडाउन मशीन है) उस व्याकरण में किसी भी वाक्य को समय और स्थान रैखिक को वाक्य की लंबाई तक पार कर सकता है। यदि वाक्य भाषा में है, तो पार्सर एक संरचना वृक्ष का निर्माण करेगा जिससे यह पता चलेगा कि वाक्य में प्रत्येक प्रतीक का क्या अर्थ है (या कम से कम यह संरचना में कौन सा भाग निभाता है)। यदि वाक्य व्याकरण में नहीं है, तो पार्सर नोटिस करेगा और पहले प्रतीक पर रोक देगा जो व्याकरण और पूर्ववर्ती प्रतीकों (पहले "त्रुटि" पर) के साथ सामंजस्य करना असंभव है।

इससे भी बेहतर यह है कि ऐसे कार्यक्रम हैं जो आप एक व्याकरण का विवरण दे सकते हैं, और प्रत्येक भाग के साथ क्या करना है, इस बारे में निर्देशों की एक सूची (एक अर्थ में प्रत्येक उत्पादन के लिए "अर्थ" संलग्न करना) और कार्यक्रम पार्सर लिख देगा तुम्हारे लिए। कार्यक्रम वाक्य को पार्स करेगा, संरचना को ढूंढेगा, और संरचना के प्रत्येक भाग पर अपने निर्देशों को चलाएगा। इस तरह के कार्यक्रम को पार्सर-जनरेटर या कंपाइलर-कंपाइलर कहा जाता है।

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

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

हम आम तौर पर संदर्भ-संवेदनशील व्याकरण का उपयोग नहीं करते हैं क्योंकि वे बहुत अधिक खराब समर्थित हैं। मुझे नहीं पता कि संदर्भ-संवेदनशील भाषाओं के लिए LR (k) पार्सर-जनरेटर के बराबर है या नहीं। हां, ट्यूरिंग मशीन (या लीनियर बाउंड मशीन) एक को पार्स कर सकती है, लेकिन मुझे नहीं पता कि ट्यूरिंग मशीन के लिए एक प्रोग्राम में संवेदी-संवेदनशील व्याकरण को बदलने के लिए एक सामान्य एल्गोरिथ्म है, इस अर्थ में कि एक LR (1) ) जनरेटर एक पुशडाउन मशीन के लिए पार्स टेबल बनाता है। मेरा अनुमान है कि जो टेबल पार्सर से गुजरती हैं वे तेजी से बड़ी होंगी। किसी भी मामले में, सीएस छात्रों (जैसे खुद, दिन में वापस) को आमतौर पर संदर्भ-मुक्त व्याकरण और एलआर (1) पार्सर जनरेटर जैसे कि YACC सिखाया जाता है।


-1

संदर्भ-मुक्त व्याकरण उत्पादन नियमों के लिए किसी भी संदर्भ पर विचार नहीं करता है। संदर्भ या तो टर्मिनल या गैर-टर्मिनल हैं।

तो: संदर्भ-मुक्त व्याकरण में उत्पादन नियमों के बाईं ओर केवल एक गैर-टर्मिनल है।


3
यह मौजूदा उत्तरों में क्या जोड़ता है? इसके अलावा, बायीं ओर दो या अधिक गैर-टर्मिनलों के साथ एक उत्पादन नियम संदर्भ मुक्त भी नहीं है।

मुझे लगता है कि दिए गए उत्तर बहुत लंबे हैं। अगर कोई TL जोड़ लेगा? DR, मैं इसे हटा दूंगा।
मार्टिन थोमा

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