LEX in Compiler Design | LEX टूल क्या है? संरचना, कार्यप्रणाली और उदाहरण सहित पूर्ण व्याख्या


LEX क्या है? (LEX in Compiler Design)

LEX कंपाइलर डिजाइन में एक Lexical Analyzer Generator Tool है जिसका उपयोग स्वचालित रूप से लेक्सिकल एनालाइज़र (Lexical Analyzer) बनाने के लिए किया जाता है। यह Lexical Analysis की प्रक्रिया को आसान बनाता है और Regular Expressions का उपयोग करके Tokens की पहचान करता है। 2025 में भी यह टूल Compiler Construction और Programming Language Development में अत्यधिक प्रासंगिक है।

📘 LEX का परिचय (Introduction to LEX)

LEX (Lexical Analyzer Generator) का निर्माण Mike Lesk और Eric Schmidt द्वारा UNIX सिस्टम के लिए किया गया था। यह Regular Expressions के माध्यम से Tokens को पहचानने वाले C भाषा में आधारित प्रोग्राम्स बनाता है। LEX को अक्सर YACC (Yet Another Compiler Compiler) के साथ Parser Generation के लिए उपयोग किया जाता है।

⚙️ LEX का उद्देश्य (Purpose of LEX)

  • 🔹 Lexical Analyzer को मैन्युअली कोड करने की आवश्यकता समाप्त करता है।
  • 🔹 Regular Expressions के आधार पर Token पहचान को सरल बनाता है।
  • 🔹 Compiler Development की गति और दक्षता बढ़ाता है।

📗 LEX प्रोग्राम की संरचना (Structure of a LEX Program)

एक LEX प्रोग्राम तीन मुख्य भागों में विभाजित होता है:

%{
    /* Declarations Section */
    #include <stdio.h>
%}
%%
    /* Rules Section */
    [0-9]+          { printf("NUMBER\n"); }
    [a-zA-Z]+       { printf("IDENTIFIER\n"); }
    [\n]           { /* newline ignore */ }
%%
int main() {
    yylex();    /* Function call to start lexical analysis */
    return 0;
}

📂 भागों का विवरण:

  • 1️⃣ Declarations Section (%{ %}): इसमें हेडर फाइलें, ग्लोबल वेरिएबल्स और आवश्यक घोषणाएँ शामिल होती हैं।
  • 2️⃣ Rules Section (%% ... %%): इसमें Regular Expressions और उनसे संबंधित actions लिखे जाते हैं।
  • 3️⃣ User Subroutines: इसमें मुख्य प्रोग्राम (main function) और अन्य user-defined functions लिखे जाते हैं।

🧩 LEX का कार्यप्रणाली (Working of LEX)

LEX का कार्य सरल चरणों में विभाजित किया जा सकता है:

  1. Regular Expressions को DFA (Deterministic Finite Automata) में परिवर्तित किया जाता है।
  2. DFA को C कोड के रूप में ट्रांसलेट किया जाता है।
  3. इस कोड को lex.yy.c नामक फाइल में सेव किया जाता है।
  4. उसके बाद, yylex() function input पढ़कर tokens पहचानता है।

📘 LEX का Execution Process:

$ lex sample.l
$ cc lex.yy.c -o sample
$ ./sample < input.txt

📊 Output Example:

यदि input.txt में लिखा है:

sum = a + b;

Output:

IDENTIFIER
ASSIGN
IDENTIFIER
PLUS
IDENTIFIER
SEMICOLON

🧮 Regular Expressions in LEX:

LEX में टोकन्स की पहचान के लिए Regular Expressions का उपयोग किया जाता है।

  • [0-9]+ → Numbers
  • [a-zA-Z]+ → Identifiers
  • \+ | \- | \* | \/ → Operators

⚙️ yylex() Function:

yylex() LEX द्वारा उत्पन्न मुख्य फ़ंक्शन है जो input stream से tokens पढ़ता है और प्रत्येक token से जुड़ी action को execute करता है।

📗 LEX और YACC का संबंध:

LEX केवल lexical analysis करता है जबकि YACC syntax analysis करता है। दोनों को साथ में उपयोग करने से पूर्ण compiler front-end तैयार किया जा सकता है।

LEX → Tokenization → Pass to YACC → Parsing → AST Generation

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

  • 🔹 Cloud-based Compiler Development Platforms में Integration।
  • 🔹 AI-based Lexical Analyzer Generation।
  • 🔹 LEX-to-Python और LEX-to-LLVM Translators।
  • 🔹 Modern variants जैसे FLEX (Fast Lexical Analyzer) का व्यापक उपयोग।

📙 निष्कर्ष:

LEX Compiler Design का एक शक्तिशाली उपकरण है जो token generation और lexical analysis को स्वचालित करता है। यह Compiler Construction, Code Analysis, और Programming Language Research में अब भी महत्वपूर्ण भूमिका निभा रहा है। 2025 में, LEX और उसके modern versions (जैसे FLEX) Machine Learning आधारित compiler tools के लिए आधार बन गए हैं।

Related Post