এমন কোনও প্রোগ্রাম রয়েছে যে কোনও দুটি ভাষার মধ্যে সোর্স কোডটি 'অনুবাদ' করতে পারে?


28

এমন কোনও প্রোগ্রাম রয়েছে যা কোনও দুটি ভাষার মধ্যে অনুবাদককে 'অনুবাদ' করতে পারে (অনুমান করে যে অনুবাদকের প্রয়োজনীয় লাইব্রেরিতে অ্যাক্সেস রয়েছে)?

যদি সেখানে থাকে তবে তারা কীভাবে কাজ করবে (কৌশলগুলি ব্যবহৃত, জ্ঞান প্রয়োজনীয়, ইত্যাদি)? এগুলি কীভাবে সম্ভব নির্মিত হবে?

যদি তা না হয় তবে তাদের উন্নয়নে বাধা কী? এটি কি এআই সম্পূর্ণ সমস্যা (প্রাকৃতিক ভাষার অনুবাদটিকে একটি হিসাবে তালিকাভুক্ত করা হয়েছে)?

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



14
"কোন দুটি ভাষা" বলতে আপনার অর্থ কী? অবশ্যই এমন প্রোগ্রাম রয়েছে যা এক ভাষা থেকে অন্য ভাষায় অনুবাদ করতে পারে। তাদের "সংকলক" বলা হয়। এটি আক্ষরিক অর্থে সংকলকের সংজ্ঞা: এমন একটি প্রোগ্রাম যা প্রোগ্রামগুলি এক ভাষা থেকে অন্য ভাষায় অনুবাদ করে। তবে "কোন দুটি ভাষা"? আমি মনে করি না এটি সম্ভব। অনুবাদককে উত্স এবং লক্ষ্য ভাষা উভয়ই জানতে হবে এবং এটি সাধারণত ভাষার একটি বিশেষ জোড়ায় নির্দিষ্ট specific
Jörg ডব্লু মিট্টাগ

প্রোগ্রামটি উত্স এবং লক্ষ্য ভাষা সরবরাহ করা হয়। আমি সি ++ তে একটি প্রোগ্রাম লেখার কথা ভাবছি, এটি জাভা, পাইথন, পার্ল, রুবি, গো ইত্যাদিতে অনুবাদ করে কিছু নিষেধাজ্ঞা থাকতে পারে (উদাহরণস্বরূপ এটি আপনার শেল স্ক্রিপ্টটি ম্যাটল্যাজে রূপান্তর করবে বলে আমি আশা করি না)।
টবি আলাফিন

4
হ্যাঁ, তাদেরকে সংকলক বলা হয়, তারা সংকলকগুলির মতো কাজ করে এবং সেগুলি সংকলকগুলির মতো তৈরি করা যায়।
ব্যবহারকারী 253751

1
যদি "কোনও দুটি ভাষা" দ্বারা আপনার আক্ষরিক অর্থ এই হয় যে (সসীম) প্রোগ্রামটি সীমাহীন সংখ্যক ইনপুট ভাষাগুলি পড়তে এবং বুঝতে সক্ষম হওয়া উচিত তবে উত্তরটি তুচ্ছভাবে নয় । তবে ইনপুট ভাষার একটি সীমাবদ্ধ সেট নিন এবং আপনি those সমস্ত ভাষার জন্য একটি
সংকলকটি

উত্তর:


57

TLDR; এটি সম্ভব তবে ব্যবহারিক নয়।

(অনুমান করে যে অনুবাদকের প্রয়োজনীয় লাইব্রেরিতে অ্যাক্সেস রয়েছে)?

