
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
: 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