Awesome
For an older version of this repository based on sedlex, refer to the sedlex branch.
Nice Parser
Writing an OCaml parser with nice error messages should be easy - and now it is! Nice Parser comes in two parts:
- lib/: The
nice_parser
library (API) consolidates boilerplate code and wraps your auto-generated parser in a nice interface with beautiful error messages. In types:Nice_parser.Make : functor(P : RAW_PARSER) -> NICE_PARSER
. - example/: The example parser lets you get started on your own parser in seconds. It is based on
nice_parser
and standard tools:
Using the library and the skeleton, you can get started on your own parser in seconds:
git clone https://github.com/smolkaj/nice-parser.git # clone this repository
cd nice-parser && rm -r lib && mv example src # use example as starting point
opam install . --deps-only --with-test # install dependencies
dune build # try to build...
dune exec src/bin/main.exe # ...and run your parser!
You should see the following output (the error message relies on OCaml >= 4.08's new source highlighting mechanism):
Trying to parse "(a b (c d) e)".
-> (List ((Atom a) (Atom b) (List ((Atom c) (Atom d))) (Atom e)))
Trying to parse "(long_atom_with_0123)".
-> (List ((Atom long_atom_with_0123)))
Trying to parse "
( so far so good
but (this is)) illegal (isnt it?)
(* parsing will fail ^^^^^^^ here *)
".
Fatal error: exception Line 3, characters 25-32:
3 | but (this is)) illegal (isnt it?)
^^^^^^^
Error: [parser] unexpected token
Documentation
The API is documented here. The example skeleton should be self-explanatory.
How to build
Ideally, use OCaml 4.08 or higher (for beautiful error messages). All required dependencies can be installed using the opam package manager. The project can be built using dune.
opam install . --deps-only --with-test
dune build
dune runtest
Suggestions and Improvements
Suggestions and changes are welcome. Please submit pull requests, or open issues.