2011-06-21 14 views
5

से लागू करने तर्क मैं एक प्रोग्राम है जो उदाहरण के लिए पाठ के रूप में आदानों प्राप्त करता है:पाठ

IF (A.4.1-1/1 OR A.4.1-1/2) AND A.4.4-1/9 AND (A.4.4-1/12 OR A.4.4-1/13 OR A.4.4-1/14 OR A.4.4-1/15) THEN R ELSE N/A 

जहां A.4.1-1/1 आदि एक मूल्य TRUE or FALSE साथ चर हैं। अब तक मैं ऊपर के उदाहरण के लिए तार्किक भागों में पाठ पार्स है मैं एक सूची है कि इस तरह दिखता है:

['IF', '(', 'A.4.1-1/1', 'OR', 'A.4.1-1/2', ')', 'AND', 'A.4.4-1/9', 'AND', '(', 'A.4.4-1/12', 'OR', 'A.4.4-1/13', 'OR', 'A.4.4-1/14', 'OR', 'A.4.4-1/15', ')', 'THEN', 'R', 'ELSE', 'N/A'] 

मैं बस सोच रहा हूँ यह संभव है वास्तव में सभी गठबंधन की तरह इस सूची में तर्क प्रदर्शन करने के लिए यह rquired पायथन कथन में और परिणाम प्रदान करते हैं। मुझे यकीन नहीं है कि शुरू करने के लिए मैंने कुछ साइटों पर पढ़ा है कि मुझे शीर्ष नीचे पार्सर का उपयोग करना चाहिए ??

+0

आप श्लेक्स पर एक नज़र रखना चाहते हैं: http://docs.python.org/library/shlex.html –

+0

सहायता के लिए धन्यवाद मैं इस –

उत्तर

6

यह Pyparsing के लिए एक कार्य की तरह लगता है:

pyparsing मॉड्यूल बनाने और सरल व्याकरण को क्रियान्वित करने, बनाम पारंपरिक लेक्स/याक दृष्टिकोण, या नियमित के उपयोग के लिए एक विकल्प दृष्टिकोण है भाव। पाइपर्सिंग मॉड्यूल कक्षा की लाइब्रेरी प्रदान करता है जो क्लाइंट कोड व्याकरण सीधे पाइथन कोड में बनाने के लिए उपयोग करता है।

आप अपने व्याकरण (नियमित अभिव्यक्तियों के साथ खेलने के बजाए) और विशिष्ट पार्सिंग क्रियाओं को जल्दी से परिभाषित करने में सक्षम होंगे। मैंने कोड के 300 लाइनों में पाइपर्सिंग का उपयोग करके बहुत समृद्ध मिनी-भाषाओं का निर्माण किया है।

+0

सरलबूल में देखेंगे। पाइपर्सिंग विकी से पेज उदाहरण उदाहरण पृष्ठ शायद बहुत अच्छी तरह से फिट होगा। – PaulMcG

+0

@ पॉल: और मुझे लगता है कि आप जानते हैं, क्योंकि आपने पाइपर्सिंग लिखा है;) – Escualo

+0

सहायता पॉल के लिए धन्यवाद :) –

1

मैं पाइथन लड़का नहीं हूं, लेकिन मैंने JavaCC का उपयोग कर जावा में समान चीज़ें की हैं। आप अपनी भाषा के लिए grammar लिखना चाहते हैं (EBNF जैसे प्रारूप में, लेकिन यह पार्सर जेनरेटर पर निर्भर करता है), उसके बाद जावासीसी जैसे प्रोग्राम का उपयोग करें ताकि इसके लिए एक पार्सर उत्पन्न हो सके, जो आपको parse tree देगा यह हेरफेर करने के लिए और अधिक सुविधाजनक है।

आपको कई उपयोगी उदाहरण मिलने में सक्षम होना चाहिए, क्योंकि आपके इनपुट का व्याकरण बहुत असामान्य नहीं दिखता है (बुलियन ऑपरेटर, ब्रांडेडिज्ड एक्सप्रेशन, और यदि-तो-अन्य विवरण शायद सबसे आम उपयोग-मामलों में से कुछ हैं इसके लिए)।

आपको पाइथन लाइब्रेरी listed on this page उपयोगी में से एक मिल सकता है।

+0

पर एक नज़र डालेगा धन्यवाद इस –