অন্য প্রোগ্রামিং ভাষায় অনুবাদ করা সহজ করার জন্য আমি কোডটিতে কী ধরণের নিদর্শন প্রয়োগ করতে পারি? [বন্ধ]


95

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

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

  • আমি আইওসি এবং নির্ভরতা ইনজেকশনও দেখছি, কারণ তারা অনুবাদ প্রক্রিয়াটিকে আরও সহজ এবং কম ত্রুটির প্রবণ করতে পারে।

  • আমি পাইথনের পার্সার মডিউলটি ব্যবহার করব , যা আমাকে বিমূর্ত সিনট্যাক্স গাছের সাথে ঝাঁকুনি দেয়। স্পষ্টতই আমি পিএইচপি দিয়ে সবচেয়ে নিকটে পেতে পারি টোকেন_জেট_এল () , এটি একটি শুরু।

  • এর পর থেকে আমি এএসটি, প্রতীক টেবিল এবং নিয়ন্ত্রণ প্রবাহ তৈরি করতে পারি।

তারপরে আমি বিশ্বাস করি যে আমি আউটপুট কোড শুরু করতে পারি। আমার নিখুঁত অনুবাদ দরকার নেই । আমি এখনও উত্পন্ন কোড পর্যালোচনা এবং সমস্যার সমাধান করতে হবে। আদর্শভাবে অনুবাদকের সমস্যাযুক্ত অনুবাদগুলি পতাকাঙ্কিত করা উচিত।

আপনি জিজ্ঞাসার আগে "এটার মূল বিষয় কী?" উত্তরটি হ'ল ... এটি একটি আকর্ষণীয় শেখার অভিজ্ঞতা হবে। কীভাবে এই কম ঝুঁকিপূর্ণ করার বিষয়ে আপনার যদি কোনও অন্তর্দৃষ্টি থাকে তবে দয়া করে আমাকে জানান know


সম্পাদনা:

অনুবাদটি কীভাবে করা যায় তার চেয়ে কোডটি অনুবাদ করা সহজ করার জন্য (যেমন: IoC, SOA?) কোডটি কী কী ধরণের রূপগুলিতে প্রয়োগ করতে পারি তা জানতে আগ্রহী আমি।


6
আপনি কী নেট। সিএলআর বা পার্ল 6 এর তোতা জাতীয় সিস্টেমে তাকিয়েছেন? তারা একটি অন্তর্বর্তী উপস্থাপনা যা একটি সাধারণ দোভাষী দ্বারা চালিত করা যেতে পারে নিচে ভাষার একটি সেট সংকলন। যদি আপনি মধ্যবর্তী উপস্থাপনা থেকে কোনও ভাষায় ফিরে যেতে পারেন তবে আপনার অনুবাদক পেয়েছেন।
বোরিলিড

4
@ বোরিলিড আফাইক। নেট সিআইএল (তুলনামূলকভাবে) সহজেই সংকলন করা সহজ , তবে ভাগ্য ভাল যে পাঠযোগ্য কোডটি এখান থেকে ফিরে আসবে। তোতা এখন তাকিয়ে আছে।
নালুউজারএক্সেপশন

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

4
আমি কোনও নির্দিষ্ট জ্ঞান যোগ করতে পারি না, তবে আপনি কি পাজামা ( পাইজস.আর.আরগ ), বিশেষত অনুবাদক.পি ? এটি জাভাস্ক্রিপ্ট সংকলক একটি অজগর।
স্টেফান

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

উত্তর:


122

১৯৯৫ সাল থেকে কম্পিউটার বিজ্ঞানীদের একটি শক্তিশালী দল দ্বারা সমর্থিত, সাধারণ উদ্দেশ্যে প্রোগ্রামের হেরফের করার জন্য আমি (ডিএমএস সফটওয়্যার রিজিনিজারিং টুলকিট) বিল্ডিং করছি language ডিএমএস জেনেরিক পার্সিং, এএসটি বিল্ডিং, সিম্বল টেবিল, নিয়ন্ত্রণ এবং ডেটা ফ্লো বিশ্লেষণ, অনুবাদ বিধি প্রয়োগ, মন্তব্য সহ উত্স পাঠ্যের পুনঃজেনার ইত্যাদি সরবরাহ করে যা কম্পিউটার কম্পিউটারের স্পষ্ট সংজ্ঞা দ্বারা পরামিতি করে ized

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

ভাষা-ভাষায় অনুবাদক তৈরি বা এটি চেষ্টা করার বিষয়ে আপনার ভাবার কোনও ভুল নেই, তবে আমি মনে করি যে এটি আপনার প্রত্যাশার চেয়ে সত্যিকারের ভাষার জন্য আরও বড় কাজ খুঁজে পাবেন। আমাদের কেবলমাত্র ডিএমএসে প্রায় 100 টি মানব-বছর বিনিয়োগ হয়েছে এবং প্রতিটি "নির্ভরযোগ্য" ভাষার সংজ্ঞায় (আমরা পিএইচপি-র জন্য আমরা বেদনাদায়কভাবে তৈরি করেছি এমন একটি ভাষা সহ) আরও 6-12 মাস রয়েছে, সি ++ এর মতো কদর্য ভাষার জন্য আরও অনেক কিছু। এটি একটি "শেখার অভিজ্ঞতার নরক" হবে; এটা আমাদের জন্য ছিল। (উপরের ওয়েবসাইটে প্রযুক্তিগত কাগজপত্র বিভাগটি শিখতে আগ্রহী হতে পারে) find

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

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

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

"আমার নিখুঁত অনুবাদ দরকার নেই" সম্পর্কে মন্তব্যটি সমস্যাজনক। দুর্বল অনুবাদকেরা যা করেন তা হ'ল শক্ত হাতে থাকা 80% কোডকে "সহজ" 80% রূপান্তরিত করে। আপনি যে অ্যাপ্লিকেশনটি রূপান্তর করতে চান তা যদি খুব ছোট হয় এবং আপনি কেবল একবার এটি ভাল রূপান্তর করতে চান তবে 20% ঠিক আছে। আপনি যদি অনেক অ্যাপ্লিকেশন রূপান্তর করতে চান (বা এমনকি সময়ের সাথে সামান্য পরিবর্তন সহ একইটি), এটি দুর্দান্ত নয়। আপনি যদি 100 কে এসএলওকে রূপান্তর করার চেষ্টা করেন তবে 20% হ'ল 20,000 মূল কোডের কোড যা আপনার ইতিমধ্যে বুঝতে পারে না এমন আরও 80,000 লাইন অনুবাদ করা প্রোগ্রামের প্রসঙ্গে অনুবাদ, বুঝতে এবং সংশোধন করা শক্ত। এটি প্রচুর পরিশ্রম করে। মিলিয়ন লাইনের স্তরে, এটি অনুশীলনে কেবল অসম্ভব।আরও কঠিন এবং তারা সাধারণত দীর্ঘ সময় বিলম্ব, উচ্চ ব্যয় এবং প্রায়শই পুরোপুরি ব্যর্থতা সহকারে বেদনাদায়ক সন্ধান করে))

