मेरा उद्देश्य पाइथन स्ट्रिंग के साथ पार्स करना है।सिंगल, डबल, या ट्रिपल कोट्स के साथ लेक्स स्ट्रिंग्स
प्रश्न: निम्नलिखित का समर्थन करने के एक लेक्स लिखने के लिए कैसे:
"string..."
'string...'
"""multi line string \n \n end"""
'''multi line string \n \n end'''
कुछ ग स्तोत्र:
states = ( ('string', 'exclusive'), ) # Strings def t_begin_string(self, t): r'(\'|(\'{3})|\"|(\"{3}))' t.lexer.push_state('string') def t_string_end(self, t): r'(\'|(\'{3})|\"|(\"{3}))' t.lexer.pop_state() def t_string_newline(self, t): r'\n' t.lexer.lineno += 1 def t_string_error(self, t): print("Illegal character in string '%s'" % t.value[0]) t.lexer.skip(1)
मेरे वर्तमान विचार 4 अद्वितीय राज्यों कि 4 अलग स्ट्रिंग मामलों से मिलान करेगा बनाने के लिए है, लेकिन वहाँ एक बेहतर तरीका है, तो मैं सोच रहा हूँ।
आपकी मदद के लिए धन्यवाद!
के रूप में आप 4 अलग स्ट्रिंग प्रकार है तो मैं आप 4 अलग-अलग राज्यों की आवश्यकता होगी उम्मीद करेंगे नमूना कोड है। संभवतः '' 'स्ट्रिंग "' 'बीमार है? – nimish
आप दो अद्वितीय राज्यों का उपयोग कर सकते हैं, एक सिंगल कोट्स के लिए और एक ट्रिपल कोट्स के लिए, लेकिन आपको कहीं भी उद्धरण चरित्र को स्टोर करने की आवश्यकता होगी। यह बहस योग्य है कि कौन सी विधि बेहतर है। – Thayne
मैं 4 राज्यों के निर्माण से डर रहा था ... क्या दो काम कर सकते हैं? क्योंकि प्रारंभ/समाप्ति राज्य प्रारंभिक प्रारंभ उद्धरण प्रकार से मेल नहीं खाते हैं। पूर्व '" स्ट्रिंग ..'... स्ट्रिंग ... "'पार्सर' स्ट्रिंग के रूप में स्ट्रिंग..' फिर एक पार्स त्रुटि के रूप में '... स्ट्रिंग ..." देखें। –