peggy alternatives and similar packages
Based on the "Language" category.
Alternatively, view peggy alternatives based on common mentions on social networks and blogs.
-
elm-compiler
Compiler for Elm, a functional language for reliable webapps. -
stylish-haskell
Haskell code prettifier [Moved to: https://github.com/haskell/stylish-haskell] -
haskell-src-exts
Manipulating Haskell source: abstract syntax, lexer, parser, and pretty-printer -
nirum
Nirum: IDL compiler and RPC/distributed object framework for microservices -
tal
An implementation of Typed Assembly Language (Morrisett, Walker, Crary, Glew) -
language-ecmascript
Haskell library: ECMAScript parser, pretty-printer and additional tools -
aterm-utils
Utility functions for working with aterms as generated by Minitermite -
ministg
Ministg is an interpreter for a high-level, small-step, operational semantics for the STG machine. -
purescript-tsd-gen
TypeScript Declaration File (.d.ts) generator for PureScript
WorkOS - The modern identity platform for B2B SaaS
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of peggy or a related project?
README
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