The Parser Generator for Haskell
Haskell
Failed to load latest commit information.
Text fix for 7.4.1 Feb 14, 2012
attic Language => LANGUAGE Oct 7, 2011
bootstrap Language => LANGUAGE Oct 7, 2011
example fix for 7.4.1 Feb 14, 2012
.gitignore prototype Sep 7, 2011
LICENSE prototype Sep 7, 2011
README.md fix readme Dec 5, 2011
Setup.hs prototype Sep 7, 2011
peggy.cabal relax version upperbound and version bump Jan 30, 2013

README.md

Peggy: A Parser Generator of Parsing Expression Grammer (PEG)

About

This is an yet another parser generator of Parsing Expression Grammer (PEG) which is:

  • Simple
  • Concise
  • Fast
  • Modern

Usage

You can find a recent stable release in Hackage DB. You can install this as following instruction:

$ cabal update
$ cabal install Peggy

Why should you use Peggy?

Haskell has commonly used parser generators, one of them are Alex/Happy. But I think Alex/Happy are not good in these points:

  • Generates regacy codes

Alex uses only too basic libraries. It does not use monad-transformers, iteratee, ListLike, Text, and so on.

  • Tradisional Regexp/CFG based parser

Parsec has no good error recovery.

unnun, kannun...

...

Quick Start

Here is an example of parsing arithmetic expressions.

{-# QuasiQuotes #-}
{-# Language FlexibleContexts #-}

import Text.Peggy

[peggy|
exp :: Double
  = exp "+" fact  { $1 + $2 }
  / exp "-" fact  { $1 - $2 }
  / fact
fact :: Double
  = fact "*" term { $1 * $2 }
  / fact "/" term { $1 / $2 }
  / term
term :: Double
  = "(" exp ")"
  / number
number ::: Double
  = ([1-9][0-9]*) { read $1 }
|]

main :: IO ()
main =
  print . parse exp =<< getContents