Personal tools

Parsec

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(Examples)
m (Added Bennu Javascript parser link since JSParsec does not seem active)
(5 intermediate revisions by 3 users not shown)
Line 1: Line 1:
  +
{{Template:Stub}}
  +
 
[[Category:Compiler tools]]
 
[[Category:Compiler tools]]
 
[[Category:Combinators]]
 
[[Category:Combinators]]
Line 10: Line 12:
 
but it performs best on predictive (LL[1]) grammars.
 
but it performs best on predictive (LL[1]) grammars.
   
The latest stable release with Haddock documentation is available on [http://hackage.haskell.org/package/parsec Hackage] and development versions are [http://code.haskell.org/parsec3/ available via the darcs repository].
+
The latest stable release with Haddock documentation is available on [http://hackage.haskell.org/package/parsec Hackage] and development versions are [http://code.haskell.org/parsec3/ available via the Darcs repository].
   
   
Line 24: Line 26:
   
 
Much more documentation can be found on [http://legacy.cs.uu.nl/daan/parsec.html the parsec website].
 
Much more documentation can be found on [http://legacy.cs.uu.nl/daan/parsec.html the parsec website].
 
{{Template:Stub}}
 
   
   
Line 35: Line 35:
   
 
See also the [http://packdeps.haskellers.com/reverse/parsec list of reverse dependencies for Parsec].
 
See also the [http://packdeps.haskellers.com/reverse/parsec list of reverse dependencies for Parsec].
  +
   
 
== Parsec clones in other languages ==
 
== Parsec clones in other languages ==
   
* PCL for O'Caml http://lprousnth.files.wordpress.com/2007/08/pcl.pdf
+
* PCL for OCaml [http://lprousnth.files.wordpress.com/2007/08/pcl.pdf] (PDF)
* JParsec for Java http://jparsec.codehaus.org/JParsec+Overview
+
* JParsec for Java [http://jparsec.codehaus.org/JParsec+Overview]
* NParsec, JParsec ported to C# http://jparsec.codehaus.org/NParsec+Tutorial
+
* NParsec, JParsec ported to C# [http://jparsec.codehaus.org/NParsec+Tutorial]
* Ruby Parsec, JParsec ported to Ruby http://jparsec.codehaus.org/Ruby+Parsec
+
* Ruby Parsec, JParsec ported to Ruby [http://jparsec.codehaus.org/Ruby+Parsec]]
* FParsec for F# http://www.quanttec.com/fparsec/
+
* FParsec for F# [http://www.quanttec.com/fparsec/]
* Parsec-Erlang, http://bitbucket.org/dmercer/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: http://www.engr.uconn.edu/~jeffm/Source/Erlang/)
+
* XParsec for F# [http://corsis.github.com/XParsec/] 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)
* AliceParsec for Alice ML http://www.ps.uni-sb.de/alice/contribs.html
+
* Parsec-Erlang [https://bitbucket.org/dmercer/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: [http://www.engr.uconn.edu/~jeffm/Source/Erlang/])
* Parsnip for C++ http://parsnip-parser.sourceforge.net/
+
* AliceParsec for Alice ML [http://www.ps.uni-sb.de/alice/contribs.html]
* Somewhere there is a Nemerle port
+
* Parsnip for C++ [http://parsnip-parser.sourceforge.net/]
* Pysec for Python http://www.valuedlessons.com/2008/02/pysec-monadic-combinatoric-parsing-in.html
+
* A Nemerle port [http://kriomant.net/nparsec.zip] (Zip file)
* JSParsec for JavaScript: http://code.google.com/p/jsparsec/
+
* Pysec for Python [http://www.valuedlessons.com/2008/02/pysec-monadic-combinatoric-parsing-in.html]
  +
* JSParsec for JavaScript: [http://code.google.com/p/jsparsec/]
  +
* Bennu JavaScript Parser Combinator Library: [https://github.com/mattbierner/bennu/]
   
 
Interesting non-Parsec parser combinator libraries:
 
Interesting non-Parsec parser combinator libraries:
* Spirit for C++ http://spirit.sourceforge.net/documentation.html
+
* Parse::RecDescent for Perl [https://metacpan.org/module/Parse::RecDescent]
+
* Spirit for C++ [http://boost-spirit.com/home/doc/]
   
 
== Links ==
 
== Links ==
Line 58: Line 59:
 
=== Docs ===
 
=== Docs ===
   
* [http://legacy.cs.uu.nl/daan/parsec.html on Parsec website]
+
* [http://legacy.cs.uu.nl/daan/parsec.html on Parsec website] (old)
* [http://research.microsoft.com/en-us/um/people/daan/parsec.html on Microsoft] (content same as above)
+
* [http://research.microsoft.com/en-us/people/daan/ on Microsoft]
   
 
=== Blog articles ===
 
=== Blog articles ===

Revision as of 21:15, 13 April 2014

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

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