আপনি কি অন্যকে রূপান্তর করতে ব্যবহার করতে পারেন এমন কোনও ব্যক্তিগতকরণযোগ্য প্রোগ্রামিং ভাষা রয়েছে?


13

এমন কোনও প্রোগ্রামিং ভাষা রয়েছে যাতে আপনি নিজের বাক্য গঠন কনফিগারেশন সেট করতে পারেন এবং কোডটি আপনার পছন্দ ভাষায় রূপান্তরিত করতে পারে?

উদাহরণস্বরূপ, আপনি সুনির্দিষ্ট কনফিগারেশন যেমন পাইথনের সূচকযুক্ত ব্লকগুলি বেছে নেবেন, [a,b,c]অ্যারেগুলিকে প্রাথমিকভাবে সাজিয়ে ^তোলেন এবং অন্যদের জন্য। একটি স্ক্রিপ্ট এটিকে আপনার পছন্দ ভাষার সমতুল্যে রূপান্তরিত করবে।


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

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

2
কিছুটা অবধি, আপনি প্রিপ্রোসেসর ম্যাক্রোগুলির মতো শব্দগুলি কী বর্ণনা করছেন । এখন কেবল যদি আমরা
পার্লের

5
@ ডক্কাট: দয়া করে প্রশ্নটি আপডেট করুন নির্দিষ্ট করে বলতে যে এটি জাভাস্ক্রিপ্ট সম্পর্কে। প্রশ্ন - যেমন বলা হয়েছে - এটি একটি রক্ষণাবেক্ষণ এবং সমর্থন দুঃস্বপ্ন। একটি বিদ্যমান ভাষায় নতুন সিনট্যাক্স যুক্ত করা (বা আপনার ব্যক্তিগত ভাষাকে জনসাধারণের ভাষায় পরিবর্তন করার জন্য একটি প্রাক-প্রসেসর ব্যবহার করা) সত্যই ভয়ঙ্কর। যাহোক. আপনি যদি নির্দিষ্ট জাভাস্ক্রিপ্ট সিনট্যাক্স চিনির সমস্যাগুলি তালিকাবদ্ধ করেন তবে আপনি সুনির্দিষ্ট সহায়তা পেতে পারেন।
এস .লট

3
এই "ব্যক্তিগতকৃত প্রোগ্রামিং ভাষা "গুলিকে সাধারণত" ডোমেন নির্দিষ্ট ভাষা "বা ডিএসএল বলা হয়।
মাইকেল ডিলন

উত্তর:


14

হ্যাঁ, তবে সম্ভবত আপনি যেভাবে ভাবছেন তেমন নয়।

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


8
আমি একরকম জানতাম পার্ল উত্তর হবে (অংশ)। আমার ধারণা সি প্রিপ্রসেসর ম্যাক্রোগুলি একটি বিবরণটিও সামান্য প্রসারিতের সাথে মাপসই করে।
ইয়ানিস

এছাড়াও সি ++ এ অপারেটর ওভারলোডিং সুন্দর হতে পারে। হ্যালো ওয়ার্ল্ড উদাহরণটি মনে আসে। cout << "হাই";
লর্ড টাইডাস

@ লর্ডটিডাস: প্রকৃতপক্ষে, এমনকি কেবল অপারেটর ওভারলোডিং আপনাকে বুদ্ধিমান ইন্টারফেসের পিছনে বেশ কিছুটা যাদু করতে দেয়। সি ++ এর আরও বেশি সাধারণ ওভারলোডিং ক্ষমতা থাকলে, বলুন, operator[]একাধিক যুক্তির জন্য ওভারলোডিং বা হাস্কেলের মতো নতুন অপারেটর প্রবর্তন করা ভাল হবে; তবে আমি সন্দেহ করি যে কমিটি বিশ্লেষণের বিষয়গুলি অতীত দেখতে পাবে।
জন পুরে

3

ধারণা প্রোগ্রামিং মত শোনাচ্ছে ।

আমি এর সাথে পরিচিত নই, তবে এক্সএল এটির জন্য বিশেষভাবে ডিজাইন করা একটি ভাষা।

এক্সএলটিতে প্রোগ্রামার-পুনরায় কনফিগারযোগ্য সিনট্যাক্স এবং শব্দার্থক বৈশিষ্ট্য রয়েছে। সংকলক প্লাগইনগুলি ভাষাতে নতুন বৈশিষ্ট্য যুক্ত করতে ব্যবহার করা যেতে পারে।

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


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

