Skip to content

Latest commit

 

History

History
53 lines (44 loc) · 2.88 KB

README.md

File metadata and controls

53 lines (44 loc) · 2.88 KB

For an older version of this repository based on sedlex, refer to the sedlex branch.

Nice Parser Build Status

Writing an OCaml parser with nice error messages should be easy - and now it is! Nice Parser comes in two parts:

  1. 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.
  2. example/: The example parser lets you get started on your own parser in seconds. It is based on nice_parser and standard tools:
    • Menhir, a LR(1) parser generator.
    • ocamllex, OCaml's built-in lexer generator.
    • Jane Street's dune and base, the de-facto standard built tool and standard library for OCaml.

Using the library and the skeleton, you can get started on your own parser in seconds:

opam install nice_parser                                  # install the nice_parser library
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
dune build src/example.a                                  # 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). The project can be built using dune. Consult the dune-project file for the necessary dependencies; all of them can be installed using the opam packet manager.

Suggestions and Improvements

Suggestions and changes are welcome. Please submit pull requests, or open issues.