sortKey : expression;
expression : QUOTED_IDENTIFIER -> ^( COLUMN ALIAS_REF[Template.TEMPLATE] QUOTED_IDENTIFIER[$QUOTED_IDENTIFIER] ) // we treat the so-called standard functions differently because they are handled differently by the HQL lexer which we also use here... | standardFunction | literal // not identDotIdentStructure because we dont want QUOTED_IDENTIFIERs is here | ( IDENTIFIER ( DOT IDENTIFIER )* LEFT_PAREN ) => generalFunction // otherwise we fully expect a dot-identifier series, and then we just need to decode the semantic of that structure | identDotIdentStructure -> { ( isFunctionName($identDotIdentStructure.text) ) }? // we have a function with parens (thus no args) ^( FUNCTION[$identDotIdentStructure.start, $identDotIdentStructure.text] ) -> { ( isPropertyName($identDotIdentStructure.text) ) }? // we have a reference to a mapped property { buildPropertyColumns( $identDotIdentStructure.tree ) } -> { ( $identDotIdentStructure.tree.getType() == DOT ) }? // we have a reference to a column which is already qualified identDotIdentStructure -> // we have a reference to a column which is not qualified ^( COLUMN ALIAS_REF[Template.TEMPLATE] IDENTIFIER[$identDotIdentStructure.start,$identDotIdentStructure.text] ) ; The piece of interest here is fragment in expression that reads -> { ( isPropertyName($identDotIdentStructure.text) ) }? // we have a reference to a mapped property { buildPropertyColumns( $identDotIdentStructure.tree ) } buildPropertyColumns() is a java action where I account for the fact that in Hibernate a single property might map to multiple columns; in that case buildPropertyColumns() returns the VECTOR_EXPR On Fri, 2009-05-01 at 13:50 -0700, Jim Idle wrote: > 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 > > List: http://www.antlr.org/mailman/listinfo/antlr-interest > Unsubscribe: > http://www.antlr.org/mailman/options/antlr-interest/your-email-address -- Steve Ebersole <st...@hibernate.org> Hibernate.org List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to il-antlr-interest@googlegroups.com To unsubscribe from this group, send email to il-antlr-interest+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en -~----------~----~----~----~------~----~------~--~---