caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* Cross-module data in camlp4
@ 2008-04-27 22:52 Richard Jones
  2008-04-27 23:58 ` [Caml-list] " Martin Jambon
  0 siblings, 1 reply; 2+ messages in thread
From: Richard Jones @ 2008-04-27 22:52 UTC (permalink / raw)
  To: caml-list

I'm trying to add named patterns to my bitmatch syntax extension.  The
idea would be you could write (exact syntax isn't nailed down yet):

  let p = BITMATCH { a : 4; b : 4 } ;;

  bitmatch bs with
  | { p } -> (a, b)

  let f a b = BITSTRING p

This is analogous to micmatch's Named regular expressions feature:

  http://martin.jambon.free.fr/micmatch-manual.html#htoc5
eg:
  RE phone = digit{3} '-' digit{4}

Reading the code to micmatch, these are implemented by saving the
camlp4 AST into a Hashtbl, so the example above would create a hash
entry ("phone" -> abstract syntax tree of (digit{3} '-' digit{4})).
At the point of use of the named RE, the AST is substituted.

Of course micmatch's scheme only works if the named RE appears in the
same compilation unit as the substitution.  There is no way that I can
see to save these named expressions across compilation units.  In
other words this is not allowed:

  --- my_regexps_lib.ml -----
  RE phone = digit{3} '-' digit{4}

  --- my_regexps_lib.mli -----
  val phone : Micmatch.regexp

  --- another file -----
  open My_regexps_lib
  (* ... and use 'phone' *)

I think this limits the usefulness of named expressions, but at the
same time I don't know how one would go about implementing
cross-module named expressions.  Is it even possible?  Presumably if
it could be done at all, we'd have to save the camlp4 AST
representation into the output file (*.cmo).  It would be easy enough
to marshal the AST into a string at the point of definition.  I don't
quite see how it can be accessed & unmarshalled at the point of use
however.

Any insights here gratefully accepted!

Rich.

-- 
Richard Jones
Red Hat


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-04-28  0:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-04-27 22:52 Cross-module data in camlp4 Richard Jones
2008-04-27 23:58 ` [Caml-list] " Martin Jambon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).