সাধারনত একটা কম্পাইল্ড ল্যাংগুয়েজের ক্ষেত্রে সোর্স কোড থেকে এক্সিকিউট্যাবল প্রোগ্রাম কয়েকটা প্রোগ্রামের মাধ্যমে করা হয় ।এগুলো হল – ল্যাংগুয়েজ প্রিপ্রসেসর , কম্পাইলার , এ্যাসেম্বলার এবং লিংকার-লোডার।
প্রিপ্রসেসর প্রোগ্রামটা অসম্পূর্ন সোর্স প্রোগ্রামকে পরিপূর্নভাবে সম্পূর্ন করে প্রস্তুত করে। যেমন- সি/সি++ এর ক্ষেত্রে আমরা যেসব হেডার ফাইল ইউজ করি বা জাভায় যে প্যাকেজ ইউজ করি , সেগুলোকে সোর্স প্রোগ্রামের সাথে যুক্ত করে দেয়া। ম্যাক্রো ইউজ করলে সেগুলো রিপ্লেস করে পুরো কোড বসিয়ে দেয়া। সোর্স প্রোগ্রাম মাল্টিপল ফাইলের হলে সেগুলোকে একত্রে করা ইত্যাদি।
এরপর শুরু হয় কম্পাইলারের আসল কাজ। কম্পাইলার পুরো একটা প্রোগ্রামকে কয়েকটা পর্যায়ে পর্যায়ক্রমে মেশিন ভাষায় রূপান্তর করে। এইপর্যায়গুলো হলো –
- ল্যাক্সিক্যাল এ্যানালাইসিস
- সিনট্যাক্স এ্যানালাইসিস
- সিম্যানটিক এ্যানালাইসিস
- ইন্টারমিডিয়েট কোড জেনারেশন
- কোড অপটিমাইজেশন
- কোড জেনারেশন
এগুলো একটা পর্যায়ে গিয়ে তার পূর্ববর্তী পর্যায়ের আউটপুট নিয়ে কাজ করা হয়। কম্পাইলারের এই পর্যায়গুলোকেও আবার দুই অংশে ভাগ করা যায় –
- ফ্রন্ট এন্ড বা এ্যানালাইসিস অংশ
- ব্যাক এন্ড বা সিনথেসিস অংশ
প্রথম দিকের ল্যাক্সিক্যাল এ্যানালাইসিস, সিনট্যাক্স এ্যানালাইসিস, সিম্যানটিক এ্যানালাইসিস এই পর্যায়গুলোকে একসাথে নিয়ে কম্পাইলারের এ্যানালাইসিস পার্ট বা ফ্রন্ট এ্ন্ড তৈরি হয়। এই ফ্রন্ড এন্ডে কম্পাইলার সোর্স প্রোগ্রামকে ভেংগে মধ্যবর্তীকালিন কিছু কাঠামোতে রূপান্তর করে এবং “সিম্বল টেবিল” তৈরি করে,যেখানে প্রোগ্রাম এর ভেরিয়েবলের ডাটাগুলো থাকে। এর পরের ব্যাক ইন্ড বা সিনথেসিস পার্টে কম্পাইলার সেই মধ্যবর্তিকালিন কাঠামো এবং সিম্বল টেবিলের ডাটা নিয়ে ধাপে ধাপে টার্গেট প্রোগ্রাম এ রূপান্তর করে।এই মধ্যবর্তীকালিন কাঠামোগুলো প্রধানত ২ ধরনের হয় –
- ট্রি টাইপ – পার্স ট্রি বা সিম্বল ট্রি বা এ্যাবস্ট্রাক্ট সিম্বল ট্রি
- ইন্টারমিডিয়েট কোড – যেমন থ্রি এ্যাড্রেস কোড
এছাড়াও কম্পাইলার কয়েকটা পর্যায় মিলে কিছু দলগত “পাস” তৈরি করে কাজ করতে পারে,যেখানে একটা পাস একটা নির্দিষ্ট ফাইল থেকে রিড করবে এবং একটা নির্দিষ্ট ফাইলেই আউটপুট রাইট করবে।
এভাবে বিভিন্ন পর্যায় শেষে কোড জেনারেশন পর্যায় পর্যন্ত গিয়ে কম্পাইলার যদি কোন এরর না পায়,তাহলে এ্যাসেম্বলি কোড জেনারেট হয়ে যায়। আর এরর পেলে সেই এরর মেসেজ গুলো আউটপুট দেয়।
এরপর কাজ করে এ্যাসেম্বলার। এ্যাসেম্বলার নরমালি সেই এ্যাসেম্বলি কোডকে মেশিন বাইনারি তে রূপান্তর করে দেয়। এই মেশিন বাইনারি কোডগুলোকে অবজেক্ট প্রোগ্রাম বা অবজেক্ট ফাইল বলে।
লিংকার হচ্ছে এমন একটা প্রোগ্রাম , যা একাধিক অবজেক্ট ফাইল , সিস্টেম লাইব্রেরি কে একসাথে করে ওপারেটিং সিস্টেম স্পেসেফিক এক্সিকিউটেবল প্রোগ্রাম তৈরি করে। অর্থাৎ এই ধাপে এসে মেশিন কম্প্যাটেবল অবজেক্ট প্রোগ্রামকে অপারেটিং সিস্টেম কম্প্যাটেবল করা হয়।
লোডার হচ্ছে এই সম্পর্কিত সর্বশেষ প্রোগ্রাম যা অপারেটিং সিস্টেমের একটা অংশ । এই লোডার এক্সিকিউটেবল প্রোগ্রামকে স্টোরেজ ডিভাইস থেকে মেমরি তথা র্যামে লোড করে। প্রয়োজনীয় মেমরি, ডাটা স্ট্যাক তৈরি করে রেজিস্টার কে এক্সিকিউটের জন্য প্রস্তুত করে দেয়।
এভাবে কম্পাইলার একটা মানুষের বোধগম্য প্রোগ্রামিং ভাষায় লিখিত প্রোগ্রামকে ধাপে ধাপে কম্পিউটারের উপযোগী বাইনারি মেশিন ভাষায় রূপান্তর করে। এবং এই প্রক্রিয়াতেই নতুন প্রোগ্রাম তৈরি এবং কম্পিউটারকে রিপ্রোগ্রাম করা সম্ভব হয়, যা কম্পিউটারকে আজকের এই অনন্য অবস্থানে নিয়ে এসেছে।