caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Joel Reymont <joelr1@gmail.com>
To: Nicolas Pouillard <nicolas.pouillard@gmail.com>
Cc: Raphael Proust <raphlalou@gmail.com>,
	"caml-list@yquem.inria.fr" <caml-list@yquem.inria.fr>
Subject: Re: [Caml-list] [Camlp4] Quotation expander with OCaml syntax
Date: Mon, 26 Jul 2010 16:41:16 +0100	[thread overview]
Message-ID: <9828C252-847B-4921-902D-376412CD7F16@gmail.com> (raw)
In-Reply-To: <4c4da611.e8e9d80a.53b5.5b50@mx.google.com>

What if the quotation is not valid OCaml syntax, e.g. C#, and a Camlp4 parser for it exists?

How would I tie it all together to parse the quotation, plug in  antiquotations and end up with the custom AST that my parser outputs?

    Thanks, Joel

Sent from my iPad

On Jul 26, 2010, at 16:13, Nicolas Pouillard <nicolas.pouillard@gmail.com> wrote:

> On Mon, 26 Jul 2010 16:41:46 +0200, Raphael Proust <raphlalou@gmail.com> wrote:
>> Hi all,
> 
> Hi,
> 
>> I'm working on a syntax extension as part of an internship in the
>> Ocsigen team. The aim of the syntax extension is to split the code of a web
>> application in two separate files: one for the client and one for the
>> server. A
>> few transformations are to take place in the process.
>> 
>> Quotations are to be transformed into client code while antiquotations can
>> refer
>> to server side values transmitted to the client at runtime.
>> 
>> 
>> In order to avoid any XY problems, here is an abstracted and simplified
>> example
>> of the expected behavior:
>> 
>> (* Pre-parsed code: *)
>> let start = <:on< f $y$ >> in
>> let html_node =
>> span ~a:[onclick start] "some text" (* a is used for (html) attributes *)
>> 
>> (* Server side post-parsed code: *)
>> let start _arg1 =
>> "call_closure(some_unique_name," ^ mymarshall _arg1 ")"
>> in
>> let html_node = span ~a:[onclick (start y)] "some text"
>> 
>> (* Client side post-parsed code: *)
>> let _ = register_closure some_unique_name (fun _arg1 -> f _arg1)
>> 
>> 
>> 
>> If the example isn't clear enough I can detail it a little bit more.
>> 
>> 
>> I'm unsure of what is the standard way of doing such a thing in Camlp4. What
>> I
>> have in mind is to use the original Ocaml syntax for the quotation expander.
>> This would (IIUC) allow me to filter the AST to transform every
>> antiquotation
>> found inside the quotation itself.
>> 
>> I'm not sure this is the ideal way of doing such a thing because of the size
>> of
>> the pattern matching in the AST filter. On the other hand, because the
>> quotation
>> is supposed to contain valid OCaml code, it seems normal to reuse the
>> original
>> parser.
> 
> If the <:on<...>> contents is valid OCaml syntax I would suggest you to not go
> in the quotations direction. You will avoid a ton of syntactic issues.
> 
> What I suggest you is to directly use camlp4 filters, for instance by changing
> the meaning of some constructor application and labels for antiquotations:
> 
> (* Pre-parsed code: *)
> let start = On (f ~y) in
> let html_node =
>  span ~a:[onclick start] "some text" (* a is used for (html) attributes *)
> 
> Have fun,
> 
> -- 
> Nicolas Pouillard
> http://nicolaspouillard.fr
> 
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs


  reply	other threads:[~2010-07-26 15:40 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <AANLkTikuoN4H0Hsx74JwW66J9jmtq+usDxtQPpYfSGbd@mail.gmail.com>
2010-07-26 14:41 ` Raphael Proust
2010-07-26 15:13   ` [Caml-list] " Nicolas Pouillard
2010-07-26 15:41     ` Joel Reymont [this message]
2010-07-26 16:05       ` Jake Donham
2010-07-26 15:41     ` Raphael Proust
2010-07-26 16:27       ` Nicolas Pouillard
2010-07-26 16:30       ` Jake Donham
2010-07-27  7:57         ` Raphael Proust
2010-07-26 20:08   ` bluestorm
2010-07-26 20:53     ` Raphael Proust
2010-07-27 13:22   ` Thomas.Gazagnaire
2010-07-27 14:38     ` Raphael Proust
2010-07-27 14:47     ` Vincent Balat

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9828C252-847B-4921-902D-376412CD7F16@gmail.com \
    --to=joelr1@gmail.com \
    --cc=caml-list@yquem.inria.fr \
    --cc=nicolas.pouillard@gmail.com \
    --cc=raphlalou@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).