2009-10-15 17 views
11

में कैसे करें मैं समझना चाहता हूं कि स्रोत फ़ाइलों को संसाधित करने के लिए .NET में एक पार्सर कैसे बनाया जाए। उदाहरण के लिए, हो सकता है कि मैं एसक्यूएल या एचटीएमएल या सीएसएस को कैसे पार्स करना सीखूं और फिर परिणामों पर कार्य कर सकूं ताकि वे पठनीयता या कुछ इसी तरह के प्रारूप के लिए प्रारूपित हो सकें।पार्सर .NET

मैं यह कहां से सीख सकता हूं? क्या ऐसी विशिष्ट किताबें हैं जिन्हें मैं संदर्भित कर सकता हूं? क्या मुझे लेक्सर्स/पार्सर्स के बारे में जानने की ज़रूरत है?

विशेष रूप से .NET प्लेटफार्म के लिए क्योंकि मैं सी # में सहज हूं।

उत्तर

17

के बारे में जानने के लिए एक अच्छा तरीका है मैं व्यक्तिगत रूप से इस लेख, Grammars and Parsing with C# 2.0, lexers/पारसर्स लिखने पर एक बेहतरीन परिचय, उदाहरण विशेष रूप से सी # से संबंधित के साथ मिल गया।

मैंने a brief blog post लिखा था, यह बहुत पहले नहीं था, इसे प्रशंसा कर रहा था। अच्छी बात यह है कि सिद्धांतों को पार्स करने के लिए पूर्ण शुरुआती लोगों का लक्ष्य बहुत अधिक है (यह सिद्धांत के साथ-साथ कार्यान्वयन के लिए पृष्ठभूमि देता है), और धीरे-धीरे चरणों में मामलों को लेता है। बेशक, यदि आप क्षेत्र के अधिक उन्नत विचारों को सीखना चाहते हैं, तो आपको कई अन्य संसाधनों की आवश्यकता होगी, लेकिन मुझे लगता है कि यह एक उत्कृष्ट नींव है।

+1

+1। वह अच्छा दिखता है। और निश्चित रूप से कुछ जटिल कोड में डाइविंग से बेहतर शुरुआत है। – Joey

+1

यह बहुत अच्छा था। एक अच्छा परिचय, अच्छे उदाहरण और कुछ सी # के साथ इसे एक साथ बांधने के लिए पीछा किया! – Rudy

+0

लिंक मर चुका है। किसी के पास अभी भी दस्तावेज़ है? –

2

ANTLR :)

अपने grammers और पारसर्स

+0

एएनटीएलआर के "डाउनसाइड" (केवल इस मामले में) यह है कि यह कई लक्षित भाषाओं में से एक में आपके लिए पार्सर का उत्पादन करेगा। कूल, यह आमतौर पर लक्ष्य है, लेकिन इस स्थिति में, SevenCentral स्क्रैच से एक लिखने के शैक्षिक [एक साधारण व्याकरण के लिए] से चूक जाएगा। – mjv

+0

जटिल पार्सर्स के विकास के लिए एक आसान टूल (यह सी # कोड भी उत्सर्जित कर सकता है), लेकिन यदि आप पृष्ठभूमि और मूल बातें सीखना चाहते हैं तो शायद सबसे अच्छा तरीका नहीं है। – Noldorin

+0

मुझे लगता है कि यह शुरू करने का एक अच्छा तरीका है, आप पार्सर के मामले में क्या संभव हो इसके बारे में एक कामकाजी ज्ञान प्राप्त करते हैं और फिर गहराई से खोद सकते हैं और यदि आप अभी भी एक साधारण रिकर्सिव सभ्य पार्सर चाहते हैं तो अपना खुद का निर्माण कर सकते हैं। –

4

यदि आप पार्सर लिखना सीखना चाहते हैं तो यह आपका जवाब नहीं हो सकता है, लेकिन यदि आप पार्स परिणामों के साथ पार्स करना और काम करना चाहते हैं, तो आपको निश्चित रूप से Irony.net पर देखना चाहिए। यह एक टूलकिट है जो भाषाओं को लागू करने में मदद करता है (.NET के साथ)।

0

यहां तक ​​कि कठिन यह थोड़ा अधिक उन्नत दिख सकता है, मोनाडिक पार्सर संयोजक पर एक नज़र डालें। वहाँ LukeH वेबलॉग पर एक बड़ा ब्लॉग पोस्ट यहाँ है:

http://blogs.msdn.com/lukeh/archive/2007/08/19/monadic-parser-combinators-using-c-3-0.aspx

एक बार जब आप मूल बातें मिलता है, यह बहुत स्पष्ट पार्सर परिभाषाएँ हैं।

0

सबसे अच्छा किताब है कि मैं पार्सिंग के मुहावरों सीखने के लिए पढ़ा है आप System.Text.RegularExpressions के लिए .NET स्रोत कोड पर अपने हाथों को प्राप्त कर सकते हैं कि "लिटिल बोली"

Little Languages on Amazon

, आप एक पार्सर बनाने के तरीके के बारे में एक असली दुनिया कार्यान्वयन भी देखेंगे।

Justin's Blog

और अंत में, यदि आप पारसर्स और व्याकरण की नई दुनिया में प्रवेश करना चाहते हैं, क्या तुम सच में पढ़ने जाना चाहिए:

जस्टिन रोजर्स कैसे अपने ब्लॉग पर सामान्य पारसर्स का निर्माण करने पर कुछ उत्कृष्ट लेख है 'ओस्लो' और भाषा एम और एमग्र्राम का उपयोग कैसे करें। जब परिणामस्वरूप ऑब्जेक्ट ग्राफ को अन्य उपयोग करने योग्य रूपों में पार्सिंग और ट्रांसफॉर्म करने की बात आती है तो वे आपको बहुत लचीलापन देंगे।

जस्टिन के लेख शायद .NET के ऊपर बनाए गए कच्चे पार्सर के साथ उठने और चलाने के लिए सबसे आसान और सरल हैं।

1

सी # 2.0 के बाद से एक लंबा सफर तय किया है। अभिव्यक्ति पेड़ और गतिशील टाइपिंग का हालिया जोड़ा कंपेलरों को लागू करने के लिए चीजों को और अधिक दिलचस्प बनाता है।

Here is a tutorial CodeProject.com पर सी # 4.0 में एक दुभाषिया बनाने के तरीके पर।

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