<div dir="ltr">Hi, Jeremie, I think it's reasonable to change the lexer.<div style>FYI, camlp4's lexer works this way</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 23, 2013 at 11:26 AM, Jeremie Dimino <span dir="ltr"><<a href="mailto:jdimino@janestreet.com" target="_blank">jdimino@janestreet.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">We discussed it further with Alain but it turns out it doesn't work<br>
very well.  A constant may be composed of several tokens so it is not<br>
possible to have the exact raw representation.  And for strings one<br>
can use the new quoted strings which are already treated as raw<br>
strings.<br>
<br>
Another possibility would be to modify the lexer so that it doesn't<br>
'evaluate' tokens immediately and let the parser do it.  At least it<br>
would avoid this kind of thing:<br>
<br>
  # max_int;;<br>
  - : int = 4611686018427387903<br>
  # 4611686018427387904;;<br>
  - : int = -4611686018427387904<br>
<div><div class="h5"><br>
On Thu, May 2, 2013 at 2:00 PM, Gabriel Scherer<br>
<<a href="mailto:gabriel.scherer@gmail.com">gabriel.scherer@gmail.com</a>> wrote:<br>
> I think it is very reasonable, and would be a good fit for Alain's branch.<br>
><br>
> On Thu, May 2, 2013 at 1:35 PM, Jeremie Dimino <<a href="mailto:jdimino@janestreet.com">jdimino@janestreet.com</a>> wrote:<br>
>> Hi,<br>
>><br>
>> We recently felt the need to write a new extension that would check<br>
>> integer literals.  The goal is to verify that ones containing<br>
>> underscores match a specific regular expression.  Namely digits are<br>
>> grouped by 3.<br>
>><br>
>> We can do that for instance with a camlp4 token filter, but we wanted<br>
>> to try with ppx.  It is currently not possible to do it by looking at<br>
>> the parsetree since constants are already evaluated (integers are<br>
>> represented by an OCaml int) and the raw form is lost.<br>
>><br>
>> One solution would be to add the raw representation of constants in<br>
>> the parsetree. For instance by changing Asttypes.constant to:<br>
>><br>
>> ,----<br>
>> | type constant_value =<br>
>> |     Const_int of int<br>
>> |   | Const_char of char<br>
>> |   | Const_string of string<br>
>> |   | Const_float of string<br>
>> |   | Const_int32 of int32<br>
>> |   | Const_int64 of int64<br>
>> |   | Const_nativeint of nativeint<br>
>> |<br>
>> | type constant = constant_value * string<br>
>> `----<br>
>><br>
>> I believe it could also be useful for other rewriters, especially ones<br>
>> dealing with strings since they would be able to compute the correct<br>
>> location inside a string. And maybe also for printing: Pprintast could<br>
>> use the representation choosed by the programmer instead of a<br>
>> standardized one.<br>
>><br>
>> Do people thinks that this a reasonable thing to add to the OCaml<br>
>> parsetree? If yes I can do the modification.<br>
>><br>
>> Jeremie<br>
>> _______________________________________________<br>
>> wg-camlp4 mailing list<br>
>> <a href="mailto:wg-camlp4@lists.ocaml.org">wg-camlp4@lists.ocaml.org</a><br>
>> <a href="http://lists.ocaml.org/listinfo/wg-camlp4" target="_blank">http://lists.ocaml.org/listinfo/wg-camlp4</a><br>
<br>
</div></div>--<br>
<div class="HOEnZb"><div class="h5">Jeremie<br>
_______________________________________________<br>
wg-camlp4 mailing list<br>
<a href="mailto:wg-camlp4@lists.ocaml.org">wg-camlp4@lists.ocaml.org</a><br>
<a href="http://lists.ocaml.org/listinfo/wg-camlp4" target="_blank">http://lists.ocaml.org/listinfo/wg-camlp4</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>-- Regards, Hongbo
</div>