2009-11-21 13 views
9

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

मुझे एक कार्य दिया गया है जहां मुझे एक साधारण सी-जैसी भाषा के लिए एक पार्सर बनाना है। मैं किसी भी प्रोग्रामिंग भाषा और उपकरण का उपयोग कर सकता हूं जिसे मैं पार्सर बनाना चाहता हूं, लेकिन मैं एक ही समय में पाइथन सीख रहा हूं, इसलिए यह मेरी पसंदीदा पसंद होगी।

मेरे पार्सर को कुछ प्रतिबंधों का पालन करना है। सबसे पहले, यह है कि निम्न जानकारी होती है एक पाठ फ़ाइल में पढ़ने में सक्षम होना चाहिए:

kind1 : spelling1 
kind2 : spelling2 
kind3 : spelling3 
     . 
     . 
     . 
kindn : spellingn 

कहाँ प्रत्येक प्रकार और वर्तनी टोकन प्रकार और भाषा के मान को देखें। यह फ़ाइल भाषा के शब्दावली विश्लेषक के माध्यम से कोड का नमूना लगाने का परिणाम है।

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

%function int test 
    %variable int x 
    %variable int y 
%begin 
    %if %id y , %id x > %do 
    %begin 
    %return %num 0 
    %end 
    %return %num 1 
%end 

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

उत्तर

10

PyParsing पार्सर्स उत्पन्न करने के लिए एक अजगर उपकरण है। lot of interesting examples हैं।

आसान आरंभ करने के लिए:

from pyparsing import Word, alphas 

# define grammar 
greet = Word(alphas) + "," + Word(alphas) + "!" 

# input string 
hello = "Hello, World!" 

# parse input string 
print hello, "->", greet.parseString(hello) 
5

यह मेरे लिए एक pyparsing काम की तरह लग रहा है। और यह आउटपुट में हेरफेर करने के लिए अपेक्षाकृत आसान बनाता है।

+0

आपकी सलाह के लिए धन्यवाद। मैं निश्चित रूप से PyParsing पर एक नज़र रखना होगा। – greenie

1

मुझे लगता है कि आप लार्क की जाँच की सिफारिश: https://github.com/erezsh/lark

यह सभी विषय से मुक्त व्याकरण पार्स कर सकते हैं, यह स्वतः ही एक एएसटी (लाइन & स्तंभ संख्या के साथ) बनाता है, और यह EBNF प्रारूप है, जिसमें व्याकरण स्वीकार करता है लिखना आसान है और इसे मानक माना जाता है।

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