[antlr-interest] Transformation to new grammar

Monty Zukowski monty at codetransform.com
Mon Aug 15 11:41:53 PDT 2005

On Aug 15, 2005, at 5:03 AM, Barry McGillin wrote:

> I have a grammar for one version of SQL that I'm mapping into  
> Oracle SQL.
> We can walk the trees and generate what we need to however,  I have  
> a full version of the target grammar available.  Is is possible to  
> map from one grammar to another, so that it is possible to verify  
> that tree n is correct wrt the target grammar as shown below.
> |Source Grammar |  tree 1 | ... | tree n | Target grammar|
> |    o          |    o    |     |    o   |       o       |
> |   / \         |   / \   |     |   / \  |      / \      |
> |  o   o        |  o   o  |     |  o   o |     o   o     |
> |     / \       | /     \ |     | / \    |    / \        |
> |    o   o      |o       o|     |o   o   |   o   o       |
> Today, we can walk the source tree and make transformations to it  
> to move us from tree 1 towards tree n, but when do we know we're  
> finished and correct? I'm not looking for a specific solution, but  
> rather some ideas about how this can be done efficiently if at all :-)

To test the transformations done by a certain pass, I would run the  
result tree through a basic tree grammar with no actions in it, just  
to make sure it was still grammatically valid.  I structured all of  
my transformations to conform to a "super" grammar which was really  
the union of the input tree grammar and the output tree grammar.   
That's impossible to do with a regular grammar, but with a tree  
grammar it is quite convenient.  All you have to do is make sure that  
each language uses it's own unique token types.

As far as knowing you are finished and correct, write tests!  For  
each mini translation you do, write a complete example program and  
what you expect upon output.  Write a test program to do your  
transformation and diff the result of that against what you expect.   
It's really handy and important to do, because it's so easy to change  
something in one place and see the effect of it somewhere else when  
you are dealing with grammars.

By the way, I'm an ANTLR consultant and could give much more in depth  
advice if you hire me.  Also come to the ANTLR conference this year.   
I'll be there, as will many other experts, and we just sit around and  
complain until someone smarter comes up with a good solution :)


More information about the antlr-interest mailing list