Now, I understand that, by invoking ocpp, camlp4 may be used as a
pre-processor for non-OCaml language, which sounds interesting, for I
have need of pre-processing some parser generator input (at the moment,
menhir, but there are good chances I'll switch to Dypgen to get around
some limitations) to maintain consistency between the implementation and
the specifications. There are very good chances that I could do that
with cpp, as it's essentially trivial pre-processing, but I'd rather use
camlp4, if only to learn more about it.
So, my question is: how do I write a pre-processor that doesn't depend
on the syntax of OCaml ? I'm hoping I can get away with one or two
quotations and one anti-quotation, but I have no clue how to register
these without adding dependencies to either OCaml's Original or Revised
syntax. Does anyone have any examples handy ?
Thanks,
David
--
David Teller ------------------------------------------
Security of Distributed Systems -----------------------
Project JStify: Static Analysis for JavaScript 2 -----
-- http://www.univ-orleans.fr/lifo/Members/David.Teller
----- Laboratoire d'Informatique Fondamentale d'Orleans
_______________________________________________
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
A way to start this is to just keep the lexer and provide a new grammar
including quotations [2] and antiquotations. On the wiki [1] there is also a
small but complete example of a grammar for the untyped lambda calculus with
antiquotations [3], and also a tutorial of making a full parser with Camlp4 [4].
[1]: http://brion.inria.fr/gallium/index.php/Camlp4
[2]: http://brion.inria.fr/gallium/index.php/Quotation
[3]: http://brion.inria.fr/gallium/index.php/Lambda_calculus_quotations
[4]: http://brion.inria.fr/gallium/index.php/Full_parser_tutorial
--
Nicolas Pouillard aka Ertai
Now, do you suggest I should write a full lexer and parser with Camlp4
just in order to write simple macros ?
Cheers,
David
On Tue, 2007-10-23 at 11:39 +0200, Nicolas Pouillard wrote:
> A way to start this is to just keep the lexer and provide a new grammar
> including quotations [2] and antiquotations. On the wiki [1] there is also a
> small but complete example of a grammar for the untyped lambda calculus with
> antiquotations [3], and also a tutorial of making a full parser with Camlp4 [4].
>
> [1]: http://brion.inria.fr/gallium/index.php/Camlp4
> [2]: http://brion.inria.fr/gallium/index.php/Quotation
> [3]: http://brion.inria.fr/gallium/index.php/Lambda_calculus_quotations
> [4]: http://brion.inria.fr/gallium/index.php/Full_parser_tutorial
--
David Teller ------------------------------------------
Security of Distributed Systems -----------------------
Project JStify: Static Analysis for JavaScript 2 -----
-- http://www.univ-orleans.fr/lifo/Members/David.Teller
----- Laboratoire d'Informatique Fondamentale d'Orleans
_______________________________________________
You're right the lambda example is not adapted.
> Now, do you suggest I should write a full lexer and parser with Camlp4
> just in order to write simple macros ?
Hum, in fact that's because ocpp is no longer supported in Camlp4 3.10
(another (external) tool that can replace it is in preparation).
However writing a small lexer that catch some quotation of yours is quite
simple; but since you where talking about menhir and dypgen they certainly
have lexing conventions quite close to OCaml, so the default lexer should
suffice.
It's mainly about writing a parser that search for some QUOTATION tokens and
expand them, in fact it will be even simpler to directly use a stream parser.
(* pseudo untested code *)
let rec go = parse
| [< '(QUOTATION q, _loc); strm >] -> expand q; go strm
| [< '(token, _loc); strm >] -> Token.<some function> tok; go strm
| [< >] -> ()
> On Tue, 2007-10-23 at 11:39 +0200, Nicolas Pouillard wrote:
> > A way to start this is to just keep the lexer and provide a new grammar
> > including quotations [2] and antiquotations. On the wiki [1] there is also a
> > small but complete example of a grammar for the untyped lambda calculus with
> > antiquotations [3], and also a tutorial of making a full parser with Camlp4 [4].
> >
> > [1]: http://brion.inria.fr/gallium/index.php/Camlp4
> > [2]: http://brion.inria.fr/gallium/index.php/Quotation
> > [3]: http://brion.inria.fr/gallium/index.php/Lambda_calculus_quotations
> > [4]: http://brion.inria.fr/gallium/index.php/Full_parser_tutorial
--
Nicolas Pouillard aka Ertai