আপনি কি বিস্ময়কর কিন্তু রহস্যময় টুলস প্রোগ্রামিং ভাষা খুঁজে পান? যদি আপনাকে তাদের হুডের নীচে উঁকি দেওয়ার এবং বুঝতে সুযোগ দেওয়া হয় যে তারা কী কাজ করে? আপনি যদি আপনার হাত নোংরা করার এবং স্ক্র্যাচ থেকে একটি প্রোগ্রামিং ভাষা বিকাশের সম্ভাবনায় আগ্রহী হন, তাহলে এই ব্লগ পোস্ট এবং এই সিরিজের নিম্নলিখিত পোস্টগুলি সহায়ক হবে৷
নিবন্ধগুলির একটি সিরিজে, আমরা ধাপে ধাপে একটি খুব সহজ ব্যাখ্যা করা, গতিশীলভাবে টাইপ করা প্রোগ্রামিং ভাষা তৈরি করব। যাইহোক, আপাতত, চিন্তা করবেন না যদি আপনি এই পদগুলির সঠিক অর্থ সম্পর্কে কিছুটা অনিশ্চিত হন বা হাতের কাজটি দেখে কিছুটা ভয় পান। আমরা দোভাষী বাস্তবায়নের জন্য সুন্দর রুবি প্রোগ্রামিং ভাষা ব্যবহার করব এবং প্রতিটি ধাপ পরিষ্কারভাবে ব্যাখ্যা করব যাতে নবীন এবং উন্নত বিকাশকারী উভয়ই অনুসরণ করতে পারে। আমরা এই ভাষার নামকরণ করছি 'Stoffle' একটি সুন্দর দক্ষিণ আফ্রিকান মধু ব্যাজারের প্রতি শ্রদ্ধা জানিয়ে যা এই নামে চলে।
কেন একটি প্রোগ্রামিং ভাষা তৈরি করবেন?
Stoffle সম্ভবত পাইথন বা রুবি প্রতিস্থাপন করবে না। সুতরাং, কেন এটি বিকাশ বিরক্ত? মজা করার পাশাপাশি, আমি এই সিরিজে যা দেখানোর আশা করি তা হল একটি ভাষা তৈরি করা একটি দুর্দান্ত প্রোগ্রামিং অনুশীলন। এই অভিজ্ঞতা থেকে একাধিক সুবিধা পাওয়া যেতে পারে:
-
এটি প্রোগ্রামিং ভাষাকে রহস্যময় করে তোলে (এবং বিকাশকারী সরঞ্জামগুলি, প্রক্সি দ্বারা) এবং আমাদের নিজেদেরকে শুধুমাত্র এই সরঞ্জামগুলির ভোক্তা হিসাবে নয় বরং প্রয়োজন বা ইচ্ছার নির্দেশ দিলে আমাদের নিজস্ব পরিকল্পনা করতে সক্ষম নির্মাতা হিসাবেও দেখতে দেয়;
-
এই অনুশীলনটি কিছু অস্বাভাবিক প্রোগ্রামিং চ্যালেঞ্জ উপস্থাপন করবে যেটা আমাদের অধিকাংশই আমাদের দৈনন্দিন জীবনে মুখোমুখি হয় না;
-
এছাড়াও আমরা প্রোগ্রামিং ল্যাঙ্গুয়েজ ইমপ্লিমেন্টেশনের ক্ষেত্রের বাইরে দরকারী উপাদান সম্পর্কেও শিখব . একটি পার্সার ব্যবহার করা যেতে পারে একটি মিলিয়ন ক্রিপ্টিক রেগুলার এক্সপ্রেশনের পরিবর্তে মোকাবেলা করার জন্য, উদাহরণস্বরূপ, সেই সমস্যাযুক্ত লিগ্যাসি টেক্সট ফাইলটি আপনার বস বলেছেন এখন আপনি যে সিস্টেমে কাজ করছেন তাতে ডেটা আমদানির জন্য একটি নতুন প্রক্রিয়া হিসাবে সমর্থিত হতে হবে৷
কীভাবে একটি প্রোগ্রামিং ভাষা কাজ করে?
এই প্রকল্পে আমাদের সামনে কী রয়েছে তা একবার দেখার আগে, আসুন প্রথমে জুম আউট করুন এবং কম্পিউটারে একটি প্রোগ্রাম কীভাবে চলে তা বোঝা যাক। আপনি কল্পনা করতে পারেন, একটি CPU সরাসরি রুবির মতো উচ্চ-স্তরের ভাষা সমর্থন করে না। CPU-তে, যদিও, খুব নিম্ন-স্তরের নির্দেশাবলীর একটি সিরিজ রয়েছে যা তারা তাদের আর্কিটেকচারের উপর নির্ভর করে সমর্থন করে।
আপনি যদি কৌতূহলী হন, গবেষণা করুন, উদাহরণস্বরূপ, x86 আর্কিটেকচার, যা খুব সম্ভবত আপনার কম্পিউটারকে শক্তি দেয় যদি আপনি এই নিবন্ধটি একটি PC বা Mac এ পড়ছেন।
সুতরাং, একটি প্রোগ্রামিং ভাষার কাজ হল এর উচ্চ-স্তরের কোডকে মেশিন কোডে রূপান্তরিত করা যা CPU বুঝতে পারে। এই কাজটি সম্পন্ন করার জন্য প্রচুর কৌশল ব্যবহার করা হয়। Stoffle হবে একটি ব্যাখ্যা করা ভাষা, যার মানে প্রোগ্রামটি চলাকালীন দোভাষী Stoffle এর সোর্স কোডকে মেশিন কোডে অনুবাদ করবে।
সংকলিত ভাষা, যেমন সি, একটি ভিন্ন প্রাণী। তাদের একটি সংকলন পদক্ষেপ রয়েছে যা অনুবাদ করে এবং বাইনারি তৈরি করে (অর্থাৎ, মেশিন কোডে রূপান্তরিত উৎস) লক্ষ্য CPU দ্বারা কার্যকর করার জন্য প্রস্তুত। আরেকটি কৌশল হল একটি সোর্স ফাইলকে অন্য (প্রায়ই, উচ্চ-স্তরের) ভাষায় কম্পাইল করা যা ইতিমধ্যেই বিদ্যমান; এই কৌশলটিকে সাধারণত 'ট্রান্সপিলেশন' বলা হয়।
মনে রাখবেন, যদিও, বাস্তব-বিশ্বের ভাষাগুলির সাথে কাজ করার সময় জিনিসগুলি ততটা স্পষ্ট নয়। তারা সাধারণত এই সমস্ত (এবং অন্যান্য) বিভিন্ন বাস্তবায়ন কৌশলগুলির দিক এবং কৌশলগুলি এক বা অন্যভাবে গ্রহণ করে। আমরা আপনাকে মৌলিক বিষয়গুলি কভার করার পরে আপনার পছন্দের ভাষা কোন পথ অনুসরণ করে সে সম্পর্কে আরও গবেষণা করতে উত্সাহিত করি৷
স্টফলের একটি পাখির চোখের দৃশ্য
পূর্বে উল্লিখিত হিসাবে, Stoffle হবে একটি প্রাথমিক, ব্যাখ্যা করা, গতিশীলভাবে টাইপ করা প্রোগ্রামিং ভাষা। এটিতে শুধুমাত্র কয়েকটি মৌলিক ডেটা টাইপ থাকবে, চারটি প্রাথমিক গাণিতিক অপারেটর, তুলনা এবং সমতা, লজিক্যাল অপারেটর, if / else, যখন লুপ, ফাংশন এবং কনসোলে প্রিন্ট করার ক্ষমতা।
ট্রিভিয়া:স্টফলের মতো ভাষা যার প্রাথমিক উদ্দেশ্য শেখা এবং পরীক্ষা করা প্রায়ই খেলনার ভাষা বলা হয় .
Stoffle এর দোভাষী আমাদের বিশ্বস্ত এবং প্রিয় রুবি ব্যবহার করে প্রয়োগ করা হবে, যেমনটি আগে উল্লেখ করা হয়েছে। যখন আমরা আমাদের দোভাষীকে বরখাস্ত করি (stoffle hello_world.sfe
), আমাদের সোর্স ফাইলটি চালানোর আগে যে উপাদানগুলি এবং পর্যায়গুলি অতিক্রম করবে তা নিম্নরূপ:
আমাদের দোভাষীর অংশ এবং যখন একটি .sfe ফাইল চালানো হয় তখন কি হয়।
লেক্সার
একটি স্ক্যানার হিসাবেও পরিচিত, লেক্সারের লক্ষ্য হল অক্ষরের একটি সাধারণ স্ট্রিংকে সংবেদনশীল গ্রুপিংয়ে রূপান্তর করা যা সাধারণত 'টোকেন' নামে পরিচিত। কল্পনা করুন আমরা my_var.
নামে একটি ভেরিয়েবল ঘোষণা করি আমাদের লেক্সার এই অক্ষরগুলি পড়বে এবং একটি Token::VARIABLE
তৈরি করবে টোকেন।
পার্সার
যখন আমরা সোর্স কোডের কথা চিন্তা করি, তখন এর নেস্টেড প্রকৃতি অনস্বীকার্য। একটি শর্তাধীন অভিব্যক্তি বিবেচনা করুন, উদাহরণস্বরূপ; শর্তের মূল্যায়নের ফলাফলের উপর নির্ভর করে এর সত্য এবং মিথ্যা শাখাগুলি নেস্ট করা হয় এবং কার্যকর করা হয়৷
পার্সারের প্রধান কাজ হল টোকেনগুলির একটি সমতল ক্রমকে একটি ডেটা কাঠামোতে রূপান্তর করা যা তাদের মধ্যে বিদ্যমান সম্পর্কগুলিকে উপস্থাপন করতে পারে। পার্সারের আরেকটি গুরুত্বপূর্ণ ফাংশন হল সিনট্যাক্স ত্রুটির রিপোর্ট করার মাধ্যমে কখন আমরা গোলমাল করেছি তা আমাদের জানানো৷
দোভাষী
Stoffle এর দোভাষী সহজ হবে এবং পার্সার দ্বারা উত্পাদিত ডেটা কাঠামোর সাথে সরাসরি কাজ করবে। দোভাষী এই কাঠামোটি টুকরো টুকরো বিশ্লেষণ করবে এবং এটি যেমন যায় তা কার্যকর করবে।
স্টফল প্রোগ্রামিং ভাষায়, মেশিন কোডে রূপান্তর ঘটতে চলেছে কারণ দোভাষী নিজেই একটি রুবি প্রোগ্রাম হতে চলেছে (এবং আমরা যখন এটি চালাচ্ছি তখন রুবির দোভাষী দ্বারা ব্যাখ্যা করা হবে!)।
র্যাপিং আপ
আজকের নিবন্ধে, আমরা স্টফলকে জীবিত করতে আমরা যে পদক্ষেপগুলি নেব তার একটি মোটামুটি ওভারভিউ উপস্থাপন করেছি। আমি আশা করি আপনি আমার মতোই উত্তেজিত এবং আমি আপনাদের মধ্যে যারা প্রাথমিকভাবে ভেবেছিলেন যে একটি প্রোগ্রামিং ভাষা প্রয়োগ করা নিছক মানুষের নাগালের বাইরে ছিল তাদের মধ্যে আমি আস্থা তৈরি করতে সক্ষম হয়েছি।
এই সিরিজের পরবর্তী ব্লগ পোস্টে, আমরা Stoffle's lexer প্রয়োগ করে আমাদের হাত নোংরা করা শুরু করব, যার মানে হল যে পরবর্তী পোস্টের শেষ নাগাদ, আমরা Stoffle সোর্স কোড পড়তে এবং একটি রূপান্তর করতে সক্ষম একটি রুবি প্রোগ্রাম তৈরি করব। টোকেনগুলির আরও সুগঠিত (এবং আকর্ষণীয়!) অনুক্রমে অক্ষরগুলির নমনীয় ক্রম।
এই সিরিজের পরবর্তী কিস্তিতে শীঘ্রই দেখা হবে!