संकलन एक संकलित प्रोग्रामिंग भाषा में लिखे गए कोड से एक निष्पादन योग्य प्रोग्राम बनाने की प्रक्रिया है। कंपाइलिंग कंप्यूटर को प्रोग्राम बनाने और उपयोग किए जाने वाले प्रोग्रामिंग सॉफ़्टवेयर की आवश्यकता के बिना उसे चलाने और समझने की अनुमति देता है। जब कोई प्रोग्राम संकलित किया जाता है तो इसे अक्सर एक विशिष्ट प्लेटफ़ॉर्म (जैसे, IBM प्लेटफ़ॉर्म) के लिए संकलित किया जाता है जो IBM संगत कंप्यूटरों के साथ काम करता है, लेकिन अन्य प्लेटफ़ॉर्म (जैसे, Apple प्लेटफ़ॉर्म) नहीं।
हार्वर्ड मार्क I कंप्यूटर पर काम करते हुए ग्रेस हॉपर द्वारा पहला कंपाइलर विकसित किया गया था। आज, अधिकांश उच्च-स्तरीय भाषाओं में अपने स्वयं के संकलक शामिल होंगे या उनके पास टूलकिट उपलब्ध होंगे जिनका उपयोग कार्यक्रम को संकलित करने के लिए किया जा सकता है। जावा के साथ उपयोग किए गए कंपाइलर का एक अच्छा उदाहरण एक्लिप्स है और सी और सी ++ के साथ उपयोग किए गए कंपाइलर का एक उदाहरण है जीसीसी कमांड। यह कितना बड़ा कार्यक्रम है, इसके आधार पर संकलन करने के लिए कुछ सेकंड या मिनट लगने चाहिए और यदि निष्पादन योग्य फ़ाइल संकलित किए जाने के दौरान कोई त्रुटि सामने नहीं आती है।
एक कंपाइलर एक विशेष कार्यक्रम है जो एक विशेष प्रोग्रामिंग भाषा में लिखे गए बयानों को संसाधित करता है और उन्हें मशीन भाषा या “कोड” में बदल देता है जो कंप्यूटर के प्रोसेसर का उपयोग करता है। आमतौर पर, एक प्रोग्रामर एक संपादक का उपयोग करते हुए एक समय में पास्कल या सी एक लाइन जैसी भाषा में भाषा के बयान लिखता है। जो फ़ाइल बनाई जाती है, उसमें स्रोत कथन कहा जाता है। प्रोग्रामर तब उपयुक्त भाषा संकलक चलाता है, फ़ाइल का नाम निर्दिष्ट करता है जिसमें स्रोत कथन होते हैं।
कंपाइलर एक सॉफ्टवेयर प्रोग्राम है जो उच्च-स्तरीय स्रोत कोड को परिवर्तित करता है जो एक डेवलपर द्वारा उच्च स्तरीय प्रोग्रामिंग भाषा में मशीन भाषा में निम्न स्तर के ऑब्जेक्ट कोड (बाइनरी कोड) में लिखा जाता है, जिसे प्रोसेसर द्वारा समझा जा सकता है। उच्च स्तरीय प्रोग्रामिंग को मशीन भाषा में परिवर्तित करने की प्रक्रिया को संकलन के रूप में जाना जाता है। प्रोसेसर ऑब्जेक्ट कोड को निष्पादित करता है, जो इंगित करता है कि प्रोसेसर के अंकगणितीय तर्क इकाई में बाइनरी हाई और लो सिग्नल की आवश्यकता होती है।
निष्पादित करते समय (चल रहा है), कंपाइलर पहले भाषा के सभी कथनों का विश्लेषण करता है (सभी को एक-दूसरे के बाद और फिर एक या एक से अधिक क्रमिक चरणों में “या” पास करता है), आउटपुट कोड बनाता है, और यह सुनिश्चित करता है कि कथनों को देखें। अन्य कथनों को अंतिम कोड में सही ढंग से संदर्भित किया गया है। परंपरागत रूप से, संकलन के आउटपुट को ऑब्जेक्ट कोड या कभी-कभी ऑब्जेक्ट मॉड्यूल कहा जाता है। (ध्यान दें कि यहां “ऑब्जेक्ट” शब्द ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग से संबंधित नहीं है।) ऑब्जेक्ट कोड मशीन कोड है जो प्रोसेसर एक बार में एक निर्देश निष्पादित कर सकता है।
प्रोग्रामिंग भाषा प्रोसेसर जो उच्च-स्तरीय भाषा (‘स्रोत प्रोग्राम’) में लिखे गए प्रोग्राम का अनुवाद करता है, जिसे मनुष्य मशीन भाषा कार्यक्रम (‘ऑब्जेक्ट प्रोग्राम’) में समझ सकता है, जिसे कंप्यूटर समझ सकते हैं। एक संकलित कार्यक्रम, एक व्याख्या किए गए कार्यक्रम की तुलना में (दुभाषिया देखें), आमतौर पर बहुत तेजी से चलता है (निष्पादित करता है)।
एक कंपाइलर सिस्टम सॉफ्टवेयर (एक कंप्यूटर प्रोग्राम का एक सेट) है जो प्रोग्रामिंग भाषा (स्रोत भाषा, आमतौर पर एचएलएल) में लिखे गए स्रोत कोड को एक अन्य कंप्यूटर भाषा (लक्ष्य भाषा) में परिवर्तित करता है। यह एक विशेष प्रोग्रामिंग भाषा में लिखे गए प्रत्येक कथन को संसाधित करता है और उन्हें मशीन भाषा में बदल देता है। प्रोग्राम लिखने के बाद प्रोग्रामर एक उपयुक्त भाषा संकलक में कोड चलाता है जो फ़ाइल का नाम निर्दिष्ट करता है जिसमें स्रोत कथन होते हैं।
प्रोग्राम को निष्पादित या चलाने के दौरान, कंपाइलर का पहला काम सभी भाषा स्टेटमेंट को एक के बाद एक वाक्यगत रूप से पार्स करना होता है और फिर .obj फाइल का निर्माण और अंत में एग्जीक्यूटेबल फाइल का निर्माण करना होता है (जो कि अंतिम कोड सही होने पर संभव है)। संकलित कोड के आउटपुट को ऑब्जेक्ट कोड या कभी-कभी ऑब्जेक्ट मॉड्यूल कहा जाता है। (यह ध्यान दिया जाना चाहिए कि यह ऑब्जेक्ट फ़ाइल / ऑब्जेक्ट मॉड्यूल OOP से संबंधित नहीं है)।
एक कंपाइलर एक प्रोग्राम है जो कुछ कंप्यूटर आर्किटेक्चर (जैसे इंटेल पेंटियम आर्किटेक्चर) के लिए मशीन कोड में कुछ उच्च-स्तरीय प्रोग्रामिंग भाषा (जैसे जावा) में लिखे गए स्रोत प्रोग्राम का अनुवाद करता है। उत्पन्न मशीन कोड को बाद में हर बार अलग-अलग डेटा के खिलाफ कई बार निष्पादित किया जा सकता है।
एक दुभाषिया एक उच्च-स्तरीय प्रोग्रामिंग भाषा के साथ-साथ इस कार्यक्रम के डेटा के लिए लिखा गया एक निष्पादन योग्य स्रोत कार्यक्रम पढ़ता है, और यह कुछ परिणामों का उत्पादन करने के लिए डेटा के खिलाफ कार्यक्रम चलाता है। एक उदाहरण यूनिक्स शेल दुभाषिया है, जो ऑपरेटिंग सिस्टम कमांड को अंतःक्रियात्मक रूप से चलाता है।