Syntax Analysis and Context-Free Grammars (CFGs) | वाक्य विश्लेषण और संदर्भ-मुक्त व्याकरण - Compiler Design Notes 2025


वाक्य विश्लेषण और संदर्भ-मुक्त व्याकरण (Syntax Analysis and Context-Free Grammars - CFGs)

Syntax Analysis कंपाइलर का दूसरा प्रमुख चरण है, जो प्रोग्राम की संरचना (structure) की जांच करता है। यह चरण यह सुनिश्चित करता है कि प्रोग्राम के वाक्य (statements) भाषा के नियमों के अनुरूप हैं। इस प्रक्रिया के लिए Context-Free Grammar (CFG) का उपयोग किया जाता है।

📘 Syntax Analysis क्या है?

Syntax Analysis का मुख्य उद्देश्य है — यह जांचना कि टोकन्स का अनुक्रम (sequence of tokens) भाषा के व्याकरण (grammar) के अनुरूप है या नहीं। यह कार्य Parser द्वारा किया जाता है जो एक Parse Tree या Syntax Tree बनाता है।

उदाहरण:

Input Code:  a = b + c * d;
Tokens: ID = ID + ID * ID

Parser इसे Grammar Rules के अनुसार विश्लेषित करता है और निम्नलिखित Parse Tree बनाता है:

        =
      /   
     a     +
          / 
         b   *
            / 
           c   d

🧠 Syntax Analysis के उद्देश्य:

  • 🔹 प्रोग्राम की संरचना की जांच करना।
  • 🔹 Grammar नियमों के अनुसार parsing करना।
  • 🔹 Syntax Errors का पता लगाना।
  • 🔹 Syntax Tree तैयार करना जो अगली stages (Semantic Analysis) के लिए input बने।

⚙️ Syntax Analysis के प्रकार:

  • Top-Down Parsing: रूट से शुरू होकर leaves तक विश्लेषण।
  • Bottom-Up Parsing: Leaves से शुरू होकर रूट तक विश्लेषण।

📗 Context-Free Grammar (CFG) क्या है?

Context-Free Grammar (CFG) एक औपचारिक व्याकरण है जो किसी प्रोग्रामिंग भाषा की वाक्य संरचना को परिभाषित करता है। यह भाषा की वैध संरचनाओं को rule-based तरीके से वर्णित करता है।

CFG की परिभाषा:

CFG को चार घटकों से मिलकर परिभाषित किया जाता है:

G = (V, T, P, S)
  • V: Variables (Non-terminals)
  • T: Terminals (Tokens या Symbols)
  • P: Production Rules
  • S: Start Symbol

उदाहरण:

Arithmetic Expression के लिए एक सरल CFG:

E → E + T | T
T → T * F | F
F → (E) | id

यह grammar इन expressions को स्वीकार करता है:

a + b * c
(a + b) * c

🧩 Parse Tree क्या है?

Parse Tree grammar के आधार पर प्रोग्राम की hierarchical structure को दर्शाता है। प्रत्येक non-terminal एक subtree को दर्शाता है और terminal symbols leaves के रूप में होते हैं।

📊 Parse Tree Example:

E
├── E
│   └── id
├── +
└── T
    ├── T
    │   └── id
    ├── *
    └── F
        └── id

📚 Derivations in Grammar:

  • Leftmost Derivation: हर चरण में सबसे बाएँ non-terminal को expand किया जाता है।
  • Rightmost Derivation: हर चरण में सबसे दाएँ non-terminal को expand किया जाता है।

उदाहरण:

E → E + T → T + T → F + T → id + T → id + F → id + id

⚙️ Ambiguity in CFG:

यदि एक string के लिए एक से अधिक Parse Tree बनाए जा सकते हैं, तो grammar ambiguous कहलाता है।

उदाहरण:

E → E + E | E * E | id

“id + id * id” के लिए दो Parse Trees संभव हैं:

  1. + पहले evaluate हो
  2. * पहले evaluate हो

इस ambiguity को Operator Precedence Rules से हटाया जाता है।

📘 Syntax Errors:

  • 🔹 Missing Semicolon (;)
  • 🔹 Mismatched Parentheses ()
  • 🔹 Unrecognized tokens

🧮 Error Recovery Techniques:

  • Panic Mode: कुछ symbols को छोड़कर आगे बढ़ना।
  • Phrase-Level Recovery: Missing symbol जोड़ना।
  • Error Productions: Grammar में error patterns शामिल करना।
  • Global Correction: न्यूनतम संशोधन द्वारा error सुधार।

🚀 आधुनिक परिप्रेक्ष्य (2025 में CFGs और Parsing):

  • 🔹 LLM (Large Language Models) आधारित grammar correction।
  • 🔹 AI-driven Parser Generation Tools जैसे ANTLR और PEG।
  • 🔹 Incremental Parsing IDEs (VS Code, IntelliJ) में उपयोग।

📙 निष्कर्ष:

Syntax Analysis प्रोग्राम की संरचना समझने और Syntax Errors पकड़ने का सबसे महत्वपूर्ण चरण है। Context-Free Grammars Compiler के लिए एक आधारभूत नियमों का सेट प्रदान करते हैं। 2025 में, AI और ML आधारित आधुनिक Parsers इस प्रक्रिया को और भी तेज़, बुद्धिमान और सटीक बना रहे हैं।

Related Post