[Haskell-cafe] parsec manyTill documentation question
Evan Laforge
qdunkan at gmail.com
Sat Sep 25 00:30:18 EDT 2010
[ sorry, forgot reply to all ]
>> simpleComment = do{ string "<!--"
>> ; manyTill anyChar (try (string "-->"))
>> }
>>
>> Note the overlapping parsers anyChar and string "<!--", and
>> therefore the use of the try combinator.
>
> First, I would have expected it to instead say:
>
> Note the overlapping parsers anyChar and string "-->", ...
Yes, I think the doc just made a mistake there. In fact, it looks
like the same mistake is in the current doc at
http://hackage.haskell.org/packages/archive/parsec/3.1.0/doc/html/Text-Parsec-Combinator.html
> Second, manyTill, by definition, keeps applying p (anyChar) until
> end (string "-->") is satisfied, so I would expect one could just
> write:
>
> manyTill anyChar (string "-->")
The problem is that "-->" has multiple characters. So if you have
"-not end comment", it will match the '-' against the (string "-->").
Since it doesn't backtrack by default, it's committed now and will
fail when it hits the 'n'. The 'try' will make it backtrack to
'anyChar' when the second '-' fails to match.
> (If anyone knows of a collection of parsec demos or good examples, I
> would appreciate a link; thanks)
I thought the parsec source included some example parsers for simple
languages? In any case, there is lots of material floating around,
though I found parsec so intuitive and the docs so good that I just
started hacking. I think the 'build scheme in haskell' tutorial uses
parsec for the parsing.
More information about the Haskell-Cafe
mailing list