কম্পিউটারপ্রোগ্রামিং

অনুবাদক হয় ... অনুবাদকদের ধরন প্রোগ্রাম রূপান্তর এবং অনুবাদ

প্রোগ্রামগুলি, মানুষের মত, একটি অনুবাদক বা অনুবাদককে একটি ভাষা থেকে অন্য ভাষায় অনুবাদ করার প্রয়োজন হয়

মৌলিক ধারণা

প্রোগ্রাম গণমাধ্যমের একটি ভাষাগত উপস্থাপনা: আমি → প → পি (আমি)। দোভাষী একটি প্রোগ্রাম যা ইনপুট P এবং কিছু ইনপুট ডাটা এক্স গ্রহণ করে। এটি x: I (P, x) = P (x) এ পি সঞ্চয়ন করে। যে সমস্ত সম্ভাব্য প্রোগ্রাম (যা আনুষ্ঠানিক সিস্টেমের প্রতিনিধিত্ব করা যেতে পারে) করতে সক্ষম একটি একক অনুবাদক রয়েছে তা আসলে টুরিংের একটি অত্যন্ত গভীর ও উল্লেখযোগ্য আবিষ্কার।

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

কিছু অনুবাদকের খুব অদ্ভুত নাম আছে:

  • এসেম্বলার প্রোগ্রামারকে মেশিন ভাষাতে অনুবাদক হিসেবে অনুবাদ করে।
  • কম্পাইলার একটি উচ্চ স্তরের ভাষা থেকে একটি নিম্ন স্তরের ভাষা অনুবাদ করে।

একটি অনুবাদক এমন একটি প্রোগ্রাম যা কিছু ভাষা S এর ইনপুট হিসাবে একটি প্রোগ্রাম গ্রহণ করে এবং একটি প্রোগ্রাম T তে এইভাবে গ্রহণ করে যে সেগুলির উভয়ই একই শব্দবিন্যাস আছে: P → X → Q। অর্থাৎ, ∀x। পি (এক্স) = প্রশ্ন (এক্স)

যদি আপনি সম্পূর্ণ প্রোগ্রামকে এমন কিছুতে অনুবাদ করেন যা ব্যাখ্যা করা হয়, তাহলে এটি এক্সিকিউশন আগে সংকলন বা AOT- সংকলন নামে অভিহিত করা হয়। AOT কম্পাইলার ক্রমানুসারে ব্যবহার করা যেতে পারে, যা পরবর্তীতে বেশিরভাগই একটি এসেম্বলর হয়, উদাহরণস্বরূপ:

উত্স কোড → কম্পাইলার (কম্পাইলার) → অ্যাসেমমালার কোড → অ্যাসেমমালার (অনুবাদক) → মেশিন কোড → সিপিইউ (দোভাষী)।

অন্য কম্পাইল অংশগুলি চালানো হলে প্রোগ্রামের অংশ অনুবাদ করা হলে একটি অনলাইন বা ডাইনামিক কম্পাইলেশন ঘটে। জিট-অনুবাদক মনে করেন যে তারা ইতিমধ্যেই কাজ করেছেন, যাতে আবারও আবার উৎস কোডটি পুনরাবৃত্তি না করে। রানটাইম পরিবেশের আচরণের উপর ভিত্তি করে তারা এমনকি অভিযোজিত সংকলন এবং পুনঃসংযোগ উত্পন্ন করতে পারে।

অনেক ভাষা আপনাকে অনুবাদ সময় কোড চালানো এবং রানটাইম এ নতুন কোড কম্পাইল করার অনুমতি দেয়।

অনুবাদ পর্যায়ে

অনুবাদ বিশ্লেষণ এবং সংশ্লেষণের ধাপ গঠিত:

উত্স কোড → বিশ্লেষক → ধারণাগত দেখুন → জেনারেটর (synthesizer) → লক্ষ্য কোড।

