नीचे दी गई चुनौती के लिए आपको औपचारिक पार्सर सिद्धांत से परिचित होना चाहिए। यदि आप नहीं जानते हैं कि प्रश्न क्या पूछ रहा है क्योंकि आप नहीं जानते कि शब्दों का अर्थ क्या है, संदर्भ-मुक्त व्याकरण और प्रथम / अनुवर्ती सेट बहुत सारे विश्वविद्यालय पाठ्यक्रमों में शामिल हैं।
मैं इस स्टैनफोर्ड कोर्स की सिफारिश कर सकता हूं , विशेष रूप से 08 और 09 (पेज 7 से)। मैंने इन हैंडआउट्स से एक चीट शीट भी निकाली है - मैं किसी को भी इसे पढ़ने के लिए इस चुनौती का प्रयास करने की सलाह देता हूं ।
एक प्रोग्राम या फ़ंक्शन लिखें जो एक संदर्भ-मुक्त व्याकरण दिया गया हो, जो प्रत्येक गैर-विषयक का अनुसरण सेट पाता है। अनौपचारिक रूप से, एक नॉनटर्मिनल का अनुसरण सेट टर्मिनलों का एक सेट है और $
(जिसका अर्थ एंड-ऑफ-इनपुट) है, जिसे आप संभवतः उस टर्मिनल के बाद एक वैध वाक्य में पा सकते हैं।
इनपुट को एकल मुद्रण योग्य ASCII स्ट्रिंग या मुद्रण योग्य ASCII लाइनों की सरणी के रूप में दिया गया है। आप $
इनपुट के अंत को इंगित करने के लिए (या तो शाब्दिक आउटपुट, या एक सेट के अंदर स्ट्रिंग के रूप में) का उपयोग करके किसी भी उचित प्रारूप में सेट का उत्पादन कर सकते हैं । आप मान सकते हैं कि इनपुट हमेशा नीचे दिए गए प्रारूप के अनुसार मान्य है।
संदर्भ मुक्त व्याकरण बहुत ही सरलीकृत तरीके से दिया गया है। हर लाइन में एक ही उत्पादन होता है। हर उत्पादन प्रतीकों की एक अलग सूची है। एक टर्मिनल एपोस्ट्रोफस (जैसे '**'
) से घिरे पात्रों की एक स्ट्रिंग है । सादगी के लिए आप मान सकते हैं कि टर्मिनलों में रिक्त स्थान नहीं हैं, लेकिन यह अच्छा होगा यदि आपका कार्यक्रम इसकी अनुमति देता है। एक nonterminal रिक्त स्थान या नहीं युक्त किसी भी स्ट्रिंग हो सकता है $
। खाली उत्पादन (आमतौर पर ε के साथ संकेत दिया जाता है) केवल एक पंक्ति है जिसमें केवल बाएं हाथ की तरफ नॉनटर्मिनल होता है। पहली पंक्ति प्रारंभ प्रतीक को परिभाषित करने वाला उत्पादन है।
एक उदाहरण के रूप में, निम्नलिखित व्याकरण:
एस → आसा | bSb | ε
के रूप में दिया जाएगा:
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', $}
बाइट्स में सबसे छोटा कोड जीतता है।