Parsec: Difference between revisions
Mattbierner (talk | contribs) m (Added Bennu Javascript parser link since JSParsec does not seem active) |
m (→Usage: Fix broken link to homepage with web archive version) |
||
Line 20: | Line 20: | ||
[[Combinator]]s to create larger expressions. Combinator parsers are | [[Combinator]]s to create larger expressions. Combinator parsers are | ||
written and used within the same programming language as the rest of the | written and used within the same programming language as the rest of the | ||
program. The parsers are first-class citizens of the language , unlike | program. The parsers are first-class citizens of the language, unlike | ||
[[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]. | 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 [http://legacy.cs.uu.nl/daan/parsec.html the parsec website]. | Much more documentation can be found on [https://web.archive.org/web/20140528151730/http://legacy.cs.uu.nl/daan/parsec.html the parsec website]. | ||
== Examples == | == Examples == |
Revision as of 21:24, 19 September 2014
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
- "Using Parsec" chapter on Real World Haskell.
- 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.
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:
Links
Docs
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
Other
- Parsec on Stack Overflow