यह व्याकरण LL (1) कैसे है?


12

यह ड्रैगन बुक का एक प्रश्न है। यह व्याकरण है:

S→AaAb∣BbBa
A→ε
B→ε

सवाल पूछता है कि यह कैसे दिखाया जाए कि यह एलएल (1) है, लेकिन एसएलआर (1) नहीं।

यह साबित करने के लिए कि यह एलएल (1) है, मैंने इसकी पार्सिंग टेबल बनाने की कोशिश की, लेकिन मुझे एक सेल में कई प्रोडक्शंस मिल रहे हैं, जो कि विरोधाभास है।

कृपया बताएं कि यह एलएल (1) कैसे है, और इसे कैसे साबित किया जाए?


6
मैं व्याकरण से बहुत परिचित नहीं हूँ, लेकिन ऐसा लगता है कि इस व्याकरण की भाषा परिमित है। L={ab,ba}
— Nejc

@Nejc: हाँ ऐसा लगता है!
— विनायक गर्ग

जवाबों:


11

सबसे पहले, अपने प्रोडक्शंस को एक नंबर दें।

1 2 3 4S→AaAb
S→BbBa
A→ε
B→ε

चलो पहले गणना करते हैं और पहले सेट का पालन करते हैं। इन जैसे छोटे उदाहरणों के लिए, इन सेटों के बारे में अंतर्ज्ञान का उपयोग करना पर्याप्त है।

FIRST(S)={a,b}FIRST(A)={}FIRST(B)={}FOLLOW(A)={a,b}FOLLOW(B)={a,b}

अब तालिका की गणना करते हैं । परिभाषा के अनुसार, यदि हम संघर्ष नहीं करते हैं, तो व्याकरण ।LL(1)LL(1)

    a | b |
-----------
S | 1 | 2 |
A | 3 | 3 |
B | 4 | 4 |

जैसा कि कोई संघर्ष नहीं है, व्याकरण ।LL(1)

अब तालिका के लिए। सबसे पहले, ऑटोमेटन।SLR(1)LR(0)

state 0S→∙AaAbS→∙BbBaA→∙B→∙A⟹1B⟹5
state 1S→A∙aAba⟹2
state 2S→Aa∙AbA→∙A⟹3
state 3S→AaA∙bb⟹4
state 4S→AaAb∙b
state 5S→B∙bBab⟹6
state 6S→Bb∙BaB→∙B⟹7
state 7S→BbB∙aa⟹8
state 8S→BbBa∙

और फिर तालिका (मेरा मानना ​​है कि कुछ भी हो सकता है)।SLR(1)S

    a     | b     | A | B |
---------------------------
0 | R3/R4 | R3/R4 | 1 | 5 |
1 | S2    |       |   |   |
2 | R3    | R3    | 3 |   |
3 |       | S4    |   |   |
4 | R1    | R1    |   |   |
5 |       | S4    |   |   |
6 | R4    | R4    |   | 7 |
7 | S8    |       |   |   |
8 | R2    | R2    |   |   |

राज्य 0 में संघर्ष हैं, इसलिए व्याकरण । ध्यान दें कि यदि का उपयोग इसके बजाय किया गया था, तो दोनों संघर्षों को सही ढंग से हल किया जाएगा: राज्य 0 में पर R3 लगेगा और यह R4 लगेगा।SLR(1)LALR(1)a LALR(1)b

यह दिलचस्प सवाल को जन्म देता है कि क्या कोई व्याकरण है जो लेकिन , जो कि मामला है लेकिन इसका उदाहरण खोजना आसान नहीं है।LL(1)LALR(1)


धन्यवाद! मैंने फर्स्ट एंड फॉलो का निर्माण सही तरीके से किया था, लेकिन मैंने टेबल बनाने में गलती की।
— विनायक गर्ग

10

यदि आपसे नहीं पूछा जाता है, तो आपको यह साबित करने के लिए एलएल (1) तालिका का निर्माण करने की आवश्यकता नहीं है कि यह एक एलएल (1) व्याकरण है। जैसा कि एलेक्स ने किया था, आप सिर्फ FIRST / FOLLOW सेट की गणना करें:

FIRST⁡(S)=a,bFIRST⁡(A)=εFIRST⁡(B)=εFOLLOW⁡(A)=a,bFOLLOW⁡(B)=a,b

और फिर, एक एलएल (1) व्याकरण की परिभाषा इस प्रकार है:

  1. यदि और व्याकरण के दो अलग-अलग नियम हैं, तो यह होना चाहिए कि । इसलिए, दो सेटों में कोई सामान्य तत्व नहीं है।A⇒aA⇒bFIRST⁡(a)∩FIRST⁡(b)=∅
  2. किसी भी गैर टर्मिनल प्रतीक के लिए तो तुम हो , तो यह होना चाहिए कि । इसलिए, यदि गैर-टर्मिनल प्रतीक के लिए एक शून्य उत्पादन होता है, तो FIRST और FOLLOW सेट में कोई सामान्य तत्व नहीं हो सकता है।AΑ⇒∗εFIRST⁡(A)∩FOLLOW⁡(A)=∅

तो, दिए गए व्याकरण के लिए:

  1. हमारे पास बाद से जबकि और उनके पास कोई सामान्य तत्व नहीं हैं।FIRST⁡(AaAb)∩FIRST⁡(BbBa)=∅FIRST⁡(AaAb)={a}FIRST⁡(BbBa)={b}
  2. FIRST⁡(A)∩FOLLOW⁡A)=∅ चूंकि जबकि , और अब के बाद से जबकि ।FIRST⁡(A)={a,b}FOLLOW⁡(A)=∅FIRST⁡(B)∩FOLLOW⁡(B)=∅FIRST⁡(B)={ε}FOLLOW⁡(B)={a,b}

एसएलआर (1) विश्लेषण के अनुसार मुझे लगता है कि यह निर्दोष है!


स्वागत हे! इस उत्तर को बेहतर बनाने के लिए, आप हाथ पर व्याकरण के लिए राज्य क्यों लागू नहीं करते हैं?
— राफेल

यहाँ होने पर खुश!! आपके अनुरोध का उत्तर दिया और मुझे लगता है कि मैंने पूरी तरह से स्पष्टीकरण दिया!
— ईथन

धन्यवाद! ध्यान दें कि हम यहां लाटेक्स का उपयोग कर सकते हैं, जैसा कि मैंने आपके मैथ्स के लिए संपादित किया था।
— राफेल

वाह धन्यवाद! यह एक महान व्याख्या है। लेकिन मुझे लगता है कि आवेदन में कुछ गलती है। पहले (ए) = {एप्सिलॉन} नहीं है? मुझे लगता है कि आपने FIRST और FOLLOW की अदला-बदली की।
— विनायक गर्ग

FIRST (A) वास्तव में एप्सिलॉन है, लेकिन जब से आप पूरे सही सदस्य के FIRST सेट की गणना करना चाह रहे हैं, A -> - बस दिखाता है कि हमारे पास एक खाली उत्पादन है और पहला टर्मिनल प्रतीक जिसे आप देखते हैं (और इसलिए इसका पहला सेट)) टर्मिनल सिंबल a। उम्मीद है कि इस मदद की!
— ईथन

0

एक पर्याप्त स्थिति की खोज करें जो एक व्याकरण LL (1) (संकेत: FIRST सेट को देखें) बनाती है।

एक आवश्यक शर्त के लिए खोजें, जो सभी एसएलआर (1) व्याकरणों को मिलनी चाहिए (संकेत: FOLLOW सेट देखें)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.