Compiler Description Language
কম্পাইলার ডিসক্রিপশন ল্যাঙ্গুয়েজ (সি. ডি. এল) হল অ্যাফিক্স ব্যাকরণের উপর ভিত্তি করে তৈরি একটি প্রোগ্রামিং ভাষা। এটি ব্যাকাস-নৌর ফর্ম (বি. এন. এফ) স্বরলিপির সাথে খুব মিল। এটি কম্পাইলারগুলির বিকাশের জন্য ডিজাইন করা হয়েছিল। এটি তার ক্ষমতা এবং নিয়ন্ত্রণ প্রবাহে খুব সীমিত, এবং ইচ্ছাকৃতভাবে তাই। এই সীমাবদ্ধতার সুবিধা দ্বিগুণ। একদিকে, তারা সিডিএল2 অপ্টিমাইজার দ্বারা ব্যবহৃত পরিশীলিত তথ্য এবং নিয়ন্ত্রণ প্রবাহ বিশ্লেষণকে সম্ভব করে তোলে যার ফলে অত্যন্ত দক্ষ কোড তৈরি হয়। অন্য সুবিধাটি হল যে তারা একটি অত্যন্ত মৌখিক নামকরণের প্রথা গড়ে তোলে। ফলস্বরূপ, এটি এমন প্রোগ্রামগুলির দিকে পরিচালিত করে যা অনেকাংশে স্ব-নথিভুক্ত। ভাষাটি দেখতে কিছুটা প্রোলগের মতো (এতে অবাক হওয়ার কিছু নেই কারণ উভয় ভাষাই প্রায় একই সময়ে অ্যাফিক্স ব্যাকরণের কাজ থেকে উদ্ভূত হয়েছিল)। যাইহোক, প্রোলগের বিপরীতে, সিডিএল-এ নিয়ন্ত্রণ প্রবাহ নির্ধারণমূলকভাবে সাফল্য/ব্যর্থতার উপর ভিত্তি করে, অর্থাৎ, বর্তমানটি সফল হলে অন্য কোনও বিকল্প চেষ্টা করা হয় না। এই ধারণাটি অভিব্যক্তি ব্যাকরণ বিশ্লেষণের ক্ষেত্রেও ব্যবহৃত হয়। সিডিএল3 হল সিডিএল ভাষার তৃতীয় সংস্করণ, যা আগের দুটি সংস্করণের থেকে উল্লেখযোগ্যভাবে আলাদা। 1971 সালে প্রকাশিত নিজমেগেন বিশ্ববিদ্যালয়ের কর্নেলিস এইচ. এ. কোস্টার দ্বারা পরিকল্পিত মূল সংস্করণটির একটি অস্বাভাবিক ধারণা ছিলঃ এর কোনও মূল ছিল না। একটি সাধারণ প্রোগ্রামিং ভাষার উৎস মেশিন নির্দেশাবলী বা সেই নির্দেশাবলীর টিনজাত ক্রমগুলিতে অনুবাদ করা হয়। এগুলি মূল প্রতিনিধিত্ব করে, প্রদত্ত ভাষাটি সমর্থন করে এমন সবচেয়ে মৌলিক বিমূর্ততা। এই ধরনের আদিম সংখ্যা যোগ করা, একে অপরের সাথে চলক অনুলিপি করা ইত্যাদি হতে পারে। সি. ডি. এল. 1-এ এই ধরনের মূল অংশের অভাব রয়েছে। প্রোগ্রামারের দায়িত্ব হল আদিম ক্রিয়াকলাপগুলি এমন একটি আকারে সরবরাহ করা যা পরে একটি ঐতিহ্যবাহী ভাষার জন্য একটি অ্যাসেম্বলার বা সংকলকের মাধ্যমে মেশিন নির্দেশাবলীতে পরিণত করা যেতে পারে। সিডিএল1 ভাষার নিজস্ব কোনও আদিম ধারণা নেই, যান্ত্রিক শব্দ ছাড়া তথ্য প্রকারের কোনও ধারণা নেই (সঞ্চয়ের একটি বিমূর্ত একক-অগত্যা একটি বাস্তব যান্ত্রিক শব্দ নয়)। মূল্যায়নের নিয়মগুলি ব্যাকাস-নৌর ফর্মের বাক্য গঠন বিবরণের অনুরূপ; প্রকৃতপক্ষে, বি. এন. এফ-এ বর্ণিত একটি ভাষার জন্য একটি পার্সার লেখা সি. ডি. এল 1-এ বরং সহজ। মূলত, ভাষা নিয়ম নিয়ে গঠিত। একটি নিয়ম সফল বা ব্যর্থ হতে পারে। একটি নিয়ম বিকল্প নিয়ে গঠিত যা অন্যান্য নিয়মের আহ্বানের ক্রম। একটি নিয়ম সফল হয় যদি তার বিকল্পগুলির মধ্যে কোনওটি সফল হয়; এগুলি ক্রমানুসারে চেষ্টা করা হয়। একটি বিকল্প সফল হয় যদি তার সমস্ত নিয়ম আহ্বান সফল হয়। ভাষাটি অপারেটরদের পুনরাবৃত্তি ছাড়াই মূল্যায়ন লুপ তৈরি করতে (যদিও এটি সিডিএল 2-এ কঠোরভাবে প্রয়োজনীয় নয় কারণ অপ্টিমাইজার একই প্রভাব অর্জন করে) এবং অন্যথায় পুনরাবৃত্তিমূলক মূল্যায়নের দক্ষতা বাড়ানোর জন্য কিছু শর্টকাট সরবরাহ করে, তবে মূল ধারণাটি উপরে রয়েছে। প্রসঙ্গ-মুক্ত ব্যাকরণ বিশ্লেষণের সুস্পষ্ট প্রয়োগ ছাড়াও, সি. ডি. এল অ্যাপ্লিকেশন নিয়ন্ত্রণের জন্যও উপযুক্ত কারণ অনেক নিয়ন্ত্রণ অ্যাপ্লিকেশন মূলত গভীরভাবে নেস্টেড যদি-তারপর নিয়ম। প্রতিটি সিডিএল1 নিয়ম, মূল্যায়ন করার সময়, তথ্যের উপর কাজ করতে পারে, যা অনির্দিষ্ট ধরনের। আদর্শভাবে, নিয়মটি সফল না হলে তথ্য পরিবর্তন করা উচিত নয় (ব্যর্থতার কোনও পার্শ্বপ্রতিক্রিয়া নেই)। এটি এমন সমস্যা সৃষ্টি করে যে যদিও এই নিয়মটি সফল হতে পারে, তবুও এটির আহ্বানকারী নিয়মটি ব্যর্থ হতে পারে, এই ক্ষেত্রে তথ্য পরিবর্তন কার্যকর হওয়া উচিত নয়। সমস্ত তথ্য গতিশীলভাবে একটি স্ট্যাকের উপর বরাদ্দ করা হলে উপরের আচরণটি নিশ্চিত করা মোটামুটি সহজ (যদিও মেমরি নিবিড়)। যাইহোক, এটি বরং কঠিন যখন স্ট্যাটিক ডেটা থাকে, যা প্রায়শই হয়। সিডিএল2 সংকলক সম্ভাব্য লঙ্ঘনগুলিকে চিহ্নিত করতে সক্ষম হয় এই প্রয়োজনের জন্য যে পরামিতিগুলির দিকনির্দেশ (ইনপুট, আউটপুট, ইনপুট-আউটপুট) এবং নিয়মের ধরণ (ব্যর্থ হতে পারেঃ পরীক্ষা, পূর্বাভাস; ব্যর্থ হতে পারে নাঃ ফাংশন, অ্যাকশন; একটি পার্শ্ব প্রতিক্রিয়া থাকতে পারেঃ পূর্বাভাস, অ্যাকশন; একটি পার্শ্ব প্রতিক্রিয়া থাকতে পারে নাঃ পরীক্ষা, ফাংশন) প্রোগ্রামার দ্বারা নির্দিষ্ট করা আবশ্যক। যেহেতু নিয়মের মূল্যায়ন সহজ এবং সহজ নিয়মের উপর ভিত্তি করে, তাই নীচে, কিছু আদিম নিয়ম থাকা উচিত যা প্রকৃত কাজটি করে। এখানেই সিডিএল1 খুব বিস্ময়করঃ এটিতে সেই আদিমগুলি নেই। আপনাকে নিজেই সেই নিয়মগুলি প্রদান করতে হবে। যদি আপনার প্রোগ্রামে সংযোজন প্রয়োজন হয়, আপনাকে দুটি ইনপুট পরামিতি এবং একটি আউটপুট পরামিতি সহ একটি নিয়ম তৈরি করতে হবে এবং আউটপুটটি আপনার কোড দ্বারা দুটি ইনপুটের যোগফল হিসাবে সেট করা হয়। সিডিএল সংকলক আপনার কোডকে স্ট্রিং হিসাবে ব্যবহার করে (ইনপুট এবং আউটপুট ভেরিয়েবলগুলি কীভাবে উল্লেখ করা যায় সে সম্পর্কে প্রচলিত নিয়ম রয়েছে) এবং কেবল প্রয়োজন অনুসারে এটি নির্গত করে। আপনি যদি অ্যাসেম্বলি ব্যবহার করে আপনার যোগ করার নিয়ম বর্ণনা করেন, তাহলে সিডিএল কম্পাইলারের আউটপুটকে মেশিন কোডে অনুবাদ করার জন্য আপনার একজন অ্যাসেম্বলারের প্রয়োজন হবে। আপনি যদি প্যাসকেল বা সি-তে সমস্ত আদিম নিয়ম (সিডিএল পরিভাষায় ম্যাক্রো) বর্ণনা করেন, তাহলে সিডিএল সংকলকের পরে চলার জন্য আপনার একটি পাস্কাল বা সি সংকলক প্রয়োজন। মূল আদিমগুলির এই অভাব খুব বেদনাদায়ক হতে পারে যখন আপনাকে কোডের একটি স্নিপেট লিখতে হয়, এমনকি সহজতম মেশিন নির্দেশ ক্রিয়াকলাপের জন্যও। যাইহোক, অন্যদিকে, এটি আপনাকে বহিরাগত বিমূর্ত বস্তুর উপর কাজ করা গূঢ়, বিমূর্ত আদিম প্রয়োগের ক্ষেত্রে দুর্দান্ত নমনীয়তা দেয় (সিডিএল-এ 'মেশিন ওয়ার্ড' আরও বেশি 'ডেটা স্টোরেজের ইউনিটের মতো, যেখানে সঞ্চিত তথ্যের কোনও উল্লেখ নেই)। উপরন্তু, বড় প্রকল্পগুলি যত্ন সহকারে তৈরি আদিম গ্রন্থাগারগুলি ব্যবহার করে। এরপরে এগুলি প্রতিটি টার্গেট আর্কিটেকচার এবং ওএসের জন্য প্রতিলিপি করা হয়েছিল যা সকলের জন্য অত্যন্ত দক্ষ কোড তৈরির অনুমতি দেয়। ভাষার অনুভূতি পেতে, এখানে সিডিএল2 ম্যানুয়াল থেকে অভিযোজিত একটি ছোট কোড খণ্ড রয়েছেঃ অ্যাকশন কুইকসোর্ট +> থেকে +> থেকে-পি-কিউঃ কম + থেকে +, বিভক্ত + থেকে + পি + কিউ, কুইকসোর্ট + থেকে + কিউ, কুইকসোর্ট + থেকে + কিউ, কুইকসোর্ট + পি + থেকে; +। ক্রিয়া বিভাজন +> আই +> জে + পি> + কিউ>-এমঃ তৈরি করুন + পি + আই, তৈরি করুন + কিউ + জে, যোগ করুন + আই + জে + এম, অর্ধেক + এম, (আবারঃ উপরে সরান + জে + পি + এম, নীচে সরান + আই + কিউ + এম, (কম + পি + কিউ, অদলবদল আইটেম + পি + কিউ, ইনক্র + পি, ডেক্র + কিউ, * আবার; কম + পি + এম, অদলবদল আইটেম + পি + এম, ইনক্র + পি; কম + এম + কিউ, অদলবদল আইটেম + কিউ + এম, ডেক্র + কিউ; +)। ফাংশন +> জে +> পি> +> এমঃ কম + জে + পি; ছোট আইটেম + এম + পি; ইনক্র + পি, *। ফাংশন নিচে সরানো হয়েছে +> আই +> কিউ> +> এমঃ কম + কিউ + জে; ছোট আইটেম + কিউ + এম; ডিক্র + কিউ, *। টেস্ট কম +> a +> b: = a "<" b। ফাংশন + a> +> b: = a "=" b "তৈরি করে। ফাংশন যোগ করুন +> a +> b + যোগফল>: = যোগফল "=" a "+" b। ফাংশন অর্ধেক +> a>: = a "/= 2"। ফাংশন আইএনসিআর +> এ>: = এ "+ +"। ফাংশন ডিক্র +> a>: = a "--"। টেস্ট ছোট আইটেম +> আই +> জেঃ = "আইটেম [" আই "] <আইটেম [" জে "]"। অ্যাকশন সোয়াপ আইটেম +> আই +> জে-টিঃ = টি "= আইটেম [" আই "]; আইটেম [" আই "] = আইটেম [" জে "]; আইটেম [" জে "] =" টি। এখানে আদিম ক্রিয়াকলাপগুলি জাভা (বা সি)-এর পরিপ্রেক্ষিতে সংজ্ঞায়িত করা হয়েছে। এটি একটি সম্পূর্ণ প্রোগ্রাম নয়; আমাদের অবশ্যই অন্য কোথাও জাভা অ্যারে আইটেমগুলি সংজ্ঞায়িত করতে হবে। সিডিএল2, যা 1976 সালে প্রকাশিত হয়েছিল, সিডিএল1-এর নীতিগুলি বজায় রেখেছিল কিন্তু ভাষাটিকে বড় প্রকল্পের জন্য উপযুক্ত করে তুলেছিল। এটি মডিউল চালু করে, ডেটা-পরিবর্তন-শুধুমাত্র-সাফল্য প্রয়োগ করে এবং ভাষার ক্ষমতাকে কিছুটা প্রসারিত করে। সিডিএল2 সংকলক এবং বিশেষ করে সিডিএল2 গবেষণাগারে (সিডিএল2-এর জন্য একটি আইডিই) অপ্টিমাইজারগুলি বিশ্বমানের ছিল এবং শুধুমাত্র তাদের সময়ের জন্য নয়। সিডিএল2 ল্যাবরেটরি অপ্টিমাইজারের একটি বৈশিষ্ট্য প্রায় অনন্যঃ এটি সংকলন ইউনিটগুলিতে অপ্টিমাইজেশন সম্পাদন করতে পারে, অর্থাৎ পুরো প্রোগ্রামটিকে একক সংকলন হিসাবে বিবেচনা করে। সিডিএল3 একটি সাম্প্রতিকতম ভাষা। এটি পূর্ববর্তী সি. ডি. এল সংস্করণগুলির ওপেন-এন্ডেড বৈশিষ্ট্যটি ত্যাগ করে এবং এটি মৌলিক গাণিতিক এবং স্টোরেজ অ্যাক্সেসের জন্য আদিম প্রদান করে। পূর্ববর্তী সি. ডি. এল সংস্করণগুলির অত্যন্ত বিশুদ্ধ বাক্যবিন্যাস (কীওয়ার্ড এবং প্রতীকগুলির সংখ্যা উভয়ই একক সংখ্যায় চলে) শিথিল করা হয়েছে। কিছু মৌলিক ধারণা এখন স্পষ্ট শব্দার্থবিজ্ঞানের পরিবর্তে বাক্যবিন্যাসে প্রকাশ করা হয়। উপরন্তু, ভাষায় ডেটা টাইপ চালু করা হয়েছে। বাণিজ্যিক এম. বি. পি কোবল (পি. সি-র জন্য একটি কোবল সংকলক)-এর পাশাপাশি এম. প্রোলোগ সিস্টেম (একটি শিল্প-শক্তি প্রোলগ বাস্তবায়ন যা অসংখ্য স্থাপত্যের উপর চলে (আই. বি. এম মেইনফ্রেম, ভি. এ. এক্স, পি. ডি. পি-11, ইন্টেল 8086, ইত্যাদি) ব্যবহার করুন। এবং ওএস-এস (ডস/ওএস/সিএমএস/বিএস 2000, ভিএমএস/ইউনিক্স, ডস/উইন্ডোজ/ওএস 2)। পরেরটি, বিশেষ করে, সিডিএল2-এর বহনযোগ্যতার সাক্ষ্য। যদিও সিডিএল দিয়ে লেখা বেশিরভাগ প্রোগ্রাম কম্পাইলার হয়েছে, কমপক্ষে একটি বাণিজ্যিক জিইউআই অ্যাপ্লিকেশন রয়েছে যা সিডিএল-এ তৈরি এবং রক্ষণাবেক্ষণ করা হয়েছিল। এই অ্যাপ্লিকেশনটি একটি ডেন্টাল ইমেজ অধিগ্রহণ অ্যাপ্লিকেশন ছিল যা এখন ডেক্সিসের মালিকানাধীন। একবার সিডিএল-এ একটি ডেন্টাল অফিস ম্যানেজমেন্ট সিস্টেমও তৈরি করা হয়েছিল। মেফিস্টো তৃতীয় দাবা কম্পিউটারের সফ্টওয়্যারটি সিডিএল 2 দিয়ে লেখা হয়েছিল। আরও পড়ার তথ্যসূত্র সিডিএল1/সিডিএল2 ভাষা সম্পর্কে একটি বই সিডিএল3-এর বর্ণনাঃ প্রোগ্রামকেজিটেসি মডসজেরেক; কোজগাজদাসাগি এস যোগী কনিভকাডো, 1979। পার্সার জেনারেটর কম্পাইলার নির্মাণ আনুষ্ঠানিক ভাষা কম্পাইলার তত্ত্ব