a simple EBNF -> Haskell parser generator