কন্টেক্সট-ফ্রি গ্রামার (CFG)
কন্টেক্সট-ফ্রি গ্রামার (CFG) হল একটি ধরনের ফর্মাল গ্রামার যা প্রোগ্রামিং ভাষার গঠন এবং সিনট্যাক্স বর্ণনা করতে ব্যবহৃত হয়। এটি একটি ভাষার নিয়মাবলী সংজ্ঞায়িত করে এবং একটি ভাষার বৈধ স্ট্রিং তৈরি করতে পারে।
CFG এর মৌলিক উপাদান:
- নিষেধক (Non-terminals): গ্রামারের পরিবর্তনশীল অংশ। উদাহরণস্বরূপ,
S,A,Bইত্যাদি। - টার্মিনাল (Terminals): গ্রামারের উৎপন্ন ভাষার অংশ, যা সাধারণত প্রকৃত শব্দ বা অক্ষর। উদাহরণস্বরূপ,
a,b,1,2ইত্যাদি। - উৎপাদন নিয়ম (Production Rules): কীভাবে নিষেধকগুলি টার্মিনালগুলিতে রূপান্তরিত হবে তা নির্দেশ করে। উদাহরণস্বরূপ,
S → A BবাA → a। - শুরু নিষেধক (Start Symbol): গ্রামারের উৎপাদনের শুরু বিন্দু। সাধারণত
Sএর মাধ্যমে নির্দেশ করা হয়।
উদাহরণ:
একটি সরল CFG হতে পারে:
S → A B
A → a
B → b
এই গ্রামারটি ab স্ট্রিং উৎপন্ন করে।
পার্সিং
পার্সিং হল সিনট্যাকটিক অ্যানালাইসিসের একটি প্রক্রিয়া যেখানে সোর্স কোডের টোকেনগুলিকে একটি গ্রামার অনুযায়ী বিশ্লেষণ করা হয়। এটি নিশ্চিত করে যে ইনপুটটি কন্টেক্সট-ফ্রি গ্রামারের নিয়ম অনুসারে সঠিক।
পার্সিং প্রক্রিয়া:
- টোকেন ইনপুট: লেক্সিক্যাল অ্যানালাইজার দ্বারা তৈরি টোকেনগুলি পার্সারের কাছে পাঠানো হয়।
- গ্রামার নিয়ম পরীক্ষা: পার্সার টোকেনগুলির গঠন পরীক্ষা করে এবং এটি গ্রামারের নিয়ম মেনে চলে কিনা তা নিশ্চিত করে।
- সিনট্যাক্স ট্রি তৈরি: সফল পার্সিংয়ের পর একটি সিনট্যাক্স ট্রি বা পার্স ট্রী তৈরি করা হয়, যা কোডের গঠনগত সম্পর্ক দেখায়।
পার্সিং এর প্রধান পদ্ধতি
- টপ-ডাউন পার্সিং: এটি উৎপত্তি থেকে শুরু করে টোকেনগুলির ভিত্তিতে গঠন তৈরির দিকে অগ্রসর হয়।
- রিকার্সিভ ডেসেন্ডেন্ট পার্সার: একাধিক রিকার্সিভ ফাংশন ব্যবহার করে।
- বটম-আপ পার্সিং: এটি টোকেনগুলির থেকে শুরু করে উৎপত্তি পর্যন্ত যায়।
- শিফট-রিডিউস পার্সার: এটি ইনপুটের টোকেনগুলিকে ব্যবহার করে ধাপে ধাপে উৎপাদন তৈরি করে।
উদাহরণ
ধরি, আমাদের একটি সোর্স কোড আছে:
a + b
CFG উদাহরণ:
E → E + T
E → T
T → a | b
পার্সিং প্রক্রিয়া:
- টোকেন তৈরি:
a,+,b। - গ্রামার নিয়ম অনুসারে পরীক্ষা:
E → E + TE → TT → aT → b
- সিনট্যাক্স ট্রি তৈরি:
E
/ \
E T
| |
T b
|
a
উপসংহার
কন্টেক্সট-ফ্রি গ্রামার (CFG) এবং পার্সিং কম্পাইলারের গুরুত্বপূর্ণ অংশ। CFG প্রোগ্রামিং ভাষার গঠন এবং নিয়ম বর্ণনা করে, যখন পার্সিং সেই নিয়ম অনুযায়ী সোর্স কোডের টোকেনগুলির বিশ্লেষণ করে। সঠিকভাবে পার্সিং করলে সিনট্যাক্স ট্রি তৈরি হয়, যা কোডের গঠন এবং সম্পর্ক বুঝতে সাহায্য করে এবং পরবর্তী সেমান্তিক বিশ্লেষণের জন্য একটি ভিত্তি তৈরি করে।
Read more