বড় আকারের সিস্টেমগুলি অনুবাদ করতে আপনাকে যা অঙ্কিত করতে হবে তা হ'ল নব্বই দশকের শতাংশ রূপান্তর হার, বা সম্ভবত আপনি অনুবাদ ক্রিয়াকলাপের ম্যানুয়াল অংশটি সম্পূর্ণ করতে পারবেন না।

অন্য কী বিবেচনাটি হ'ল অনুবাদ করা কোডের আকার। একটি ভাল, শক্তিশালী অনুবাদক এমনকি ভাল সরঞ্জাম সহ তৈরি করতে এটি অনেক বেশি শক্তি নেয় takes ছোট কোডের ঘাঁটির জন্য উদাহরণস্বরূপ একটি ম্যানুয়াল রূপান্তর করার পরিবর্তে অনুবাদক তৈরি করা সেক্সি এবং দুর্দান্ত বলে মনে হয় (উদাহরণস্বরূপ, আমাদের অভিজ্ঞতায় প্রায় 100K এসএলওসি পর্যন্ত) অর্থনীতি কেবল এটিকে সমর্থন করে না। এই উত্তরটি কারও পছন্দ নয়, তবে আপনাকে যদি মাত্র 10 কে কোডের এসএলওসি অনুবাদ করতে হয় তবে আপনি কেবল বুলেটটি কামড় দিয়ে তা করা থেকে ভাল off এবং হ্যাঁ, এটি বেদনাদায়ক।

আমি আমাদের সরঞ্জামগুলি অত্যন্ত ভাল বলে বিবেচনা করি (তবে তারপরে আমি বেশ পক্ষপাতিত্ব করি)। এবং একটি ভাল অনুবাদক তৈরি করা এখনও খুব কঠিন; এটি আমাদের প্রায় 1.5-2 বছর বয়সের সময় নেয় এবং আমরা আমাদের সরঞ্জামগুলি কীভাবে ব্যবহার করতে হয় তা জানি। পার্থক্যটি হ'ল এই এত যন্ত্রের সাহায্যে আমরা ব্যর্থ হওয়ার চেয়ে অনেক বেশি বার সফল হই।


8
আপনি কি কখনও পিএইচপি সম্প্রদায়ের কাছে আপনার "বেদনাদায়কভাবে নির্মিত" পিএইচপি সংজ্ঞাটি অবদানকে বিবেচনা করেছেন, বা এটি সম্ভবপর করতে আপনার নিজের রাজস্ব স্ট্রিমের সাথে খুব ঘনিষ্ঠভাবে যুক্ত হয়েছেন?
টিএমএল

53
আমাকে প্রচুর ভাওয়াদের দ্বারা "ওপেন সোর্স" করার সমস্ত কিছু করতে বলা হয়েছে যারা কোনও উপার্জন প্রবাহে অবদান রাখতে চায় না এবং নিজেরাই কাজটি করার ও ওপেন সোর্স করার শক্তি রাখেনি। আপনি যদি খুব বড় প্রকল্পে কেবলমাত্র একটি ছোট অংশকে অবদান রাখেন, এবং / অথবা আপনার আয়ের অন্য উত্স রয়েছে, "ওপেন সোর্স" ঠিক আছে বলে মনে হয়। আপনি যদি সমস্ত কাজ নিজেই করেন এবং এটি আপনার আয়ের একমাত্র উত্স, এটি অনেক কম আকর্ষণীয়। [আমি "ফ্রি সফটওয়্যার" দর্শনের আপেক্ষিক গুণাগুণ সম্পর্কে কোনও আলোচনায় আসতে চাই না, তাই আমি এই লাইনটি ধরে কোনও ভবিষ্যতের মন্তব্যে অংশ নেব না]
ইরাক বাক্সার

9
আপনি এখানে যা বলেছেন তার সাথে আমি একমত, যে কারণেই আমি প্রশ্নটি আমার মতো করে ফেললাম। আমি অনুমান করি যে আমরা আপনার প্রতিক্রিয়াটির সাথে খুব ঘনিষ্ঠভাবে জড়িত বলে মনে করি যে প্রতিক্রিয়াটি থেকে আমরা নিবিষ্ট রয়েছি এবং এতে কোনও ভুল নেই - আমি কেবল এটি জিজ্ঞাসা করার মতোই ভেবেছিলাম।
টিএমএল

4
@ ইরাক্যাক্সটার আপনি কেবল কম্পিউটার সম্পর্কিত প্রাইসেস সম্পর্কে প্রচলিত প্রজ্ঞা বলছেন যা প্রচুর পরিমাণে অন্যান্য ব্যবহারের ক্ষেত্রে প্রয়োগ করা যেতে পারে। আপনার লিখিত সমস্ত বিষয়গুলির মধ্যে কেবলমাত্র
ইন্টারেস্টিংয়ের অর্থ হ'ল সিমান্টিক ডিজাইনস ডট কমের

4
আপনি প্রায়শই উত্তরগুলিতে ঝাঁকুনি সংক্রান্ত পৃষ্ঠাগুলির লিঙ্ক সরবরাহ করেন। এটি কেবল প্রমাণ করে যে অন্য কেউ একটি ওয়েব পৃষ্ঠা তৈরি করতে পারে। আমাদের বেশিরভাগই ধরে নিয়েছে যে একটি লিখিত ওয়েব পৃষ্ঠায় বোঝা যাচ্ছে যে এর পিছনে মারাত্মক, আসল কাজ রয়েছে এবং কেবলমাত্র আপনার উত্তরটি বোঝা যাচ্ছে বলে পাঠককে ধোকা দেওয়ার কিছু জালিয়াতি প্রচেষ্টা নয়। আপনি কি সত্যই বিশ্বাস করেন যে ওয়েব পৃষ্ঠাটি প্রতারণামূলক? পৃষ্ঠাটিতে "প্রাসঙ্গিক" উত্স সম্পর্কিত রেফারেন্স তথ্য রয়েছে; এটি অনিয়মযুক্ত কারণ কাজের চুক্তির জন্য এটির প্রয়োজন ছিল। যে আমি সাহায্য করতে পারি না।
ইরা