এই কারণে নিম্নলিখিত কারণে:

  • অন্য কোন পদ্ধতি উপযুক্ত নয়। শব্দ-দ্বারা শব্দ অনুবাদ সহজভাবে কাজ করে না।
  • একটি ভাল প্রকৌশল সমাধান: যদি আপনি এম উৎস ভাষা এবং N টার্গেট ভাষায় অনুবাদকদের লিখতে চান, তবে আপনাকে M + N সহজ প্রোগ্রামগুলি (সেমিকম্পপিলার) লিখতে হবে, না M × N জটিল (সম্পূর্ণ অনুবাদক)।

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

বাস্তব কম্পাইলার অনেক পর্যায়ে মাধ্যমে যান। আপনার নিজস্ব কম্পাইলার তৈরি করার সময়, দর্শকদের তৈরি এবং জেনারেটর তৈরি করার সময় আপনি যে সমস্ত কঠোর পরিশ্রম করেছেন তা পুনরাবৃত্তি করার প্রয়োজন নেই। আপনি আপনার ভাষা সরাসরি জাভাস্ক্রিপ্ট বা সি ভাষায় অনুবাদ করতে পারেন এবং বিদ্যমান জাভাস্ক্রিপ্ট ইঞ্জিন এবং সি কম্পাইলারকে বিশ্রাম করতে পারেন। আপনি বিদ্যমান মধ্যবর্তী দর্শন এবং ভার্চুয়াল মেশিন ব্যবহার করতে পারেন

অনুবাদক এর রেকর্ড

একটি অনুবাদক একটি প্রোগ্রাম বা একটি প্রযুক্তিগত সরঞ্জাম যা তিনটি ভাষা জড়িত থাকে: উৎস, লক্ষ্য এবং মৌলিক তারা টি ফর্ম আকারে, বামদিকে উৎস স্থাপন, ডানদিকে লক্ষ্যবস্তু, এবং নীচের বেস একটিকে লেখা হতে পারে।

তিন ধরনের কম্পাইলার আছে:

  • একটি অনুবাদক একটি স্ব-কম্পাইলার হয় যদি তার উৎস ভাষা একটি মৌলিক এক অনুরূপ।
  • কম্পাইলার, যার লক্ষ্য ভাষা বেস ভাষা সমান, তাকে স্ব-নাগরিক বলা হয়।
  • একটি অনুবাদক একটি ক্রস কম্পাইলার হয় যদি তার একটি ভিন্ন লক্ষ্য ভাষা এবং একটি মৌলিক ভাষা থাকে।

কেন এই গুরুত্বপূর্ণ?

এমনকি যদি আপনি একটি বাস্তব কম্পাইলার কখনও না, এটি সৃষ্টি এর প্রযুক্তির সম্পর্কে জানতে ভাল, কারণ এই জন্য ব্যবহৃত ধারণা সর্বত্র প্রয়োগ করা হয়, যেমন:

  • পাঠ্য বিন্যাস;
  • কোটা ভাষাগুলি উপাত্ত;
  • বর্ধিত কম্পিউটার আর্কিটেকচার;
  • সাধারন অপ্টিমাইজেশান সমস্যা;
  • গ্রাফিক্যাল ইন্টারফেস;
  • স্ক্রিপ্টিং ভাষা;
  • কন্ট্রোলার;
  • ভার্চুয়াল মেশিন;
  • মেশিন অনুবাদ।

উপরন্তু, যদি আপনি প্রি্পোকার্স, বিল্ডার, লোডার্স, ডিবাগার বা প্রোফাইলার লিখতে চান, তাহলে কম্পাইলার লেখার সময় আপনাকে একই ধাপগুলি অনুসরণ করতে হবে।

আপনি আরও ভালভাবে লিখতে শিখতে পারেন, যেহেতু একটি ভাষার জন্য অনুবাদক তৈরি করা মানে তার উপনিবেশ এবং অস্পষ্টতার একটি ভাল বোধগম্যতা। অনুবাদকের সাধারণ নীতিগুলি শেখার ফলে এটি একটি ভাল ভাষা ডিজাইনার হতে পারে। এটা কি এতই গুরুত্বপূর্ণ যে, ভাষাটি কতটা তাত্পর্যপূর্ণ, যদি এটি কার্যকরভাবে বুঝতে পারে না?

ব্যাপক প্রযুক্তি

