मल्टी-पास कंपाइलर

From alpha
Jump to navigation Jump to search

मल्टी-पास संकलक एक प्रकार का कंपाइलर है जो प्रोग्राम के सोर्स कोड या सार वाक्य रचना का पेड़ को कई बार प्रोसेस करता है। यह वन-पास कंपाइलर के विपरीत है, जो प्रोग्राम को केवल एक बार पार करता है। प्रत्येक पास पिछले पास के परिणाम को इनपुट के रूप में लेता है, और एक मध्यवर्ती आउटपुट बनाता है। इस तरह, (मध्यवर्ती) कोड को पास से पास में सुधार किया जाता है, जब तक कि अंतिम पास अंतिम कोड का उत्पादन नहीं करता।

मल्टी-पास कंपाइलर को कभी-कभी वाइड कंपाइलर कहा जाता है।[citation needed] पास के बड़े दायरे का जिक्र करते हुए: वे इसके एक छोटे से हिस्से के बजाय पूरे कार्यक्रम को संकलित होते हुए देख सकते हैं। इस प्रकार इन कंपाइलरों के लिए उपलब्ध व्यापक दायरा उच्च कंपाइलर समय और मेमोरी खपत की कीमत पर एक-पास कंपाइलर्स के आउटपुट की तुलना में बेहतर कोड जनरेशन (संकलक) (जैसे छोटे कोड आकार, तेज कोड) की अनुमति देता है। इसके अलावा, कुछ प्रोग्रामिंग भाषा को उनके डिजाइन के परिणामस्वरूप एक पास में संकलित नहीं किया जा सकता है।

विशिष्ट बहु-पास संकलक

Multi-passcompiler.png

शाब्दिक विश्लेषण

मल्टी-पास कंपाइलर का यह चरण स्रोत प्रोग्राम से अप्रासंगिक जानकारी को हटाने के लिए है जो सिंटैक्स विश्लेषण उपयोग या व्याख्या करने में सक्षम नहीं होगा। अप्रासंगिक जानकारी में टिप्पणियाँ और खाली स्थान जैसी चीज़ें शामिल हो सकती हैं। अप्रासंगिक जानकारी को हटाने के अलावा, लेक्सिकल विश्लेषण भाषा के लेक्सिकल टोकन को निर्धारित करता है। इस कदम का अर्थ है कि यदि बहु-पास संकलक का उपयोग किया जाता है तो आगे की घोषणा आम तौर पर आवश्यक नहीं होती है। यह चरण वर्णों के अनुक्रम को टोकन में तोड़ने पर केंद्रित है, जैसे कि प्रकार, प्रकार, मूल्य और संभावित रूप से अन्य।

सिंटेक्स विश्लेषण

सिंटेक्स विश्लेषण भाषा के सिंटैक्स नियमों (अक्सर एक संदर्भ-मुक्त व्याकरण के रूप में) को देखने और भाषा के कुछ मध्यवर्ती प्रतिनिधित्व के निर्माण के लिए जिम्मेदार है। इस मध्यवर्ती प्रतिनिधित्व का एक उदाहरण सार सिंटैक्स ट्री या निर्देशित अचक्रीय ग्राफ जैसा कुछ हो सकता है।

सिमेंटिक विश्लेषण

सिमेंटिक एनालिसिस (कंपाइलर्स) सिंटैक्स शब्दार्थ विश्लेषण (संकलक) गए प्रतिनिधित्व को लेता है और सिमेंटिक नियमों को लागू करता है ताकि यह सुनिश्चित हो सके कि प्रोग्राम भाषा के सिमेंटिक नियमों की आवश्यकताओं को पूरा करता है। उदाहरण के लिए, सिमेंटिक विश्लेषण के चरण में नीचे दिए गए उदाहरण में यदि भाषा की आवश्यकता है कि यदि कथन बूलियन अभिव्यक्ति थे तो कंड को यह सुनिश्चित करने के लिए टाइप-चेक किया जाएगा कि यह एक वैध बूलियन अभिव्यक्ति होगी।

<वाक्यविन्यास प्रकाश लैंग = सी> अगर (cond) {

 ...

} अन्य {

 ...

} </वाक्यविन्यास हाइलाइट>

संकलन के इस चरण में सिमेंटिक विश्लेषण करने के अलावा, कोड जनरेशन में सहायता के लिए अक्सर प्रतीक तालिकाएँ बनाए जाते हैं।

कोड जनरेशन

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

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

बहु-पास संकलक के लाभ

मशीन इंडिपेंडेंट: चूंकि मल्टीपल पास में एक मॉड्यूलर स्ट्रक्चर शामिल होता है, और कंपाइलर के अन्य चरणों से अलग कोड जनरेशन होता है, पास को विभिन्न हार्डवेयर/मशीनों के लिए पुन: उपयोग किया जा सकता है।

अधिक अभिव्यंजक भाषाएँ: एकाधिक पास आगे की घोषणाओं की आवश्यकता को कम करते हैं, पारस्परिक पुनरावृत्ति को सुरुचिपूर्ण ढंग से लागू करने की अनुमति देते हैं। एकल पास में संकलित होने की आवश्यकता के कारण आगे की घोषणाओं की आवश्यकता वाले भाषाओं के प्रमुख उदाहरणों में सी (प्रोग्रामिंग भाषा) और पास्कल (प्रोग्रामिंग भाषा) शामिल हैं, जबकि जावा (प्रोग्रामिंग भाषा) में आगे की घोषणाएं नहीं हैं।

संदर्भ

  • Bornat, Richard, Understanding and Writing Compilers: A Do It Yourself Guide, Macmillan Publishing, 1979. ISBN 0-333-21732-2
  • Bent Thomsen, Languages and Compilers SProg og Overseattere, Department of Computer Science, Aalborg University