मान लीजिए कि मेरे पास निम्नलिखित CFG है।एक रिकर्सिव व्याकरण के FIRST और FOLLOW सेट कैसे खोजें?
A -> B | Cx | EPSILON
B -> C | yA
C -> B | w | z
अब अगर मैं
FIRST(C) = FIRST(B) U FIRST(w) U FIRST(z)
= FIRST(C) U FIRST(yA) U {w, z}
यही है, मैं एक पाश में जा रहा हूँ पता लगाने की कोशिश। इस प्रकार मुझे लगता है कि मुझे इसे एक ऐसे रूप में परिवर्तित करना है जिसने तत्काल बाएं रिकर्सन किया है, जो मैं निम्नानुसार कर सकता हूं।
A -> B | Cx | EPSILON
B -> C | yA
C -> C | yA | w | z
अब अगर मैं पहले सेट की गणना करने का प्रयास करता हूं, तो मुझे लगता है कि मैं इसे निम्नानुसार प्राप्त कर सकता हूं।
FIRST(C) = FIRST(C) U FIRST(yA) U FIRST(w) U FIRST(z)
= { y, w, z } // I ignore FIRST(C)
FIRST(B) = FIRST(C) U FIRST(yA)
= { y, w, z }
FIRST(A) = FIRST(B) U FIRST(Cx) U FIRST(EPSILON)
= { y, w, z, EPSILON }
क्या मैं वहां सही हूं?
लेकिन यहां तक कि अगर मैं वहां हूं, तो भी मैं इस समस्या से निम्नलिखित सेटों की गणना करने का प्रयास करता हूं, फिर भी एक समस्या में भाग लेता हूं।
FOLLOW(A) = { $ } U FOLLOW(B) U FOLLOW(C)
मुझे तीसरे नियम से दूसरे नियम और अनुसरण (सी) से अनुसरण करें (बी) प्राप्त करें। लेकिन अब फोल्लो (बी) की गणना करने के लिए, मुझे निम्नलिखित (ए) (प्रथम व्याकरण नियम से) की आवश्यकता है, इसलिए मैं एक लूप में फंस गया हूं।
कोई मदद? अग्रिम धन्यवाद!
समझ गया, धन्यवाद! यह खूबसूरती से काम करता है! – Sach
धन्यवाद भाई, इससे मुझे बहुत मदद मिलती है! – Jiahao
बहुत बहुत धन्यवाद। वास्तव में मेरी मदद की! – Zephyr