मैं पारसी के साथ अपना पहला कार्यक्रम लिख रहा हूं। मैं MySQL स्कीमा डंप को पार्स करना चाहता हूं और केस-असंवेदनशील फैशन में कुछ कीवर्ड का प्रतिनिधित्व करने वाले तारों को पार्स करने के लिए एक अच्छा तरीका पेश करना चाहता हूं। यहां कुछ कोड दिखाया गया है जिसका उपयोग मैं "CREATE" या "create" को पार्स करने के लिए कर रहा हूं। क्या ऐसा करने के लिए इससे अच्छा तरीका है? एक उत्तर जो buildExpressionParser का सहारा नहीं लेता है सबसे अच्छा होगा। मैं यहाँ बच्चे के कदम उठा रहा हूँ।Text.Combinators.Parsec के साथ केस-असंवेदनशील पार्सिंग करने का सबसे साफ तरीका क्या है?
p_create_t :: GenParser Char st Statement
p_create_t = do
x <- (string "CREATE" <|> string "create")
xs <- manyTill anyChar (char ';')
return $ CreateTable (x ++ xs) [] -- refine later
मुझे लगता है कि पार्सर चलाने से पहले इनपुट पर 'नक्शा टू लोवर' एक विकल्प नहीं है? साथ ही, मैं "केस" असंवेदनशील "" क्रिएट "," CREEATe "," CREATe ", या किसी अन्य भिन्नता से मेल खाता हूं, जो आपका उदाहरण अस्वीकार करता है। तुम्हें कौनसा चाहिए? –
यह काम करता है। धन्यवाद। मैंने इसके बारे में सोचा नहीं था! – dan
@ डैन बस सावधान रहें कि यदि आपके इनपुट में तार हैं, तो वे भी कम हो जाएंगे। उदाहरण के लिए, यदि आपके किसी भी कॉलम में डिफ़ॉल्ट स्ट्रिंग मान हैं। –