थियोडोर नॉरवेल (1999) द्वारा पुनरावर्ती वंश द्वारा पार्सिंग एक्सप्रेशंस लेख में लेखक अंकगणितीय अभिव्यक्तियों के लिए निम्नलिखित व्याकरण के साथ शुरू होता है:
E --> E "+" E | E "-" E | "-" E | E "*" E | E "/" E | E "^" E | "(" E ")" | v
जो काफी बुरा है, क्योंकि यह अस्पष्ट और वाम-पुनरावर्ती है। इसलिए वह बाएं से पुनरावृत्ति को हटाने से शुरू होता है, और उसका परिणाम इस प्रकार है:
E --> P {B P}
P --> v | "(" E ")" | U P
B --> "+" | "-" | "*" | "/" | "^"
U --> "-"
लेकिन मैं यह पता नहीं लगा सकता कि वह इस नतीजे पर कैसे पहुंचे। जब मैं स्वयं लेफ्ट रिक्रिएशन को हटाने की कोशिश करता हूं, तो मैं इसे निम्नलिखित तरीके से कर रहा हूं:
एफआईआर, मैं उन समूहों को एक साथ समूह बनाता हूं जिनके पास एक समूह में पुनरावृत्ति नहीं है, और दूसरे समूह में अन्य (बाएं-पुनरावर्ती):
E --> E "+" E | E "-" E | E "*" E | E "/" E | E "^" E // L-recursive E --> v | "(" E ")" | "-" E
अगला, मैं उन्हें नाम देता हूं और आसान जोड़तोड़ के लिए कारक:
E --> E B E // L-recursive; B stands for "Binary operator" E --> P // not L-recursive; P stands for "Primary Expression" P --> v | "(" E ")" | U E // U stands for "Unary operator" B --> "+" | "-" | "*" | "/" | "^" P --> "-"
अब मुझे केवल पहले दो प्रस्तुतियों से निपटने की आवश्यकता है, जो अब निपटना आसान है।
मैं गैर-एल-पुनरावर्ती उत्पादन (जो कि बस
P
, प्राथमिक अभिव्यक्ति है) से शुरू करके और वैकल्पिक पूंछ द्वारा इसका पालन करके उन पहले दो प्रस्तुतियों को फिर से लिखताT
हूं, जिन्हें मैं मूल उत्पादन के बाकी हिस्सों के रूप में परिभाषित करता हूं जो पहले बाएं-पुनरावर्ती नॉनटर्मिनल हैं (यह है, बसB E
) टेल द्वारा पीछा कियाT
, या जो खाली हो सकता है:E --> P T T --> B E T |
(पूंछ के लिए खाली विकल्प पर ध्यान दें)।
ये दो प्रोडक्शंस मैं अब EBNF में इस तरह से लिख सकता हूं:
E --> P {B E}
जो लगभग क्या लेखक मिलता है, लेकिन मेरे पास है है
E
के बजायP
शून्य या अधिक पुनरावृत्ति पैटर्न (पूंछ) के अंदर वहाँ। अन्य प्रोडक्शंस मुझे वही मिलते हैं जो उन्हें मिले हैं:P --> v | "(" E ")" | U E B -> "+" | "-" | "*" | "/" | "^" U -> "-"
लेकिन यहाँ भी मैं के
E
बजायP
पहले उत्पादन के लिए हैP
।
तो, मेरा सवाल है: मैं क्या याद कर रहा हूँ? सिंटैक्स पर क्या बीजीय परिवर्तन मुझे अब उसी रूप में प्राप्त करने के लिए आगे बढ़ने की जरूरत है जैसा कि ऑटोर को मिलता है? मैं के लिए प्रतिस्थापन की कोशिश की E
, लेकिन यह केवल मुझे छोरों में ले जाता है। मुझे लगता है कि मैं किसी भी तरह की जरूरत है स्थानापन्न करने P
के लिए E
, लेकिन मैं इसे सही ठहराने के लिए किसी भी कानूनी परिवर्तन पता नहीं है। शायद आप जानते हैं कि अंतिम लापता कदम क्या है?