(link to parsec documentation included with ghc distribution)
|(22 intermediate revisions by 12 users not shown)|
Revision as of 21:15, 13 April 2014
This article is a stub. You can help by expanding it.
Parsec is an industrial strength, monadic parser combinator library for Haskell. It can parse context-sensitive, infinite look-ahead grammars but it performs best on predictive (LL) grammars.
Parsec lets you construct parsers by combining higher-order Combinators to create larger expressions. Combinator parsers are written and used within the same programming language as the rest of the program. The parsers are first-class citizens of the language , unlike Happy parsers, which must be generated via a preprocessor.
An example for parsing a simple grammar of expressions can be found here.
Much more documentation can be found on the parsec website.
- Write Yourself a Scheme in 48 Hours/Parsing. Note, that where the example uses the read function, the Token module of Parsec could have been used, to handle numbers.
See also the list of reverse dependencies for Parsec.
4 Parsec clones in other languages
- PCL for OCaml  (PDF)
- JParsec for Java 
- NParsec, JParsec ported to C# 
- Ruby Parsec, JParsec ported to Ruby ]
- FParsec for F# 
- XParsec for F#  is a type-and-source-polymorphic, generalized and extensible parsec implementation in F# 3.0 which supports powerful domain-specific non-linear navigation combinators (such as for XML trees)
- Parsec-Erlang , is a faithful reproduction of Parsec in Erlang (there is also an older toy Parsec-like parser that isn't monadic, nor does it give error messages: )
- AliceParsec for Alice ML 
- Parsnip for C++ 
- A Nemerle port  (Zip file)
- Pysec for Python 
Interesting non-Parsec parser combinator libraries:
5.2 Blog articles
- Adventures in parsing by Magnus Therning
- More adventures in parsing
- Adventures in parsing, part 3
- Adventures in parsing, part 4
- Adventures in Parsec by Antoine Latter
- Parsec on Stack Overflow