微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

haskell – 用Text.Combinators.Parsec进行不区分大小写的解析最干净的方法是什么?

我正在和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 ++ "\""

原文地址:https://www.jb51.cc/html/230485.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