आपका व्याकरण किसी भी विकल्प के बिना एएनटीएलआर v3 में काम करता है।
के विकल्प एएनटीएलआर को शास्त्रीय एलएल (के) पार्सिंग तक सीमित करता है। बैकट्रैकिंग का अर्थ है - यदि पार्सर भविष्यवाणी नहीं कर सकता है, तो किस नियम का उपयोग करना है, यह सिर्फ कोशिश करता है, बैकट्रैक और फिर कोशिश करता है। बैकट्रैकिंग विकल्प का उपयोग तब करना चाहिए जब एएनटीएलआर दिए गए व्याकरण के लिए आगे-आगे डीएफए नहीं बना सकता है। एएनटीएलआर वी 3 नियमित अभिव्यक्तियों से डीएफए का निर्माण बहुत आसान बना सकता है, लेकिन इसमें रिकर्सिव नियमों के साथ इसकी कठिनाइयां हैं। उदाहरण के लिए, यह व्याकरण काम करता है:
start: recursive_rule ';'
| recursive_rule ':'
;
recursive_rule : (ID)* '%'
;
यह व्याकरण नीचे समान है, लेकिन रिकर्सन के माध्यम से व्यक्त किया गया है। ANTLR DFA का निर्माण नहीं कर सकते के लिए यह (मैं वास्तव में पता नहीं क्यों) है, तो आप पर उलटे पांव लौटने स्विच करने की आवश्यकता:
start options {backtrack=true;} : recursive_rule ';'
| recursive_rule ':'
;
recursive_rule : ID recursive_rule
|'%'
;
कश्मीर विकल्प पार्सर के प्रदर्शन में सुधार करने के लिए इस्तेमाल किया जाता है। मैं एलएल (*) से एलएल (के) को प्रतिबंधित करने के किसी अन्य कारण को नहीं जानता।
धन्यवाद। मैं इसे बेहतर समझने के लिए रिकर्सिव नियम के साथ कोशिश करूंगा। लेकिन अब मुझे एक विचार है। धन्यवाद। – Veilchen4ever
क्या आप दूसरे रिकर्सिव उदाहरण के बारे में समझा सकते हैं? क्योंकि मुझे लगता है कि एक बाएं रिकर्सन नियम नहीं है और एएनटीएलआर इससे निपटने में सक्षम होना चाहिए? –