नीचे दिया गया सारांश "कंपाइलर्स, प्रिंसिपल्स, टेक्निक्स, एंड टूल्स", अहो, लाम, सेठी, उल्मान, (पियर्सन इंटरनेशनल एडिशन, 2007), पेज 1, 2 पर आधारित है, जिसमें मेरे अपने कुछ विचार हैं।
एक कार्यक्रम के प्रसंस्करण के लिए दो बुनियादी तंत्र संकलन और व्याख्या हैं ।
संकलन एक दिए गए भाषा में एक स्रोत कार्यक्रम के रूप में लेता है और लक्ष्य भाषा में एक लक्ष्य कार्यक्रम को आउटपुट करता है।
source program --> | compiler | --> target program
यदि लक्ष्य भाषा मशीन कोड है, तो इसे कुछ प्रोसेसर पर सीधे निष्पादित किया जा सकता है:
input --> | target program | --> output
संकलन में संपूर्ण इनपुट प्रोग्राम (या मॉड्यूल) को स्कैन और अनुवाद करना शामिल है और इसे निष्पादित करना शामिल नहीं है।
व्याख्या स्रोत प्रोग्राम और उसके इनपुट को इनपुट के रूप में लेती है, और स्रोत प्रोग्राम के आउटपुट का उत्पादन करती है
source program, input --> | interpreter | --> output
व्याख्या में आमतौर पर एक बार में एक कथन के प्रसंस्करण (विश्लेषण और निष्पादन) को शामिल किया जाता है।
व्यवहार में, कई भाषा प्रोसेसर दो दृष्टिकोणों के मिश्रण का उपयोग करते हैं। उदाहरण के लिए, जावा कार्यक्रमों को पहले एक मध्यवर्ती कार्यक्रम (बाइट कोड) में अनुवादित (संकलित) किया जाता है:
source program --> | translator | --> intermediate program
इस चरण के आउटपुट को तब वर्चुअल मशीन द्वारा निष्पादित (व्याख्यायित) किया जाता है:
intermediate program + input --> | virtual machine | --> output
आगे भी चीजों को जटिल करने के लिए, JVM बाइट कोड को दूसरे प्रारूप में परिवर्तित करने के लिए रनटाइम पर सिर्फ-इन-टाइम संकलन प्रदर्शन कर सकता है, जिसे तब निष्पादित किया जाता है।
इसके अलावा, जब आप मशीन भाषा को संकलित करते हैं, तब भी आपकी द्विआधारी फ़ाइल को चलाने वाला एक दुभाषिया होता है जिसे अंतर्निहित प्रोसेसर द्वारा कार्यान्वित किया जाता है। इसलिए, इस मामले में भी आप संकलन + व्याख्या के एक संकर का उपयोग कर रहे हैं।
इसलिए, वास्तविक सिस्टम दो के मिश्रण का उपयोग करते हैं, इसलिए यह कहना मुश्किल है कि किसी दिए गए भाषा प्रोसेसर एक संकलक या एक दुभाषिया है, क्योंकि यह संभवतः अपने प्रसंस्करण के विभिन्न चरणों में दोनों तंत्रों का उपयोग करेगा। इस मामले में संभवतः एक और, अधिक तटस्थ शब्द का उपयोग करना अधिक उपयुक्त होगा।
फिर भी, संकलन और व्याख्या दो अलग-अलग प्रकार के प्रसंस्करण हैं, जैसा कि ऊपर दिए गए चित्र में वर्णित है,
प्रारंभिक सवालों के जवाब देने के लिए।
एक कंपाइलर मशीन भाषा बनाएगा जो सीधे भौतिक हार्डवेयर पर चलता है?
जरूरी नहीं कि, कंपाइलर मशीन M1 के लिए लिखे गए प्रोग्राम का अनुवाद किसी मशीन M2 के लिए लिखे गए समकक्ष प्रोग्राम के लिए करे। लक्ष्य मशीन को हार्डवेयर में लागू किया जा सकता है या एक आभासी मशीन हो सकती है। वैचारिक रूप से कोई अंतर नहीं है। महत्वपूर्ण बिंदु यह है कि एक संकलक कोड का एक टुकड़ा देखता है और इसे क्रियान्वित किए बिना किसी अन्य भाषा में अनुवाद करता है।
तो एक दुभाषिया मशीन भाषा का उत्पादन नहीं करता है, लेकिन एक संकलक इसे अपने इनपुट के लिए करता है?
यदि आप उत्पादन करके उत्पादन की बात कर रहे हैं, तो एक संकलक एक लक्ष्य कार्यक्रम का उत्पादन करता है जो मशीन भाषा में हो सकता है, एक दुभाषिया नहीं करता है।