আমি নীচে যে সংক্ষিপ্তসারটি দিচ্ছি তা আমার নিজস্ব কিছু ধারণাগুলির সংযোজন সহ "সংকলক, মূলনীতি, কৌশল এবং সরঞ্জামসমূহ", আহো, লাম, শেঠি, ওলম্যান, (পিয়ারসন আন্তর্জাতিক সংস্করণ, 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
জিনিসগুলিকে আরও জটিল করার জন্য, জেভিএম বাইট কোডটিকে অন্য ফর্ম্যাটে রূপান্তর করতে রানটাইম-এ কেবল ইন-টাইম সংকলন সম্পাদন করতে পারে, যা পরে কার্যকর করা হয়।
এছাড়াও, আপনি যখন মেশিনের ভাষাতে সংকলন করেন তখনও সেখানে একজন দোভাষী আছে যা আপনার বাইনারি ফাইলটি চালাচ্ছেন যা অন্তর্নিহিত প্রসেসরের দ্বারা প্রয়োগ করা হয়। সুতরাং, এমনকি এই ক্ষেত্রে আপনি সংকলন + ব্যাখ্যার একটি সংকর ব্যবহার করছেন।
সুতরাং, প্রকৃত সিস্টেমগুলি দুটির মিশ্রণ ব্যবহার করে তাই প্রদত্ত ভাষা প্রসেসর সংকলক বা অনুবাদক কিনা তা বলা মুশকিল, কারণ এটি সম্ভবত প্রক্রিয়াজাতকরণের বিভিন্ন পর্যায়ে উভয় প্রক্রিয়া ব্যবহার করবে। এক্ষেত্রে সম্ভবত অন্যটি, আরও নিরপেক্ষ শব্দটি ব্যবহার করা আরও উপযুক্ত।
তবুও, সংকলন এবং ব্যাখ্যা দুটি পৃথক প্রক্রিয়াকরণ যা উপরের চিত্রগুলিতে বর্ণিত হয়েছে,
প্রাথমিক প্রশ্নের উত্তর দিতে।
একটি সংকলক মেশিনের ভাষা তৈরি করতে পারে যা সরাসরি শারীরিক হার্ডওয়্যারটিতে চলে?
অগত্যা নয়, একটি সংকলক একটি মেশিন এম 1 এর জন্য লিখিত একটি প্রোগ্রামকে একটি মেশিন এম 2 এর জন্য লিখিত সমমানের প্রোগ্রামে অনুবাদ করে। লক্ষ্য মেশিনটি হার্ডওয়্যারে প্রয়োগ করা যেতে পারে বা ভার্চুয়াল মেশিন হতে পারে। ধারণাগতভাবে কোনও পার্থক্য নেই। গুরুত্বপূর্ণ বিষয়টি হ'ল একটি সংকলক কোডের একটি টুকরোটি দেখে এবং তা কার্যকর না করে অন্য ভাষায় অনুবাদ করে।
সুতরাং কোনও দোভাষী কোনও যন্ত্রের ভাষা তৈরি করে না তবে একটি সংকলক এটির ইনপুটটির জন্য এটি করে?
যদি উত্পাদনের মাধ্যমে আপনি আউটপুটটি উল্লেখ করছেন, তবে একটি সংকলক একটি লক্ষ্য প্রোগ্রাম তৈরি করে যা মেশিনের ভাষায় হতে পারে, কোনও দোভাষী না করে।