
Hello everyone, I'm pleased to announce the first release of Grempa: A library for expressing programming language grammars in a form similar to BNF, which is extended with the semantic actions to take when a production has been parsed. The grammars are typed and are to be be used with the LALR(1) parser generator, also part of the library, which can generate a parser for the language either at compile time using Template Haskell, producing fast parsers with no initial runtime overhead, or dynamically, which has the initial overhead of generating the parser, but can be used for example when the grammar depends on an input. Here is a small example (from Ex1 in the examples directory) of what a grammar may look like: data E = Plus E E | Times E E | Var | ... expr :: Grammar Char E expr = do rec e <- rule [ Plus <@> e <# '+' <#> t , id <@> t ] t <- rule [ Times <@> t <# '*' <#> f , id <@> f ] f <- rule [ id <@ '(' <#> e <# ')' , Var <@ 'x' ] return e The corresponding BNF grammar is the following: E ::= E + T | T T ::= T * F | F F ::= ( E ) | x Generating a parser from the grammar is simple: parseExpr :: Parser Char E parseExpr = $(mkStaticParser expr [|expr|]) There are a few other examples in the examples directory of the package, most notably a grammar and parser for a simple functional language similar to Haskell. It is possible to generate random input strings and their expected outputs for grammars written using Grempa which makes it possible to test the generated parsers with QuickCheck. The package and documentation (should be up soon) can be found here: http://hackage.haskell.org/package/Grempa-0.1.0 Please get in touch with me if you have any comments, issues, questions, bug reports or would like to contribute to the project. I would love to get some more people involved in the project, as there are many areas of the library that could be improved. Thanks to Daniel Gustafsson and everyone else at Chalmers Uni for valuable input and getting me into Haskell (respectively). Regards, Olle Fredriksson