আপনি হাস্কেলের মতো ভাষায় আগ্রহী হতে পারেন যার একটি খুব নমনীয় তবে অভিন্ন সিনট্যাক্স রয়েছে।


এই আমি খুঁজছিলাম ছিল।
ডক্কাট

2

আমার জ্ঞান না।

আমি মনে করি না এটি একটি খুব ভাল ধারণা হবে - একটি প্রমিত ভাষার বাক্য গঠনের অন্যতম প্রধান সুবিধা হ'ল বহু লোক এটি পড়তে পারে এবং যদি প্রত্যেকে নিজের বাক্য গঠনটি আবিষ্কার করে তবে অন্য কারও কোডটি বুঝতে সক্ষম হবে না। .... সুতরাং এই ভাষাটি কোনও শখের জন্য মজাদার হতে পারে তবে ব্যবহারিক কোনও কিছুর জন্য খুব বেশি ব্যবহার নয়।

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

ফলস্বরূপ, ডিএসএলগুলি বাস্তবায়নের জন্য লিস্পস বিশেষভাবে জনপ্রিয় হয়ে থাকে। ক্লোজুরে (কোর্মা) -এর ডেটা অ্যাক্সেস ডিএসএল হ'ল একটি দুর্দান্ত উদাহরণ যা ডেটাবেস অ্যাক্সেসের জন্য প্রয়োজনীয় সমস্ত বয়লারপ্লিট কোডের যত্ন করে।


2

স্কেল প্রায়শই এই পদ্ধতিতে ডিএসএল, ডোমেন নির্দিষ্ট ভাষাগুলি তৈরি করতে ব্যবহৃত হয়।

মূলত এটি হ'ল স্কালার কোনও অপারেটর নেই এবং স্কাল পদ্ধতিতে কলিং সিনট্যাক্স সংক্ষেপে সংক্ষেপে বলা যায়। এই ক্ষেত্রে:

5 একটি পূর্ণসংখ্যার বস্তু। 5 প্লাস 7 গণনা করতে আপনি লিখতে পারেন

ভাল উত্তর = ৫ এড ()) ব্যতীত অতিরিক্ত পদ্ধতির প্রকৃত নাম "+" রাখা হয়েছে যাতে আপনি লিখতে পারেন:

ভাল উত্তর = 5। + (7) তবে স্কালায় আপনাকে "অন্তর্ভুক্ত করার দরকার নেই।" পদ্ধতি কলগুলিতে বা প্যারেনেসিসগুলি "()" চারপাশে আর্গুমেন্টের কাছে যাতে 5 অবজেক্টে + পদ্ধতিটি কল করার জন্য আপনি লিখবেন

ভাল উত্তর = 5 + 7 যা নিখুঁতভাবে কাজ করে কারণ স্কালায় আপনার চতুর পদ্ধতি নামকরণ প্রকল্পে কোন হস্তক্ষেপ করতে অপারেটর নেই। এখন এই ধারণাটি আপনার নিজের ক্লাস এবং অবজেক্টগুলিতে প্রসারিত করুন, এই বিষয়টি সহ যে আপনি "ওভাররাইড" করতে পারবেন যেমন ++ এর মতো আপনার নিজস্ব পদ্ধতি >>> বা :: নামে তৈরি করা যায়! অথবা @ * @ বা ঠিক ফ্যানসিফাইয়ের মতো সাধারণ পাঠ্যের নাম।


এটা সত্যিই দারুন. আমি স্ক্যালায় একটি চেহারা দেব।
ডক্কাত

1

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

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

সের্গেই দিমিত্রিভ আরও বিশদে এটি ব্যাখ্যা করেছেন

এটি এর আদর্শ, তবে ব্যবহারিকভাবে এটি ফুটে যায় যে এটি আপনি যে আচরণের জন্য বলছেন তা সমর্থন করে supports আপনি পারেন:

  • একটি বিদ্যমান ভাষা প্রসারিত করুন।
  • বিভিন্ন ভাষায় রচনা করুন।
  • আপনার নতুন সংজ্ঞায়িত কীওয়ার্ডগুলিকে বেস ভাষাতে রূপান্তর করতে একটি বিদ্যমান 'রূপান্তর ভাষা' ব্যবহার করুন।

