Parsec
From HaskellWiki
m (Changing combinator link to singular) |
(→Parsec clones in other languages) |
||
| (23 intermediate revisions not shown.) | |||
| Line 1: | Line 1: | ||
| - | |||
| - | |||
[[Category:Compiler tools]] | [[Category:Compiler tools]] | ||
| + | [[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]. | |
| - | + | ||
| - | + | ||
| + | == Usage == | ||
Parsec lets you construct parsers by combining higher-order | Parsec lets you construct parsers by combining higher-order | ||
[[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 | + | 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. | ||
| - | Much more documentation can be found on the parsec | + | 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]. | ||
{{Template:Stub}} | {{Template:Stub}} | ||
| + | |||
| + | |||
| + | == 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 | ||
| + | * JParsec for Java http://jparsec.codehaus.org/JParsec+Overview | ||
| + | * NParsec, JParsec ported to C# http://jparsec.codehaus.org/NParsec+Tutorial | ||
| + | * Ruby Parsec, JParsec ported to Ruby http://jparsec.codehaus.org/Ruby+Parsec | ||
| + | * 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) | ||
| + | * 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 | ||
| + | * Parsnip for C++ http://parsnip-parser.sourceforge.net/ | ||
| + | * Somewhere there is a Nemerle port | ||
| + | * 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: | ||
| + | * Parse::RecDescent for Perl https://metacpan.org/module/Parse::RecDescent | ||
| + | * Spirit for C++ http://spirit.sourceforge.net/documentation.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
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.
This article is a stub. You can help by expanding it.
3 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.
4 Parsec clones in other languages
- PCL for O'Caml http://lprousnth.files.wordpress.com/2007/08/pcl.pdf
- JParsec for Java http://jparsec.codehaus.org/JParsec+Overview
- NParsec, JParsec ported to C# http://jparsec.codehaus.org/NParsec+Tutorial
- Ruby Parsec, JParsec ported to Ruby http://jparsec.codehaus.org/Ruby+Parsec
- 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)
- 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
- Parsnip for C++ http://parsnip-parser.sourceforge.net/
- Somewhere there is a Nemerle port
- 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:
- Parse::RecDescent for Perl https://metacpan.org/module/Parse::RecDescent
- Spirit for C++ http://spirit.sourceforge.net/documentation.html
5 Links
5.1 Docs
- on Parsec website
- on Microsoft (content same as above)
5.2 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
5.3 Other
- Parsec on Stack Overflow
Categories: Compiler tools | Combinators | Packages | Libraries | Stub articles
