लेक्सिकल विश्लेषण क्या है?
लेज़िकल एनेलिसिस कंपाइलर डिज़ाइनिंग का पहला चरण है। एक लेक्सर संशोधित स्रोत कोड लेता है जो वाक्यों के रूप में लिखा जाता है। दूसरे शब्दों में, यह आपको पात्रों के अनुक्रम को टोकन के अनुक्रम में बदलने में मदद करता है। लेक्सिकल विश्लेषक इस वाक्यविन्यास को टोकन की एक श्रृंखला में तोड़ता है। यह स्रोत कोड में लिखे गए किसी भी अतिरिक्त स्थान या टिप्पणी को हटा देता है।
लेक्सिकल विश्लेषण करने वाले प्रोग्राम को लेक्सिकल एनालिसिस या लेक्सर्स कहा जाता है। एक लेसर में टोकन या स्कैनर होता है। यदि लेक्सिकल विश्लेषक यह पता लगाता है कि टोकन अमान्य है, तो यह एक त्रुटि उत्पन्न करता है। यह स्रोत कोड से चरित्र धाराओं को पढ़ता है, कानूनी टोकन के लिए जांच करता है, और जब यह मांग करता है तो डेटा को सिंटैक्स विश्लेषक को पास करता है।
उदाहरण
How Pleasant Is The Weather?
इस उदाहरण को देखें; यहाँ, हम आसानी से पहचान सकते हैं कि वहाँ पाँच शब्द कैसे सुखद हैं, द वेदर, वेदर। यह हमारे लिए बहुत स्वाभाविक है क्योंकि हम विभाजक, रिक्त और विराम चिह्न को पहचान सकते हैं।
HowPl easantIs Th ewe ather?
अब, इस उदाहरण को देखें, हम इसे भी पढ़ सकते हैं। हालाँकि, इसमें कुछ समय लगेगा क्योंकि विभाजकों को ऑड स्थानों में रखा गया है। यह ऐसी चीज नहीं है जो तुरंत आपके पास आती है।
इस ट्यूटोरियल में, आप सीखेंगे
- मूल शब्दावली:
- लेक्सिकल एनालाइज़र आर्किटेक्चर: टोकन कैसे पहचाने जाते हैं
- लेज़िकल एनालाइज़र की भूमिकाएँ
- लेक्रिकल एरर्स
- लेक्सिकल एनालाइजर में त्रुटि रिकवरी
- लेक्सिकल एनालाइजर बनाम पार्सर
- लेक्सिकल और पार्सर को अलग क्यों करें?
- लेक्सिकल विश्लेषण के लाभ
- लेक्सिकल विश्लेषण का नुकसान
बुनियादी शब्दावली
लेक्सेम क्या है?
एक लेक्सेम वर्णों का एक अनुक्रम है जो एक टोकन के मिलान पैटर्न के अनुसार स्रोत कार्यक्रम में शामिल है। यह टोकन के उदाहरण के अलावा कुछ नहीं है।
टोकन क्या है?
टोकन वर्णों का एक क्रम है जो स्रोत कार्यक्रम में सूचना की एक इकाई का प्रतिनिधित्व करता है।
पैटर्न क्या है?
एक पैटर्न एक विवरण है जो टोकन द्वारा उपयोग किया जाता है। एक कीवर्ड के मामले में जो टोकन के रूप में उपयोग करता है, पैटर्न वर्णों का एक क्रम है।
लेक्सिकल एनालाइज़र आर्किटेक्चर: टोकन कैसे पहचाने जाते हैं
लेक्सिकल विश्लेषण का मुख्य कार्य कोड में इनपुट वर्णों को पढ़ना और टोकन का उत्पादन करना है।
लेक्सिकल एनालाइजर प्रोग्राम के पूरे सोर्स कोड को स्कैन करता है। यह एक-एक करके प्रत्येक टोकन की पहचान करता है। आमतौर पर किसी पार्सर द्वारा अनुरोध किए जाने पर ही टोकन का उत्पादन किया जाता है। यहाँ यह कैसे काम करता है-
- "अगला टोकन प्राप्त करें" एक कमांड है जिसे पार्सर से लेक्सिकल एनालाइज़र के लिए भेजा जाता है।
- इस कमांड को प्राप्त करने पर, लेक्सिकल एनालाइज़र इनपुट को स्कैन करता है जब तक कि यह अगले टोकन का पता न लगा ले।
- यह टोकन पार्सर को लौटाता है।
लेक्सिकल एनालाइजर इन टोकन को बनाते समय व्हॉट्सएप और टिप्पणियों को छोड़ देता है। यदि कोई त्रुटि मौजूद है, तो लेक्सिकल विश्लेषक स्रोत फ़ाइल और लाइन नंबर के साथ उस त्रुटि को सहसंबंधित करेगा।
लेज़िकल एनालाइज़र की भूमिकाएँ
लेक्सिकल एनालाइज़र नीचे दिए गए कार्य करता है:
- प्रतीक तालिका में टोकन की पहचान करने में मदद करता है
- स्रोत कार्यक्रम से सफेद रिक्त स्थान और टिप्पणियों को निकालता है
- स्रोत प्रोग्राम के साथ त्रुटि संदेशों को सहसंबंधित करता है
- यदि यह स्रोत प्रोग्राम में पाया जाता है, तो मैक्रोज़ को विस्तारित करने में आपकी सहायता करता है
- स्रोत प्रोग्राम से इनपुट वर्ण पढ़ें
लेक्सिकल विश्लेषण, टोकन, गैर-टोकन का उदाहरण
निम्नलिखित कोड पर विचार करें जो लेक्सिकल एनालाइज़र को खिलाया जाता है
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
टोकन के उदाहरण बनाए गए
शब्दिम | टोकन |
पूर्णांक | कीवर्ड |
ज्यादा से ज्यादा | पहचानकर्ता |
() | ऑपरेटर |
पूर्णांक | कीवर्ड |
एक्स | पहचानकर्ता |
, | ऑपरेटर |
पूर्णांक | कीवर्ड |
य | पहचानकर्ता |
) | ऑपरेटर |
{{ | ऑपरेटर |
अगर | कीवर्ड |
Nontokens के उदाहरण हैं
प्रकार | उदाहरण |
टिप्पणी | // यह 2 नंबरों की तुलना करेगा |
प्रक्रमण करने से पहले के निर्देश | # अलग |
प्रक्रमण करने से पहले के निर्देश | #define NUMS 8,9 |
मैक्रो | एनयूएमएस |
श्वेत रिक्ति | / एन / बी / टी |
लेक्रिकल एरर्स
एक चरित्र अनुक्रम जो किसी भी वैध टोकन में स्कैन करना संभव नहीं है, एक शाब्दिक त्रुटि है। शाब्दिक त्रुटि के बारे में महत्वपूर्ण तथ्य:
- लेक्सिकल त्रुटियां बहुत आम नहीं हैं, लेकिन इसे एक स्कैनर द्वारा प्रबंधित किया जाना चाहिए
- पहचानकर्ताओं, ऑपरेटरों, कीवर्ड की गलत वर्तनी को शाब्दिक त्रुटियों के रूप में माना जाता है
- आमतौर पर, एक शाब्दिक त्रुटि कुछ अवैध चरित्र की उपस्थिति के कारण होती है, ज्यादातर टोकन की शुरुआत में।
लेक्सिकल एनालाइजर में त्रुटि रिकवरी
यहाँ, कुछ सबसे आम त्रुटि पुनर्प्राप्ति तकनीक हैं:
- शेष इनपुट से एक वर्ण निकालता है
- पैनिक मोड में, क्रमिक वर्णों को हमेशा अनदेखा किया जाता है जब तक कि हम एक अच्छी तरह से निर्मित टोकन तक नहीं पहुंच जाते
- शेष इनपुट में लापता चरित्र को सम्मिलित करके
- एक चरित्र को दूसरे वर्ण से बदलें
- दो धारावाहिक पात्रों को स्थानांतरित करें
लेक्सिकल एनालाइजर बनाम पार्सर
लेक्सिकल एनालाइजर | पार्सर |
स्कैन इनपुट प्रोग्राम | वाक्यविन्यास विश्लेषण करें |
टोकन पहचानें | कोड का एक सार प्रतिनिधित्व बनाएँ |
प्रतीक तालिका में टोकन डालें | प्रतीक तालिका प्रविष्टियों को अपडेट करें |
यह शाब्दिक त्रुटियों को उत्पन्न करता है | यह सोर्स कोड का एक पार्स ट्री बनाता है |
लेक्सिकल और पार्सर को अलग क्यों करें?
- डिजाइन की सादगी: यह अवांछित टोकनों को समाप्त करके शाब्दिक विश्लेषण की प्रक्रिया और वाक्यविन्यास विश्लेषण को आसान बनाता है
- संकलक दक्षता में सुधार करने के लिए: संकलक दक्षता में सुधार करने में आपकी सहायता करता है
- विशेषज्ञता: लेक्सिकल विश्लेषण प्रक्रिया को बेहतर बनाने के लिए विशेष तकनीक लागू की जा सकती है
- पोर्टेबिलिटी: केवल स्कैनर को बाहरी दुनिया के साथ संवाद करने की आवश्यकता होती है
- उच्च पोर्टेबिलिटी: इनपुट-डिवाइस-विशिष्ट विशिष्टताओं को लेक्सर तक सीमित रखा गया है
लेक्सिकल विश्लेषण के लाभ
- संकलक बाइनरी निष्पादन योग्य कोड बनाने के लिए प्रोग्रामर के कोड से पार्स किए गए डेटा का उपयोग कर सकते हैं, जैसे प्रोग्राम द्वारा लेक्सिकल एनालाइज़र विधि का उपयोग किया जाता है
- इसका उपयोग वेब ब्राउज़र द्वारा JavsScript, HTML, CSS के पार्स किए गए डेटा की मदद से वेब पेज को फॉर्मेट करने और प्रदर्शित करने के लिए किया जाता है
- एक अलग शाब्दिक विश्लेषक आपको कार्य के लिए एक विशेष और संभावित रूप से अधिक कुशल प्रोसेसर बनाने में मदद करता है
लेक्सिकल विश्लेषण का नुकसान
- आपको स्रोत कार्यक्रम को पढ़ने और इसे टोकन के रूप में विभाजित करने में महत्वपूर्ण समय बिताने की आवश्यकता है
- कुछ नियमित अभिव्यक्तियाँ PEG या EBNF के नियमों की तुलना में समझना काफी कठिन है
- लेसर और उसके टोकन विवरणों को विकसित करने और डिबग करने के लिए अधिक प्रयास की आवश्यकता है
- अतिरिक्त रन ओवरहेड को लेक्सर टेबल बनाने और टोकन के निर्माण की आवश्यकता होती है
सारांश
- संकलक डिजाइन में लेक्सिकल विश्लेषण बहुत पहले चरण में है
- एक लेक्सेम वर्णों का एक अनुक्रम है जो एक टोकन के मिलान पैटर्न के अनुसार स्रोत कार्यक्रम में शामिल किया गया है
- कार्यक्रम के पूरे स्रोत कोड को स्कैन करने के लिए लेक्सिकल एनालाइज़र लागू किया जाता है
- लेक्सिकल विश्लेषक प्रतीक तालिका में टोकन की पहचान करने में मदद करता है
- एक चरित्र अनुक्रम जो किसी भी वैध टोकन में स्कैन करना संभव नहीं है, एक शाब्दिक त्रुटि है
- शेष इनपुट से एक वर्ण को निकालता है उपयोगी त्रुटि पुनर्प्राप्ति विधि
- लेज़र एनालाइज़र इनपुट प्रोग्राम को स्कैन करता है जबकि पार्सर सिंटैक्स विश्लेषण करता है
- यह अवांछित टोकन को समाप्त करके शाब्दिक विश्लेषण और वाक्यविन्यास विश्लेषण की प्रक्रिया को आसान बनाता है
- लेक्सिकल एनालाइज़र का उपयोग वेब ब्राउज़र द्वारा जाव्सस्क्रिप्ट, एचटीएमएल, सीएसएस के पार्स किए गए डेटा की मदद से वेब पेज को प्रारूपित करने और प्रदर्शित करने के लिए किया जाता है।
- लेक्सिकल एनालाइज़र का उपयोग करने का सबसे बड़ा दोष यह है कि इसे अतिरिक्त रनटाइम की आवश्यकता होती है जो लेक्सर टेबल बनाने और टोकन के निर्माण के लिए आवश्यक है