[Haskell-cafe] Parsing unordered parameter list with Parsec

Stefan O'Rear stefanor at cox.net
Thu Apr 5 11:12:47 EDT 2007


On Thu, Apr 05, 2007 at 03:50:26PM +0100, Will Newton wrote:
> Hi all,
> 
> I'm new to Haskell and trying to do some parsing with Parsec. It's
> been extremely good so far. I have run into a problem I can't seem to
> see the solution to though. I hope someone on the list can help me
> out!
> 
> I have a command with a parameter list like this:
> 
> CMD PARAM1 foo PARAM2 100 PARAM3 200
> 
> Which is easy enough to parse, but it turns out the grammar is not
> particularly well defined, and it's considered acceptable to swap
> parameter order round pretty much arbitrarily. Is there a simple way
> to handle this? I would like to only allow one of each parameter, some
> parameters may also be optional.
> 
> It feels like I might have to write my own combinator to do this but
> I'm not sure I'm quite ready of that yet!

Sounds like you want Parsec's "permutation phrases" function:

http://www.cs.uu.nl/~daan/download/parsec/parsec.html#ParsecPerm

http://haskell.org/ghc/dist/current/docs/libraries/parsec/Text-ParserCombinators-Parsec-Perm.html


More information about the Haskell-Cafe mailing list