[antlr-interest] "explosion" rewrite
Jim Idle
jimi at temporal-wave.com
Fri May 1 13:50:47 PDT 2009
Steve Ebersole wrote:
> Is there a syntax to "explode" a subrule result (sorry don't know a
> better term).
>
> I have a rule:
>
> sortSpecification
> : sortKey collationSpecification? orderingSpecification?
> -> ^( SORT_SPEC sortKey collationSpecification?
> orderingSpecification? )
> ;
>
> The result of the sortKey subrule could be a Tree of type VECTOR_EXPR
> (its a "row value constructor" for those familiar with SQL).
>
> In terms of eventual output, this rule translates as "(sort_key1,
> sort_key2) asc" where "sort_key1, sort_key2)" is the VECTOR_EXPR.
>
> Instead what I need to have happen is "sort_key1 asc, sort_key2 asc".
>
> I started down the path of trying an @after in the sortSpecification and
> calling out to some java code to mutate the tree manually. But I'd
> prefer to keep this in the grammar if at all possible.
>
>
>
I would need to see your sortKey rule but you can do things like this:
x : a+=something x? y? ->^(NODE $a $x? $y)+
That will probably get you on track. Also, you could reorder the tree
and more easily pick up the order:
-> ^( SORT_SPEC collationSpecification?
orderingSpecification? sortKey)
Assuming the first two optional sequences have a root node. Then you could assume that the elements in sortKey have whatever you have established in the ordering.
If what you are trying to do is parse a SQL statement you could try inputting this into my online SQL parser and looking at the tree output:
http://www.temporal-wave.com
Jim
More information about the antlr-interest
mailing list