কম্পাইলার প্রযুক্তি কম্পিউটার বিজ্ঞানের বিভিন্ন অংশ জুড়েছে:

  • আনুষ্ঠানিক ভাষা তত্ত্ব: ব্যাকরণ, পার্সিং, কম্পিউটিবিলিটি;
  • কম্পিউটার স্থাপত্য: নির্দেশনা সেট, RISC বা CISC, pipelining, কার্নেল, ঘড়ি চক্র ইত্যাদি;
  • প্রোগ্রামিং ভাষাগুলির ধারণাসমূহ: উদাহরণস্বরূপ, অনুক্রম নিয়ন্ত্রণ, শর্তাধীন এক্সিকিউশন, পুনরাবৃত্তীকরণ, পুনরাবৃত্তি, ক্রিয়ামূলক পচানি, মডুলারটি, সিঙ্ক্রোনাইজেশন, মেটাগ্রাফগ্রামিং, স্কোপ, ধ্রুবক, উপমোচন, টেমপ্লেট, আউটপুট টাইপ, প্রোটোটাইপ, টীকা, থ্রেড, মনাদ, মেলবক্স, এক্সটেনশন , ওয়াইল্ডকার্ডস, নিয়মিত এক্সপ্রেশন, লেনদেনের মেমরি, উত্তরাধিকার, পলিমরফিজম, প্যারামিটার মোড ইত্যাদি।
  • অ্যাবসট্রাক্ট ভাষা এবং ভার্চুয়াল মেশিন;
  • অ্যালগরিদম এবং ডেটা স্ট্রাকচার: নিয়মিত এক্সপ্রেশন, অ্যালগরিদম বিশ্লেষণ, গ্রাফিক অ্যালগরিদম, ডাইনামিক প্রোগ্রামিং, শেখার;
  • প্রোগ্রামিং ভাষার: সিনট্যাক্স, সিনটিক্স (স্ট্যাটিক এবং ডাইনামিক), প্যারাডিজমগুলির জন্য সমর্থন (স্ট্রাকচারাল, ওপ, ফাংশনাল, লজিক্যাল, স্ট্যাক, কনজার্জাইটিস, মেটাগ্রাফগ্রাম);
  • সফ্টওয়্যার তৈরি (কম্পাইলার, একটি নিয়ম হিসাবে, বড় এবং জটিল): স্থানীয়করণ, ক্যাশে, কম্পোনাইজেশন, API- ইন্টারফেস, পুনঃব্যবহার, সিঙ্ক্রোনাইজেশন।

কম্পাইলার ডিজাইনিং

একটি বাস্তব অনুবাদক উন্নয়নশীল যখন কিছু সমস্যা উত্পন্ন:

  • উত্স ভাষার সাথে সমস্যা এটি কম্পাইল করা সহজ? একটি প্রাকপ্রসেসার আছে? কিভাবে ধরনের পরিচালনা করা হয়? লাইব্রেরি আছে কি?
  • গ্রুপিং কম্পাইলার পাস: একক- বা মাল্টি পাস?
  • পছন্দসই অপ্টিমাইজেশনের ডিগ্রী কম বা কোন অপ্টিমাইজেশান সঙ্গে প্রোগ্রাম দ্রুত এবং অপবিত্র অনুবাদ স্বাভাবিক হতে পারে। অতিরিক্ত অপ্টিমাইজেশানটি কম্পাইলারকে ধীর করে দেবে, তবে রানটাইম এ সেরা কোডটি মূল্যবান হতে পারে।
  • প্রয়োজনীয় ত্রুটি সনাক্তকরণ হার। কি অনুবাদক শুধু প্রথম ত্রুটি থামাতে পারেন? কখন সে থামবে? ত্রুটি সংশোধন করার জন্য আপনি কি কম্পাইলারকে বিশ্বাস করেন?
  • সরঞ্জামের উপলব্ধতা উৎস ভাষা যদি খুব ছোট না হয় তবে স্ক্যানার এবং বিশ্লেষক জেনারেটর বাধ্যতামূলক। কোড জেনারেটর জেনারেটর আছে, কিন্তু তারা এত সাধারণ নয়।
  • প্রজন্মের জন্য লক্ষ্য কোডের প্রকার। আপনি বিশুদ্ধ, বর্ধিত, বা ভার্চুয়াল মেশিন কোড থেকে নির্বাচন করা উচিত। অথবা, শুধু একটি ইনপুট লিখুন যা জনপ্রিয় মধ্যবর্তী দর্শন তৈরি করে, যেমন এল এলভিএম, আরটিএল, বা জেভিএম। অথবা উৎস থেকে উত্স থেকে উত্স কোড সি বা জাভাস্ক্রিপ্ট মধ্যে একটি অনুবাদ করা।
  • লক্ষ্য কোড বিন্যাস আপনি সমাবেশ ভাষা নির্বাচন করতে পারেন , পোর্টেবল মেশিন কোড, মেমরি ইমেজ মেশিন কোড।
  • Retargeting। অনেক জেনারেটর এর সাথে একটি সাধারণ ইনপুট অংশ থাকা ভাল। একই কারণে, অনেক ইনপুট অংশগুলির জন্য এক জেনারেটর থাকা উচিৎ।

