On Fri, Sep 24, 2010 at 9:28 PM, Evan Laforge <[email protected]> wrote: >>> 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
Evan, Thanks very much for the typo confirmation, the explanation about backtracking below, and the tip about the source distribution for the examples. I need to remember that multiple char strings imply backtracking, and that backtracking is not the default, hence "try". Thanks. -- Peter > >> 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. > _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
