অনেকেই প্রতিদিন যে প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করেন তাতে সমস্যা বা হতাশা থাকে। কেউ কেউ জিনিসগুলিকে আরো বিমূর্তভাবে পরিচালনা করতে চায়, অন্যরা তাদের বৈশিষ্ট্যগুলি বাস্তবায়নের অপছন্দ করে যা তারা চায় 'স্ট্যান্ডার্ড'। আপনি একজন আইটি পেশাজীবী বা শুধু একজন শখের মানুষ, অনেক সময় আপনি নিজেকে একটি নতুন প্রোগ্রামিং ভাষা তৈরি করতে চান।
ধাপ
ধাপ 1. প্রযুক্তির সাথে পরিচিত হন।
আপনি যদি কম্পিউটার ব্যবহার করতে না জানেন তবে আপনি একটি প্রোগ্রামিং ভাষা তৈরি করতে পারবেন না।
ধাপ 2. পরিভাষার সাথে পরিচিত হন।
কম্পাইলার লেখকরা প্রায়ই অপরিচিত পরিভাষা ব্যবহার করেন। এগিয়ে যাওয়ার আগে কম্পাইলার পড়ুন। আপনার যা জানা দরকার তা অবশ্যই জানুন।
ধাপ 3. আপনার ভাষা কোন সমস্যার সমাধান করছে তা স্থির করুন।
এটি কি একটি ডোমেইন-নির্দিষ্ট সমস্যার সমাধান করছে, নাকি এটি একটি সাধারণ উদ্দেশ্যমূলক ভাষা?
ধাপ 4. আপনার ভাষার শব্দার্থবিদ্যা এবং এর ধারণাগুলি সম্পর্কে চিন্তা করুন।
- আপনি কি সরাসরি পয়েন্টার অ্যাক্সেসের অনুমতি দিচ্ছেন নাকি?
- আপনার ভাষার ডেটা প্রকার কি?
- এটি একটি স্ট্যাটিক বা গতিশীল ভাষা?
- আপনার স্মৃতি মডেল কি? আপনি একটি আবর্জনা সংগ্রহকারী বা ম্যানুয়াল মেমরি ব্যবস্থাপনা ব্যবহার করতে যাচ্ছেন? (যদি আপনি একটি আবর্জনা সংগ্রহকারী ব্যবহার করেন, একটি লিখতে বা আপনার ভাষায় একটি বিদ্যমান মানিয়ে নিতে প্রস্তুত করুন।)
- কনকুরেন্সি কিভাবে পরিচালনা করবেন? আপনি কি একটি সাধারণ থ্রেডিং/লকিং মডেল বা লিন্ডা বা অভিনেতা মডেলের মতো জটিল কিছু ব্যবহার করতে যাচ্ছেন? (যেহেতু আজকাল কম্পিউটারে একাধিক কোর থাকে।)
- আদিম ফাংশন কি ভাষায় এম্বেড করা আছে নাকি সবকিছুই লাইব্রেরি থেকে আসবে?
- আপনার ভাষার দৃষ্টান্ত বা দৃষ্টান্ত কি? কার্যকরী? অবজেক্ট ওরিয়েন্টেড? প্রোটোটাইপ (জাভাস্ক্রিপ্টের মত)? দৃষ্টিভঙ্গি? টেমপ্লেট ওরিয়েন্টেড? নাকি সম্পূর্ণ নতুন কিছু?
- কিভাবে আপনার ভাষা বিদ্যমান লাইব্রেরি এবং ভাষা (প্রধানত সি) সঙ্গে ইন্টারফেস যাচ্ছে? আপনি যদি একটি ডোমেন-নির্দিষ্ট ভাষা তৈরি করেন তবে এই পয়েন্টটি গুরুত্বপূর্ণ।
- অবশেষে, এই প্রশ্নগুলির কিছু উত্তর দ্বিতীয় ধাপে উত্তর দেওয়া হবে এবং পরবর্তী ধাপের উত্তর দিতে আপনাকে সাহায্য করবে।
ধাপ 5. এমন কিছু নির্দিষ্ট কাজের কথা চিন্তা করুন যা কেউ আপনার ভাষা দিয়ে করতে সক্ষম হতে চায়।
উদাহরণস্বরূপ, 'তারা একটি রোবটকে একটি লাইন অনুসরণ করতে নির্দেশ দিতে পারে' অথবা 'তারা এতে অপেক্ষাকৃত বহনযোগ্য ডেস্কটপ প্রোগ্রাম তৈরি করতে চাইতে পারে' অথবা 'তারা এর সাথে ওয়েব অ্যাপ্লিকেশন তৈরি করতে চাইতে পারে'।
পদক্ষেপ 6. উপরের উদাহরণগুলির জন্য বাক্য গঠন ধারণা (ভাষার পাঠ্য) নিয়ে পরীক্ষা করুন।
আপনার ভাষাকে প্রেক্ষাপটমুক্ত ভাষা বিভাগে বা এর ভিতরে কিছু রাখতে সতর্ক থাকুন। আপনার পার্সার জেনারেটর এবং আপনি পরে এটির প্রশংসা করবেন।
ধাপ 7. সিনট্যাক্সের জন্য একটি আনুষ্ঠানিক ব্যাকরণ লিখুন।
ধাপ 8. ভাষাটি ব্যাখ্যা করা হবে বা সংকলিত হবে কিনা তা স্থির করুন।
এর মানে হল যে ব্যাখ্যার জগতে আপনার ব্যবহারকারী সাধারণত একটি এডিটরে আপনার প্রোগ্রাম সম্পাদনা করবেন, এবং এটি সরাসরি দোভাষীর উপর চালাবেন; সংকলিত বিশ্বে থাকাকালীন, আপনার ব্যবহারকারী আপনার প্রোগ্রাম সম্পাদনা করবে, এটি সংকলন করবে, ফলে সঞ্চালনযোগ্য কোথাও সংরক্ষণ করবে এবং এটি চালাবে।
ধাপ 9. ফ্রন্ট এন্ড স্ক্যানার এবং পার্সার লিখুন অথবা এমন একটি টুল খুঁজুন যা আপনাকে সাহায্য করে।
এছাড়াও, আপনার কম্পাইলার/দোভাষী আপনার ব্যবহারকারীকে ভুল প্রোগ্রাম এবং সিনট্যাক্স ত্রুটি সম্পর্কে কীভাবে সতর্ক করবেন সে সম্পর্কে চিন্তা করুন।
ধাপ 10. বস্তু কোড বা একটি মধ্যবর্তী উপস্থাপনা লিখতে পার্সার তথ্য ব্যবহার করুন।
পার্সার একটি AST তৈরি করুন, তারপর তিনটি ঠিকানা কোড বা তার বড় ভাই SSA ব্যবহার করে AST থেকে আপনার অবজেক্ট কোড তৈরি করুন, তারপর আপনার ফাংশন, গ্লোবাল ভেরিয়েবল ইত্যাদি সংজ্ঞায়িত করার জন্য একটি প্রতীক টেবিল তৈরি করুন।
এছাড়াও, আপনার ভাষার উপর নির্ভর করে, আপনি আপনার ক্লাসের জন্য ভার্চুয়াল পয়েন্টার টেবিল বা তথ্য টেবিল তৈরি করতে চাইতে পারেন (প্রতিফলন বা RTTI সমর্থন করার জন্য)।
ধাপ 11. এক্সিকিউটর বা কোড জেনারেটর লিখুন যা সবকিছু একসাথে আবদ্ধ করবে।
ধাপ 12. ভাষা পরীক্ষা করার জন্য অনেক পরীক্ষা প্রোগ্রাম লিখুন।
আপনি এমন প্রোগ্রাম তৈরি করতে চান যা আপনার আনুষ্ঠানিক ব্যাকরণের বোঝা চাপিয়ে দেয় যাতে আপনার কম্পাইলার আপনার সংজ্ঞার ভিতরে থাকা সবকিছু গ্রহণ করে এবং এর বাইরে থাকা সবকিছু প্রত্যাখ্যান করে।
ধাপ 13. ব্যবহারকারী কিভাবে তাদের নিজস্ব প্রোগ্রাম ডিবাগ করবেন তা বিবেচনা করুন।
ধাপ 14. যদি আপনার ভাষা একটি আদর্শ লাইব্রেরি ব্যবহার করে, আপনি এটি লিখতে চাইবেন।
আবর্জনা সংগ্রাহক বা অন্যান্য রানটাইম বৈশিষ্ট্যগুলির সাথে যদি আপনার প্রয়োজন হয়।
বিশেষ করে, যদি আপনি একটি কম্পাইলার লিখেন, তাহলে ইউজার কোড চালানো শুরু করার জন্য অপারেটিং সিস্টেম যে কোডটি সম্পাদন করবে তার প্রয়োজন হবে (উদাহরণস্বরূপ, সমস্ত গ্লোবাল ভেরিয়েবল বরাদ্দ করা)।
ধাপ 15. আপনার ভাষা প্রকাশ করুন, এর জন্য স্পেসিফিকেশন এবং আপনি এতে কী করতে পারেন তার কিছু উদাহরণ।
আপনি কিভাবে বিদ্যমান লাইব্রেরি, ভাষা এবং রানটাইম ফিচার এবং/অথবা স্ট্যান্ডার্ড লাইব্রেরি কিভাবে ব্যবহার করবেন তার সাথে নথিভুক্ত করতে ভুলবেন না।
ভিডিও - এই পরিষেবাটি ব্যবহার করে, কিছু তথ্য ইউটিউবের সাথে শেয়ার করা যেতে পারে।
পরামর্শ
- আপনার ভাষা নকশা করে শুরু করুন এবং কোন কোড লিখবেন না, যতক্ষণ না আপনি সন্তুষ্ট না হন এবং আপনার নকশা সম্পর্কিত সমস্ত প্রশ্ন (বা বেশিরভাগ) এর উত্তর না দিয়ে থাকেন, কারণ পরবর্তী সময়ের তুলনায় নকশা পরিবর্তন করা সহজ।
- আপনার কম্পাইলার/দোভাষীর জন্য আপনার টার্গেট প্ল্যাটফর্ম (অপারেটিং সিস্টেম এবং লাইব্রেরি) জানুন, সর্বোপরি, আপনি এটি ব্যবহার করতে যাচ্ছেন এবং ম্যানিপুলেট করতে চলেছেন।
সতর্কবাণী
- আপনার যদি সত্যিই একটি নতুন ভাষার প্রয়োজন হয়, এবং আপনার ভাষায় নতুন কি আছে যা অন্য ভাষায় নেই (এটি বৈশিষ্ট্যগুলির সমন্বয় বা একক বৈশিষ্ট্য হতে পারে) ভাবুন।
- আপনি কি করছেন তা না জানলে ভাষা লেখা কঠিন। এটা অনেক অনুশীলন লাগে, এছাড়াও।
- ভাষা নকশায় কিছু সময় কাটানোর জন্য প্রস্তুতি নিন, যেহেতু আপনি কম্পাইলার লিখে ডিজাইন পয়েন্ট পেরিয়ে গেলে আপনার ভাষা পরিবর্তন করার সুযোগ থাকবে না।
- আপনার বৈশিষ্ট্যগুলিকে বিভিন্ন ভাষার মিলনে পরিণত করার চেষ্টা করবেন না, যেমন আপনার ভাষা ভাষা X, ভাষা Y এবং ভাষা Z- এর মিলন হবে। অথবা প্রত্যেকে সি ভিত্তিক কোন কিছুর পরিবর্তে PL/1 প্রোগ্রামিং করবে।