Personal tools


From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(Docs: Changed the Microsoft link to point directly to the doc page)
(Docs: Replaced both links)
Line 60: Line 60:
=== Docs ===
=== Docs ===
* [ on Parsec website] (old)
* [ Parsec: Direct Style Monadic Parser Combinators For The Real World] (PDF)
* [ on Microsoft]
* [ Parsec, a fast combinator parser] (PDF)
=== Blog articles ===
=== Blog articles ===

Revision as of 15:04, 9 October 2014

This article is a stub. You can help by expanding it.


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

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]

Interesting non-Parsec parser combinator libraries:

  • Parse::RecDescent for Perl [15]
  • Spirit for C++ [16]

5 Links

5.1 Docs

5.2 Blog articles

5.3 Other