我正在和Parsec一起编写我的第一个程序.我想解析
MySQL模式转储,并希望提供一种很好的方法来解析表示某些不区分大小写的关键字的字符串.以下是一些代码,显示了我用来解析“CREATE”或“create”的方法.有没有更好的方法来做到这一点?一个没有诉诸于buildExpressionParser的答案是最好的.我在这里走宝宝步.
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
解决方法
您可以从字符解析器中构建不区分大小写的解析器.
-- Match the lowercase or uppercase form of 'c' caseInsensitiveChar c = char (toLower c) <|> char (toUpper c) -- Match the string 's',accepting either lowercase or uppercase form of each character caseInsensitiveString s = try (mapM caseInsensitiveChar s) <?> "\"" ++ s ++ "\""