如何解析一个字符,然后解析Attoparsec中匹配的内容?

时间:2015-03-16 01:56:24

标签: parsing haskell attoparsec

我正在为日志文件编写解析器。日志文件中的一行列出了HTTP请求的参数:

  Parameters: {"back"=>"true", "embed_key"=>"12affbbace", "action"=>"index", "ajax"=>"1", "controller"=>"heyzap", "embed"=>"1"}

我在使用Attoparsec解析此问题时遇到了问题。我的基本想法是解析并放弃Parameters: {,然后将文字保持为}。然后我将该文本解析为(key, value)元组列表。这是我到目前为止所得到的:

parseParams :: Parser [(Text, Text)]
parseParams = do
    paramString <- "  Parameters: {" *> takeTill' (== '}')
    let params = splitOn ", " paramString
    -- I'm not sure how to apply parseParamPair to params here

parseParamPair :: Parser (Text, Text)
parseParamPair = do
    key <- parseKeyOrValue
    value <- string "=>" >> parseKeyOrValue
    return (key, value)
    where
        parseKeyOrValue :: Parser Text
        parseKeyOrValue = char '"' >> takeTill' (== '"')

takeTill' :: (Char -> Bool) -> Parser Text
takeTill' func = takeTill func <* skip func

我该如何实现?我应该以某种方式使用Data.Attoparsec.Text.sepBy吗?

0 个答案:

没有答案