Browse thread
Define parser and printer consistently
-
Dawid Toton
- Ashish Agarwal
- Romain Bardou
- Yitzhak Mandelbaum
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Romain Bardou <Romain.Bardou@l...> |
| Subject: | Re: [Caml-list] Define parser and printer consistently |
On 09/12/2010 05:47, Dawid Toton wrote: > I'm going to define a parser and a printer for a simple grammar. > Is there a way to define both of them in a single construct using some > existing OCaml tool? > > For example, I have a keyword "function". The usual parser would contain > a mapping like: > "function" -> `Function > and the straightforward printer would do: > `Function -> "function" > > What is the best way to combine these definitions, so that duplication > would be minimized? > To be precise, avoiding duplication is not exactly what I need. I'm > looking for something that would prevent making inconsistent changes to > the parser and the printer. I'm writing a tool called Parsini which, maybe, does what you're looking for. Parsini stands either for "parsing is not interesting" (i.e.: let's have a tool which does it quickly for us and move on to interesting things such as code generation) or for "parser houdini" or something :p From a simple grammar, the tool : - infers and produces an AST ; - produces an ocamlyacc source ; - produces an ocamllex source (optional - you can use your own lexer) ; - produces a main file with : * functions to read your main entries easily from a channel, a file, a string... * functions to pretty-print your AST. Your AST is pretty-printed with the Ocaml syntax, not the syntax of your own language, which I do not know how to do. I have not released the tool yet, so nothing is official nor documented but you might want to take a look. License will be BSD. I've copied the darcs repository on my website : http://romain.bardou.fr/parsini So you should be able to download it easily with : darcs get http://romain.bardou.fr/parsini Have fun, -- Romain Bardou