এটি জটিল বিট হিসাবে শেষ হয়, এবং কেন এই জাতীয় জিনিসগুলি অনুশীলনে ব্যবহৃত হচ্ছে না তার একটি অংশ।

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

  2. যে কোনও দুটি ট্যুরিং সম্পূর্ণ ভাষার মধ্যে অনুবাদ সর্বদা সম্ভব। লাইব্রেরি কল এবং এফএফআই এবং অন্যান্য কদর্য ব্যবহারিক বিটগুলির মতো জিনিসগুলি উপেক্ষা করা যা সেই পথে আসে। কোনও ভাষা যদি টুরিং সম্পূর্ণ হয় তবে আপনার কাছে রয়েছে:

    • একটি অনুবাদ যা একটি টিউরিং মেশিনকে এই ভাষায় কোডে রূপান্তর করে
    • এই ভাষা থেকে একটি টুরিং মেশিনে অনুবাদ

    সুতরাং ভাষা এ থেকে ভাষা বিতে অনুবাদ করতে, আপনি কোডটি টুরিং মেশিনে রূপান্তর করেন, তারপরে সেই মেশিনটিকে বি কোডে রূপান্তর করুন।

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

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

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

  4. এই অনুবাদটি করা কোডটি পাঠযোগ্য নয় । ভাষা বিতে কোডের একটি টুকরো পাওয়া সহজ যে ভাষা এ থেকে কোডের মতো আচরণ করে এটি বেশ কয়েকটি কারণে বিভিন্ন কারণে বিতে কোনও মানুষ লিখেছিল এমন কোডের মতো দেখানো কঠিন। A এবং B এর বিবিধ বিমূর্ত সরঞ্জাম থাকতে পারে এবং কোড কী পাঠ্যযোগ্য তা কম্পিউটারের কোনও ধারণা নেই। আপনি পূর্বে বর্ণিত টুরিং মেশিন অনুবাদটি ব্যবহার করে যদি আপনি শেষ করেন তবে এটি বিশেষভাবে সত্য হবে।

    এটি প্রশ্ন উত্থাপন করে: এই ধরণের অনুবাদের মূল বক্তব্য কী? আপনি যদি আমাদের শেষে পান তবে ধীর, অপঠনযোগ্য কোডের একটি ব্লক, কেন কেবল এটি মেশিন কোডে সংকলন করে কিছু অংশের সাথে সংযোগ স্থাপনের জন্য কোনও প্রকার এফএফআই বা আন্ত-প্রক্রিয়া যোগাযোগ ব্যবহার করবেন না?

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

    তবে সাধারণভাবে, এটি খুব ব্যবহারিক জিনিস নয়।


5
পয়েন্ট 4 একটি উদাহরণ asm.js । আজ জাভাস্ক্রিপ্ট সোর্স ম্যাপস এবং এলিমেন্ট ইন্সপেক্টর ব্যবহার করে এটিকে বাছাইযোগ্য করে তোলা সম্ভব , কিন্তু কেউ এটি করতে চাইবে না ...
ইসমাইল মিগুয়েল

1
মডেলিকা হ'ল অন্য ভাষার সংকলনের জন্য ডিজাইন করা ভাষার আরেকটি উদাহরণ (এই ক্ষেত্রে সি)।
মনিকা

ওয়েব-স্পেসিয়ালিটি সি ++ থেকে জাভাস্ক্রিপ্টে অনুবাদ করা।
অ্যাশ Shāţi '

এক্স থেকে Y পর্যন্ত ট্রান্সপনারগুলির অনেকগুলি উদাহরণ রয়েছে তবে এটি কোনও সার্বজনীন যে কোনও কিছুর সংকলক থেকে আলাদা। স্পষ্টতই এমন ঘটনা রয়েছে যেখানে ট্রান্সপ্লারিংয়ের অর্থ হয়।
jmite

আইএমও অনুপস্থিত একটি গুরুত্বপূর্ণ ব্যতিক্রম: সি সংকলন করার কারণটি হ'ল অনেকগুলি অসাধারণ সিস্টেমে একটি বিদ্যমান সি সংকলক থাকে, যা সাধারণত বেশ যুক্তিসঙ্গত মেশিন কোড নির্গত করতে পারে। সুতরাং, সি-তে একটি ভাষা সংকলন করে, আপনার এই বিরল আর্কিটেকচারের জন্য ব্যাককেন্ডের দরকার নেই।
এমসাল্টারস

2

এরকম প্রোগ্রাম রয়েছে। উদাহরণস্বরূপ লিস্প-টু-ফোর্টরান অনুবাদক, যা তাদের সময়ে ব্যাপকভাবে ব্যবহৃত হত। একক লিস্প সংকলক সরাসরি লিস্পটি সংকলন করে না তবে এর পরিবর্তে সি কোড উত্পন্ন করে নিয়মিত সি সংকলক দ্বারা সংকলিত হয়। আরেকটি উদাহরণ হ'ল ভালা যা সরাসরি সংকলিত হয় না তবে সি ++ কোড সংকলনের আগে প্রথমে সি ++ তে অনুবাদ হয়। কিউটি এমওসি-তে রচিত, এমন একটি ভাষাকে অনুবাদ করা যাতে এটি সংকলন করতে সি ++ তে অনুবাদ করা হয় (তবে এমওসি হিসাবে কেবলমাত্র কয়েকটি অতিরিক্ত কমান্ডের সাহায্যে সি ++ হ'ল এটি যুক্তি দিতে পারে যদি সত্যিকার অর্থে এটি "নতুন ভাষা" নামকরণ করা হয়) - এবং সেখানে সি -+ সংকলকগুলি সেখানে সি ++ - থেকে-সি-অনুবাদক ছিল। এবং কিছু প্রকল্প পাস্কলে লিখিত হয়েছিল এবং তারপরে সি তে অনুবাদ করা হয়েছিল। এছাড়াও ঝনঝন এবং জাভা এমন একটি ধরণের প্রবণতা হিসাবে দেখা যায় যেহেতু তারা সি ++ এবং জাভা কোডকে কিছু মধ্যবর্তী ভাষায় অনুবাদ করে যা এরপরে আরও প্রক্রিয়া করা যায়।

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


0

সরাসরি উত্তর নয়, তবে একটি সরঞ্জাম কল আইএলএসপি রয়েছে , যা। নেট ফ্রেমওয়ার্কের জন্য লেখা হয়েছিল এবং আপনাকে একটি নেট নেট সমাবেশকে সি # বা ভিবি.নেটে বিভক্ত করতে দেয়।

নেট প্রকৃতির সাথে যদি আপনার অপরিচিত হয় তবে আপনি অনেক ভাষায় নেট কোড লিখতে পারেন তবে প্রাথমিকভাবে সি # বা ভিবি.নেট। সংকলক যখন অ্যাপ্লিকেশনটি সংকলন করে, তখন কোডটি "ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ" (বা সংক্ষিপ্তসার জন্য আইএল) কোডটিতে অনুবাদ করে। এই কোডটি। নেট বাইনারিগুলিতে সংকলিত হয়।

যেহেতু নেট অ্যাপ্লিকেশনগুলি আইএল কোড থেকে সংকলিত বাইনারি হয়, তাই আইএলএসপি। নেট অ্যাপ্লিকেশন নিতে পারে, এটি আবার আইএল কোডে ফিরিয়ে দিতে পারে এবং এরপরে, এটি আরও এক ধাপ এগিয়ে নিয়ে যায় এবং এটিকে সি # বা ভিবি.নেটে ফিরিয়ে দেয়।

এই সরঞ্জামটি ব্যবহার করে, আপনাকে যা করতে হবে তা হ'ল একটি অ্যাপ্লিকেশন সংকলন করতে হবে এবং তারপরে আপনি সংকলিত ফাইলগুলি IL, C # বা VB.Net কোড হিসাবে ব্রাউজ করতে পারবেন। স্পষ্টরূপে, কোডটি প্রথমে কোডটি কোন ভাষায় রচিত হয়েছিল তা বিবেচ্য নয় So বাইনারি যতক্ষণ না। নেট সমাবেশ, এটি সংকলিত ফাইলগুলি বিপরীতমুখী-প্রকৌশলী করতে পারে এবং এই তিনটি ভাষার যে কোনও একটি হিসাবে কন্টেন্ট আউটপুট করতে পারে।

আমি জানি এটি ঠিক একটি সংকলক নয়, তবে এটি এমন একটি সরঞ্জাম যা আপনি যা সন্ধান করছেন তার অনুরূপ একটি শেষ ফলাফল সরবরাহ করে এবং বাস্তবে আমি ভিবি.নেট প্রকল্পগুলিকে কিছুটা "অনুবাদ" করতে ব্যবহার করেছি আমার সাথে আরও পরিচিত - সি #।


0

আপনার ব্যবহারের ক্ষেত্রে (মন্তব্যের উপর ভিত্তি করে), মনে হচ্ছে SWIG দরকারী হতে পারে।

এসডব্লিউআইজি হ'ল একটি সফ্টওয়্যার বিকাশকারী সরঞ্জাম যা সি এবং সি ++ তে লিখিত প্রোগ্রামগুলি বিভিন্ন উচ্চ স্তরের প্রোগ্রামিং ভাষার সাথে সংযুক্ত করে। এসডাব্লুআইজি বিভিন্ন স্ক্রিপ্টিং ভাষা যেমন জাভাস্ক্রিপ্ট, পার্ল, পিএইচপি, পাইথন, টিসিএল এবং রুবি সহ বিভিন্ন ধরণের টার্গেট ভাষার সাথে ব্যবহৃত হয়। সমর্থিত ভাষার তালিকার মধ্যে নন-স্ক্রিপ্টিং ভাষা যেমন সি #, কমন লিস্প (সিএলআইএসপি, অ্যালেগ্রো সিএল, সিএফএফআই, ইউএফএফআই), ডি, গো ভাষা, জাভা সহ অ্যান্ড্রয়েড, লুয়া, মডিউলা -3, ওসিএএমএল, অক্টাভা, সাইলেব এবং আর এছাড়াও বেশ কয়েকটি ব্যাখ্যাযুক্ত এবং সংকলিত স্কিম বাস্তবায়নগুলি (গাইলি, এমজেস্কেম / র‌্যাকেট, চিকেন) সমর্থিত।


0

আমি শ্রদ্ধেয় f2c স্মরণ করি , যা ফোর্টরান 77 থেকে সি পর্যন্ত উত্স থেকে উত্স অনুবাদ করে does

এটি ছিল (কখনও কখনও এটি হয় ...) কয়েক দশক আগে থেকে মূলত আপনার সরঞ্জামচেইনে কোনও ফোর্টরান সংকলককে সংহত না করে সংখ্যাসূচক কোডটি অনুবাদ করতে ব্যবহৃত হয়েছিল।


0

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.