pacombversion Documentation on ocaml.org
Parsing library based on combinators and ppx extension to write languages
Pacomb is a parsing library that compiles grammars to combinators prior to parsing together with a PPX extension to write parsers inside OCaml files.
The advantages of Pacomb are
- Grammars as first class values defined in your OCaml files. This is an example from the distribution:
( The three levels of priorities *)
type p = Atom | Prod | Sum
let%parser rec
 This includes each priority level in the next one )          (
 all other rule are selected by their priority level ) expr p = Atom < Prod < Sum
        (
' (y::expr Atom) => x*.y        ; (p=Atom) (x::FLOAT)                        => x
        ; (p=Atom) '(' (e::expr Sum) ')'             => e
        ; (p=Prod) (x::expr Prod) '
        ; (p=Prod) (x::expr Prod) '/' (y::expr Atom) => x/.y
        ; (p=Sum ) (x::expr Sum ) '+' (y::expr Prod) => x+.y
        ; (p=Sum ) (x::expr Sum ) '-' (y::expr Prod) => x-.y- Good performances: - on non ambiguous grammars, 2 to 3 time slower compared to ocamlyacc 
- on ambiguous grammars O(N^3 ln(N)) can be achieved. 
 
- Parsing from left to right (despite the use of combinators) allowing not to keep the whole input in memory and allowing to parse streams. 
- Dependant sequence allowing for self extensible grammars (like new infix with a given priority in a given example). 
- Managing of blanks that for instance allows for nested language using different kind of comments or blanks. 
- Support for cache and merge for ambiguous grammars (to get O(N^3 ln(N))) 
- Enough support for utf8 to write parser for a language using utf8. 
- Comes with documentation and various examples illustrating most possibilities. 
All this makes Pacomb a promising solution to write languages in OCaml.
| Authors | Christophe Raffalli <christophe@raffalli.eu> and Rodolphe Lepigre <lepigre@mpi-sws.org> | 
|---|---|
| License | MIT | 
| Published | |
| Homepage | https://github.com/craff/pacomb | 
| Issue Tracker | https://github.com/craff/pacomb/issues | 
| Maintainer | Christophe Raffalli <christophe@raffalli.eu> | 
| Dependencies | 
 | 
| Source [http] | https://github.com/craff/pacomb/archive/refs/tags/1.3.tar.gz md5=e48dc9fae5b96632bd1de929a49af71c sha512=e4bf5dcfb0d4c5225a81fffe8e74cd9c147221eb9c8278b05d22391da0e06c6997e5b9a83a6431d72829f07f402da2449778cfe0bd56e7e2d3c8e08bbc1a73d5 | 
| Edit | https://github.com/ocaml/opam-repository/tree/master/packages/pacomb/pacomb.1.3/opam | 
 
          


