Hi Martin,

Martin Jambon wrote:
> On Mon, 19 Mar 2007, Hugo Ferreira wrote:
> 
snip...
>>
>> EXTEND
>>   Pcaml.expr: [
>>     [
>>       "|" ; l = LIST0 Pcaml.expr  SEP ";" ; "|"->
>>                  expand_term_list loc l ]  ];
>> END;;
> 
> 
> Didn't you forget the brackets around the list?
> Like this:
> 
> EXTEND
>    Pcaml.expr: [
>      [
>        "|" ; "["; l = LIST0 Pcaml.expr SEP ";" ; "]"; "|"->
>                   expand_term_list loc l ]  ];
> END;;
> 
> 

This is what I am aiming for but:
1. I get the same result if I use only "|" or a combination of
    "|" and "["
2. I get the same result if I use a "keyword" LIST as you do
    in your example.

The real issue here (see below) is why the original syntax printing
shows the expected behavior (we have a list) and the revised syntax not
(we get a list with a "do {..}" structure).

The question is: is this a bug I must circumvent or am I doing something
wrong.


Thanks for your help,
Hugo F.

> 
>> I compile the source below with the extension:
>>
>> ....
>>
>>   let t1 =
>>     List.iter (fun i -> print_endline i) ["1"; "f(X,Y)"; "g(X,Y)"; "4"]
>>   in
>>   ()
>>
>> And the execution gives me:
>>
>> 4
>>
>> If I generate the original and revised syntax output using the extension
>> above using for example:
>>
>> camlp4o -I . pr_o.cmo pa_$(NAME).cmo $(PROG).ml -o $(PROG).ppo
>> camlp4o -I . pr_r.cmo pa_$(NAME).cmo $(PROG).ml -o $(PROG).ppr
>>
>> I get for $(PROG).ppo
>>
>> ...
>>   let t1 =
>>     List.iter (fun i -> print_endline i) ["1"; "f(X,Y)"; "g(X,Y)"; "4"]
>>   in
>>   ()
>>
>> which is what I expect for the original syntax... but for the revised
>> syntax $(PROG).ppr I get:
>>
>>   let t1 =
>>     do {
>>       print_string "Not implemented for list ";
>>       List.iter (fun i -> print_endline i)
>>         [do { "1"; "f(X,Y)"; "g(X,Y)"; "4" }]
>>     }
>>   in
>>   ()
>>
>> which ... to say the least is *not* what I expected. This explains why I
>> initially though I had but one Pcaml.expr and not a list of those.  What
>> seems to be happening is that the revised syntax is used to generate the
>> code and this is wrong.
>>
>> Can anyone tell me what mess I have done?
>>
>> TIA,
>> Hugo Ferreira.
>>
>>
>>
>>
>> Hugo Ferreira wrote:
>>> Hello,
>>>
>>> I would like to convert an Ocaml expression:
>>>
>>> let t1 = | ["f(X,Y)"; "g(X,Y)"] | in ()
>>>
>>> to:
>>>
>>>    let t1 =
>>>      List.iter (fun i -> print_endline i) ["f(X,Y)"; "g(X,Y)"]
>>>    in
>>>    ()
>>>
>>> To do this I use:
>>>
>>> let expand_term_list loc l =
>>>            let nl = <:expr< [] >>                      in
>>>            let nl = List.fold_right (fun h t ->
>>>                    <:expr< [$h$::$t$] >>
>>>                    ) l nl                              in
>>>            <:expr<
>>>            do {
>>>                  List.iter (fun i -> print_endline i) $nl$
>>>             }
>>>           >>
>>>
>>> EXTEND
>>>    Pcaml.expr: [
>>>      [
>>>      "|"; l = LIST0 Pcaml.expr  SEP ";" ; "|" -> expand_term_list loc l ]
>>>    ];
>>> END;;
>>>
>>>
>>> Unfortunately the output I get is:
>>>
>>>    let t1 =
>>>      List.iter (fun i -> print_endline i) [["f(X,Y)"; "g(X,Y)"]]
>>>    in
>>>    ()
>>>
>>> As I understand it, we have to do list construction ourselves seeing as
>>> we have no quotations for this. But it seems that the parameter "l" I am
>>> passing to the function "expand_term_list" is an AST element and not a
>>> list of AST nodes. How do I actual get the list elements?
>>>
>>> TIA.
>>> Hugo F.
>>>
>>>
>>>
>>>
>>>
>>
> 
> --
> Martin Jambon
> http://martin.jambon.free.fr
> 
> > 
> 


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"ocaml-developer" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/ocaml-developer?hl=en
For other OCaml forums, see http://caml.inria.fr/resources/forums.en.html
-~----------~----~----~----~------~----~------~--~---

Reply via email to