इस बाहर की जाँच करें, यह वाणिज्यिक है, लेकिन यह एक मजेदार खिलौना की तरह दिखता है:
http://dpg.zenithlab.com/
लेकिन, वास्तव में: गठजोड़ के लिए आप एक जटिल पार्सर जरूरत नहीं है।
स्थिति की जांच कोड का थोड़ा सा, और कुछ स्ट्रिंग-स्प्लिटिंग और कंस्ट्रैसिस गिनती, और आपने इसे लिखा है। एक TStringList में
- लोड फाइल:
मैं इस तरह एक साधारण टोकन-पर-एक-समय पार्सर का उपयोग कर इसे पार्स होगा। प्रत्येक लाइन के लिए
- , लाइन प्रकार निर्धारित करने के लिए, एक समय में एक टोकन पकड़ें।
इस लाइन प्रकार के लिए एक गणना प्रकार है।
- पहली वैध गैर-रिक्त रेखा को वैध #nexus टैग होने के लिए हटाया जाना चाहिए।
- अगले हेडर क्षेत्र (ज्यादातर इसे छोड़कर छोड़ दिया गया)
- लाइन पर पहला और कीवर्ड शुरू होता है।
- प्रारंभ ब्लॉक के अंदर पंक्तियों के बाद लगभग एक डॉस कमांड और इसके कमांड लाइन पैरामीटर की तरह दिखाई देता है और रिक्त स्थान से अलग होता है, और सेमीकॉलन के साथ समाप्त होता है। पास्कल की तरह बहुत ज्यादा, लेकिन कोष्ठक।
ऊपर के लिए मैं खुद के लिए सहायकों का एक छोटा सेट कोड होता है, और अंततः चीजें मैं लिखने के लिए आवश्यकता हो सकती है में से एक इस तरह एक छोटे से टोकन बंटवारे समारोह है:
समारोह GetToken (वर inputString: स्ट्रिंग; आउटपुट टोकन: स्ट्रिंग; कॉन्स सेपरेटर्स: टीएसट्रिंग्स; कीवर्ड: टीएसट्रिंग्स; पेरेंटफ्लैग: बूलियन): बूलियन;
गेटोकन इनपुट लौटने से टोकन स्ट्रिंग को खोजने और वापस करने में सक्षम होने पर सत्य वापस आ जाएगा, यह किसी भी अग्रणी व्हाइटस्पेस को छोड़ देगा, और जब इसे विभाजक मिल जाए तो समाप्त हो जाएगा। विभाजक अंतरिक्ष या अल्पविराम जैसी चीजें हैं।
पेरेंटफ्लैग: ट्रू का मतलब यह होगा कि मुझे प्राप्त होने वाला अगला टोकन आइटमों की एक संपूर्ण संश्लेषित सूची होना चाहिए। एक बार जब मैं पूरी संश्लेषित सूची प्राप्त करता हूं (((ए, बी), (सी, डी), (ई, एफ))) तो मैं एक और फ़ंक्शन कॉल करूंगा जो सूचियों के लिए कुछ डेटा संरचना में उस सूची की सामग्री को अनपैक करेगा/सरणियों।
मैं बड़े पार्सर इंजन की अनुशंसा नहीं करता हूं, और यदि आप पार्सर लिखने से पहले बीएनएफ व्याकरण लिखते हैं तो बीएनएफ व्याकरण की बात आपको कोड लिखने में मदद करेगी। लेकिन यहां कुछ भी क्रूर नहीं है कि आप इसे पार्स नहीं कर सकते हैं।
क्या आप इस पर प्रश्न/परिवर्तन करने की उम्मीद कर रहे हैं? क्या आपको लगता है कि इसके साथ काम करने के लिए आपको इसे जेसन या एक्सएमएल में परिवर्तित करने की आवश्यकता है?
स्रोत
2010-07-21 01:11:13
मैं अब गोल्ड पार्सर की जांच कर रहा हूं। – Daisetsu
बस एक एफवाईआई यह केवल बीएनएफ का समर्थन करता है जो ईबीएनएफ नहीं है जो इसे काम करने के लिए कुछ हद तक दर्दनाक बनाता है। – Daisetsu
हाँ, मैं मानता हूं, ईबीएनएफ समर्थन इसे आसान बना देगा। :( –