[
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: | Remi Vanicat <vanicat@l...> |
| Subject: | Re: [Caml-list] A question about Camlp4 |
Frederic Tronel <Frederic.Tronel@inrialpes.fr> writes: > Hi list, > > > I'm using camlp4 in order to embed a scripting language within my caml > programs. > I've already done this one year ago for a subset of Lotos verification > language, and I'm extending this work. > > I'm facing a difficulty. Here is a canonical example of the problem: > > EXTEND: > rule1: ..... -> <:expr< >> (* A rule that generate a ML AST *) > rule2: OPT a = rule1 ..... -> > let b = match a with > None -> <:expr<None>> > Some x -> <:expr<Some $x>> > in > <:expr< ATypeConstructor $b$>> > ... > END > > I have to do this small trick for each optionnal symbol in each rule, > (this is also true for list meta symbols introduced by LIST0, LIST1 > ...). > It would greatly improve readability of my program, if I could define > a small function outside from the grammar extension which would do: > > optionToAst o = > match o with > None -> <:expr<None>> > Some x -> <:expr<Some $x>> > > However if I do this the compiler complains about unbound value "loc". > Thanks for your help. there is an "hidden" loc "argument" to expr quotation, and this loc variable is defined in the action. let optionToAst loc o = match o with | None -> <:expr<None>> | Some x -> <:expr<Some $x>> then you could call "optionToAst loc a" and it will work... -- Rémi Vanicat vanicat@labri.u-bordeaux.fr http://dept-info.labri.u-bordeaux.fr/~vanicat ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners