Procedure Calls Code Generation in Compiler Design in Hindi | प्रोसीजर कॉल कोड जेनरेशन
Procedure Calls Code Generation in Compiler Design in Hindi | प्रोसीजर कॉल कोड जेनरेशन
प्रोसीजर कॉल (Procedure Call) क्या होता है?
Compiler Design में Procedure Call एक तंत्र है, जिसके माध्यम से एक फंक्शन (Procedure) को कॉल किया जाता है। यह प्रक्रिया फंक्शन के पैरामीटर्स को पास करने, रजिस्टर सेव करने, और रिटर्न एड्रेस को हैंडल करने में सहायक होती है।
Procedure Call में शामिल प्रमुख चरण
प्रोसीजर कॉल में निम्नलिखित मुख्य चरण होते हैं:
- Actual Parameters को पास करना - कॉलिंग फंक्शन से पैरामीटर्स को प्रोसीजर में भेजा जाता है।
- रजिस्टर और एक्टिवेशन रिकॉर्ड सेव करना - आवश्यक डेटा को स्टैक में स्टोर किया जाता है।
- Control Transfer - प्रोसीजर को नियंत्रित करने के लिए जंप किया जाता है।
- 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 Articles
Code Improving Transformations in Compiler Design in Hindi | कोड इंप्रूविंग ट्रांसफॉर्मेशन
कोड इंप्रूविंग ट्रांसफॉर्मेशन (Code Improving Transformation...
Read More →Introduction to Global Data Flow Analysis in Compiler Design in Hindi | ग्लोबल डेटा फ्लो एनालिसिस का परिचय
ग्लोबल डेटा फ्लो एनालिसिस (Global Data Flow Analysis) क्या ह...
Read More →Loop Optimization in Compiler Design in Hindi | लूप ऑप्टिमाइजेशन
लूप ऑप्टिमाइजेशन (Loop Optimization) क्या है? Compiler Design ...
Read More →Dead Code Elimination in Compiler Design in Hindi | डेड कोड एलिमिनेशन
डेड कोड एलिमिनेशन (Dead Code Elimination) क्या है? Compiler Des...
Read More →Loops in Flow Graphs in Compiler Design in Hindi | फ्लो ग्राफ्स में लूप्स
फ्लो ग्राफ में लूप्स (Loops in Flow Graphs) क्या होते हैं?...
Read More →