में लिखित गणित वाक्यविन्यास परीक्षक, यदि कोई स्ट्रिंग मान्य गणित अभिव्यक्ति है या नहीं, तो मुझे केवल पाइथन का उपयोग करके जांचना है।पाथथन
सादगी के लिए मान लें कि मुझे केवल + - * /
ऑपरेटर (+ -
यूनरी के रूप में भी) की आवश्यकता है और संख्याओं और घोंसले वाले कोष्ठक के साथ। मैं पूर्णता के लिए भी सरल परिवर्तनीय नाम जोड़ता हूं।
test("-3 * (2 + 1)") #valid
test("-3 * ") #NOT valid
test("v1 + v2") #valid
test("v2 - 2v") #NOT valid ("2v" not a valid variable name)
मैंने कोशिश की pyparsing लेकिन उदाहरण सिर्फ कोशिश कर रहा:
तो मैं इस तरह से परीक्षण कर सकते हैं "simple algebraic expression parser, that performs +,-,*,/
and ^
arithmetic operations" मैं अमान्य कोड पारित कर दिया हो और यह भी इसे ठीक करने मैं हमेशा गलत वाक्यविन्यास अपवाद को ऊपर उठाने के बिना पार्स किया जाता हो कोशिश कर
सिर्फ कोशिश:
>>>test('9', 9)
9 qwerty = 9.0 ['9'] => ['9']
>>>test('9 qwerty', 9)
9 qwerty = 9.0 ['9'] => ['9']
दोनों परीक्षण पास ... ओ _O
कोई सलाह?
'pi' से सत्य नहीं है ...' pi' है और 'querty' नहीं है और पहचान केवल ब्रांड्स के बाद आता है ... बेशक अगर मैं वैध वाक्यविन्यास परीक्षक के रूप में काम करने के लिए पाइपर्सिंग प्राप्त कर सकता हूं तो मुझे यह पसंद आएगा । मैं एलईपीएल को भी मौका दूंगा। – neurino
@neuriono: फिर या तो स्रोत कोड भ्रामक है और व्याकरण वास्तव में अलग है, या पाइपर्सिंग टूटा हुआ है (संपादित करें: एक स्पष्टीकरण जिसे मैं सोच सकता हूं, जो श्रेणी में होगा "पाइपर्सिंग टूटा हुआ है": यह उपभोग नहीं करता है पूरी स्ट्रिंग लेकिन इसके अलावा बाहर निकलती है और यह तब तक लौटती है जब शेष इनपुट पार्स करने में विफल रहता है)। – delnan
अच्छी तरह से यह काफी स्पष्ट है, लेकिन यदि आप पार्सर (डीफ़ बीएनएफ()) बनाने वाले कोड के हिस्से को देखते हैं तो यह काफी सरल है और यहां तक कि _exponentiation_ भाग जैसी चीज़ों को भी हटा देना इसे आसान बनाता है, फिर भी मुझे लगता है कि पाइपर्सिंग अच्छा नहीं है वाक्यविन्यास की जांच में। – neurino