একটি সংকলক কীভাবে কাজ করে? [বন্ধ]


17

দ্রষ্টব্য: আমি অবাক হয়েছি যে এটি আগে জিজ্ঞাসা করা হয়নি, এবং এটি থাকলে আমি এটি কোনও অনুসন্ধানে খুঁজে পেতে পারি না।

আমি প্রচুর ওয়েবসাইটে ছিলাম, আমি প্রচুর নিবন্ধ পড়েছি এবং আমি প্রচুর ব্যাখ্যা শুনেছি। তাদের বেশিরভাগই ভাল ছিল, তবে সেগুলি ছিল বিস্তৃত বা খুব জটিল বা কেবল সরল খারাপ। সুতরাং আমার প্রশ্ন, একটি সংকলক কীভাবে কাজ করে?

এটি যদি একটি কঠিন, বিস্তৃত প্রশ্ন হয়, দয়া করে আমাকে বলুন। তবে তা না হলে, প্রশ্নের উত্তর দিন।


4
খুব বিস্তৃত, কমপক্ষে "এটি কীভাবে কাজ করে" অংশ। সেই বিষয়টিতে পুরো বই লেখা আছে।
ওডে

1
en.wikedia.org/wiki/Compiler উইকিপিডিয়া লিঙ্ক যা তুচ্ছ হিসাবে খুঁজে পেতে হবে, আপনি বিশেষত কি ভাবছেন? প্রশ্নটি এতই বিস্তৃত যে আমি "কম্পাইলাররা এক ভাষা থেকে অন্য ভাষায় কোড অনুবাদ করে" এর স্মার্ট অ্যালেক্স প্রতিক্রিয়া জানাতে প্রলুব্ধ হবেন যেহেতু সাধারণ ধারণাটি যা একবার একবার দেখার শুরু করলে তার মধ্যে অনেকগুলি बारीकি থাকে idea কি সত্যিই জড়িত না।
জেবি কিং

1
হ্যাঁ এবং আমি মনে করি এটির বেশ ভাল উত্তর দেওয়া হয়েছে।
জেরেমি

1
সংকলক কীভাবে কাজ করে তার কোনও ব্যাখ্যা খুব বিস্তৃত বা খুব জটিল হবে। এটি একটি জটিল বিষয়, এবং কম্পাইলার ক্লাসগুলি কম্পিউটারের সাথে সম্পর্কিত সবচেয়ে কঠিন কোর্স ছিল আমি।
ডেভিড থর্নলি

1
@ ডেভিড অবশ্যই সংকলকগুলি জটিল, এবং তারা এখানে কীভাবে কাজ করে তার সমস্ত বিবরণ আপনি ব্যাখ্যা করতে পারবেন না। যাইহোক, আমি নিশ্চিত যে আপনার সংকলক কোর্সটি গ্রহণের আগে একটি সংকলক কী বা এটি কীভাবে কাজ করে সে সম্পর্কে আপনার কাছে একটি প্রাথমিক উচ্চ-স্তরের বোঝাপড়া ছিল।
ডিমা

উত্তর:


24

সংকলক এমন একটি প্রোগ্রাম যা প্রোগ্রামিং ভাষা থেকে অন্য প্রোগ্রামের উত্স কোডটি এক্সিকিউটেবল কোডে অনুবাদ করে।

