Difference between revisions of "Parsec"

From HaskellWiki
Jump to navigation Jump to search
(Add link to blog post about Pysec, a Python clone of Parsec. (No official release for now.))
(18 intermediate revisions by 11 users not shown)
Line 1: Line 1:
== Parsec ==
 
 
 
[[Category:Compiler tools]]
 
[[Category:Compiler tools]]
 
[[Category:Combinators]]
 
[[Category:Combinators]]
  +
[[Category:Packages]]
  +
[[Category:Libraries]]
   
  +
  +
== Introduction ==
 
Parsec is an industrial strength, monadic parser combinator library for
 
Parsec is an industrial strength, monadic parser combinator library for
 
Haskell. It can parse context-sensitive, infinite look-ahead grammars
 
Haskell. It can parse context-sensitive, infinite look-ahead grammars
 
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].
See [http://www.cs.uu.nl/people/daan/download/parsec/parsec.html the Parsec site]
 
for downloads and documentation. Parsec is also distributed with GHC, hence [http://haskell.org/ghc/docs/6.8.2/html/libraries/index.html this documentation] might be more up to date.
 
   
  +
=== Usage ===
 
 
== Usage ==
   
 
Parsec lets you construct parsers by combining higher-order
 
Parsec lets you construct parsers by combining higher-order
Line 19: Line 21:
 
[[Happy]] parsers, which must be generated via a preprocessor.
 
[[Happy]] parsers, which must be generated via a preprocessor.
   
  +
An example for parsing a simple grammar of expressions can be found [http://www.haskell.org/haskellwiki/Parsing_expressions_and_statements here].
Much more documentation can be found on the parsec site.
 
  +
 
Much more documentation can be found on [http://legacy.cs.uu.nl/daan/parsec.html the parsec website].
   
 
{{Template:Stub}}
 
{{Template:Stub}}
   
  +
=== Parsec clones in other languages ===
 
  +
== Examples ==
  +
  +
* [http://book.realworldhaskell.org/read/using-parsec.html "Using Parsec"] chapter on [http://book.realworldhaskell.org/ Real World Haskell].
  +
  +
* [http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/Parsing 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 [http://packdeps.haskellers.com/reverse/parsec list of reverse dependencies for Parsec].
  +
 
== 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
Line 30: Line 43:
 
* 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)
* A small Parsec in Erlang http://www.engr.uconn.edu/~jeffm/Source/Erlang/
 
  +
* 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/)
 
* 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/
 
* Somewhere there is a Nemerle port
 
* 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/
   
 
Interesting non-Parsec parser combinator libraries:
 
Interesting non-Parsec parser combinator libraries:
  +
* Parse::RecDescent for Perl https://metacpan.org/module/Parse::RecDescent
 
* Spirit for C++ http://spirit.sourceforge.net/documentation.html
 
* Spirit for C++ http://spirit.sourceforge.net/documentation.html
  +
* Scala http://www.scala-lang.org/docu/files/api/scala/util/parsing/combinator$content.html
 
  +
== Links ==
  +
 
=== Docs ===
  +
 
* [http://legacy.cs.uu.nl/daan/parsec.html on Parsec website]
  +
* [http://research.microsoft.com/en-us/um/people/daan/parsec.html on Microsoft] (content same as above)
  +
  +
=== Blog articles ===
  +
  +
* [http://therning.org/magnus/archives/289 Adventures in parsing] by Magnus Therning
  +
* [http://therning.org/magnus/archives/290 More adventures in parsing]
  +
* [http://therning.org/magnus/archives/295 Adventures in parsing, part 3]
  +
* [http://therning.org/magnus/archives/296 Adventures in parsing, part 4]
  +
  +
* [http://panicsonic.blogspot.com/2009/12/adventures-in-parsec.html Adventures in Parsec] by Antoine Latter
  +
  +
=== Other ===
  +
  +
* [http://stackoverflow.com/questions/tagged/parsec Parsec] on Stack Overflow

Revision as of 13:01, 16 September 2012


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.

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


Examples

See also the list of reverse dependencies for Parsec.

Parsec clones in other languages

Interesting non-Parsec parser combinator libraries:

Links

Docs

Blog articles

Other