Back Patching in Compiler Design in Hindi | बैक पैचिंग


बैक पैचिंग (Back Patching) क्या है?

Compiler Design में Back Patching एक तकनीक है जिसका उपयोग जंप (Jump) और ब्रांच (Branch) स्टेटमेंट्स को सही टार्गेट एड्रेस से जोड़ने के लिए किया जाता है। यह विशेष रूप से इंटरमीडिएट कोड जनरेशन (Intermediate Code Generation) में उपयोग होता है, जहाँ ब्रांचिंग स्टेटमेंट्स को पहले प्लेसहोल्डर के रूप में रखा जाता है और बाद में वास्तविक पता दिया जाता है।

Back Patching की आवश्यकता

Back Patching निम्नलिखित स्थितियों में आवश्यक होता है:

  • जब Control Flow (जैसे if-else, while, goto) का टार्गेट एड्रेस कोड जनरेशन के समय अज्ञात होता है।
  • जब Intermediate Code को जंप और ब्रांच स्टेटमेंट्स के लिए सही पता सौंपने की आवश्यकता होती है।
  • जब कोड को प्रभावी तरीके से संकलित (compile) और ऑप्टिमाइज़ किया जाता है।

Back Patching की प्रक्रिया

Back Patching को तीन मुख्य चरणों में विभाजित किया जाता है:

  1. सूची बनाएँ (Create List): ब्रांचिंग स्टेटमेंट्स की एक लिस्ट बनाएं जिनके टार्गेट अभी निर्धारित नहीं हैं।
  2. अस्थायी पतों का उपयोग (Use Temporary Addresses): इन स्टेटमेंट्स में अस्थायी पते (dummy labels) का उपयोग करें।
  3. अंतिम पते असाइन करें (Assign Final Addresses): जब सही पते उपलब्ध हों, तो उन अस्थायी पतों को अपडेट करें।

Back Patching का Intermediate Code Representation

Intermediate Code Generation के दौरान Back Patching निम्नलिखित प्रकार से कार्य करता है:

Example:

मान लीजिए हमारे पास निम्नलिखित if-else स्टेटमेंट है:

if (x < y)
    S1;
else
    S2;

Intermediate Code:

L1: if x < y goto _   (Jump Address Unknown)
L2: goto _            (Jump Address Unknown)
L3: S1
L4: goto L5
L5: S2

Back Patching के बाद:

L1: if x < y goto L3
L2: goto L5
L3: S1
L4: goto L6
L5: S2
L6:

Back Patching के लिए उपयोगी सूचियाँ

सूची विवरण
True List (truelist) उन सभी स्टेटमेंट्स की सूची जहाँ कंडीशन सही होने पर ब्रांच होना चाहिए।
False List (falselist) उन सभी स्टेटमेंट्स की सूची जहाँ कंडीशन गलत होने पर ब्रांच होना चाहिए।
Next List (nextlist) उन सभी स्टेटमेंट्स की सूची जिन्हें अंतिम रूप से भरा जाना बाकी है।

Back Patching के लाभ

लाभ विवरण
डायनामिक एड्रेसिंग यह कंपाइलर को रनटाइम पर ब्रांचिंग टार्गेट्स को अपडेट करने की अनुमति देता है।
सिंपल और प्रभावी यह सिंपल डेटा स्ट्रक्चर और लिंक्स का उपयोग करता है।
बेहतर ऑप्टिमाइज़ेशन यह कोड जेनरेशन को अधिक कुशल बनाता है।

निष्कर्ष

Compiler Design में Back Patching एक आवश्यक तकनीक है जो जंप और ब्रांचिंग स्टेटमेंट्स को सही एड्रेस से जोड़ने में मदद करती है। यह विधि कोड जनरेशन के दौरान सही टार्गेट लोकेशन को भरने के लिए True List, False List, और Next List जैसी सूचियों का उपयोग करती है।

Related Post