উত্স কোডটি সাধারণত উচ্চ-স্তরের প্রোগ্রামিং ভাষায় হয় (যেমন পাস্কাল, সি, সি ++, জাভা, পার্ল, সি # ইত্যাদি)। এক্সিকিউটেবল কোডটি মেশিনের নির্দেশাবলীর অনুক্রম হতে পারে যা সরাসরি সিপিইউ দ্বারা সম্পাদন করা যেতে পারে, বা এটি একটি মধ্যবর্তী উপস্থাপনা হতে পারে যা ভার্চুয়াল মেশিন দ্বারা ব্যাখ্যা করা হয় (যেমন জাভা বাইট কোড)।

সংক্ষেপে, একটি সংকলক একটি মানব-পঠনযোগ্য ফর্ম্যাট থেকে একটি প্রোগ্রামকে মেশিন-পঠনযোগ্য ফর্ম্যাটে রূপান্তর করে।

একটি সংকলক কীভাবে কাজ করে তা সত্যিই জটিল। বিষয়টি নিয়ে বই ও বিশ্ববিদ্যালয় কোর্স রয়েছে। আমি প্রক্রিয়াটির মূল পর্বগুলি সংক্ষেপে রূপরেখার চেষ্টা করব, তবে এটি একটি খুব সরকারী ওভারভিউ হবে।

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

আবার আমি জোর দিয়েছি যে এটি একটি খুব সংক্ষিপ্ত বিবরণ is আধুনিক সংকলকগুলি খুব স্মার্ট এবং ফলস্বরূপ, খুব জটিল।


2
আসলে, এটি একটি ভাষাকে অন্য ভাষায় রূপান্তর করে। প্রারম্ভিক সি ++ সংকলক সি এর সাথে সংকলন করে V জাভা সংকলকটি বাইকোডে সংকলন করে যা কোনও জেভিএম-এর জেআইটি সংকলক ছাড়া কার্যকর হয় না।
ডেডালনিক্স

1
@ ডিডালনিক্স আইএমএইচও, মূল কথাটি হ'ল আপনি অ-এক্সিকিউটেবল কোড থেকে এক্সিকিউটেবল কোডে যান। আমি যুক্তি দিয়ে বলব যে সি-ফ্রন্টটি সংকলক ছিল না তবে সি সংকলকটির একটি ফ্রন্ট-এন্ড ছিল। অথবা সংকলন প্রক্রিয়াটির একটি পর্যায়, যদি আপনি চান। ভার্চুয়াল মেশিনগুলি অবশ্যই "এক্সিকিউটেবল" এবং "অ-এক্সিকিউটেবল" এর মধ্যে সীমাটি ঝাপসা করে। এখানে আমি কেবল এক্সিকিউটেবল কোডটিকে ভার্চুয়াল মেশিনে যা যা যাই হোক না কেন, বাইট কোডের মতো বিবেচনা করব এবং ভিআইএম এর ভিতরে যা যা চলে তা বিমূর্তভাবে JIT এর মতোই দূরে সরিয়ে ফেলব।
ডিমা

1
@ ডিমা, এটি এক্সিকিউটেবল কোড থেকে এক্সিকিউটেবল কোডে থাকতে হবে না। উদাহরণস্বরূপ আপনি উইন্ডোজ মেশিনে সরাসরি জেভিএম বাইট কোড চালাতে পারবেন না।

1
@ থরবজর্ন রাভন অ্যান্ডারসন: তবে বাইট কোডটি জেভিএম দ্বারা কার্যকর করা যায়। "ভার্চুয়াল মেশিন" এর পুরো পয়েন্টটি কি প্রোগ্রামারটির কাছে আসল মেশিনের মতো দেখাচ্ছে না?
ডিমা

2
আমি যুক্তি দেব যে traditionতিহ্যগতভাবে একটি সংকলক একটি মানব-পঠনযোগ্য ফর্ম্যাট থেকে একটি প্রোগ্রামকে মেশিন-পঠনযোগ্য ফর্ম্যাটে রূপান্তরিত করে, ঠিক যেমনটি ডিমা বলেছিলেন। সিফ্রন্টকে সি ++ তে সি বা জাভাককে জাভা রূপান্তর করে বাইটোকোডের মতো পরিবর্তনগুলি আরও উন্নত বিষয় যা সম্ভবত অপরিচিত কারও কাছে বুনিয়াদি, traditionalতিহ্যবাহী ধারণাটি ব্যাখ্যা করার পরে অবধি ছেড়ে দেওয়া উচিত।
কারসন 63000

5

একটি সংকলক হ'ল একটি কম্পিউটার প্রোগ্রাম (বা নির্দেশের সেট) যা প্রোগ্রামিং ভাষায় লিখিত উত্স কোডটি (উত্স ভাষা) অন্য কম্পিউটারের ভাষায় রূপান্তর করে (লক্ষ্য ভাষা, প্রায়শই বাইনারি ফর্ম যার সাথে অবজেক্ট কোড হিসাবে পরিচিত)। উত্স কোডটি রূপান্তর করতে চাওয়ার সর্বাধিক সাধারণ কারণ হ'ল একটি এক্সিকিউটেবল প্রোগ্রাম তৈরি করা।

অন্তর্নিহিত হার্ডওয়্যার সহ সংস্থাগুলি উচ্চ স্তরের ভাষায় ব্রিজ উত্স প্রোগ্রামগুলি। একটি সংকলকের প্রয়োজন:

  1. প্রোগ্রামগুলির বাক্য গঠনটির সঠিকতা নির্ধারণ করা
  2. সঠিক এবং দক্ষ অবজেক্ট কোড তৈরি করা হচ্ছে
  3. রান টাইম সংস্থা
  4. এসেম্বেলার এবং / অথবা লিঙ্কার কনভেনশন অনুসারে আউটপুট ফর্ম্যাট করা।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.