Difference between revisions of "Parsec"

From HaskellWiki
Jump to navigation Jump to search
(Updated links; put links between square brackets; moved stub template to the top; added a link for Nemerle)
Line 1: Line 1:
 
{{Template:Stub}}
  +
 
[[Category:Compiler tools]]
 
[[Category:Compiler tools]]
 
[[Category:Combinators]]
 
[[Category:Combinators]]
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 O'Caml [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/]
* 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)
+
* 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)
* 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/)
+
* 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/])
* AliceParsec for Alice ML http://www.ps.uni-sb.de/alice/contribs.html
+
* AliceParsec for Alice ML [http://www.ps.uni-sb.de/alice/contribs.html]
* Parsnip for C++ http://parsnip-parser.sourceforge.net/
+
* Parsnip for C++ [http://parsnip-parser.sourceforge.net/]
  +
* A Nemerle port [http://kriomant.net/nparsec.zip] (Zip file)
* Somewhere there is a Nemerle port
 
* Pysec for Python http://www.valuedlessons.com/2008/02/pysec-monadic-combinatoric-parsing-in.html
+
* Pysec for Python [http://www.valuedlessons.com/2008/02/pysec-monadic-combinatoric-parsing-in.html]
* JSParsec for JavaScript: http://code.google.com/p/jsparsec/
+
* JSParsec for JavaScript: [http://code.google.com/p/jsparsec/]
   
 
Interesting non-Parsec parser combinator libraries:
 
Interesting non-Parsec parser combinator libraries:
* Parse::RecDescent for Perl https://metacpan.org/module/Parse::RecDescent
+
* Parse::RecDescent for Perl [https://metacpan.org/module/Parse::RecDescent]
* Spirit for C++ http://spirit.sourceforge.net/documentation.html
+
* Spirit for C++ [http://boost-spirit.com/home/doc/]
  +
   
 
== Links ==
 
== Links ==
Line 59: Line 61:
 
=== 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 12:26, 25 March 2013

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


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.


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.


Examples

See also the list of reverse dependencies for Parsec.


Parsec clones in other languages

  • PCL for O'Caml [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]

Interesting non-Parsec parser combinator libraries:

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


Links

Docs

Blog articles

Other