parsec: Monadic parser combinators

[ bsd2, library, parsing ] [ Propose Tags ] [ Report a vulnerability ]

Parsec is designed from scratch as an industrial-strength parser library. It is simple, safe, well documented (on the package homepage), has extensive libraries, good error messages, and is fast. It is defined as a monad transformer that can be stacked on arbitrary monads, and it is also parametric in the input stream type.

The main entry point is the Text.Parsec module which provides defaults for parsing Character data.

The Text.ParserCombinators.Parsec module hierarchy contains the legacy parsec-2 API and may be removed at some point in the future.


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS]2.0, 2.0.0.1, 2.1.0.0, 2.1.0.1, 3.0.0, 3.0.1, 3.1.0, 3.1.1, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.1.7, 3.1.8, 3.1.9, 3.1.10, 3.1.11, 3.1.12.0, 3.1.13.0, 3.1.14.0, 3.1.15.0, 3.1.15.1, 3.1.16.0, 3.1.16.1, 3.1.17.0, 3.1.18.0
Change logChangeLog.md
Dependenciesbase (>=4.12.0.0 && <4.22), bytestring (>=0.10.8.2 && <0.13), mtl (>=2.2.2 && <2.4), text (>=1.2.3.0 && <1.3 || >=2.0 && <2.2) [details]
Tested with ghc ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.8 || ==9.4.8 || ==9.6.4 || ==9.8.2 || ==9.10.1 || ==9.12.1
LicenseBSD-2-Clause
AuthorDaan Leijen <daan@microsoft.com>, Paolo Martini <paolo@nemail.it>, Antoine Latter <aslatter@gmail.com>
MaintainerOleg Grenrus <oleg.grenrus@iki.fi>, Herbert Valerio Riedel <hvr@gnu.org>
CategoryParsing
Home pagehttps://github.com/haskell/parsec
Bug trackerhttps://github.com/haskell/parsec/issues
Source repohead: git clone https://github.com/haskell/parsec
Uploadedby phadej at 2025-01-05T00:08:05Z
DistributionsArch:3.1.16.1, Fedora:3.1.16.1, FreeBSD:3.1.9
Reverse Dependencies944 direct, 14181 indirect [details]
Downloads405099 total (36 in the last 30 days)
Rating2.75 (votes: 18) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
StatusDocs available [build log]
Last success reported on 2025-01-05 [all 1 reports]

Readme for parsec-3.1.18.0

[back to package description]

Parsec Build Status

Please refer to the package description on Hackage for more information.

A monadic parser combinator library, written by Daan Leijen. Parsec is designed from scratch as an industrial-strength parser library. It is simple, safe, well documented, has extensive libraries, good error messages, and is fast.

Some links:

By analyzing Parsec's reverse dependencies on Hackage we can find open source project that make use of Parsec. For example bibtex, ConfigFile, csv and hjson.

Getting started

This requires a working version of cabal and ghci, which are part of any modern installation of Haskell, such as Haskell Platform.

First install Parsec.

cabal install parsec 

Below we show how a very simple parser that tests matching parentheses was made from GHCI (the interactive GHC environment), which we started with the ghci command).

Prelude> :m +Text.Parsec Prelude Text.Parsec> let parenSet = char '(' >> many parenSet >> char ')' :: Parsec String () Char Loading package transformers-0.3.0.0 ... linking ... done. Loading package array-0.5.0.0 ... linking ... done. Loading package deepseq-1.3.0.2 ... linking ... done. Loading package bytestring-0.10.4.0 ... linking ... done. Loading package mtl-2.1.3.1 ... linking ... done. Loading package text-1.1.1.3 ... linking ... done. Loading package parsec-3.1.5 ... linking ... done. Prelude Text.Parsec> let parens = (many parenSet >> eof) <|> eof Prelude Text.Parsec> parse parens "" "()" Right () Prelude Text.Parsec> parse parens "" "()(())" Right () Prelude Text.Parsec> parse parens "" "(" Left (line 1, column 2): unexpected end of input expecting "(" or ")" 

The Right () results indicate successes: the parentheses matched. The Left [...] result indicates a parse failure, and is detailed with an error message.

For a more thorough introduction to Parsec we recommend the links at the top of this README file.

Contributing

Issues (bugs, feature requests or otherwise feedback) may be reported in the Github issue tracker for this project.

Pull-requests are also welcome.

License

See the LICENSE file in the repository.

close