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