This isn't quite what you're asking for, but by using the applicative interface to parsers, you need do little more than spell out what your AST looks like:
import Control.Applicative import Control.Applicative.Infix data Equation = String :=: Expression data Expression = EApp fun arg | EInt Int | EId String parseEquation :: Parser Equation parseEquation = parseIdentifier <^(:=:)^> parseExpression parseExpression :: Parser Expression parseExpression = (EApp <$> parseExpression <*> parseExpression) <|> (EInt <$> parseInt) <|> (EId <$> parseIdentifier) parseIdentifier :: Parser String parseIdentifier = parseLowercaseChar <^(:)^> parseString etc Bob On Sun, Dec 27, 2009 at 10:18 AM, CK Kashyap <ck_kash...@yahoo.com> wrote: > Hi All, > I recently came across the paper titled "Monadic Parser Combinators" - > After going through it a few times, I think I am beginning to understand > monads. > However, the parser developed in the paper does not generate an AST - I > feel, I'd grasp the whole thing a lot better if I could go over a sample > that generates an AST from a simple expression (or even a standard language > such as C or Java) ... Can someone please point me to a sample that > generates AST - preferably with the simple parser combinator given in the > paper. > Regards, > Kashyap > > > > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe