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 ++ "\""

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些