By the way, when I was tinkering, I originally got my example working *without* merging nts (lines 1967-1983). I only added it after inspecting the output of `compiled-lang-lang'. The resulting union-language had the same nonterminal in a language several times with overlapping right-hand-sides, so I merged them
William Bowman On Thu, Feb 28, 2013 at 02:05:59PM -0600, Robby Findler wrote: > The reason I didn't do that is very much related to lines 1967-1983 in your > diff. > > That isn't a good idea: what you really want to do there is check to see if > different patterns generate the same languages or not. But that's not > something that is easily done (I'm guessing it is computable, but very very > expensive. It may not be computable, tho, for all I know.) > > One could allow unioning by just keeping all productions, and I guess I > wouldn't mind an extension to define-union-language via a keyword that did > that, tho. > > In your case, is there not a way to refactor your grammars so that you > don't need this capability? Could you maybe make a small, representative > example to post to the list? I find that kind of thing to be quite helpful > for me to understand what the best change to Redex is. > > Robby > > > > On Thu, Feb 28, 2013 at 1:46 PM, William J. Bowman > <w...@williamjbowman.com>wrote: > > > Hello all, > > > > I've been hacking on some languages in Redex, and found myself > > abstracting commons parts into base languages, and gradually building new > > languages via `define-extended-language' and `define-union-language'. > > Unfortunately, I hit a wall when I discovered `define-union-language' > > doesn't like to union languages that define the same nonterminals. > > > > Consider this toy example: https://gist.github.com/bluephoenix47/5054403 > > > > This seems like a sensible thing to want to do, so I forked racket wrote a > > patch: > > > > https://github.com/bluephoenix47/racket/commit/0a7781b2be2643778f8d8d10d771ab1ce2dc622b > > > > Unfortunately, several Redex tests fail (http://sprunge.us/fPHU) because > > they expect an error when languages which define the same nonterminals > > are used in `define-union-language'. > > > > Is this *desired* behavior? If so, why? It seems very reasonable to want > > to merge the nonterminals of languages. > > > > -- > > > > William J. Bowman > > > > _________________________ > > Racket Developers list: > > http://lists.racket-lang.org/dev > > > >
pgp-signature.txt
Description: Digital Signature
_________________________ Racket Developers list: http://lists.racket-lang.org/dev