My confusion is that text is by definition followed by // or eof.


minh thu wrote:
You can use 'notFollowedBy' (probably with 'many1' and 'try').
Something like (untested):

notFollowedBy (try $ string "//")

Thu

2009/4/17 Michael Mossey <m...@alumni.caltech.edu>:
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

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to