[Caml-list] Define parser and printer consistently

2010-12-09 Thread CUOQ Pascal

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?

Take a look at Boomerang: http://www.seas.upenn.edu/~harmony/

From the overview:

Boomerang is a programming language for writing lenses—well-behaved 
bidirectional transformations—that operate on ad-hoc, textual data formats. 
Every lens program, when read from left to right, describes a function that 
maps an input to an output; when read from right to left, the very same program 
describes a backwards function that maps a modified output, together with the 
original input, back to a modified input.

Lenses have been used to solve problems across a wide range of areas in 
computing including: [...] in parsers and pretty printers
winmail.dat___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Define parser and printer consistently

2010-12-09 Thread Romain Bardou

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

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Define parser and printer consistently

2010-12-09 Thread Yitzhak Mandelbaum
PADS/ML can do that for you, and more. You can find information about the PADS 
languages and tools here: 

http://www.padsproj.org

including papers and a manual. The website doesn't have the most recent release 
of PADS/ML -- i plan to put it up on Github shortly -- but if you're 
interested, i'm happy to send you a tarball.

The basic idea is that you specify your grammar as a type-like declaration.  
Then, pads/ml generates an AST, parser, printer and some more stuff for you.  
The generated parser is like a PEG parser, but with support context-sensitive 
parsing. That is, it is deterministic, with ordered choice; and, it is 
scannerless. So, the grammars-writing style has some significant differences 
from ocamllex and ocamlyacc.

PADS/ML has an Eclipse license.

Cheers,
Yitzhak


On Dec 8, 2010, at 11:47 PM, 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.
 
 Dawid
 
 ___
 Caml-list mailing list. Subscription management:
 http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
 Archives: http://caml.inria.fr
 Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
 Bug reports: http://caml.inria.fr/bin/caml-bugs

-
Yitzhak Mandelbaum



___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


[Caml-list] Define parser and printer consistently

2010-12-08 Thread Dawid Toton

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.


Dawid

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs


Re: [Caml-list] Define parser and printer consistently

2010-12-08 Thread Ashish Agarwal
Maybe you will find Pickler Combinators useful:
http://research.microsoft.com/en-us/um/people/akenn/fun/picklercombinators.pdf


On Wed, Dec 8, 2010 at 11:47 PM, Dawid Toton d...@wp.pl 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.

 Dawid

 ___
 Caml-list mailing list. Subscription management:
 http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
 Archives: http://caml.inria.fr
 Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
 Bug reports: http://caml.inria.fr/bin/caml-bugs

___
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs