2008-11-01 12 views
15

मैं सीएस में पृष्ठभूमि के बिना आईटी पेशेवरों के लिए कंप्यूटर विज्ञान में एक अपेक्षाकृत प्रारंभिक पाठ्यक्रम पढ़ रहा हूं (दूसरों के साथ)। चूंकि मैंने ऑटोमाटा और व्याकरण पर पाठ्यक्रम सामग्री विकसित की है, इसलिए मैं कंपाइलर्स और कंपाइलर निर्माण के बारे में शिक्षण के लिए भी जिम्मेदार हूं।मेरे छात्रों को पढ़ाने के लिए कौन सा पार्सर जनरेटर?

साल पहले, जब मैंने कॉलेज में संकलन का अध्ययन किया, तो हमारे सभी उदाहरण लेक्स और वाईएसीसी से आए। क्या ये अभी भी व्यापक रूप से उपयोग में हैं? क्या जावा के लिए अधिक सामान्य रूप से उपयोग किया जाता है? छात्र सी और जावा में कुशल हैं लेकिन कभी भी पार्सर जनरेटर का उपयोग नहीं किया है।

क्या सिखाने के लिए पर कोई सुझाव दिए गए सराहना की जाएगी

+1

आपकी शिक्षाओं में शुभकामनाएं! –

+0

यह http://cseducators.stackexchange.com पर विषय पर होगा (हालांकि यह अभी भी निजी बीटा में है, फिर भी यहां से प्रवेश करना सबसे आसान है https://area51.stackexchange.com/proposals/92460/computer-cience- शिक्षक) –

उत्तर

29

Antlr व्यापक रूप से इस्तेमाल किया जाता है, अच्छी तरह से प्रलेखित, और मुक्त। यह चींटी द्वारा समर्थित है, और कई अन्य भाषाओं के बीच जावा को लक्षित कर सकता है।

+0

यह सही है। अगर वे पहले से ही जावा जानते हैं, तो एंटरल जाने का रास्ता है। – tunaranch

1

मुझे सीयूपी का उपयोग करना याद है और इसे पसंद है। CUP Parser Generator for Java पर एक नज़र डालें।

सीयूपी म्यूनिख के तकनीकी विश्वविद्यालय में बनाए रखा जाता है। मेरा मानना ​​है कि इसका प्राथमिक उद्देश्य छात्रों को पढ़ाना है।

इसमें एक निःशुल्क लाइसेंसिंग मॉडल भी है।

... उपयोग की अनुमति की प्रतिलिपि, संशोधन, और इस सॉफ्टवेयर और किसी भी उद्देश्य के लिए अपने दस्तावेज और शुल्क के बिना वितरित अनुमति दी जाती है, बशर्ते कि उपर्युक्त कॉपीराइट नोटिस सभी प्रतियों में दिखाई देते हैं और कि दोनों कॉपीराइट नोटिस और यह अनुमति नोटिस और वारंटी अस्वीकरण सहायक दस्तावेज़न में ...

+0

यदि आप सीएस सिखाते हैं, तो आपको नए [सीएस शिक्षक का स्टैक एक्सचेंज] (http://cseducators.stackexchange.com) में रुचि हो सकती है (हालांकि यह अभी भी निजी बीटा में है, इसलिए [यहां से] प्रवेश करना सबसे आसान है (https: //area51.stackexchange.com/proposals/92460/computer-cience-educators)) –

5

लेक्स और Yacc भी प्रयोग में हैं । एफ # के आसपास की नवीनतम भाषाओं में से एक, इसका स्वयं का संस्करण है (fslex, fsyacc - उदाहरण के लिए here देखें।) इसलिए मुझे लगता है कि उन्हें पढ़ाना अभी भी प्रासंगिक है।

1

आप जनरेटर भाग को छोड़ सकते हैं और स्केलस पार्सर संयोजक को देख सकते हैं।

3

RATS जैसे पीईजी पार्सर सिस्टम lex/yacc combo से सरल हैं। यह आपकी कक्षा के लिए प्लस हो सकता है या नहीं: क्या आपका लक्ष्य नियमित अभिव्यक्तियों और परिमित ऑटोमाटा, और एलआर व्याकरण और पुशडाउन ऑटोमाटा आदि के बारे में सिखाने का लक्ष्य है? या आप सबसे सरल व्यावहारिक संकलक फ्रंटेंड उपकरण चाहते हैं?

(जब से मैं इन दिनों जावा में कार्यक्रम नहीं है मैं विशेष रूप से चूहों प्रयास नहीं किया है।)

0

मैं वर्तमान में एक compilers पाठ्यक्रम जो लेक्स और Yacc का उपयोग करता है ले रहा हूँ। मैं वास्तव में वहां किसी अन्य प्रकार के बारे में नहीं जानता, लेकिन जो सिद्धांत हम सीख रहे हैं वह इन उपकरणों के लिए बहुत अच्छी तरह से मानचित्रण करता है।

10

यह एक दयालुता है कि आपके छात्र सी ++ में अच्छी तरह से ज्ञात नहीं हैं। एक बार जब मैं एक समृद्ध, ईबीएनएफ-शैली डीएसएल की अवधारणा के साथ Spirit लाइब्रेरी में आया, तो मैंने एंटर, लेक्स और वाईएसी को पीछे छोड़ दिया है! यह बहुत कोड के साथ वर्णित व्याकरण वाले अधिक लचीला है।

शानदार लाइब्रेरी, हालांकि एक स्वीकार्य रूप से गैर-तुच्छ सीखने की वक्र के साथ।

हालांकि, सी ++, Antlr के बिना शायद आपकी सबसे अच्छी शर्त है।

+0

मैंने कमांड लाइन तर्कों को पार्स करने के लिए भी आत्मा का उपयोग किया ... :) – xtofl

+1

प्रोग्राम_ऑप्शन लाइब्रेरी को पसंद न करें, आह? :) हमारे विश्वविद्यालय में – MattyT

+2

(मैं अभी भी अध्ययन कर रहा हूं), हम बूस्ट :: स्प्राइट को दोनों पार्सिंग और उन्नत सी ++ को पढ़ाने के लिए आधार के रूप में उपयोग करते हैं। यह उन लोगों के लिए वास्तव में अच्छा काम करता है जो सीखने के लिए प्रेरित हैं, लेकिन निश्चित रूप से, क्रूसी छात्रों के लिए बहुत अधिक उदास लगते हैं –

14

मैं लेक्सर और पार्सर जेनरेटर का उपयोग नहीं करता हूं। वे हाथ से उत्पन्न करने के लिए काफी सरल हैं, और लिखने के लिए एक कंपाइलर के सबसे आसान भागों हैं। इसके अलावा, जब आप उन्हें हाथ से बनाते हैं, तो आप उन्हें वास्तव में तेज़ बना सकते हैं।

+4

आपने स्पष्ट रूप से जटिल पार्सर/लेक्सर्स कभी नहीं लिखा है ... आप वास्तव में उन लोगों को हाथ से बनाए रखना नहीं चाहते हैं अगर वे जटिल हो जाओ। – Jorn

+13

हां, मैंने हाथ से पार्सर्स और लेक्सर्स किए हैं जो मनमानी लुकहेड और बैकट्रैकिंग करते हैं, और यहां तक ​​कि सी ++ के लिए भी एक! (सी ++ प्रीप्रोसेसर, टोकन जो कंपाइलर स्विच आदि पर आधारित है या नहीं) के साथ इसकी बातचीत के कारण थोड़ा कठिन है) –

+3

अधिक गर्भपात ... मुझे युवाओं के अहंकार से प्यार है। जोर्न, यदि आपके पास अभी भी कोई ध्यान दिया गया है ... www.digitalmars.com – JimR

2

जैवैक यह बहुत आसान है।
उसी फ़ाइल में आपके पास व्याकरण और टोकन सूची है।

https://javacc.dev.java.net/

0

मैं अपने compilers वर्गों में से एक में बाइसन का उपयोग कर याद है। हमने फ्लेक्स और वाईएसीसी का भी इस्तेमाल किया।

1

यदि आप जावा, जावासीसी या एएनटीएलआर के साथ काम करने की योजना बनाते हैं तो पर्याप्त होना चाहिए। यह बाद वाला सी सी और पायथन का भी समर्थन करता है। लेकिन अगर आप सी ++ के साथ काम करने की योजना बना रहे हैं, तो आपको बूस्ट :: स्पिरिट पर एक नज़र डालना चाहिए।

1

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

5

Yacc और अन्य सभी एलएएलआर (1) पार्सर्स एक युग से डेट करते हैं जब मशीन संसाधन दुर्लभ होते थे और व्याकरण इंजीनियरिंग करने में बहुत समय व्यतीत करना आवश्यक था ताकि आप पीडीपी -11 पर एक पार्सर चला सकें 64 के रैम के साथ। आज यह एक भयानक मानव इंटरफ़ेस के साथ yacc जैसे टूल को सिखाने और समझने वाले व्याकरणों का एक बहुत सीमित सेट नहीं समझता है।

मैं या तो आरईजी !, या जीएलआर पार्सर Elkhound में से एक पीईजी आधारित पार्सर्स की सिफारिश करता हूं जो जॉर्ज नेकुला और स्कॉट मैकपीक (धन्यवाद क्वार्क) द्वारा विकसित किया गया था। क्षमा करें मैं जावा के लिए एक विशिष्ट उपकरण की सिफारिश नहीं कर सकता, लेकिन चूहों! सी

एएनटीएलआर ठीक है लेकिन मेरे स्वाद के लिए बहुत जटिल है।

+0

ओपन सोर्स जीएलआर पार्सर: एल्खाउंड। http://www.scottmcpeak.com/elkhound। इसका उपयोग सी ++ पार्सर उत्पन्न करने के लिए भी किया जाता है। – quark

0

ओकैमल में पार्सर जेनरेटर का शानदार सेट है। Here कुछ सरल उदाहरण हैं।

जावासीसी भी काफी अच्छा है।

मैं इस उद्देश्य के लिए सी (और सी ++) से बचने की दृढ़ता से अनुशंसा करता हूं क्योंकि वे इस संदर्भ में असाधारण दर्दनाक हैं।

1

मुझे GOLD Parsing System बहुत पसंद है, क्योंकि यह मूल रूप से आवश्यक तालिकाओं को उत्पन्न करता है और फिर आपको केवल प्रोसेसर के (सामान्य) कार्यान्वयन का उपयोग करना होता है जो टोकन को संसाधित करने के लिए तालिका जानकारी का उपयोग करता है। इस इंजन (जिसे इसे कहा जाता है) लिखना काफी आसान है और मूल रूप से इनपुट को संसाधित करने के लिए एलएएलआर और डीएफए टेबल का उपयोग करके शुद्ध कार्यान्वयन है, और ऐसे कार्यान्वयन को लिखना उनको सिखाने का एक अच्छा अभ्यास हो सकता है।

+0

डाउनवोट क्यों? किसी को? – Lucero

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