কম্পাইলার আর্কিটেকচার: সামগ্রী

এই মেশিন কোড উত্পন্ন যে অনুবাদক প্রধান কার্যকরী উপাদান (আউটপুট প্রোগ্রাম একটি সি প্রোগ্রাম বা একটি ভার্চুয়াল মেশিন যদি, তারপর না অনেক পদক্ষেপ প্রয়োজন হয়):

  • ইনপুট প্রোগ্রাম (লক্ষণ একটি প্রবাহ) স্ক্যানার (লেক্সনিক বিশ্লেষক) প্রবেশ করে, যা টোকেনগুলির একটি প্রবাহে রূপান্তরিত করে।
  • পার্সার (পার্সার) তাদের একটি বিমূর্ত সিনট্যাক্স গাছ তৈরি করে।
  • শব্দার্থক বিশ্লেষক শব্দগত তথ্য decomposes এবং ত্রুটি জন্য গাছ নোড পরীক্ষা করে। ফলস্বরূপ, একটি শব্দার্থিক গ্রাফ নির্মিত - অতিরিক্ত বৈশিষ্ট্য এবং ইনস্টল করা রেফারেন্স সহ একটি বিমূর্ত সিনট্যাক্স গাছ।
  • ইন্টারমিডিয়েট কোড জেনারেটর একটি ফ্লো গ্রাফ তৈরি করে (tuples মূল ব্লকগুলিতে গোষ্ঠীভুক্ত করা হয়)।
  • মেশিন-স্বতন্ত্র কোড অপ্টিমাইজার স্থানীয় (বেস ব্লকের মধ্যে) এবং গ্লোবাল (সমস্ত ব্লকগুলির জন্য) অপ্টিমাইজেশান করে, মূলত সাবরুটিনের মধ্যে থাকে। অপ্রয়োজনীয় কোড হ্রাস এবং হিসাব সহজ। ফলাফল একটি সংশোধিত ফ্লো গ্রাফ।
  • লক্ষ্য কোড জেনারেটর নিয়ন্ত্রণ স্থানান্তর সঙ্গে সরাসরি লাইন কোড বেস ব্লক লিঙ্ক, ভার্চুয়াল নিবন্ধনের (সম্ভবত অকার্যকর) সঙ্গে সংযোজনকারী একটি বস্তু ফাইল তৈরি।
  • মেশিন-স্বাধীন লিঙ্কিং অপ্টিমাইজার নিবন্ধন এবং সময়সূচী কমান্ডের মধ্যে মেমরির বরাদ্দ করে। পাইপলাইনিং এর ভাল ব্যবহার সঙ্গে একটি বাস্তব সমবেতকারী যাও এঙ্গেলার মধ্যে প্রোগ্রাম রূপান্তর।

উপরন্তু, ত্রুটি সনাক্তকরণ সাব-সিস্টেম এবং প্রতীক টেবিল ম্যানেজার ব্যবহৃত হয়।

লেক্সিক্যাল বিশ্লেষণ (স্ক্যানিং)

স্ক্যানার সোর্স কোডের অক্ষরের প্রবাহকে টোকেনগুলির একটি প্রবাহে রূপান্তরিত করে, স্পেস মুছে ফেলা, মন্তব্য এবং ম্যাক্রো বিস্তৃত করে।

