* [Caml-list] camlp4 question...
@ 2004-10-05 3:45 Pietro Abate
2004-10-05 5:38 ` Dmitry Lomov
0 siblings, 1 reply; 5+ messages in thread
From: Pietro Abate @ 2004-10-05 3:45 UTC (permalink / raw)
To: ocaml ml
Hi all,
I'd like to write a small extension to transform
let f <a;b;c> = ...
in
let f new_id =
match new_id with
|[a;b;c] -> ...
|_ -> failwith "wrong arguments"
I've tried with something like:
expr: LEVEL "simple"
[[
"let"; OPT "rec"; "<"; l = LIST1 LIDENT; ">"; $list:pel$ "in" e = expr ->
<:expr< let .... = function [] -> failwith "ffff" | $list:l$ -> $e$ >>
]];
but I'm stuck... In particular, how can I parse $list:pel$ ?
pel = LIST patt ?
thanks,
p
--
++ "All great truths begin as blasphemies." -George Bernard Shaw
++ Please avoid sending me Word or PowerPoint attachments.
See http://www.fsf.org/philosophy/no-word-attachments.html
-------------------
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] 5+ messages in thread
* Re: [Caml-list] camlp4 question...
2004-10-05 3:45 [Caml-list] camlp4 question Pietro Abate
@ 2004-10-05 5:38 ` Dmitry Lomov
0 siblings, 0 replies; 5+ messages in thread
From: Dmitry Lomov @ 2004-10-05 5:38 UTC (permalink / raw)
To: ocaml ml; +Cc: Pietro Abate
Pietro Abate wrote:
> Hi all,
>
> I'd like to write a small extension to transform
>
> let f <a;b;c> = ...
>
> in
>
> let f new_id =
> match new_id with
> |[a;b;c] -> ...
> |_ -> failwith "wrong arguments"
>
> I've tried with something like:
> expr: LEVEL "simple"
> [[
> "let"; OPT "rec"; "<"; l = LIST1 LIDENT; ">"; $list:pel$ "in" e = expr ->
> <:expr< let .... = function [] -> failwith "ffff" | $list:l$ -> $e$ >>
> ]];
>
> but I'm stuck... In particular, how can I parse $list:pel$ ?
> pel = LIST patt ?
Do check your syntax once again. $list:pel$ is an antiquotation, and not
a parsing rule. As such, it cannot appear to the left of '->'.
The LHS should look about like that:
expr: LEVEL "let" (* sic! *)
[[ "let"; OPT "rec"; LIDENT; "<"; LIST patt; ">";"=";
expr;"in" expr -> ....
]]
RHS should be quite straightforward (you should bind subparsing results,
of course)
HTH,
Friendly,
Dmitry
--
Dmitry Lomov
JetBrains Inc.
http://www.jetbrains.com
"Develop With Pleasure!"
-------------------
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] 5+ messages in thread
* camlp4 question
@ 2005-09-08 8:02 Christophe Raffalli
2005-09-08 17:41 ` [Caml-list] " Martin Jambon
0 siblings, 1 reply; 5+ messages in thread
From: Christophe Raffalli @ 2005-09-08 8:02 UTC (permalink / raw)
To: caml-list
I am writing a tool to facilitate the use of callback of camlfunction
from C. I have a first prototype running for lablGlut, but I want to
make it nicer using camlp4 (this extension should produce automatically
the C wrapper for each callback, the user will only have to compile the
produced C file).
The pb is that I need to retrieve information given in one module from
another. The minimum I need to do is to search for the path given to
ocamlc (the -I options) from camlp4 code, but I would prefer a better
way, and I do not know how to retrive this PATH anyway.
Here is an example to illustrate what I need (the type 'a callback is a
type to a C wrapper for a function of type 'a) :
-- file glut.ml, part of the lablGlut library --
...
let visibility_state_of_int = function
0 -> NOT_VISIBLE
| 1 -> VISIBLE
| _ -> raise (BadEnum "visibility_state")
REGISTER_CONVERSION visibility_state_of_int
external visibilityFunc :
cb:(state:visibility_state_t->unit) callback->unit
= "ml_glutVisibilityFunc"
...
-- file test.ml an example using lablGlut --
open Glut
...
let state_changed ~state =
match value with
NOT_VISIBLE -> printf "window not visible."; print_newline()
| VISIBLE -> printf "window not visible."; print_newline()
MAKE_WRAPPER state_changed state_changed_cb
(* here I need to search for the convertion for the type
visibility_state_of_int which was defined in glut.ml to make the
C wrapper state_changed_cb : (visibility_state_of_int -> unit) callback *)
let _ = Glut.visibilityFunc state_changed_cb
...
Can someone help ?
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Caml-list] camlp4 question
2005-09-08 8:02 Christophe Raffalli
@ 2005-09-08 17:41 ` Martin Jambon
0 siblings, 0 replies; 5+ messages in thread
From: Martin Jambon @ 2005-09-08 17:41 UTC (permalink / raw)
To: Christophe Raffalli; +Cc: caml-list
On Thu, 8 Sep 2005, Christophe Raffalli wrote:
> I am writing a tool to facilitate the use of callback of camlfunction from C.
> I have a first prototype running for lablGlut, but I want to make it nicer
> using camlp4 (this extension should produce automatically the C wrapper for
> each callback, the user will only have to compile the produced C file).
>
> The pb is that I need to retrieve information given in one module from
> another. The minimum I need to do is to search for the path given to ocamlc
> (the -I options) from camlp4 code, but I would prefer a better way, and I do
> not know how to retrive this PATH anyway.
Maybe write a script which would transmit the -I options to camlp4o and to
ocamlopt/ocamlc (each camlp4 loadable module can define additional options
to pass to camlp4/camlp4o)
Martin
>
> Here is an example to illustrate what I need (the type 'a callback is a type
> to a C wrapper for a function of type 'a) :
>
> -- file glut.ml, part of the lablGlut library --
>
> ...
>
> let visibility_state_of_int = function
> 0 -> NOT_VISIBLE
> | 1 -> VISIBLE
> | _ -> raise (BadEnum "visibility_state")
>
> REGISTER_CONVERSION visibility_state_of_int
>
> external visibilityFunc :
> cb:(state:visibility_state_t->unit) callback->unit
> = "ml_glutVisibilityFunc"
>
> ...
>
> -- file test.ml an example using lablGlut --
>
> open Glut
>
> ...
>
> let state_changed ~state =
> match value with
> NOT_VISIBLE -> printf "window not visible."; print_newline()
> | VISIBLE -> printf "window not visible."; print_newline()
>
> MAKE_WRAPPER state_changed state_changed_cb
> (* here I need to search for the convertion for the type
> visibility_state_of_int which was defined in glut.ml to make the
> C wrapper state_changed_cb : (visibility_state_of_int -> unit) callback *)
>
> let _ = Glut.visibilityFunc state_changed_cb
>
> ...
>
> Can someone help ?
>
> _______________________________________________
> 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
>
--
Martin Jambon, PhD
http://martin.jambon.free.fr
^ permalink raw reply [flat|nested] 5+ messages in thread
* Camlp4 question
@ 2005-10-28 19:44 Matt Gushee
2005-11-01 14:04 ` [Caml-list] " Hendrik Tews
0 siblings, 1 reply; 5+ messages in thread
From: Matt Gushee @ 2005-10-28 19:44 UTC (permalink / raw)
To: caml-list
I had occasion today to look through the pa_r.ml, and noticed the
following (line 329 in OCaml 3.08.4):
| "object"; cspo = OPT class_self_patt; cf = class_structure; "end" ->
(* <:expr< object $opt:cspo$ $list:cf$ end >> *)
MLast.ExObj loc cspo cf ]
So a quotation expander was created for objects as ordinary expressions,
but evidently there was something wrong with it. Anyone know what the
problem was?
--
Matt Gushee
Englewood, CO, USA
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Caml-list] Camlp4 question
2005-10-28 19:44 Camlp4 question Matt Gushee
@ 2005-11-01 14:04 ` Hendrik Tews
0 siblings, 0 replies; 5+ messages in thread
From: Hendrik Tews @ 2005-11-01 14:04 UTC (permalink / raw)
To: caml-list
Matt Gushee <matt@gushee.net> writes:
I had occasion today to look through the pa_r.ml, and noticed the
following (line 329 in OCaml 3.08.4):
| "object"; cspo = OPT class_self_patt; cf = class_structure; "end" ->
(* <:expr< object $opt:cspo$ $list:cf$ end >> *)
MLast.ExObj loc cspo cf ]
So a quotation expander was created for objects as ordinary expressions,
but evidently there was something wrong with it. Anyone know what the
problem was?
I believe the comment shows what the code should look like if
immediate objects would have been implemented in the quotation
expander q_MLast.ml. However, immediate objects are not yet in
the quotation expander, therefore the real code is what the
quoatation expander would have produced (if immediate objects had
been implemented).
Bye,
Hendrik
PS. Sorry Matt for posting separately to caml-list.
^ permalink raw reply [flat|nested] 5+ messages in thread
* camlp4 question
@ 2005-11-30 9:29 Christophe Raffalli
2005-12-01 9:13 ` [Caml-list] " Hendrik Tews
0 siblings, 1 reply; 5+ messages in thread
From: Christophe Raffalli @ 2005-11-30 9:29 UTC (permalink / raw)
To: caml-list
[-- Attachment #1: Type: text/plain, Size: 383 bytes --]
I would like to produce an abbreviated command for
camlp4 mylexer.cmo mypa_o.cmo pa_extend.cmo q_MLast.cmo pr_dump.cmo\
pa_bindlib.cmo
I tried to mimic the compilation of camlp4o:
ocamlc -I +camlp4 odyl.cma camlp4.cma mylexer.cmo mypa_o.cmo\
pa_bindlib.cmo pr_dump.cmo odyl.cmo -o camlp4bo
But when I try to use ocamlp4bo, it produces no output ...
What am I doing wrong ?
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 894 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2005-12-01 9:13 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-10-05 3:45 [Caml-list] camlp4 question Pietro Abate
2004-10-05 5:38 ` Dmitry Lomov
2005-09-08 8:02 Christophe Raffalli
2005-09-08 17:41 ` [Caml-list] " Martin Jambon
2005-10-28 19:44 Camlp4 question Matt Gushee
2005-11-01 14:04 ` [Caml-list] " Hendrik Tews
2005-11-30 9:29 camlp4 question Christophe Raffalli
2005-12-01 9:13 ` [Caml-list] " Hendrik Tews
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox