Procedure Calls Code Generation in Compiler Design in Hindi | प्रोसीजर कॉल कोड जेनरेशन


प्रोसीजर कॉल (Procedure Call) क्या होता है?

Compiler Design में Procedure Call एक तंत्र है, जिसके माध्यम से एक फंक्शन (Procedure) को कॉल किया जाता है। यह प्रक्रिया फंक्शन के पैरामीटर्स को पास करने, रजिस्टर सेव करने, और रिटर्न एड्रेस को हैंडल करने में सहायक होती है।

Procedure Call में शामिल प्रमुख चरण

प्रोसीजर कॉल में निम्नलिखित मुख्य चरण होते हैं:

  1. Actual Parameters को पास करना - कॉलिंग फंक्शन से पैरामीटर्स को प्रोसीजर में भेजा जाता है।
  2. रजिस्टर और एक्टिवेशन रिकॉर्ड सेव करना - आवश्यक डेटा को स्टैक में स्टोर किया जाता है।
  3. Control Transfer - प्रोसीजर को नियंत्रित करने के लिए जंप किया जाता है।
  4. Execution और Return - प्रोसीजर निष्पादित होकर कॉलिंग फंक्शन को कंट्रोल वापस करता है।

Procedure Calls के लिए Code Generation

कंपाइलर द्वारा Procedure Calls को सही ढंग से निष्पादित करने के लिए Intermediate Code Generation किया जाता है।

Example:

मान लीजिए हमारे पास निम्नलिखित C प्रोग्राम है:

int sum(int a, int b) {
    return a + b;
}

void main() {
    int x = sum(10, 20);
}

Intermediate Code Representation:

PUSH 10
PUSH 20
CALL sum
POP x

Procedure Call के लिए Activation Record

प्रत्येक प्रोसीजर कॉल के लिए Activation Record (Stack Frame) बनाया जाता है, जिसमें प्रोसीजर का डेटा संग्रहीत किया जाता है।

Activation Record विवरण
Actual Parameters कॉलिंग फंक्शन द्वारा भेजे गए पैरामीटर्स।
Return Address प्रोसीजर के निष्पादन के बाद वापस जाने का पता।
Local Variables प्रोसीजर में डिफाइंड वेरिएबल्स।
Control Link पिछले एक्टिवेशन रिकॉर्ड का पता।

Parameter Passing Techniques

Procedure Calls के दौरान पैरामीटर्स को पास करने के लिए विभिन्न रणनीतियाँ होती हैं:

1. Call by Value (कॉल बाय वैल्यू)

इसमें पैरामीटर की एक कॉपी प्रोसीजर को भेजी जाती है।

sum(10, 20); // 10 और 20 की कॉपी भेजी जाएगी।

2. Call by Reference (कॉल बाय रेफरेंस)

इसमें पैरामीटर का वास्तविक एड्रेस प्रोसीजर को पास किया जाता है।

sum(&a, &b); // a और b का एड्रेस भेजा जाएगा।

3. Call by Copy-Restore (कॉल बाय कॉपी-रिस्टोर)

इसमें पैरामीटर्स की कॉपी भेजी जाती है और निष्पादन के बाद उनकी नई वैल्यू को मूल वेरिएबल्स में अपडेट किया जाता है।

Procedure Calls के लिए Code Optimization

Procedure Calls के दौरान कुछ विशेष Code Optimization तकनीकों का उपयोग किया जाता है:

  • Inline Expansion: फंक्शन कॉल को हटाकर सीधे कोड को रिप्लेस करना।
  • Register Allocation: पैरामीटर्स को सीधे रजिस्टर में स्टोर करना।
  • Tail Recursion Optimization: रिकर्सिव कॉल्स को लूप्स में बदलना।

निष्कर्ष

Compiler Design में Procedure Call Code Generation एक महत्वपूर्ण चरण है, जिसमें पैरामीटर्स पास करना, एक्टिवेशन रिकॉर्ड बनाना, और Return Address मैनेज करना शामिल होता है। इसके लिए विभिन्न Optimization तकनीकों का उपयोग किया जाता है, जिससे कोड अधिक कुशल बनता है।

Related Post

Comments

Comments