क्रॉस कंपाइलर का टी डायग्राम


9

मैं रेड ड्रैगन बुक कंपाइलर से बूटस्ट्रैपिंग का अध्ययन कर रहा हूं और क्रॉस कंपाइलर के लिए टी आरेख बहुत भ्रामक है। मैं समझ नहीं पा रहा हूं कि "कंपाइलर 2 के माध्यम से रन कंपाइलर 1" का क्या मतलब है। किसी को भी कुछ वास्तविक दुनिया संकलक के साथ संबंधित बेहतर व्याख्या, सादृश्य या एक उदाहरण प्रदान कर सकते हैं?

पहले कुछ संकेतन। द्वारा मैं भाषा के लिए एक संकलक मतलब भाषा में लिखे गए कि पैदा करता है उत्पादन भाषा / मशीन कोड । यह एक समाधि या टी-आरेख हैLSN= यहाँ छवि विवरण दर्ज करेंLSN

एक संकलनकर्ता

  1. मान लें कि हमारे पास मशीन एन के लिए कार्यान्वयन भाषा एस सृजन कोड में एक नई भाषा एल के लिए क्रॉस-कंपाइलर है।

    LSN=
    एलएसएन के लिए टी-आरेख

  2. मान लें कि हमारे पास मशीन एम के लिए एक मौजूदा एस कंपाइलर चल रहा है जो मशीन एम के लिए कोड लागू कर रहा है:

    SMM=
    एसएमएम के लिए टी-आरेख

  3. LMN का उत्पादन करने के लिए SMM के माध्यम से LSN चलाएँ

संकलक निर्माण

LMN=LSN+SMM
एलएमएन = एलएसएन + एसएमएम के लिए टी-आरेख


मैंने कुछ टी-आरेख जोड़े, जो वास्तव में यह समझना आसान बनाते हैं कि क्या हो रहा है। उम्मीद है कि कोई उन्हें बेहतर तरीके से प्रस्तुत कर सकता है।
डेव क्लार्क

जवाबों:


11

टी-आरेख (जिसे आप अपने प्रश्न के मूल संस्करण से हटा चुके थे) इस प्रकार के प्रश्न को समझने के लिए महत्वपूर्ण हैं। आइए आखिरी टी-आरेख देखें।

यहाँ छवि विवरण दर्ज करें

पहले T में S से L से N तक संकलक का वर्णन है।

दूसरा T, S से M में M (या M पर चल रहा है) में एक संकलक का वर्णन करता है। यह आपका कंपाइलर कंपाइलर होगा

दूसरे T को पहले T पर लागू करने वाला पहला T संकलित करता है ताकि यह मशीन M पर चले। परिणाम इस प्रकार L से N तक का संकलक मशीन M पर चल रहा है।

यह तथ्य कि दूसरा T मशीन M पर भी चलता है, यह कैप्चर करता है कि आप मशीन पर कंपाइलर कंपाइलर चला रहे हैं, जिसे आप कंपाइलर चलाएंगे, बजाय इसके कि क्रॉस कंपाइलर का उपयोग किया जाए (जो कि अगर नीचे M अलग थे, तो होगा) )।


5

इसका मतलब है कि हम एसएमएन के साथ एलएसएन संकलित करते हैं, यानी एसएमएन के माध्यम से एलएसएन का स्रोत कोड चलाते हैं।

जब एसएमएम कुछ स्रोत कोड संकलित करता है, तो यह मशीन एम के लिए एक निष्पादन योग्य बनाता है, इसलिए जब हम एसएमएन के साथ एलएसएन संकलित करते हैं तो हम एलएमएन प्राप्त करते हैं - एक निष्पादन योग्य, जो मशीन एम पर एल स्रोत फ़ाइलों को संकलित करता है ताकि मशीन एन के लिए निष्पादनयोग्य का उत्पादन किया जा सके।

शायद इसे एक सादृश्य के साथ समझना आसान होगा। मान लीजिए कि हमारे पास सी संकलक है ccजो कि फोरट्रान में लिखा गया है, जो एआरएम कोड उत्पन्न करता है। मान लीजिए हमारे पास fcहमारे x64 कंप्यूटर पर एक फोरट्रान कंपाइलर है। यदि हम ccस्रोत कोड को संकलित करते हैं तो हमें fcएक प्रोग्राम मिलता है जो x64 पर चलता है, C प्रोग्राम्स को संकलित करता है, लेकिन ARM के लिए निष्पादनयोग्य बनाता है।


0

इसे सरल बनाने के लिए ...।

नोट: याद रखें कंपाइलर केवल निम्न स्तर की भाषा पर चल सकता है।

1 डायग्राम में, कंपाइलर को एचएलएल (हाई लेवल लैंगग) में लिखा जाता है, ताकि यह चल सके कि एक मशीन पर कंपाइलर का कार्यान्वयन लैंग एलएलएल में होना चाहिए।

इसलिए, दूसरे डायग्राम में, कंपाइलर का इंप्लीमेंट लैंगग एक सेल्फ रेजिडेंट कंपाइलर पर चलाया जाता है, ताकि टारगेट कोड अपनी मशीन पर चल सके।

अंत में, दोनों का संकलक एक मशीन पर लैंगग - एम के साथ चलता है

इनपुट लेंग - एल

आउटपुट लैंगग - एन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.