Haskell:parsec键-值对(键:值)
如何使用parsec将包含键和值的文件解析为Haskell:parsec键-值对(键:值),haskell,parsec,Haskell,Parsec,如何使用parsec将包含键和值的文件解析为[[(String,String)]] key1: value 1 key2: value 2 key1: value 1 key2: value 2 key1: value 1 key2: value 2 关键是一个字,价值可以是更多的字 我试过了 tag :: GenParser Char st Tag tag = do name <- key value <- manyTill anyChar (try key) ret
[[(String,String)]]
key1: value 1 key2: value 2
key1: value 1 key2: value 2
key1: value 1 key2: value 2
关键是一个字,价值可以是更多的字
我试过了
tag :: GenParser Char st Tag
tag = do
name <- key
value <- manyTill anyChar (try key)
return (name, value)
key :: GenParser Char st String
key = do
name <- many (noneOf ": ")
char ':'
return name
> parse (many tag) "" "key1: value 1 key2: value 2"
Right [("key1"," value 1 ")]
标记::GenParser Char st标记
tag=do
name我已经更改了标记
函数来测试换行符和下一个键,这对我很有效
tag :: GenParser Char st Tag
tag = do
name <- key
value <- manyTill anyChar ((test newline) <|> (test key))
return (name, strip value)
test :: GenParser Char st a -> GenParser Char st ()
test p = lookAhead $ try p >> return ()
key :: GenParser Char st String
key = do
name <- many1 (noneOf ": \n\r")
char ':'
return name
标记::GenParser Char st标记
tag=do
名称>返回()
key::GenParser Char st String
key=do
如果文件的语法规范不那么模棱两可,我们将不胜感激。[(“键1”、“值1”)]
结果正确吗?@identity否,该键应该是一个没有空格的单词。