haskell-cafe@haskell.org
[Top] [All Lists]

Re: [Haskell-cafe] Missing join and split

Subject: Re: [Haskell-cafe] Missing join and split
From: "Evan Laforge"
Date: Sun, 30 Dec 2007 22:07:00 -0800
> > Parser combinators basically provide generalized regexes, and they all
> > take lists of arbitrary tokens rather than just Chars.  I've written a
> > simple combinator library before that dispenses with all the monadic
> > goodness in favor of a group combinator and returning [Either [tok]
> > [tok]], which sort of gives parsers a simpler regexy flavor (Left is
> > "out of group chunk" and Right is "in group chunk").
> >
> > foo (match (group any `sepBy` char ';') -> [c1, c2, c3]) = ...
>
> Ah. Is this accessible somewhere?

Unfortunately it's just a toy since it uses the inefficient naive
parser combinator thing.  I wrote it while reading one of those
pre-monadic parser combinator papers.  A better version could wrap
parsec or ReadP (which unfortunately doesn't seem to be parameterized
on the token type).  Anyway, in case you're still interested:

http://ofb.net/~elaforge/hs/group_parse.hs

Excuse the poor quality, it was a long time ago.  At the time I was
thinking of a regex->parser combinator compiler, with the catch being
that you can extend the regex language to include your own parsers,
like:

let env = [("num", number_in_range 0 255), ("dotted", many1 letter
`sepBy` char '.')]
    p = from_regex env "<num>, +<num>: (<dotted>)"
in parse p input

You could even have a magic character that makes them be postfix
operators, and include combinators:, like "[a-z]<:comma_sep>", but
you're probably better off writing a real parser here.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@xxxxxxxxxxx
http://www.haskell.org/mailman/listinfo/haskell-cafe

<Prev in Thread] Current Thread [Next in Thread>