সংকলক এমন একটি প্রোগ্রাম যা প্রোগ্রামিং ভাষা থেকে অন্য প্রোগ্রামের উত্স কোডটি এক্সিকিউটেবল কোডে অনুবাদ করে।
উত্স কোডটি সাধারণত উচ্চ-স্তরের প্রোগ্রামিং ভাষায় হয় (যেমন পাস্কাল, সি, সি ++, জাভা, পার্ল, সি # ইত্যাদি)। এক্সিকিউটেবল কোডটি মেশিনের নির্দেশাবলীর অনুক্রম হতে পারে যা সরাসরি সিপিইউ দ্বারা সম্পাদন করা যেতে পারে, বা এটি একটি মধ্যবর্তী উপস্থাপনা হতে পারে যা ভার্চুয়াল মেশিন দ্বারা ব্যাখ্যা করা হয় (যেমন জাভা বাইট কোড)।
সংক্ষেপে, একটি সংকলক একটি মানব-পঠনযোগ্য ফর্ম্যাট থেকে একটি প্রোগ্রামকে মেশিন-পঠনযোগ্য ফর্ম্যাটে রূপান্তর করে।
একটি সংকলক কীভাবে কাজ করে তা সত্যিই জটিল। বিষয়টি নিয়ে বই ও বিশ্ববিদ্যালয় কোর্স রয়েছে। আমি প্রক্রিয়াটির মূল পর্বগুলি সংক্ষেপে রূপরেখার চেষ্টা করব, তবে এটি একটি খুব সরকারী ওভারভিউ হবে।
- লেক্সিং - প্রোগ্রামটির পাঠ্যটিকে "টোকেন" এ বিভক্ত করুন। টোকেনগুলি প্রোগ্রামিং ভাষার "শব্দ", যেমন সনাক্তকারী (কীওয়ার্ড, পরিবর্তনশীল নাম, ফাংশন নাম ইত্যাদি) বা অপারেটর (=, *, এবং, ইত্যাদি)।
- পার্সিং - টোকেনের ক্রমটিকে পার্স গাছে রূপান্তর করুন, যা বিভিন্ন ভাষার কাঠামোগত প্রতিনিধিত্ব করে এমন একটি ডেটা স্ট্রাকচার: প্রকারের ঘোষণা, পরিবর্তনশীল ঘোষণা, ফাংশন সংজ্ঞা, লুপস, শর্তসাপেক্ষ, এক্সপ্রেশন ইত্যাদি।
- অপ্টিমাইজেশন - ধ্রুবক অভিব্যক্তিগুলি মূল্যায়ন করুন, অব্যবহৃত ভেরিয়েবলগুলি বা অ্যাক্সেসযোগ্য কোডটি অপ্টিমাইজ করুন, সম্ভব হলে লুপগুলি আনرول করুন etc.
- পার্স গাছটিকে মেশিনের নির্দেশিকায় (বা জেভিএম বাইট কোড) অনুবাদ করুন।
আবার আমি জোর দিয়েছি যে এটি একটি খুব সংক্ষিপ্ত বিবরণ is আধুনিক সংকলকগুলি খুব স্মার্ট এবং ফলস্বরূপ, খুব জটিল।