<div dir="ltr">Thanks for the pull request (and sorry for the delay in replying here). I&#39;ve pushed your commit and another one that covers things like docs and otherwise a few other changes to your commit. Please let me know if things don&#39;t work out for you.<div>
<br></div><div>Robby</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Feb 28, 2013 at 10:47 PM, William J. Bowman <span dir="ltr">&lt;<a href="mailto:wjb@williamjbowman.com" target="_blank">wjb@williamjbowman.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I am at Northeastern. I use my own address as a central point for the<br>
multiple present and past addresses, and usually don&#39;t bother<br>
spoofing the `from&#39; header. Perhaps I&#39;ll add a note about that to my<br>
email signature.<br>
<br>
Thanks for the tips about reduction semantics!<br>
<br>
I&#39;ve created a pull request.<br>
<span class="HOEnZb"><font color="#888888"><br>
William Bowman<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Thu, Feb 28, 2013 at 08:18:12PM -0600, Robby Findler wrote:<br>
&gt; Yeah, I agree it does make sense to do this kind of merging with examples<br>
&gt; like the one you posted or else you get very very bad performance in<br>
&gt; matching. And the merging is coming about because of the way the language<br>
&gt; is structured; it isn&#39;t accidental &quot;lucky&quot; merging; you expect the same<br>
&gt; productions to show up multiple times because of the way the grammars are<br>
&gt; constructed.<br>
&gt;<br>
&gt; Overall, I agree with you that this is a reasonable request. I would be<br>
&gt; happier if I could say that Redex&#39;s module language were anywhere close to<br>
&gt; being ready because if it were, there would be a better way to do this. But<br>
&gt; in the meantime, I think your extension is a good one. Your email suggests<br>
&gt; that you are unaffiliated but I think you&#39;re actually at Northeastern? Can<br>
&gt; someone there help you make this push? If not, I&#39;d be happy to do it.<br>
&gt;<br>
&gt; Meanwhile, as to your Redex code, two points about reduction-semantics<br>
&gt; style: you should put both &quot;v&quot; and &quot;E&quot; into the extension not the<br>
&gt; originals: typically both concepts are a part of standard reduction. But,<br>
&gt; if you have a need of values in the original language, (for, say, defining<br>
&gt; Eval) then you should make it a separate non-terminal, not a production of<br>
&gt; &#39;e&#39;. In your specific example, you run into trouble if you want to make<br>
&gt; pair strict, since you want only (pair v v) in the v non-terminal, but<br>
&gt; (pair e e) in the e non-terminal. FWIW.<br>
&gt;<br>
&gt; Robby<br>
&gt;<br>
&gt;<br>
&gt; On Thu, Feb 28, 2013 at 3:04 PM, William J. Bowman<br>
&gt; &lt;<a href="mailto:wjb@williamjbowman.com">wjb@williamjbowman.com</a>&gt;wrote:<br>
&gt;<br>
&gt; &gt; By the way, when I was tinkering, I originally got my example working<br>
&gt; &gt; *without* merging nts (lines 1967-1983). I only added it after<br>
&gt; &gt; inspecting the output of `compiled-lang-lang&#39;. The resulting<br>
&gt; &gt; union-language had the same nonterminal in a language several times with<br>
&gt; &gt; overlapping right-hand-sides, so I merged them<br>
&gt; &gt;<br>
&gt; &gt; William Bowman<br>
&gt; &gt;<br>
&gt; &gt; On Thu, Feb 28, 2013 at 02:05:59PM -0600, Robby Findler wrote:<br>
&gt; &gt; &gt; The reason I didn&#39;t do that is very much related to lines 1967-1983 in<br>
&gt; &gt; your<br>
&gt; &gt; &gt; diff.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; That isn&#39;t a good idea: what you really want to do there is check to see<br>
&gt; &gt; if<br>
&gt; &gt; &gt; different patterns generate the same languages or not. But that&#39;s not<br>
&gt; &gt; &gt; something that is easily done (I&#39;m guessing it is computable, but very<br>
&gt; &gt; very<br>
&gt; &gt; &gt; expensive. It may not be computable, tho, for all I know.)<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; One could allow unioning by just keeping all productions, and I guess I<br>
&gt; &gt; &gt; wouldn&#39;t mind an extension to define-union-language via a keyword that<br>
&gt; &gt; did<br>
&gt; &gt; &gt; that, tho.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; In your case, is there not a way to refactor your grammars so that you<br>
&gt; &gt; &gt; don&#39;t need this capability? Could you maybe make a small, representative<br>
&gt; &gt; &gt; example to post to the list? I find that kind of thing to be quite<br>
&gt; &gt; helpful<br>
&gt; &gt; &gt; for me to understand what the best change to Redex is.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Robby<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; On Thu, Feb 28, 2013 at 1:46 PM, William J. Bowman<br>
&gt; &gt; &gt; &lt;<a href="mailto:wjb@williamjbowman.com">wjb@williamjbowman.com</a>&gt;wrote:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Hello all,<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I&#39;ve been hacking on some languages in Redex, and found myself<br>
&gt; &gt; &gt; &gt; abstracting commons parts into base languages, and gradually building<br>
&gt; &gt; new<br>
&gt; &gt; &gt; &gt; languages via `define-extended-language&#39; and `define-union-language&#39;.<br>
&gt; &gt; &gt; &gt; Unfortunately, I hit a wall when I discovered `define-union-language&#39;<br>
&gt; &gt; &gt; &gt; doesn&#39;t like to union languages that define the same nonterminals.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Consider this toy example:<br>
&gt; &gt; <a href="https://gist.github.com/bluephoenix47/5054403" target="_blank">https://gist.github.com/bluephoenix47/5054403</a><br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; This seems like a sensible thing to want to do, so I forked racket<br>
&gt; &gt; wrote a<br>
&gt; &gt; &gt; &gt; patch:<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; <a href="https://github.com/bluephoenix47/racket/commit/0a7781b2be2643778f8d8d10d771ab1ce2dc622b" target="_blank">https://github.com/bluephoenix47/racket/commit/0a7781b2be2643778f8d8d10d771ab1ce2dc622b</a><br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Unfortunately, several Redex tests fail (<a href="http://sprunge.us/fPHU" target="_blank">http://sprunge.us/fPHU</a>)<br>
&gt; &gt; because<br>
&gt; &gt; &gt; &gt; they expect an error when languages which define the same nonterminals<br>
&gt; &gt; &gt; &gt; are used in `define-union-language&#39;.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Is this *desired* behavior? If so, why? It seems very reasonable to<br>
&gt; &gt; want<br>
&gt; &gt; &gt; &gt; to merge the nonterminals of languages.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; --<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; William J. Bowman<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; _________________________<br>
&gt; &gt; &gt; &gt;   Racket Developers list:<br>
&gt; &gt; &gt; &gt;   <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt;<br>
</div></div></blockquote></div><br></div>