Copyright Deducteam
Pratter is a library that allows to parse expressions with infix, postfix or prefix operators.
Pratter is a top-down operator precedence parser that implements the Pratt parsing algorithm. In contrast with Menhir or ocamlyacc, Pratter is a parser, not a parser generator: no code is produced during compilation. In consequence, parsing rules can be modified dynamically. On the other hand, Pratter parses a much more restricted class of grammars called operator grammars while Menhir and ocamlyacc parse LR(1) and LALR(1) grammars respectively.
You are free to copy, modify and distribute Pratter with attribution under the terms of the BSD 3 Clause license. See the license for more details.
To compile and use pratter, you need
- ocaml >= 4.10
- dune >= 2.7
Then, at the root of the source tree,
$ make installTo ensure it's working write the following code in some file plus.ml
to parse the language defined by the grammar T ::= T + T | id
where id denotes identifiers
type t = A of t * t | S of string
let appl t u = A (t, u)
let token = Fun.id
let ops = function
| S "+" as s -> Pratter.[ Infix Left, 0.3, s ]
| _ -> []
let parse = Pratter.expression ~token ~appl ~ops
let () =
let input = List.to_seq [ S "x"; S "+"; S "y"] in
assert (Result.is_ok @@ Pratter.run parse input)then execute the following lines which should return 0
$ echo "module Pratter = struct $(cat pratter.ml) end $(cat plus.ml)" > plus_.ml
$ ocamlc plus_.ml
$ ./a.out- There's a change log.
- There's a license.
- This file is another use case example that is slightly more involved than the one in this readme.
You can report issues, ask questions or start discussions using the issue tracker.