Lexical Analysis in Compiler Design | लेक्सिकल एनालिसिस क्या है? प्रक्रिया, टोकन, बफरिंग और उदाहरण सहित


लेक्सिकल विश्लेषण (Lexical Analysis in Compiler Design)

Lexical Analysis कंपाइलर की पहली और सबसे महत्वपूर्ण प्रक्रिया है। इस चरण में प्रोग्राम के सोर्स कोड को पढ़कर उसे छोटे-छोटे अर्थपूर्ण हिस्सों में विभाजित किया जाता है जिन्हें Tokens कहा जाता है। यह प्रक्रिया कंपाइलर के अन्य चरणों — जैसे Syntax और Semantic Analysis — की नींव रखती है।

📘 Lexical Analysis क्या है?

Lexical Analysis वह चरण है जिसमें सोर्स कोड को character-by-character पढ़ा जाता है और उसे Tokens में बदला जाता है। यह कार्य Lexical Analyzer या Scanner द्वारा किया जाता है।

🧠 Lexical Analyzer का कार्य:

  • 🔹 सोर्स प्रोग्राम को character stream के रूप में पढ़ना।
  • 🔹 Keywords, Identifiers, Operators, Literals और Delimiters की पहचान करना।
  • 🔹 Unnecessary spaces और comments हटाना।
  • 🔹 प्रत्येक token की जानकारी Symbol Table में store करना।

📗 उदाहरण:

Source Code: a = b + 5;
Output Tokens:
1. id (a)
2. =
3. id (b)
4. +
5. num (5)
6. ;

⚙️ Lexical Analyzer की प्रक्रिया:

  1. Input Buffering: सोर्स कोड को दो buffers में पढ़ा जाता है ताकि characters को आसानी से manage किया जा सके।
  2. Token Generation: Character stream को logical units (tokens) में बाँटा जाता है।
  3. Pattern Recognition: प्रत्येक token को regular expressions से match किया जाता है।
  4. Symbol Table Management: Identifiers और constants की जानकारी symbol table में रखी जाती है।

📊 Lexical Analyzer का आरेख:

Source Program → [Lexical Analyzer] → Tokens → [Syntax Analyzer]

📚 Token, Pattern, और Lexeme:

  • Token: एक logical unit जो प्रोग्राम में एक प्रकार की जानकारी को दर्शाता है (जैसे identifier, keyword)।
  • Pattern: Regular expression जो किसी token की संरचना को परिभाषित करता है।
  • Lexeme: Actual substring जो सोर्स कोड से token के रूप में चुनी जाती है।

उदाहरण:

TokenPatternLexeme
IDLetter(Letter|Digit)*a, b, sum
NUMDigit+5, 20
ASSIGN==
PLUS++

🧩 Input Buffering (इनपुट बफरिंग)

Lexical Analyzer सोर्स कोड को character stream के रूप में पढ़ता है। तेज़ी से characters पढ़ने के लिए दो बफर (buffers) का उपयोग किया जाता है।

Double Buffering Technique:

  • 🔹 Buffer 1: Characters का पहला भाग।
  • 🔹 Buffer 2: Characters का अगला भाग।
  • 🔹 जब Buffer 1 समाप्त होता है, तो Buffer 2 activate हो जाता है।

🧮 Regular Expressions और Finite Automata:

Lexical Analyzer Tokens की पहचान के लिए Regular Expressions और Finite Automata का उपयोग करता है। Regular Expressions भाषा के patterns को परिभाषित करते हैं, जबकि Finite Automata उनका validation करते हैं।

उदाहरण:

Identifier = Letter (Letter | Digit)*
Constant   = Digit+
Operator   = + | - | * | /

📗 Lexical Errors:

अगर किसी token का pattern पहचान में नहीं आता तो Lexical Error उत्पन्न होता है।

उदाहरण:

  • Unknown Symbol → @, #, % आदि।
  • Unterminated String → 'Hello
  • Invalid Number → 99abc

⚙️ Tools for Lexical Analysis:

  • LEX: एक लोकप्रिय lexical analyzer generator जो regular expressions के आधार पर tokens बनाता है।
  • Flex: LEX का उन्नत संस्करण (fast lexical analyzer)।

LEX का उदाहरण:

%%
[0-9]+     { printf("NUMBER\n"); }
[a-zA-Z]+  { printf("IDENTIFIER\n"); }
.          { printf("UNKNOWN\n"); }
%%

🚀 आधुनिक उपयोग (2025 Trends):

  • 🔹 AI-Assisted Token Recognition (Error prediction using ML models)
  • 🔹 Lexical Analysis in JIT Compilers
  • 🔹 Parallel Tokenization in multi-core environments

📙 निष्कर्ष:

Lexical Analysis कंपाइलर का पहला और सबसे महत्वपूर्ण चरण है। यह प्रोग्राम को logical tokens में विभाजित करके compiler के बाकी चरणों के लिए आधार तैयार करता है। 2025 में, Lexical Analysis कृत्रिम बुद्धिमत्ता और स्वचालन (Automation) के उपयोग से और अधिक शक्तिशाली बन गया है।

Related Post