Parsec
From HaskellWiki
This article is a stub. You can help by expanding it.
Contents |
1 Introduction
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[1]) grammars.
The latest stable release with Haddock documentation is available on Hackage and development versions are available via the Darcs repository.
2 Usage
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.
3 Examples
- "Using Parsec" chapter on Real World Haskell. (The JSON examples require revision to work under GHC 7.10.x, and possibly earlier versions. This 2008 publication would benefit from an updated edition.)
- 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 [1] (PDF)
- JParsec for Java [2]
- NParsec, JParsec ported to C# [3]
- Ruby Parsec, JParsec ported to Ruby [4]]
- FParsec for F# [5]
- XParsec for F# [6] 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 [7], 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: [8])
- AliceParsec for Alice ML [9]
- Parsnip for C++ [10]
- A Nemerle port [11] (Zip file)
- Pysec for Python [12]
- JSParsec for JavaScript: [13]
- Bennu JavaScript Parser Combinator Library: [14]
- ParsecJ for Java [15] is implemented in a functional style based on the original Parsec papers.
Interesting non-Parsec parser combinator libraries:
5 Links
5.1 Docs
- Parsec: Direct Style Monadic Parser Combinators For The Real World (PDF)
- Parsec, a fast combinator parser (PDF)
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
- Parsing CSS with Parsec by Jacub Arnold
5.3 Other
- Introduction to parsing with Haskell and Parsec
- Parsec on Stack Overflow