python पायथन में लेक्सिंग, टोकनिंग और पार्सिंग के लिए संसाधन




parsing resources (6)

क्या लोग मुझे पायथन के साथ लेक्सिंग, पार्सिंग और टोकनिंग पर संसाधनों के बारे में बता सकते हैं?

मैं एक ओपन सोर्स प्रोजेक्ट ( hotwire ) पर थोड़ा हैकिंग कर रहा हूं और उस कोड में कुछ बदलाव करना चाहता था जो lexes , पार्स और टोकन को इसमें दर्ज किए गए कमांड को लॉन्च करता है। चूंकि यह वास्तविक कामकाजी कोड है, यह काफी जटिल है और काम करने में थोड़ा मुश्किल है।

मैंने पहले कोड पर लेक्स / पार्स / टोकनिस पर काम नहीं किया है, इसलिए मैं सोच रहा था कि इस दृष्टिकोण पर एक ट्यूटोरियल या दो के माध्यम से एक दृष्टिकोण काम करना होगा। मैं उस कोड के चारों ओर नेविगेट करने के लिए पर्याप्त सीखने की उम्मीद करता हूं जिसे मैं वास्तव में बदलना चाहता हूं। क्या वहां कुछ भी उपयुक्त है? (आदर्श रूप से यह दोपहर में पहले ड्रैगन पुस्तक को खरीदने और पढ़ने के बिना किया जा सकता है ...)

संपादित करें: (7 अक्टूबर 2008) नीचे दिए गए उत्तरों में से कोई भी मुझे जो कुछ चाहिए वो दे। उनके साथ मैं स्क्रैच से पार्सर्स उत्पन्न कर सकता हूं, लेकिन मैं सीखना चाहता हूं कि कैसे अपना खुद का मूल पार्सर स्क्रैच से लिखना है, लेक्स और वाईएसी या इसी तरह के टूल का उपयोग नहीं करना। ऐसा करने के बाद मैं मौजूदा कोड को बेहतर समझ सकता हूं।

तो क्या कोई मुझे एक ट्यूटोरियल में इंगित कर सकता है जहां मैं सिर्फ अजगर का उपयोग करके स्क्रैच से मूल पार्सर बना सकता हूं?


शुरू करने के लिए यहां कुछ चीज़ें दी गई हैं (लगभग सरलतम से सबसे जटिल, कम से कम-शक्तिशाली):

जब मैंने यह सामान सीखा, तो यह एक सेमेस्टर लंबे 400-स्तर के विश्वविद्यालय पाठ्यक्रम में था। हमने कई असाइनमेंट किए थे जहां हमने हाथ से पार्सिंग की थी; अगर आप वास्तव में समझना चाहते हैं कि हुड के नीचे क्या चल रहा है, तो मैं उसी दृष्टिकोण की सिफारिश करता हूं।

यह वह पुस्तक नहीं है जिसका मैंने उपयोग किया था, लेकिन यह बहुत अच्छा है: कंपाइलर डिज़ाइन के सिद्धांत

उम्मीद है कि आप शुरू करने के लिए पर्याप्त है :)


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

"पाइथन में स्क्रैच से एक सरल इंट्रेटर:" भाग 1 , भाग 2 , भाग 3 , और भाग 4


pygments एक स्रोत कोड वाक्यविन्यास हाइलाइटर है जो पायथन में लिखा गया है। इसमें लेक्सर्स और फॉर्मेटर्स हैं, और स्रोत पर नजर डालना दिलचस्प हो सकता है।


मध्यम-जटिल व्याकरण के लिए, PyParsing शानदार है। आप पाइथन कोड के भीतर सीधे व्याकरण परिभाषित कर सकते हैं, कोड जनरेशन की कोई आवश्यकता नहीं है:

>>> from pyparsing import Word, alphas
>>> greet = Word( alphas ) + "," + Word( alphas ) + "!" # <-- grammar defined here
>>> hello = "Hello, World!"
>>>> print hello, "->", greet.parseString( hello )
Hello, World! -> ['Hello', ',', 'World', '!']

(PyParsing होम पेज से लिया उदाहरण)।

पार्स क्रियाओं के साथ (फ़ंक्शंस जो एक निश्चित व्याकरण नियम ट्रिगर होने पर लागू होते हैं), आप पार्स को सीधे अमूर्त वाक्यविन्यास पेड़, या किसी अन्य प्रतिनिधित्व में परिवर्तित कर सकते हैं।

ऐसे कई सहायक कार्य हैं जो पुनरावर्ती पैटर्न को समाहित करते हैं, जैसे ऑपरेटर पदानुक्रम, उद्धृत तार, घोंसले या सी-शैली टिप्पणियां।


मैं http://www.canonware.com/Parsing/ सुझाव देता हूं, क्योंकि यह शुद्ध पायथन है और आपको व्याकरण सीखने की आवश्यकता नहीं है, लेकिन इसका व्यापक रूप से उपयोग नहीं किया जाता है, और तुलनात्मक रूप से कम दस्तावेज है। हेवीवेट एएनटीएलआर और पायपार्सिंग है। एएनटीएलआर जावा और सी ++ पार्सर्स और एएसटी वॉकर भी उत्पन्न कर सकता है लेकिन आपको सीखना होगा कि एक नई भाषा में क्या मात्रा है।


मैं PLY का एक खुश उपयोगकर्ता हूँ। यह लेक्स और वाईएसीसी का शुद्ध-पायथन कार्यान्वयन है, जिसमें बहुत से छोटे नस्लों हैं जो इसे काफी पाइथनिक और उपयोग में आसान बनाते हैं। चूंकि लेक्स और वाईएसी सबसे लोकप्रिय लेक्सिंग और पार्सिंग उपकरण हैं और अधिकांश परियोजनाओं के लिए उपयोग किए जाते हैं, पीएलवाई का दिग्गजों के कंधों पर खड़े होने का लाभ होता है। लेक्स और वाईएसीसी पर बहुत सारे ज्ञान ऑनलाइन मौजूद हैं, और आप इसे पीएलवाई पर स्वतंत्र रूप से लागू कर सकते हैं।

पीएलवाई के पास आपके पास शुरू करने के लिए कुछ सरल उदाहरणों के साथ एक अच्छा प्रलेखन पृष्ठ भी है।

पाइथन पार्सिंग टूल के बहुत सारे लिस्टिंग के लिए, इसे देखें।





lex