caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] A question about Camlp4
@ 2003-04-03  9:25 Frederic Tronel
  2003-04-03  9:40 ` Remi Vanicat
  0 siblings, 1 reply; 4+ messages in thread
From: Frederic Tronel @ 2003-04-03  9:25 UTC (permalink / raw)
  To: caml-list

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.

Best regards,

Frederic Tronel.


-------------------
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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Caml-list] A question about Camlp4
  2003-04-03  9:25 [Caml-list] A question about Camlp4 Frederic Tronel
@ 2003-04-03  9:40 ` Remi Vanicat
  2003-04-03 10:43   ` Frederic Tronel
  0 siblings, 1 reply; 4+ messages in thread
From: Remi Vanicat @ 2003-04-03  9:40 UTC (permalink / raw)
  To: caml-list

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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Caml-list] A question about Camlp4
  2003-04-03  9:40 ` Remi Vanicat
@ 2003-04-03 10:43   ` Frederic Tronel
       [not found]     ` <87vfxvlttf.dlv@wanadoo.fr>
  0 siblings, 1 reply; 4+ messages in thread
From: Frederic Tronel @ 2003-04-03 10:43 UTC (permalink / raw)
  To: caml-list; +Cc: Remi Vanicat

Remi Vanicat wrote:

> 
> 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...


Thank you, it does work.
Is it documented somewhere ? (I know that "loc" is used in the source 
location).


Best regards,

Frederic.




-------------------
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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Caml-list] A question about Camlp4
       [not found]             ` <87k7eblqaw.dlv@wanadoo.fr>
@ 2003-04-03 12:29               ` Frederic Tronel
  0 siblings, 0 replies; 4+ messages in thread
From: Frederic Tronel @ 2003-04-03 12:29 UTC (permalink / raw)
  To: Remi Vanicat, caml-list


> 
> 
> # let f a loc = <:expr< { a=$a$; b="toto"} >>;;
>                            ^^
> While expanding quotation "expr":
> Parse error: [fun_binding] expected after [patt_label_ident] (in
>   [label_expr])
> # let f a loc = <:expr< { a = $a$; b="toto"} >>;;
> val f : MLast.expr -> MLast.loc -> MLast.expr = <fun>
> 
> c'est subtil, mais pas vraiment un bug (le problème est que =$ peut
> être définit en caml...
> 
> [...]
> 
> 


merci, voila qui clos le thread :)


Frederic


-------------------
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


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2003-04-03 12:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-03  9:25 [Caml-list] A question about Camlp4 Frederic Tronel
2003-04-03  9:40 ` Remi Vanicat
2003-04-03 10:43   ` Frederic Tronel
     [not found]     ` <87vfxvlttf.dlv@wanadoo.fr>
     [not found]       ` <3E8C1FAD.80807@inrialpes.fr>
     [not found]         ` <87n0j7lryf.dlv@wanadoo.fr>
     [not found]           ` <3E8C21ED.80202@inrialpes.fr>
     [not found]             ` <87k7eblqaw.dlv@wanadoo.fr>
2003-04-03 12:29               ` Frederic Tronel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).