13

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

সংক্ষেপে: পার্সার মডিউলটি ব্যবহার করবেন না, এর একটি সহজ উপায় আছে।

astযেহেতু এটি আপনার সাথে কাজ করতে একটি তৈয়ারি এবং AST দেয় মডিউল, পাইথন 2.6 যেহেতু প্রাপ্তিসাধ্য আপনার প্রয়োজনের জন্য আরো অনেক কিছু উপযুক্ত। আমি গত বছরে এই বিষয়ে একটি নিবন্ধ লিখেছি , তবে সংক্ষেপে, পাইথনের উত্স কোডটি একটি এএসটিতে পার্স করার parseপদ্ধতিটি ব্যবহার করুন astparserমডিউল আপনি একটি পারসে ট্রি, কোনো এবং AST দেব। পার্থক্য সম্পর্কে সতর্ক থাকুন

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

আপনাকে একটি চূড়ান্ত টিপ দেওয়ার জন্য, 2to3পাইথন 2 কোডটি পাইথন 3 কোডে অনুবাদ করার জন্য পাইথন ডেভস দ্বারা তৈরি সরঞ্জামটি বিবেচনা করুন । ফ্রন্ট-এন্ড-ওয়াইজ, এতে পাইথনকে কিছুতে আপনার অনুবাদ করার জন্য বেশিরভাগ উপাদান রয়েছে । তবে পাইথন 2 এবং 3 এর কোরগুলি সমান হওয়ায় সেখানে কোনও এমুলেশন যন্ত্রপাতি লাগবে না।


উইল। 2to3কেবল এএসটি থেকে এএসটি। এটি astমডিউলের সক্ষমতা ছাড়িয়ে যাওয়া এমন কোনও কিছুই করা সমর্থন করে না । লক্ষ করুন যে, অনুবাদের সব যেতে থেকে হোস্ট পাইথন প্রক্রিয়া দ্বারা সমর্থিত সিনট্যাক্স থেকে হোস্ট পাইথন প্রক্রিয়া দ্বারা সমর্থিত সিনট্যাক্স। এমন কোনও অনুবাদক নেই যা যোগ করুন, বলুন, ফাংশন টীকাগুলি যোগ করে না, কারণ 2.6 এটি সমর্থন করে না।
habnabit

... এবং ওপি-র প্রশ্নটি ফ্রেম, স্বল্পমেয়াদী, কীভাবে পাইথন ২. A এএসটি থেকে পিএইচপি-তে কিছু পাওয়া যাবে। অ্যাস্ট মডিউলটি সম্ভবত পিএইচপি সিনট্যাক্সকে ভালভাবে উপস্থাপন করতে চাইবে না, সুতরাং এটি এমনকি আষ্টের থেকেও নয়।
ইরা

4
@ অ্যারন: 2to3উত্পন্ন এএসটি ব্যবহারের উদাহরণ হিসাবে দেখা যেতে পারে ast
এলি বেন্ডারস্কি

আফাইক, 2to3 যুক্তিযুক্তভাবে পাইথন থেকে পিএইচপি এর চেয়ে সহজ অনুবাদ (সর্বোপরি, পাইথন থেকে পাইথন, ডান)? এমনকি এটি বিশেষভাবে ভাল কাজ করে না। পাইথন ২.6 এর বিশাল পরিমাণটি লক্ষ্য করুন যা এখনও 2to3 এর মধ্যে সরে যায় নি ... কারণ পোস্ট ট্রান্সলেশন হ্যান্ড প্যাচিংয়ের একটি গুচ্ছ এখনও রয়েছে যা এখনও করতে হবে। যদি 100% স্বয়ংক্রিয় হয় তবে পাইথন 2.6 মারা যায়।
ইরা

5

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

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

এই ক্ষেত্রে:

word = 'This is not a word'
print word[::-2]

ডুপ্লিকেট করতে সি ++ কোড প্রচুর লাগে (ঠিক আছে, আপনি এটি কিছু লুপিং নির্মাণগুলি দিয়ে মোটামুটি ছোট করতে পারেন তবে এখনও) but

আমার মনে হয় এটি কিছুটা আলাদা হয়ে গেছে।

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

সর্বাধিক সুস্পষ্ট সমস্যা আমি দেখতে পাচ্ছি যে প্রথমে আপনি সম্ভবত মারাত্মকভাবে অদক্ষ কোড তৈরি করবেন , বিশেষত পাইথনের মতো আরও শক্তিশালী * ভাষায়।

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

  • ব্যাকরণ সরবরাহ করুন
  • মধ্যবর্তী (তবে ট্যুরিং সম্পূর্ণ) সিনট্যাক্সে প্রোগ্রামটি সংকলন করুন
  • মধ্যবর্তী প্রোগ্রামটি চূড়ান্ত ভাষায় সংকলন করুন (সরবরাহিত ব্যাকরণের ভিত্তিতে)
  • ...?
  • লাভ! (?)

* শক্তিশালী দ্বারা আমি বলতে চাইছি এটিতে 4 টি লাইন লাগবে:

myinput = raw_input("Enter something: ")
print myinput.replace('a', 'A')
print sum(ord(c) for c in myinput)
print myinput[::-1]

আমাকে অন্য একটি ভাষা দেখান যা 4 লাইনে এমন কিছু করতে পারে এবং আমি আপনাকে এমন একটি ভাষা দেখাব যা পাইথনের মতো শক্তিশালী।


"আপনি কি কোনও ভাষার ব্যাকরণের উপর ভিত্তি করে কোনও টোকনাইজার / পার্সার লিখেছেন?" আমি জাভাসিসিসি ব্যবহার করে এটি করেছি।
নালুউজারএক্সসেপশন

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

@ নুল ইউজার এক্সেপশন: আপনার কিছুটা এক্সপোজার থাকবে তবে আপনি মূলত জাভাসিসির পুনরায় বাস্তবায়ন করছেন, কেবল জাভা এর পরিবর্তে আউটপুট ল্যাঙ্গুয়েজ হিসাবে, আপনি <এখানে ল্যাঙ্গেজ প্রবেশ করান> করছেন। @ ডেভিড, বেশ তাই। এমনকি থিসলকে কিছু ভাষা নির্মাণের জন্য কিছু সহায়তা প্রয়োজন। আমি যদি ওপি থাকি, আমি প্রথমে কার্যকরী হয়ে যাই, তবে অনুকূলিতকরণ করব, অন্যথায় আমি স্ট্রিং স্লাইসিং (পদক্ষেপ সহ) করার জন্য সি ++ পাওয়ার চেষ্টা করে চিরতরে আটকে যাব: পি
ওয়েন ওয়ার্নার

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

@ উপরিউক্ত0000: আমি মনে করি এটি সঠিক নয়। আপনি যদি প্রিপ্রসেসর শর্তকে অস্বীকার করেন তবে আপনি সঠিক হতে পারেন।
ইরা বাক্সার

3

দু'টি উত্তর রয়েছে যা আপনাকে বিরক্ত করবেন না বলে জানাচ্ছে। আচ্ছা, এটা কতটা সহায়ক? আপনি শিখতে চান? আপনি শিখতে পারেন. এটি সংকলন। এটি ঠিক তাই ঘটে যে আপনার লক্ষ্য ভাষাটি মেশিন কোড নয়, তবে অন্য একটি উচ্চ-স্তরের ভাষা। এটি সর্বদা করা হয়।

শুরু করার তুলনামূলকভাবে সহজ উপায় আছে। প্রথমে http://sourceforge.net/projects/lime-php/ (যদি আপনি পিএইচপি-তে কাজ করতে চান) বা এই জাতীয় কিছু পান এবং উদাহরণ কোডটি দেখুন। এরপরে, আপনি নিয়মিত প্রকাশের ক্রম ব্যবহার করে আপনার উত্পন্ন পার্সারটিতে টোকেনগুলি ফিড করতে পারেন le আপনার শব্দার্থক ক্রিয়াগুলি হয় অন্য ভাষায় সরাসরি আউটপুট কোড তৈরি করতে পারে বা আউটপুট কোড উত্পন্ন করতে ম্যাসেজ করতে পারে এবং এমন কোনও ডেটা স্ট্রাকচার তৈরি করতে পারে (বস্তুগুলি, মানুষ) data

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

"শিক্ষানবিশ" দৃষ্টিভঙ্গি এমন কিছু তৈরি করা যা ভাষার সীমাবদ্ধ উপসেটের জন্য ঠিকঠাক কাজ করে (যেমন কেবল মুদ্রণ বিবৃতি, সাধারণ গণিত এবং ভেরিয়েবল অ্যাসাইনমেন্ট) এবং তারপরে ক্রমশ সীমাবদ্ধতাগুলি সরিয়ে দেয়। ক্ষেত্রের "বড়" ছেলেরা যা করেছে তা মূলত এটি।

ওহ, এবং যেহেতু পাইথনে আপনার স্ট্যাটিক প্রকার নেই, তাই পিএইচপি ফাংশনগুলিতে "পাইথন_এডিডি" রচনা করা এবং নির্ভর করা ভাল যা পাইথন এটির পদ্ধতি অনুসারে সংখ্যা, স্ট্রিং বা অবজেক্ট যুক্ত করে।

স্পষ্টতই, আপনি যদি এটি ছেড়ে দেন তবে এটি আরও অনেক বড় হতে পারে।


4
আসলে, আমি "বিরক্ত করবেন না" বলিনি। আমি যা বলেছিলাম তা ছিল, "সাধারণ ভাষায় ভাষাগুলি অনুবাদ করা খুব কঠিন"। যদি ওপি পিএইচপি চেষ্টা ও জেনারেট করার জন্য পাইথন গাছগুলি ব্যবহারের তার আসল পথে এগিয়ে যায় তবে সে অনেক কিছু শিখবে এবং আমি সবাই শিক্ষার অভিজ্ঞতার পক্ষে আছি; আমি সেখানেও শুরু করেছিলাম। তিনি সহজেই নতুন ভাষা যুক্ত করতে পারবেন না।
ইরা বাক্সার

@ ইরাক্যাক্সটার আমি আপনার বক্তব্যকে সমর্থন করতে পারি না, পাইথন-> পিএইচপি এবং পিএইচপি-> জাভাস্ক্রিপ্ট করা এক ধরণের সহজ হবে। সিএফ. শেষ অংশ stackoverflow.com/a/22850139/140837 উত্তর আমিও আপনার "যুক্তিপ্রদর্শন" সাথে মোকাবিলা মাঝখানে
amirouche

2

