35 lines
807 B
Markdown
35 lines
807 B
Markdown
# ppx_combin
|
|
|
|
Stupid PPX library because others are stupidly hacked together. This is a parser combinator syntax that compiles to direct recursive descent.It does first-set analysis and generates tight match/loop code.
|
|
|
|
## usage
|
|
|
|
```ocaml
|
|
open Combin
|
|
|
|
let is_digit c = c >= '0' && c <= '9'
|
|
|
|
let digit = [%parser satisfy is_digit <?> "digit"]
|
|
|
|
let number = [%parser
|
|
some (satisfy is_digit) >>= fun ds ->
|
|
pure (int_of_string (String.concat "" (List.map (String.make 1) ds)))
|
|
]
|
|
|
|
let expr = [%parser
|
|
chainl1
|
|
(satisfy is_digit >>= fun c -> pure (Char.code c - Char.code '0'))
|
|
(token '+' *> pure ( + ))
|
|
]
|
|
|
|
let () =
|
|
match parse_string expr "1+2+3" with
|
|
| Ok (n, _) -> Printf.printf "result: %d\n" n
|
|
| Error e -> print_endline (format_error e)
|
|
```
|
|
|
|
## install
|
|
|
|
```
|
|
opam pin add ppx_combin .
|
|
```
|