<div dir="ltr">Many thanks for the advice !<div><br><div style>I&#39;ve start forging ahead with the syntax-property approach since that seems the most robust and provides the least coupling between the stages.</div><div style>

<br></div><div style><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Apr 4, 2013 at 2:39 AM, Sam Tobin-Hochstadt <span dir="ltr">&lt;<a href="mailto:samth@ccs.neu.edu" target="_blank">samth@ccs.neu.edu</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Wed, Apr 3, 2013 at 10:31 PM, Robby Findler<br>
&lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt; wrote:<br>
&gt;<br>
&gt; You can put syntax properties on the result of your expander for the<br>
&gt; state-machine macro and then search for those properties in the expanded<br>
&gt; text. Maybe that will help?<br>
<br>
</div>There&#39;s information about how Typed Racket does this (using roughly<br>
the technique Robby outlined, plus others) in our papers about the<br>
implementation, from PLDI 2011 and the Scheme Workshop 2007 [1,2].<br>
<br>
The other significant technique is basically the following:<br>
<br>
Expand a form like:<br>
<br>
   (my-special-dsl some arguments here)<br>
<br>
to<br>
<br>
   (begin (define-values () (begin (quote-syntax (my-special-dsl some<br>
arguments here)) (values)) ;; just the original input syntax<br>
               the-actual-expansion)<br>
<br>
Then your tool can look at the results of expansion (via the hook<br>
Robby describes) and find occurrences of this pattern, and discover<br>
your DSL. Note that this only really works if either (a) your DSL<br>
doesn&#39;t have any general expansion positions as subforms or (b) you<br>
don&#39;t need to analyze those subforms.  Otherwise syntax properties are<br>
the best route.<br>
<br>
Sam<br>
<br>
[1] <a href="http://www.ccs.neu.edu/racket/pubs/scheme2007-ctf.pdf" target="_blank">http://www.ccs.neu.edu/racket/pubs/scheme2007-ctf.pdf</a><br>
[2] <a href="http://www.ccs.neu.edu/racket/pubs/pldi11-thacff.pdf" target="_blank">http://www.ccs.neu.edu/racket/pubs/pldi11-thacff.pdf</a><br>
</blockquote></div><br></div>