Here's what I've got so far.
-- Text is considered everything up to //. However, the problem
-- is that this consumes the //.
parseText = manyTill anyChar (try (string "//"))
-- Because the // is already consumed, parseKeyword just grabs
-- the available letters.
parseKeyword :: Parser String
parseKeyword = many1 letter
-- Test function.
parseSome = do t1 <- parseText
k1 <- parseKeyword
t2 <- parseText
return (t1,k1,t2)
On "some text//keyword more text//" this gives
("some text","keyword"," more text")
On "some text//keyword more text"
this gives the error "expecting //"
I wonder how I can get the manyTill to be happy with eof before finding the //?
I tried
parseText = manyTill anyChar (try (string "//") <|> eof)
but got a type error.
minh thu wrote:
2009/4/17 Michael P Mossey <m...@alumni.caltech.edu>:
I want to write a parser that can read a file with this format: the file has
sections which are demarcated by keywords. Keywords always begin with two
forward slashes and consist of letters, digits, and underscore. The text can
be anything, including special characters. For instance:
//keyword some text
and more text //another_keyword and) some { more text
//ya_keyword $$
-- text
I'm not sure how to write a parser that considers anything but a double
slash to be a valid part of the text.
Maybe you can use a combination of 'many', 'noneOf' or 'manyTill' ?
Cheers,
Thu
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe