2009-11-02 22 views
9

मैं ANTLR जानने के लिए और दोनों 2007 किताब "निश्चित ANTLR संदर्भ" और ANTLRWorks (व्याकरण बनाने के लिए एक इंटरैक्टिव उपकरण) के लिए शुरू कर दिया है के साथ प्रारंभ करना। और, उस तरह के व्यक्ति होने के नाते, मैंने अध्याय 3 ("अधीर के लिए एक त्वरित दौरा") शुरू किया।ANTLR और परहेज आम गलतियों

यह काफी दर्दनाक प्रक्रिया है, विशेष रूप से कुछ त्रुटियां बल्कि अपरिवर्तनीय हैं (उदा। ANTLR: "missing attribute access on rule scope" problem जो सिर्फ मेरे लिए "आपको कुछ गलत मिला है")। इसके अलावा मेरे पास कुछ बहुत ही सरल व्याकरण (केवल 3-4 प्रोडक्शंस) और सरल इनपुट (2 लाइनें) हैं जो "आउटऑफमेमरी" त्रुटि देते हैं।

एएनटीएलआर साइट उपयोगी है लेकिन कुछ हद तक खंडित है और कुछ SO उपयोगकर्ताओं ने टिप्पणी की है (https://stackoverflow.com/questions/278480/good-tutorial-for-antlr) कि पुस्तक और ट्यूटोरियल उच्च प्रविष्टि स्तर की अपेक्षा करते हैं। इस वजह से मैं एएनटीएलआर चर्चा सूची से संपर्क करने में अनिच्छुक हूं।

लेटर हम इसके साथ पकड़ने के लिए शुरू कर रहे हैं। यह सरल विश्वसनीय उदाहरणों के लिए उपयोगी होगा जिन्हें धीरे-धीरे विस्तारित किया जा सकता है। यह निश्चित रूप से मास्टरिंग के लायक है क्योंकि हमने एएनटीएलआर के आधार पर हमारी बहुत सी सोच को फिर से तैयार किया है।

एक समस्या यह है कि ANTLR वी 3 V2 से signifcant परिवर्तन किया गया है। एसओ (और एएनटीएलआर पृष्ठों पर) पर एक उत्तर एक वी 2 वाक्यविन्यास में प्रस्तुत किया गया जो अब उपलब्ध नहीं है।

इतने पर ANTLR सवालों के कुछ मुझे एक बहुत मदद की है, लेकिन उन्हें खोजने थोड़ा तदर्थ है। तो मैं जानना चाहता हूं कि कैसे उपयोगकर्ता सीखने की प्रक्रिया को कम दर्दनाक बनाने में मदद कर सकते हैं। (यदि आप संदर्भ पुस्तक का संदर्भ लेते हैं तो यह विशेष पृष्ठों को इंगित करने के लिए उपयोगी होगा)।

संपादित करें। @ डफिमो और @ जेम्स एंडर्सन ने पुष्टि की है कि एएनटीएलआर कड़ी मेहनत कर रहा है - मोटे तौर पर क्योंकि पार्सर्स मुश्किल हैं। (FWIW मैं लेक्रस/YACC, आदि के माध्यम से किया गया है और इसमें कोई शक नहीं है कि ANTLR अधिक शक्तिशाली और के साथ काम करना आसान है नहीं है।) मुझे लगता है कि यह अभी भी क्षेत्रों में इस तरह के रूप में दूषण से बचने के लिए जहां यह संभव है के लिए उपयोगी होगा:

  • नियमों के आदेश से अधिक चर नाम lexer को
  • ऐड पैकेज नाम का सही पूंजीकरण के साथ-साथ पार्सर
  • ले देखभाल सुनिश्चित यह पूर्वता

और इन प्रकार के और अधिक प्रभावित करता है के रूप में उपयोगी होगा।

+0

हालांकि विशेष रूप से ANTLR के बारे में नहीं, टेर एक बाद की किताब भाषा कार्यान्वयन पैटर्न बुलाया लिखा था। यह नौसिखिया और पशु चिकित्सक दोनों के समान प्रासंगिकता के साथ एक * उत्कृष्ट * काम है। I | एमवीएचओ किसी को भी पार्सिंग काम करने के लिए एक पूर्ण जरूरी है। –

उत्तर

7

मैं सहमत हूँ - ANTLR दिल वालों के लिए नहीं है। यह एक उच्च प्रवेश स्तर की उम्मीद करता है, क्योंकि व्याकरण और पार्सर्स तुच्छ नहीं हैं।

इसके साथ ही कहा, यहाँ कुछ सुझाव हैं:

  1. वी 2 के बारे में भूल। संस्करण 3 मानक है; पहले के संस्करण या उसके दस्तावेज पर विचार करने में समय बर्बाद न करें।
  2. OutOfMemoryError आपको बता रहा है कि आपके द्वारा परिभाषित व्याकरण में कुछ परिपत्र है।
  3. इंटेलिजे के पास एएनटीएलआर v3 के साथ काम करने के लिए एक अद्भुत आईडीई है। यह आपको अपने व्याकरण, चरण-दर-डिबगिंग इत्यादि का ग्राफिकल प्रतिनिधित्व देगा। यदि आप एएनटीएलआर के साथ बहुत से काम करने जा रहे हैं तो लाइसेंस खरीदने के लिए कुछ डॉलर के लायक होंगे।

ANTLR में महारत हासिल करने के लिए आसान नहीं होगा। किताब अच्छी है, लेकिन घनी है। जैसा कि आपने नोट किया है, त्रुटि संदेश गुप्त हैं।मुझे आश्चर्य होगा अगर कोई यहां इसे आसान बना सकता है।

+0

बस इंगित करने के लिए, एएनटीएलआरवर्क्स व्याकरण के निर्माण के लिए भी बहुत ही बढ़िया है और इसमें इंटेलिजे के लिए आपकी तरह की विशेषताएं हैं। – RCIX

+0

एएनटीएलआरवर्क्स एक इंटेलिजे प्लग-इन है। मैंने इसे आईडीई के बाहर इस्तेमाल नहीं किया है। – duffymo

5

क्षमा करें, लेकिन एएनटीएलआर (वास्तव में जावैक, बाइसन या कोई पूर्ण फ़ंक्शन पार्सर) का मेरा अनुभव यह है कि आपकी अधिकांश सीखें आपकी गलतियों को ठीक करके होगी!

अन्य लोगों के कोड का अच्छा उदाहरण हो रही इस नीचे कुछ हद तक कट जाएगा, सबसे अच्छा उदाहरण बहुत आसान लग रही है - लेकिन आप सब पसीना याद कर रहे हैं और बाल खींच यह उन्हें इतना आसान लग रही पाने के लिए ले लिया।

+0

+1 यह वास्तव में उपयोगी है। –

+5

मैं सिर्फ इसके साथ शुरू हो रही हूँ, और "बाल खींच" वास्तव में ANTLR के साथ जुड़े सीखने की अवस्था के लिए सही तकनीकी शब्दावली है। हालांकि मुझे यह महसूस हो रहा है कि एक बार जब आप माउंट एएनटीएलआर की चोटी पर पहुंच जाएंगे, तो ऊपर से दृश्य शानदार है। –

2

यहां तक ​​कि अगर आप कमांड लाइन पसंद करते हैं, यह AntlrWorks का उपयोग कर आप समस्या है जब लायक है। आरेख संबंधी प्रतिनिधित्व से यह देखना आसान हो सकता है कि मैं क्या गलत कर रहा हूं।

एक चित्र एक हजार त्रुटि संदेश के लायक है।

संबंधित मुद्दे