নীচের চ্যালেঞ্জটির জন্য আপনাকে আনুষ্ঠানিক পার্সার তত্ত্বের সাথে পরিচিত হওয়া প্রয়োজন। আপনি কীভাবে প্রশ্নটি জিজ্ঞাসা করছেন তা যদি আপনি না জানেন কারণ শর্তাবলীর অর্থ কী তা আপনি জানেন না, প্রসঙ্গমুক্ত ব্যাকরণ এবং প্রথম / অনুসরণের সেটগুলি অনেকগুলি বিশ্ববিদ্যালয় কোর্সে আবৃত রয়েছে।
আমি এই স্ট্যানফোর্ড কোর্সের জন্য বিশেষ হ্যান্ডআউট 08 এবং 09 (পৃষ্ঠা 7 থেকে) সুপারিশ করতে পারি । আমি এই হ্যান্ডআউটগুলি থেকে একটি চিট শীটও বের করে নিয়েছি - আমি এই চ্যালেঞ্জটি যে কেউ এটি পড়তে চাইছে তা প্রস্তাব করছি ।
একটি প্রোগ্রাম বা ফাংশন লিখুন যা প্রসঙ্গমুক্ত ব্যাকরণ প্রদানে প্রতিটি নন-টার্মিনালের ফলোয়ার সেটটি খুঁজে পায়। অনানুষ্ঠানিকভাবে, একটি ননটারমিনালের ফলোয়ার সেটটি টার্মিনালের একটি সেট এবং $
(যার অর্থ-ইনপুট-এর অর্থ) আপনি সম্ভবত কোনও বৈধ বাক্যে এই টার্মিনালের পরে খুঁজে পেতে পারেন।
ইনপুটটি একক মুদ্রণযোগ্য ASCII স্ট্রিং বা মুদ্রণযোগ্য ASCII লাইনের অ্যারে হিসাবে দেওয়া হয়। $
ইনপুটটির শেষ নির্দেশ করতে আপনি যেকোন যুক্তিসঙ্গত বিন্যাসে সেটগুলি আউটপুট করতে পারেন (হয় আক্ষরিক আউটপুট হিসাবে, বা কোনও সেট এর ভিতরে স্ট্রিং ইত্যাদি)। আপনি ধরে নিতে পারেন নিচের বিন্যাস অনুসারে ইনপুটটি সর্বদা বৈধ।
প্রসঙ্গমুক্ত ব্যাকরণটি খুব সরল পদ্ধতিতে দেওয়া হয়। প্রতিটি লাইনে একটি একক উত্পাদন থাকে। প্রতিটি উত্পাদন প্রতীক একটি স্থান পৃথকীকরণ তালিকা। টার্মিনাল হল অ্যাডাস্ট্রোফস (যেমন '**'
) দ্বারা বেষ্টিত অক্ষরের একটি স্ট্রিং । সরলতার জন্য আপনি ধরে নিতে পারেন যে টার্মিনালগুলিতে স্পেস থাকে না তবে আপনার প্রোগ্রামটি যদি এটির অনুমতি দেয় তবে এটি দুর্দান্ত হবে। একটি নন-টার্মিনাল এমন কোনও স্ট্রিং হতে পারে যাতে ফাঁকা জায়গা থাকে না বা $
। খালি উত্পাদন (সাধারণত ε দিয়ে নির্দেশ করা হয়) কেবল কেবল একটি লাইন যা কেবল বাম পাশের ননটার্মিনাল থাকে। প্রথম লাইনটি প্রারম্ভিক সংকেতটিকে সংজ্ঞায়িত করে তোলে।
উদাহরণ হিসাবে, নিম্নলিখিত ব্যাকরণ:
এস S এসা | বিএসবি | ε
হিসাবে দেওয়া হবে:
S 'a' S 'a'
S 'b' S 'b'
S
ইনপুট / আউটপুট উদাহরণ:
In:
S 'a' S 'a'
S 'b' S 'b'
S
Out:
S {'a', 'b', $}
In:
S A B C
A 'a'
A C 'b'
A
B C
B 'd' A
B
C 'e'
C 'f'
Out:
S {$}
A {'d', 'e', 'f'}
B {'e', 'f'}
C {'b', 'e', 'f', $}
In:
Start Alice Bob
Alice Charlie 'a'
Alice
Bob Bob 'a' Alice Charlie
Bob '!!!'
Charlie 'b'
Charlie
Out:
Start {$}
Alice {'a', '!!!', 'b', $}
Bob {'a', $}
Charlie {'a', $}
বাইটস মধ্যে সংক্ষিপ্ত কোড।