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

前端之家收集整理的这篇文章主要介绍了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 ++ "\""
原文链接:/html/230485.html

猜你在找的HTML相关文章