[Haskell-cafe] Parsing in Practice
Philippa Cowderoy
flippa at flippac.org
Tue Oct 18 11:33:49 EDT 2005
On Tue, 18 Oct 2005, Tom Hawkins wrote:
> However, I have a few concerns with Parsec. First is performance; what
> factor of slow-down should I expect? Second is bug prevention. I don't have
> much experience writing LL(n) grammars, so how easy is it to introduce bugs
> in a Parsec grammar? Even though I hate debugging LALR(1) parsing
> ambiguities, it prevents problems.
>
I can't give you figures on performance I'm afraid - I think I saw some
somewhere but I honestly can't remember where.
It's possible to shoot yourself in the foot with the
no-backtracking-by-default behaviour, and I've done so a couple of times
when not thinking although I don't think I've ever spent more than a
couple of hours spotting it. If you've got a decent chunk of test data or
don't mind generating it with QuickCheck odds are you can spot it
reasonably quickly when it happens. You can always litter try everywhere
and then remove it when you're confident you can do so, too. More
generally I find it fairly easy to 'just write the grammar' with Parsec,
though I've not done anything overly complex and I've still done silly
things like use *bold* as the bold syntax in a wiki clone then realise I
wanted
* lists
* like
* this
which the library doesn't really do anything to help you spot until you
try out the list syntax and watch it parse as bold because you listed the
bold parser first. It might be interesting to try writing a variant of
Parsec designed to search itself for possibilities like that - it's never
going to be possible to fix it entirely though because being monadic it's
also comfortably capable of parsing anything a turing machine can. IIRC
there's a reasonably well-understood type of grammar that corresponds to
the first-order fragment of Parsec though?
> Also, it appears the GHC developers chose Happy for Haskell. What was their
> rational?
>
Amongst other things, Parsec didn't exist at the time.
--
flippa at flippac.org
Society does not owe people jobs.
Society owes it to itself to find people jobs.
More information about the Haskell-Cafe
mailing list