আমি সম্প্রতি স্ট্যাক-ভিত্তিক প্রোগ্রামিং ভাষা লেখার কাজটি হাতে নিয়েছি। আমি অবশ্য আমার ভাষা ডিজাইনিং করার আগে ভেবেছিলাম বিদ্যমান স্ট্যাক-ভিত্তিক ভাষাগুলি পড়া এবং পরীক্ষা করা ভাল ধারণা হবে idea
এটি আমাকে এই পোস্টের বিষয়টিতে নিয়ে আসে। আমি ফোর্থে উইকিপিডিয়া নিবন্ধের মাধ্যমে পড়ছিলাম , একটি স্ট্যাক-ভিত্তিক ভাষা যা পোস্টফিক্স শৈলী এক্সপ্রেশন ব্যবহার করে। নিবন্ধে, আমি নীচের বিবৃতিটি দেখেছি:
ফোরের নমনীয়তা একটি স্ট্যাটিক বিএনএফ ব্যাকরণকে অনুপযুক্ত করে তোলে এবং এতে একক সংকলক নেই। সংকলক প্রসারিত করার জন্য ব্যাকরণ সংশোধন করে অন্তর্নিহিত বাস্তবায়ন পরিবর্তনের পরিবর্তে কেবল একটি নতুন শব্দ লেখা দরকার।
আমার বোধগম্যতা থেকে, ফোর্থ লিঙ্গোতে, "শব্দ" শব্দটি মূলত "সাব্রোটিন" এর সমার্থক বলে মনে হয়। এটি দেওয়া, উপরের বিবৃতিটি অদ্ভুত বলে মনে হচ্ছে। কেন ঠিক ফোর্থে নতুন ফাংশন তৈরির ক্ষমতাটি ফোর্থের জন্য একটি আনুষ্ঠানিক ব্যাকরণ তৈরি করবে? আপনি যে প্রতিটি নতুন সাবউটাইন নির্ধারণ করেছেন তার জন্য ব্যাকরণটি কেন আবার লিখতে হবে? পরিবেশে একটি নতুন শব্দ লেখার সংকলকটি প্রসারিত করে কীভাবে? উপরের বিবৃতিটি পাইথনের পক্ষে একটি আনুষ্ঠানিক ব্যাকরণ অনুপযুক্ত বলে মনে হয়, কারণ আপনি নতুন কার্যগুলি সংজ্ঞায়িত করতে পারেন।
আসলে, আমি নীচে ফোর্থের একটি সাধারণ উপসেটের জন্য একটি বিএনএফ স্টাইলের ব্যাকরণ লেখার চেষ্টা করার সিদ্ধান্ত নিয়েছি:
program ::= stmt+
stmt ::= func | expr
func ::= ':' expr+ ';'
expr ::= INTEGER | word
word ::= ('+' | '-' | '*' | '/' )
উপরের ব্যাকরণটি ফোর স্টেটমেন্টগুলির একটি বৈধ উপসেট আবৃত করে বলে মনে হচ্ছে, এবং ফোর্থ ভাষায় সমস্ত বৈধ বিবৃতি কভার করার পক্ষে প্রসারিত করা কঠিন বলে মনে হয় না। তদুপরি, যদি কোনও সংকলকের পার্সার উপরের ব্যাকরণটি প্রয়োগ করে তবে কম্পাইলারটি কীভাবে বাড়ানো হবে তা আমি দেখতে ব্যর্থ। সংকলক সহজেই এর পরিবেশে কোনও নতুন শব্দ যুক্ত করবে । কেবল পরিবেশ বদলে যায়। এটা প্রায় হিসাবে যদি উইকিপিডিয়া থেকে উপরে উদ্ধৃতাংশ নিম্নরেখাঙ্কিত কোডটি কম্পাইলার composes (যা পরিবর্তন করে না) conflating হয় বলে মনে হয় সঙ্গে কম্পাইলার এর পরিবেশ (যা পরিবর্তন না)।
সংক্ষেপে, কেন ফোর্থের নতুন শব্দগুলি (সাব্রুটাইনস) সংজ্ঞায়িত করা লিখিত ব্যাকরণের পক্ষে অনুপযুক্ত?