স্ক্যানারগুলি প্রায়ই নিবন্ধগুলি, ইন্ডেন্ট, লাইন ফিড এবং নেস্টেড মন্তব্যগুলিতে অ্যাকাউন্ট গ্রহণ বা গ্রহণ না করার মত সমস্যা সম্মুখীন হয়।

স্ক্যানের সময় ঘটতে পারে এমন ত্রুটিগুলি লেক্সনিক বলা হয় এবং এতে অন্তর্ভুক্ত রয়েছে:

  • অক্ষর যা বর্ণমালায় নেই;
  • একটি শব্দ বা স্ট্রিং অক্ষর সংখ্যা অতিক্রম;
  • একটি বন্ধ অক্ষর বা স্ট্রিং আক্ষরিক নয়;
  • মন্তব্য ফাইলের শেষে

সিনট্যাক্স বিশ্লেষণ (পার্সিং)

পার্সার টোকেনের ক্রমকে একটি বিমূর্ত সিনট্যাক্স ট্রি রূপান্তর করে। প্রতিটি গাছ নোড নামে একটি ক্ষেত্র হিসাবে বস্তুর হিসাবে সংরক্ষণ করা হয়, যা অনেক তাদের গাছ নোড। এই পর্যায়ে কোন চক্র আছে। একটি পার্সার তৈরি করার সময়, আপনি ব্যাকরণ জটিলতার স্তর (এলএল বা এলআর) মনোযোগ দিতে হবে এবং অজ্ঞতা অপসারণের জন্য কোনও নিয়ম আছে কিনা তা খুঁজে বের করতে হবে। কিছু ভাষা শব্দের বিশ্লেষণ প্রয়োজন।

এই পর্যায়ে সম্মুখীন ত্রুটি সিনট্যাক্স ত্রুটি বলা হয়। উদাহরণস্বরূপ:

  • K = 5 * (7 - y;
  • জে = / 5;
  • 56 = x * 4

সিনেটিক্যাল বিশ্লেষণ

শব্দার্থিক বিশ্লেষণের সময় অনুমানযোগ্যতার নিয়মগুলি পরীক্ষা করা এবং সিনট্যাক্স বৃক্ষের অংশগুলি বাঁধাই (নামগুলির রেফারেন্স অনুমোদন করা, প্রকারের নিখরচায় নিক্ষেপের জন্য অপারেশন সন্নিবেশ করা ইত্যাদি) একটি শব্দার্থিক গ্রাফ গঠন করা প্রয়োজন।

স্পষ্টতই, বিভিন্ন ভাষার জন্য গ্রহণযোগ্যতা নিয়ম সেট ভিন্ন। যদি জাভা-মত ভাষাগুলি সংকলিত হয়, অনুবাদকদের পাওয়া যাবে:

  • তার সুযোগ মধ্যে একটি পরিবর্তনশীল একাধিক ঘোষণা;
  • তার ঘোষণা আগে একটি পরিবর্তনশীল রেফারেন্স;
  • অঘোষিত নামটির রেফারেন্স;
  • অ্যাক্সেসিবিলিটি নিয়ম লঙ্ঘন;
  • পদ্ধতি কল যখন আর্গুমেন্ট খুব বড় বা অপর্যাপ্ত সংখ্যা;
  • অসম্পূর্ণ টাইপ করুন।

প্রজন্ম

ইন্টারমিডিয়েট কোড প্রজন্মের একটি বেস গ্রাফ উত্পন্ন করে tuples গঠিত বেস ব্লক মধ্যে সমষ্টি।

কোড প্রজন্মের বাস্তব মেশিন কোড উত্পাদন করে। RISC- মেশিনের জন্য প্রথাগত কম্পাইলারগুলিতে, প্রথম স্তরটি একটি অসীম সংখ্যক ভার্চুয়াল নিবন্ধনের সাথে একটি সংযোজক তৈরি করে। সিআইএসসি মেশিনের জন্য, এটি সম্ভবত ঘটবে না।

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 bn.delachieve.com. Theme powered by WordPress.