এই দৃষ্টান্তটি অনুসরণ করার বিষয়ে আমি জানি যে সক্রিয় প্রোগ্রামিং পরিবেশটি হ'ল জেটব্রেইনস দ্বারা নিখরচায় মেটা প্রোগ্রামিং সিস্টেম (এমপিএস)।

এটি আসলে বাণিজ্যিক সফ্টওয়্যারটিতেও ব্যবহার শুরু হয়, তাই সম্ভবত এটি 'পরীক্ষামূলক' পর্যায়ে থেকে বেরিয়ে আসতে শুরু করেছে:

  • রিল্যাক্সি হ'ল সম্পূর্ণভাবে এমপিএস-এর শীর্ষে নির্মিত একটি অ্যাক্সেসক্রিপ সম্পাদক। এলওপির শক্তি ব্যবহার করে তারা এএস 3-র জন্য উদাহরণস্বরূপ ক্লোজার বাস্তবায়ন করতে সক্ষম হয়েছিল।
  • এমবেড্ডার সি এমপিএস-এর ভিত্তিতে একটি এক্সটেনসিবল সি ভাষা।

1

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

আর একটি ভাষা যা ডিএসএলকে সহজ করে তোলে তা হ'ল স্ট্যান্ডার্ড এমএল, যা আপনাকে জেনেরিক সিস্টেম টোকেনাইজারের বাইরে কাঁচা টোকেন অ্যাক্সেসের অনুমতি দেয় (আইডেন্টিফায়ারদের কীওয়ার্ডগুলিতে রূপান্তরিত করার আগে) before এটি ডিএসএলগুলির একটি বিস্তৃত শ্রেণিকে করা সহজ করে তোলে - তবে তারা এসএমএলের কিছু বেসিক সিনট্যাক্স নিয়ম মেনে চলে, বিশেষত মন্তব্য, স্ট্রিং এবং টোকেন সীমানার ক্ষেত্রে - এবং ভাষার পক্ষে মূল চালিত অ্যাপ্লিকেশনগুলির বেশিরভাগ ক্ষেত্রে এটি ব্যবহৃত হয় (উপপাদ্য প্রবাদসমূহ, ইত্যাদি)

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


0

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


0

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

এটি জাভাস্ক্রিপ্টের জন্য একটি ব্যাকরণ উপলব্ধ বলে মনে হচ্ছে । তবে, আগে এটি ব্যবহার না করে, নিশ্চিত যে এটি আপনাকে কীভাবে সাহায্য করবে I'm


0

পিপিউইজার্ড নামে একটি দুর্দান্ত প্রিপ্রসেসর রয়েছে, বেশ শক্তিশালী। একবার আপনি এর বাক্য গঠনটি শিখলে আপনি বিভিন্ন ভাষা লক্ষ্য করে ম্যাক্রো ডিফ তৈরি করতে পারেন - এটি যে এটির জন্য নির্বোধ বা মজাদার নয়, তবে এটি একটি দরকারী সরঞ্জাম।


এখানে কয়েকটি লিঙ্ক রয়েছে: পিপিডাব্লিজার্ড সামগ্রী (অফিসিয়াল ডক্স), পিপিউইজার্ড - ইডিএম 2 (একটি বাহ্যিক রেফ)। সরঞ্জামটি শক্তিশালী, তবে এর ডকুমেন্টেশনগুলি পড়া সহজ নয় (সম্ভবত এটি শক্তির কারণে)।
ওল্ফ

0

আপনি যা সন্ধান করছেন তা সংকলক সংকলক হিসাবে হতে পারে। একটি সংকলক সংকলক আনুষ্ঠানিক ভাষায় লিখিত ভাষার সংজ্ঞা গ্রহণ করে এবং এই ভাষার জন্য একটি সংকলক তৈরি করে।

Http://en.wikedia.org/wiki/Compiler-compiler এ একবার দেখুন


0

কোনও প্রোগ্রামিং ল্যাঙ্গুয়েজ আংশিকভাবে ব্যক্তিগতকরণের একটি সাধারণ উপায় হ'ল ম্যাক্রো প্রি-প্রসেসর ব্যবহার করা। উদাহরণস্বরূপ আপনি "ডক্কাট-ল্যাং" চালাতে পারেন যদিও সি প্রিপ্রসেসর ফলাফল রাখার আগে যেখানে কিছু জাভাস্ক্রিপ্ট পরিবেশ এটি ডাউনলোড করবে।

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

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