[Haskell-cafe] combined parsing & pretty-printing

Tillmann Rendel rendel at informatik.uni-marburg.de
Wed Jan 26 19:37:28 CET 2011


Hi Ozgur,

Ozgur Akgun wrote:
> I can write (separately) a parser and a pretty-printer [...]
> Is there any work to combine the two?

Brent Yorgey wrote:
> Maybe take a look at "Invertible Syntax Descriptions: Unifying Parsing
> and Pretty Printing" by Tillmann Rendel and Klaus Ostermann from last
> year's Haskell Symposium:
>
>    http://www.informatik.uni-marburg.de/~rendel/unparse/
>
> It's a beautiful paper, and perhaps the code will work for you
> (although it's too bad it's not on Hackage).

Indeed, I started this project for exactly the reason Ozgur describes: I 
needed to duplicate a lot of information between parsers and pretty 
printers and was annoyed about it. With invertible syntax descriptions, 
I now write a single program, which looks like a combinator parser 
(think "Parsec"), but can work as a pretty printer, too.

I just uploaded the code from the paper (and some additional 
combinators) to Hackage:

   http://hackage.haskell.org/package/partial-isomorphisms
   http://hackage.haskell.org/package/invertible-syntax

I use this code for the implementation of some very small languages 
(think "lambda calculus"). This works fine.

I haven't really tried it for larger languages, but we have two students 
here in Marburg implementing a parser for Java using the library, so we 
are going to have experience with larger languages in a few weeks 
(months?).

If you give it a try, I would be happy to receive success stories, bug 
reports, patches, feature requests etc. I want to keep working on this, 
and I am open for suggestions.

   Tillmann



More information about the Haskell-Cafe mailing list