
14:58
YACC in Hindi | YACC (Yet Another Compiler Compiler) in Compiler Design
Abhishek Sharma
Overview
यह वीडियो कंपाइलर डिज़ाइन में YACC (Yet Another Compiler Compiler) टूल का परिचय देता है। यह बताता है कि YACC लेक्सर (Lex) टूल के साथ कैसे काम करता है, जो पहले समझाया जा चुका है। वीडियो YACC की वर्किंग, इसके स्पेसिफिकेशन फ़ाइल के सिंटैक्स, और एक उदाहरण प्रोग्राम के माध्यम से इसके उपयोग को विस्तार से बताता है। यह उन मुख्य वेरिएबल्स और फ़ंक्शंस पर भी प्रकाश डालता है जो YACC प्रोग्रामिंग में उपयोग किए जाते हैं, जैसे 'yytext', 'yylval', और 'yywrap'।
How was this?
Save this permanently with flashcards, quizzes, and AI chat
Chapters
- YACC (Yet Another Compiler Compiler) कंपाइलर डिज़ाइन में इस्तेमाल होने वाला एक टूल है।
- यह लेक्सर (Lex) टूल के साथ मिलकर काम करता है, जो पहले की वीडियो में समझाया जा चुका है।
- लेक्सर इनपुट को टोकन में बदलता है, और YACC उन टोकन का उपयोग करके सिंटैक्स एनालिसिस करता है।
यह समझना महत्वपूर्ण है कि YACC कंपाइलर के पार्सिंग चरण में कैसे फिट बैठता है और यह लेक्सर के साथ मिलकर कैसे काम करता है, जो कंपाइलर के निर्माण की नींव है।
लेक्सर टोकन जेनरेट करता है, और YACC उन टोकन को इनपुट के रूप में लेता है।
- YACC की वर्किंग में तीन मुख्य स्टेप्स होते हैं, जो लेक्सर के समान हैं।
- YACC स्पेसिफिकेशन फ़ाइल का एक्सटेंशन '.y' होता है।
- यह फ़ाइल ग्रामर रूल्स और एक्शन्स को डिफाइन करती है, जिन्हें YACC कंपाइलर द्वारा प्रोसेस किया जाता है।
YACC स्पेसिफिकेशन फ़ाइल का स्ट्रक्चर और उसमें ग्रामर रूल्स को डिफाइन करने का तरीका समझना, YACC को प्रभावी ढंग से उपयोग करने के लिए आवश्यक है।
YACC स्पेसिफिकेशन फ़ाइल में ग्रामर रूल्स को 'rule -> body { action }' फॉर्मेट में डिफाइन किया जाता है।
- YACC फ़ाइल का सिंटैक्स लेक्सर फ़ाइल के समान होता है, जिसमें डिक्लेरेशन, रूल्स और सब रूटीन सेक्शन होते हैं।
- डिक्लेरेशन सेक्शन में टोकन और अन्य वेरिएबल्स डिफाइन किए जाते हैं।
- रूल्स सेक्शन में ग्रामर रूल्स और उनसे जुड़े C कोड एक्शन्स होते हैं।
YACC फ़ाइल के सिंटैक्स को समझना यह सुनिश्चित करता है कि आप सही ढंग से ग्रामर और एक्शन्स को डिफाइन कर सकें, जिससे कंपाइलर सही ढंग से काम करे।
डिक्लेरेशन सेक्शन में '%token' का उपयोग करके टोकन डिफाइन किए जाते हैं, और रूल्स सेक्शन में '|' का उपयोग करके वैकल्पिक प्रोडक्शन रूल्स लिखे जाते हैं।
- yytext: यह करंट टोकन को स्टोर करता है।
- yylval: यह टोकन की वैल्यू को स्टोर करता है, जिसे C कोड में इस्तेमाल किया जा सकता है।
- yywrap(): यह फ़ंक्शन तब कॉल होता है जब इनपुट फ़ाइल खत्म हो जाती है; यह 1 रिटर्न करता है यदि और इनपुट नहीं है।
इन वेरिएबल्स और फ़ंक्शंस को जानना YACC प्रोग्राम में डेटा को हैंडल करने और प्रोग्राम के फ्लो को कंट्रोल करने के लिए महत्वपूर्ण है।
yylval का उपयोग करके टोकन की वैल्यू को इंटीजर में कन्वर्ट किया जा सकता है, जैसे yylval = atoi(yytext);
- एक उदाहरण प्रोग्राम दिखाया गया है जो ऐसी स्ट्रिंग को एक्सेप्ट करता है जिसमें समान संख्या में 'a' और 'b' हों।
- इस प्रोग्राम में लेक्सर और YACC दोनों का उपयोग किया गया है।
- प्रोग्राम यह वेरिफाई करता है कि इनपुट स्ट्रिंग ग्रामर के अनुसार है या नहीं।
यह उदाहरण दिखाता है कि YACC का उपयोग करके एक विशिष्ट ग्रामर के लिए पार्सर कैसे बनाया जा सकता है, जो वास्तविक दुनिया के कंपाइलर निर्माण का एक महत्वपूर्ण हिस्सा है।
इनपुट 'aabb' को एक्सेप्ट किया जाएगा क्योंकि इसमें दो 'a' और दो 'b' हैं, जबकि 'aab' को रिजेक्ट कर दिया जाएगा।
Key takeaways
- YACC लेक्सर द्वारा जेनरेट किए गए टोकन का उपयोग करके कंपाइलर में सिंटैक्स एनालिसिस करता है।
- YACC स्पेसिफिकेशन फ़ाइल ('.y') ग्रामर रूल्स और एक्शन्स को डिफाइन करती है।
- YACC फ़ाइल का स्ट्रक्चर लेक्सर फ़ाइल के समान होता है, जिसमें डिक्लेरेशन, रूल्स और सब रूटीन शामिल हैं।
- yytext और yylval जैसे वेरिएबल्स टोकन और उनकी वैल्यू को हैंडल करने के लिए महत्वपूर्ण हैं।
- yywrap() फ़ंक्शन इनपुट के अंत को मैनेज करता है।
- YACC का उपयोग करके, आप एक डिफाइंड ग्रामर के आधार पर इनपुट स्ट्रिंग्स को वेरिफाई करने के लिए पार्सर बना सकते हैं।
Key terms
YACC (Yet Another Compiler Compiler)Compiler DesignLexerParserGrammar RulesTokensyytextyylvalyywrap()Specification File (.y)
Test your understanding
- YACC कंपाइलर डिज़ाइन प्रक्रिया में क्या भूमिका निभाता है और यह लेक्सर से कैसे संबंधित है?
- YACC स्पेसिफिकेशन फ़ाइल का मुख्य उद्देश्य क्या है और इसमें कौन से सेक्शन होते हैं?
- YACC प्रोग्राम में 'yytext' और 'yylval' वेरिएबल्स का क्या उपयोग है?
- YACC का उपयोग करके एक सरल ग्रामर के लिए पार्सर कैसे बनाया जा सकता है, इसका एक उदाहरण दें?
- जब इनपुट स्ट्रीम समाप्त हो जाती है तो YACC में कौन सा फ़ंक्शन महत्वपूर्ण होता है और यह क्या करता है?