On Sat, 7 Apr 2007, Nicolas Pouillard wrote:

> On 4/5/07, Martin Jambon <[EMAIL PROTECTED]> wrote:
>> 
>> On Thu, 5 Apr 2007, Hugo Ferreira wrote:
>> 
>> >
>> > Hello,
>> >
>> > I would like to use a reserved word and substitute that by a function
>> > call. For example, the following:
>> >
>> > let  _ = HEAP in
>> > let h1 = HEAP in
>> >
>> > would become
>> >
>> > let __heap = new_heap () in
>> > let     h1 = new_heap () in
>
> As always it will be a lot simpler to do that kind of thing using a
> filter in camlp4 3.10.
>
> ...
> match (* do things bottom-up *) super#expr e with
> | <:[EMAIL PROTECTED]< let _ = HEAP in $e$ >> ->
>    <:[EMAIL PROTECTED]< let __heap = new_heap () in $e$ >>
> | <:[EMAIL PROTECTED]< let $p$ = HEAP in $e$ >> ->
>    <:[EMAIL PROTECTED]< let $p$ = new_heap () in $e$ >>
> | e -> e
> ...

That's pretty cool.

>> You shouldn't try to do this because the parser looks only one token ahead
>> to make its decision. If you add a rule that starts from "let" (it has
>> to), the token which enables the parser to select this rule is in position
>> 3, so it comes too late. Camlp4 will not warn you about the conflict but
>> fail during preprocessing because it will choose either the predefined
>> "let" rule or yours without knowing if it's the right one.
>
> In fact it's wrong camlp4 can takes more than one token of look ahead.
> It will try to match the input with all the firsts terminals of a rule.

I am not sure I understand, but this is a crucial matter that should be 
thoroughly documented.

Thanks

Martin

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