LL(1) parser generator in OCaml

2019-07-15 08:14发布

问题:

I'm looking for a LL(1) parser generator in OCaml... Can anybody help me with this?

回答1:

Well, LALR parsers can parse a strict superset of the languages which can be parsed by LL parsers. So I would advise simply using ocamlyacc which ships with Ocaml and is an LALR(1) parser generator. This may require some minor rewriting of the grammar, but it shouldn't be too hard.



回答2:

Planck LL(n) parser combinator library: https://bitbucket.org/camlspotter/planck/overview

It has started as my toy project, and there is no actual users, but I could implement OCaml syntax lexer/parser with Planck which are 100% compatible with the originals.

I do not recommend to use it but if you are interested... try it.



回答3:

Stream parser as included in camlp4 are (at best of my knowledge) LL(1) parser. see http://caml.inria.fr/pub/docs/manual-camlp4/manual003.html



回答4:

I have heard good things about Menhir

The home page says at the top:

Menhir is a LR(1) parser generator for the OCaml programming language. That is, Menhir compiles LR(1) grammar specifications down to OCaml code. Menhir was designed and implemented by François Pottier and Yann Régis-Gianas.

Menhir is 90% compatible with ocamlyacc. Legacy ocamlyacc grammar specifications are accepted and compiled by Menhir. The resulting parsers run and produce correct parse trees.