আমি পার্সারের পরিবর্তে ast.parse (যা সম্পর্কে আগে জানতাম না) ব্যবহারের বিষয়ে আমি ইলিবেেন্ডারস্কির দৃষ্টিভঙ্গিকে দ্বিতীয় করব। আমি আপনাকে উষ্ণতার সাথে তার ব্লগটি পর্যালোচনা করার পরামর্শ দিচ্ছি। আমি পাইথন-> জাভাস্ক্রিপ্ট অনুবাদক (@ https://bitbucket.org/amirouche/pythonium ) করতে ast.parse ব্যবহার করেছি । আমি অন্যান্য বাস্তবায়ন কিছুটা পর্যালোচনা করে এবং নিজেই এগুলি ব্যবহার করে পাইথোনিয়াম ডিজাইন নিয়ে এসেছি । আমি https://github.com/PythonJS/PythonJS থেকে পাইথোনিয়ামকে কাঁটা দিয়েছিলাম যা আমিও শুরু করেছি, এটি আসলে একটি সম্পূর্ণ পুনর্লিখন। সামগ্রিক নকশা পাইপাই এবং http://www.hpl.hp.com/techreport/Compaq-DEC/WRL-89-1.pdf কাগজ থেকে অনুপ্রাণিত ।

পাইথোনিয়াম মার্কেটিংয়ের মতো দেখে মনে হলেও, শুরু থেকে সেরা সমাধান পর্যন্ত যা কিছু চেষ্টা করেছি, তা সত্যই নয় (কিছু যদি নেটিয়িকেটকে সঠিক মনে না হয় তবে আমাকে বলতে দ্বিধা করবেন না):

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

  • আমি গুগল ক্লোজারের সাথে চেষ্টা করেছি, স্কুল্ট (সংকলক) এর মতো স্কুল্ট কোডটি আসলেই পড়ার পরিবর্তে # ব্যর্থ। যাইহোক, জেএস প্রোটোটাইপ ভিত্তিক অবজেক্ট সিস্টেমের কারণে এখনও অসম্ভব। বাইন্ডিং তৈরি করা খুব কঠিন ছিল, আপনার জাভাস্ক্রিপ্ট এবং প্রচুর বয়লারপ্লিট কোড লিখতে হবে (সিএফ। Https://github.com/skulpt/skulpt/issues/50 যেখানে আমি ভূত)। তখন বিল্ড সিস্টেমে বাইন্ডিংকে সংহত করার কোনও সুস্পষ্ট উপায় ছিল না। আমি মনে করি যে স্কালপ্ট একটি গ্রন্থাগার এবং এটি কার্যকর করার জন্য আপনার .py ফাইলগুলিকে এইচটিএমএলতে অন্তর্ভুক্ত করতে হবে, বিকাশকারী দ্বারা কোনও সংকলন পর্ব করতে হবে না।

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

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

তবুও আমি মনে করি এপিআই-> এপিআই (বা ফ্রেমওয়ার্ক-> ফ্রেমওয়ার্ক) অনুবাদ করা সম্ভব এবং এটি পাইথোনিয়ামে তবে আমি নিম্ন স্তরে মূলত যা করি। সম্ভবত পাইজামা পাইথোনিয়ামের মতো একই অ্যালগোরিদম ব্যবহার করে ...

তারপরে আমি স্কাইলেটের মতো জাভাস্ক্রিপ্টে সম্পূর্ণ লিখিত ব্রাইথন আবিষ্কার করেছি, সংকলন এবং প্রচুর ফ্লফের প্রয়োজন নেই ... তবে জাভাস্ক্রিপ্টে লিখিত আছে।

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

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

আমি পাইথনের একটি সাবসেট একসাথে রাখার ধারণা দিয়ে পাইথনজেএস শুরু করেছি যা আমি সহজেই জাভাস্ক্রিপ্টে অনুবাদ করতে পারি। অতীতে অভিজ্ঞতার কারণে প্রথমে আমি ওও সিস্টেমটি প্রয়োগ করার জন্যও মাথা ঘামাইনি। আমি জাভাস্ক্রিপ্ট অনুবাদ করতে পাইথনের সাবসেটটি হ'ল:

  • সংজ্ঞা এবং কলিং উভয় ক্ষেত্রেই সম্পূর্ণ পরামিতিগুলির সাথে ফাংশন mantic এই অংশটিই আমি সবচেয়ে বেশি গর্বিত।
  • যখন / যদি / এলিফ / অন্য
  • পাইথন প্রকারগুলি জাভাস্ক্রিপ্ট ধরণে রূপান্তরিত হয়েছিল (কোনও ধরণের পাইথন ধরণের কোনও प्रकार নেই)
  • কেবল জাভাস্ক্রিপ্ট অ্যারেতে পুনরাবৃত্তি করতে পারে (অ্যারেতে একটি জন্য)
  • জাভাস্ক্রিপ্টের স্বচ্ছ অ্যাক্সেস: আপনি পাইথন কোডে অ্যারে লিখলে এটি জাভাস্ক্রিপ্টে অ্যারেতে অনুবাদ করা হবে। এটি এর প্রতিযোগীদের উপর ব্যবহারের দিক দিয়ে সবচেয়ে বড় অর্জন।
  • আপনি পাইথন উত্সে জাভাস্ক্রিপ্ট ফাংশনে সংজ্ঞায়িত ফাংশনটি পাস করতে পারেন can ডিফল্ট যুক্তি আমলে নেওয়া হবে।
  • এটিতে নতুন নামে একটি বিশেষ ফাংশন রয়েছে যা জাভাস্ক্রিপ্টে অনুবাদ করা হয়েছে নতুন উদাহরণ: নতুন (পাইথন) (1, 2, স্প্যাম, "ডিম") "নতুন পাইথন (1, 2, স্প্যাম," ডিম ") তে অনুবাদ করা হয়েছে।
  • "var" স্বয়ংক্রিয়ভাবে অনুবাদক দ্বারা পরিচালিত হয়। (ব্রেটের কাছ থেকে খুব সুন্দর সন্ধান (পাইথনজেএস অবদানকারী))।
  • গ্লোবাল কীওয়ার্ড
  • বন্ধ
  • ল্যাম্বডাস
  • তালিকা উপলব্ধি
  • প্রয়োজনীয়তাগুলির মাধ্যমে আমদানিগুলি সমর্থিত
  • Classyjs এর মাধ্যমে একক শ্রেণির উত্তরাধিকার + মিশ্রণ

এটি পাইথনের সম্পূর্ণ প্রস্ফুটিত শব্দার্থের তুলনায় অনেকটা হলেও বাস্তবে খুব সংকীর্ণ বলে মনে হয়। এটি পাইথন সিনট্যাক্স সহ সত্যিই জাভাস্ক্রিপ্ট।

উত্পন্ন জেএস নিখুঁত। ওভারহেড নেই, আরও সম্পাদনা করে পারফরম্যান্সের দিক দিয়ে এটি উন্নত করা যায় না। আপনি যদি উত্পন্ন কোডটি উন্নত করতে পারেন তবে আপনি পাইথন উত্স ফাইল থেকে এটিও করতে পারেন। এছাড়াও, সংকলক কোনও জেএস ট্রিকসের উপর নির্ভর করেনি যা আপনি http://superherojs.com দ্বারা রচিত .js এ খুঁজে পেতে পারেন , তাই এটি খুব পঠনযোগ্য।

পাইথনজেএস-এর এই অংশটির প্রত্যক্ষ বংশধর হলেন পাইথোনিয়াম ভেলোস মোড। সম্পূর্ণ বাস্তবায়নটি অন্যান্য অনুবাদকের সাথে শেয়ার্ড কোডের প্রায় ১০০ এসএলওসি @ https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pythonium/veloce/veloce.py?at=master 793 এসএলওসি + পাওয়া যাবে ।

পাইস্টোনস.পি-র একটি রূপান্তরিত সংস্করণ ভেলোস মোড সিএফ-এ অনুবাদ করা যেতে পারে py https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pystone/?at=master

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

  • spam.eggপাইথনে সর্বদা অনুবাদ করা হয় getattribute(spam, "egg")আমি বিশেষভাবে এটি প্রোফাইল করি নি তবে আমি মনে করি যেখানে এটি অনেকটা সময় looseিলে করে এবং আমি নিশ্চিত নই যে আমি এএসএম.জেএস বা অন্য কিছু দিয়ে এর উন্নতি করতে পারি।
  • পদ্ধতির সমাধানের আদেশ: পাইথনে লিখিত অ্যালগরিদম দিয়েও এটি পাইথন ভেলোস সামঞ্জস্যপূর্ণ কোডে অনুবাদ করা একটি বড় প্রচেষ্টা ছিল was
  • getattributre : আসল getattribute রেজোলিউশন অ্যালগরিদম এক ধরণের কৌশল এবং এটি এখনও ডেটা বর্ণনাকারীদের সমর্থন করে না
  • মেটাক্লাস ক্লাস ভিত্তিক: আমি জানি যে কোডটি কোথায় প্লাগ করতে হবে, তবে এখনও ...
  • সর্বশেষে বু least আফাইক অনুবাদক একেবারেই অনুমান ব্যবহার করে না, সুতরাং প্রতিবার আপনি যখন কল করবেন তখন আপনাকে যে ধরণের অবজেক্টটি কল করা উচিত তা তাদের কল করার জন্য এটি পরীক্ষা করা উচিত it's

এই অংশটি https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pythonium/compliant/runtime.py?at=master এ পাইথন ভেলোসের সাথে সামঞ্জস্যপূর্ণ লেখা হয়েছে।

প্রকৃত অনুগত অনুবাদক https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pythonium/compliant/compliant.py?at=master সরাসরি জাভাস্ক্রিপ্ট কোড জেনারেট করে না এবং সবচেয়ে গুরুত্বপূর্ণভাবে অ্যাস্ট- রূপান্তর করে না । আমি অ্যাস্ট-> অ্যাস্ট জিনিসটি চেষ্টা করেছি এবং অ্যাস্ট এমনকি সিএসটির চেয়েও ভাল যদি অ্যাস্টের সাথে কাজ করা ভাল না হয় তবে নোটট্রান্সফর্মার এবং আরও গুরুত্বপূর্ণ বিষয় হল আমাকে অ্যাস্ট-> অ্যাস্ট করার দরকার নেই।

আমার ক্ষেত্রে পাইথন অ্যাস্ট থেকে পাইথন অ্যাস্ট করা কমপক্ষে একটি পারফরম্যান্সের উন্নতি হতে পারে যেহেতু আমি এর সাথে সম্পর্কিত কোড উত্পন্ন করার আগে কোনও সময় কোনও ব্লকের সামগ্রীটি পরিদর্শন করি:

  • var / গ্লোবাল: কিছু ভেরি করতে সক্ষম হবার জন্য আমার অবশ্যই জানতে হবে যে আমার কী প্রয়োজন এবং ভের নয়। প্রদত্ত ব্লকটিতে কোন ভেরিয়েবল তৈরি হয় এবং উত্পন্ন ফাংশন ব্লকের শীর্ষে সন্নিবেশ করানোর পরিবর্তে আমি সম্পর্কিত কোডটি উত্পন্ন করার জন্য চাইল্ড নোডে আসার আগে যখন আমি ব্লকটিতে প্রবেশ করি তখন কেবল প্রকাশিত পরিবর্তনশীল অ্যাসাইনমেন্টের সন্ধান করি।
  • ফলন, জেনারেটরগুলির এখনও, জেএসে একটি বিশেষ সিনট্যাক্স রয়েছে, তাই আমি যখন "var my_generator = ফাংশন" লিখতে চাই তখন পাইথন ফাংশনটি জেনারেটর কিনা তা জানতে হবে

সুতরাং অনুবাদের প্রতিটি ধাপের জন্য আমি প্রতিটি নোড সত্যিই একবার দেখি না।

সামগ্রিক প্রক্রিয়া হিসাবে বর্ণনা করা যেতে পারে:

Python source code -> Python ast -> Python source code compatible with Veloce mode -> Python ast -> JavaScript source code

পাইথন বিল্টিনগুলি পাইথন কোড (!) তে লেখা থাকে, আইআইআরসি বুটস্ট্র্যাপিং প্রকারের সাথে সম্পর্কিত কয়েকটি বিধিনিষেধ রয়েছে, তবে পাইথোনিয়ামকে কমপ্লায়েন্ট মোডে অনুবাদ করতে পারে এমন সমস্ত কিছুতে আপনার অ্যাক্সেস রয়েছে। কটাক্ষপাত আছে https://bitbucket.org/amirouche/pythonium/src/33898da731ee2d768ced392f1c369afd746c25d7/pythonium/compliant/builtins/?at=master

পাইথোনিয়াম অনুগত থেকে উত্পন্ন জেএস কোড পড়া বোঝা যায় তবে উত্স মানচিত্র ব্যাপকভাবে সহায়তা করবে।

এই অভিজ্ঞতার আলোকে আমি যে মূল্যবান পরামর্শটি দিতে পারি তা হ'ল দয়াবান পুরানো খামারগুলি:

  • সাহিত্যে এবং বিদ্যমান প্রকল্পগুলি বন্ধ উত্স বা বিনামূল্যে উভয় ক্ষেত্রেই বিষয়টিকে ব্যাপকভাবে পর্যালোচনা করুন। আমি যখন বিদ্যমান বিদ্যমান প্রকল্পগুলি পর্যালোচনা করি তখন আমার আরও বেশি সময় এবং অনুপ্রেরণা দেওয়া উচিত ছিল।
  • প্রশ্ন কর! আমি যদি আগেই জানতাম যে পাইপাই ব্যাকএন্ড সি / জাভাস্ক্রিপ্টের সিনমেটিক অমিলের কারণে ওভারহেডের কারণে অকেজো। আমি সম্ভবত পাইথোনিয়াম ধারণাটি 6 মাস আগে সম্ভবত 3 বছর আগে পেয়েছি।
  • আপনি কি করতে চান তা জানুন, একটি লক্ষ্য রাখুন। এই প্রকল্পের জন্য আমার বিভিন্ন উদ্দেশ্য ছিল: কিছুটা জাভাস্ক্রিপ্ট প্র্যাকটিস করুন, পাইথন সম্পর্কে আরও শিখুন এবং ব্রাউজারে চালিত পাইথন কোডটি লিখতে সক্ষম হবেন (আরও নীচে এবং)।
  • ব্যর্থতা অভিজ্ঞতা
  • একটি ছোট পদক্ষেপ একটি পদক্ষেপ
  • ছোট শুরু
  • বড় স্বপ্ন
  • ডেমো কর
  • পুনরাবৃত্তি

পাইথন ভেলোস মোডের সাথেই, আমি খুব খুশি! তবে যেভাবে আমি আবিষ্কার করেছি যে আমি যা খুঁজছিলাম তা হ'ল আমাকে এবং অন্যদের জাভাস্ক্রিপ্ট থেকে মুক্তি দেওয়া তবে আরও গুরুত্বপূর্ণভাবে আরামদায়ক উপায়ে তৈরি করতে সক্ষম হওয়া । এটি আমাকে স্কিম, ডিএসএল, মডেলস এবং শেষ পর্যন্ত ডোমেন নির্দিষ্ট মডেলগুলিতে নিয়ে যায় (সিএফ। Http://dsmforum.org/ )।

ইরা বাক্সটারের প্রতিক্রিয়া সম্পর্কে:

অনুমানগুলি মোটেই সহায়ক নয়। পাইথনজেএস এবং পাইথোনিয়াম উভয়ের জন্যই আমি কম-বেশি 6 মাসের ফ্রি সময় নিয়েছি। তাই আমি 6 মাসের ফুলটাইম থেকে আরও আশা করতে পারি। আমি মনে করি যে এন্টারপ্রাইজ প্রসঙ্গে 100 জন-বছর কী বোঝাতে পারে এবং এটিকে মোটেই বোঝাতে পারে না তা আমরা সবাই জানি ...

যখন কেউ বলে যে কোনও কিছু কঠিন বা প্রায়শই অসম্ভব, তখন আমি উত্তর দিই যে "অসম্ভব এমন সমস্যার সমাধান খুঁজে পেতে কেবল সময় লাগে" অন্যথায় কিছু বলা অসম্ভব নয় যদি এ ক্ষেত্রে গণিতের প্রমাণ না হয় তবে এটি অসম্ভব ...

যদি এটি অসম্ভব প্রমাণিত না হয় তবে এটি কল্পনার জায়গা ছেড়ে দেয়:

  • এটি প্রমাণ করা অসম্ভব বলে প্রমাণ করে

এবং

  • যদি এটি অসম্ভব হয় তবে একটি "নিকৃষ্ট" সমস্যা থাকতে পারে যার সমাধান হতে পারে।

বা

  • যদি এটি অসম্ভব না হয় তবে সমাধান খুঁজে বের করুন

এটি কেবল আশাবাদী চিন্তাভাবনা নয়। আমি যখন পাইথন-> জাভাস্ক্রিপ্ট শুরু করলাম তখন সবাই বলছিল এটি অসম্ভব। পিপিপি অসম্ভব। মেটাক্লাস খুব শক্ত। ইত্যাদি ... আমি মনে করি যে একমাত্র বিপ্লব যে পাইপাই ওভার স্কিম-> সি পেপার নিয়ে আসে (যা 25 বছর পুরাতন) কিছু স্বয়ংক্রিয় জেআইটি প্রজন্ম (RPYthon দোভাষী আমার লিখিত ভিত্তিক ইঙ্গিত) is

বেশিরভাগ লোকেরা বলে যে কোনও জিনিস "শক্ত" বা "অসম্ভব" কারণগুলি সরবরাহ করে না। সি ++ পার্স করা শক্ত? আমি জানি, এখনও তারা (ফ্রি) সি ++ পার্সার। মন্দ কি বিস্তারিত আছে? আমি জানি। এটি একা অসম্ভব বলে দেওয়া সহায়ক নয়, এটি নিরুৎসাহজনক "সহায়ক নয়" এর চেয়েও খারাপ এবং কিছু লোকের অর্থ অন্যকে নিরুৎসাহিত করা। এই প্রশ্নটি সম্পর্কে আমি /programming/22621164/how-to-automatic-generate-a-parser-code-to-code-translator-from-a-corpus- এর মাধ্যমে শুনেছি ।

কি পরিপূর্ণতা হবে আপনার জন্য ? আপনি পরবর্তী লক্ষ্যটিকে এভাবে সংজ্ঞায়িত করেন এবং সম্ভবত সামগ্রিক লক্ষ্যে পৌঁছায়।

অনুবাদটি কীভাবে করা যায় তার চেয়ে কোডটি অনুবাদ করা সহজ করার জন্য (যেমন: IoC, SOA?) কোডটি কী কী ধরণের রূপগুলিতে প্রয়োগ করতে পারি তা জানতে আগ্রহী আমি।

আমি এমন কোনও নিদর্শন দেখতে পাচ্ছি না যা কমপক্ষে নিখুঁত উপায়ে কম সময়ে কোনও ভাষা থেকে অন্য ভাষায় অনুবাদ করা যায় না। যেহেতু ভাষা থেকে ভাষা অনুবাদ সম্ভব, আপনি প্রথমে এটির জন্য আরও ভাল লক্ষ্য রাখতে চাই। যেহেতু, আমি মনে করি http://en.wikedia.org/wiki/Graph_isomorphism_problem অনুসারে , দুটি কম্পিউটার ভাষার মধ্যে অনুবাদ হ'ল একটি গাছ বা ডিএজি আইসোমরফিজম। এমনকি যদি আমরা ইতিমধ্যে জানি যে তারা উভয়ই টুরিং সম্পূর্ণ, তাই ...

ফ্রেমওয়ার্ক-> ফ্রেমওয়ার্ক যা আমি এপিআই-> এপিআই অনুবাদ হিসাবে আরও ভালভাবে ভিজ্যুয়ালাইজ করি তা এখনও এমন কিছু হতে পারে যা আপনি উত্পন্ন কোডটি উন্নত করার উপায় হিসাবে মনে রাখতে পারেন। উদাহরণস্বরূপ: প্রোলগ খুব নির্দিষ্ট বাক্য গঠন হিসাবে তবে তবুও আপনি পাইথনের একই গ্রাফটি বর্ণনা করে গণনার মতো প্রোলোগ করতে পারেন ... আমি যদি পাইথনের অনুবাদককে প্রোলোগ প্রয়োগ করি তবে আমি পাইথনে নয় বরং সি লাইব্রেরিতে একীকরণ বাস্তবায়ন করতাম এবং আসতাম পাইথনিস্টের জন্য খুব পঠনযোগ্য "পাইথন সিনট্যাক্স" দিয়ে আপ করুন। শেষ অবধি, সিনট্যাক্সটি কেবলমাত্র "চিত্রকলা" যার জন্য আমরা একটি অর্থ দেব (এই কারণেই আমি পরিকল্পনা শুরু করেছি)। মন্দটি বিশদে রয়েছে এবং আমি বাক্য গঠন সম্পর্কে কথা বলছি না। ভাষাতে ব্যবহৃত ধারণাগুলি গেটট্রিবিউটহুক (আপনি এটি ছাড়া বাঁচতে পারেন) তবে প্রয়োজনীয় ভিএম বৈশিষ্ট্যগুলির মতো লেজ-পুনরাবৃত্তি অপ্টিমাইজেশান মোকাবেলা করা কঠিন হতে পারে। প্রাথমিক প্রোগ্রামটি লেজ পুনরাবৃত্তি না ব্যবহার করে এবং লক্ষ্য ভাষায় কোনও লেজ পুনরাবৃত্তি না থাকলেও আপনি গ্রিনলেটস / ইভেন্ট লুপ ব্যবহার করে এটিকে অনুকরণ করতে পারেন কিনা তা আপনার যত্ন নেই।

লক্ষ্য এবং উত্স ভাষার জন্য, দেখুন:

  • বড় এবং নির্দিষ্ট ধারণা
  • ক্ষুদ্র ও সাধারণ ভাগ করা ধারণা

এ থেকে উদ্ভূত হবে:

  • যে জিনিসগুলি অনুবাদ করা সহজ
  • যে জিনিসগুলি অনুবাদ করা কঠিন

দ্রুত এবং ধীর কোডে কী অনুবাদ করা হবে তা আপনি সম্ভবত জানতে সক্ষম হবেন।

Stdlib বা কোনও গ্রন্থাগারের প্রশ্নও রয়েছে তবে এর স্পষ্ট উত্তর নেই, এটি আপনার লক্ষ্যগুলির উপর নির্ভর করে।

আইডেম্যাটিক কোড বা পঠনযোগ্য উত্পন্ন কোডেরও সমাধান রয়েছে ...

পিএইচপি-র মতো প্ল্যাটফর্মকে টার্গেট করা ব্রাউজারগুলিকে টার্গেট করার চেয়ে অনেক বেশি সহজ যেহেতু আপনি ধীর এবং / বা গুরুতর পথের সি-বাস্তবায়ন সরবরাহ করতে পারেন।

আপনাকে দেওয়া প্রথম প্রকল্পটি পাইথনকে পিএইচপি-তে অনুবাদ করছে, কমপক্ষে আমার জানা পিএইচপি 3 সাবসেটের জন্য, ভেলোস.পি কাস্টমাইজ করা আপনার সেরা বাজি। আপনি যদি পিএইচপি-র জন্য ভেলোস.পি প্রয়োগ করতে পারেন তবে সম্ভবত আপনি কমপ্লায়েন্ট মোডটি চালাতে সক্ষম হবেন ... এছাড়াও যদি আপনি পিএইচপি-র উপসেটে পিএইচপি অনুবাদ করতে পারেন তবে আপনি পিএইচপি_ভেলোস.পি দিয়ে জেনারেট করতে পারবেন এর অর্থ এই যে আপনি পিএইচপি অনুবাদ করতে পারবেন পাইথনের সাবসেট যা ভেলোস.পি গ্রাহ্য করতে পারে যার অর্থ আপনি পিএইচপি জাভাস্ক্রিপ্টে অনুবাদ করতে পারবেন। এমনি বলছি...

আপনি এই লাইব্রেরিগুলিতে একবার দেখে নিতে পারেন:

এছাড়াও আপনি এই ব্লগ পোস্টটি (এবং মন্তব্য) দ্বারা আগ্রহী হতে পারেন: https://www.rfk.id.au/blog/entry/pypy-js-poc-jit/


শুধু কম্পিউটার ভাষা অনুবাদ করার জন্য এক-টু-একটি কম্পিউটারে ভাষা সম্পর্কে আমার জন্য রোমাঞ্চকর দেহাবশেষের বর্ণনা করা হয় stackoverflow.com/questions/22621164/...
amirouche

আমি ডেটা ধরণের সম্পর্কে অন্যান্য উত্তর দ্বিতীয়। পাইথোনিয়ামে আমি asm.js ছাড়াই কমপ্লায়েন্ট মোডে একটি সঠিক পূর্ণসংখ্যার এবং ভাসমান প্রকারের সমর্থন করার পরিকল্পনা করছিলাম না।
amirouche

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

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

আমি দ্বিমত পোষণ করার জন্য অনুরোধ করছি, বিশেষত যখন আপনি জানেন যে আপনি কী করছেন, এটি সহজ এবং এরপরে যা কিছু কঠিন নয় এটি কেবল জিনিসগুলি সম্পন্ন করার বিষয়। আমি নিশ্চিত না যে আপনি প্রশ্নের সাথে সুনির্দিষ্ট কিছু নিয়ে কোথায় ডিল করছেন। আপনি 4 বা 5 অনুচ্ছেদে বলছেন যে আপনার সংস্থা এটি করে এবং এটি শক্ত। কিন্তু অন্যথায় আপনি, বিষয় সম্পর্কে FUD ছড়িয়ে যখন হচ্ছে ধরনের প্রসঙ্গ-বহির্ভূত মত আপনি হয় stackoverflow.com/questions/22621164/... । পুরো সময়ে 6 মাস আমি একটি সম্পূর্ণ অনুবাদক লিখতে হবে।
amirouche

0

আপনি ভালা সংকলকটি একবার দেখে নিতে পারেন , যা ভালা (একটি সি # -র মতো ভাষা) সিতে অনুবাদ করে


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