// $ANTLR start "aggregate" // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:575:1: aggregate : ( (op= SUM | op= AVG | op= MAX | op= MIN ) OPEN additiveExpression CLOSE -> ^( AGGREGATE[$op] additiveExpression ) | COUNT OPEN (s= STAR | p= aggregateDistinctAll ) CLOSE -> {s == null}? ^( COUNT $p) -> ^( COUNT ^( ROW_STAR[\"*\"] ) ) | collectionExpr ); public HqlParser.aggregate_return aggregate() // throws RecognitionException [1] { HqlParser.aggregate_return retval = new HqlParser.aggregate_return(); retval.Start = input.LT(1); IASTNode root_0 = null; IToken op = null; IToken s = null; IToken OPEN251 = null; IToken CLOSE253 = null; IToken COUNT254 = null; IToken OPEN255 = null; IToken CLOSE256 = null; HqlParser.aggregateDistinctAll_return p = default(HqlParser.aggregateDistinctAll_return); HqlParser.additiveExpression_return additiveExpression252 = default(HqlParser.additiveExpression_return); HqlParser.collectionExpr_return collectionExpr257 = default(HqlParser.collectionExpr_return); IASTNode op_tree=null; IASTNode s_tree=null; IASTNode OPEN251_tree=null; IASTNode CLOSE253_tree=null; IASTNode COUNT254_tree=null; IASTNode OPEN255_tree=null; IASTNode CLOSE256_tree=null; RewriteRuleTokenStream stream_CLOSE = new RewriteRuleTokenStream(adaptor,"token CLOSE"); RewriteRuleTokenStream stream_AVG = new RewriteRuleTokenStream(adaptor,"token AVG"); RewriteRuleTokenStream stream_MAX = new RewriteRuleTokenStream(adaptor,"token MAX"); RewriteRuleTokenStream stream_MIN = new RewriteRuleTokenStream(adaptor,"token MIN"); RewriteRuleTokenStream stream_STAR = new RewriteRuleTokenStream(adaptor,"token STAR"); RewriteRuleTokenStream stream_SUM = new RewriteRuleTokenStream(adaptor,"token SUM"); RewriteRuleTokenStream stream_OPEN = new RewriteRuleTokenStream(adaptor,"token OPEN"); RewriteRuleTokenStream stream_COUNT = new RewriteRuleTokenStream(adaptor,"token COUNT"); RewriteRuleSubtreeStream stream_aggregateDistinctAll = new RewriteRuleSubtreeStream(adaptor,"rule aggregateDistinctAll"); RewriteRuleSubtreeStream stream_additiveExpression = new RewriteRuleSubtreeStream(adaptor,"rule additiveExpression"); try { // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:576:2: ( (op= SUM | op= AVG | op= MAX | op= MIN ) OPEN additiveExpression CLOSE -> ^( AGGREGATE[$op] additiveExpression ) | COUNT OPEN (s= STAR | p= aggregateDistinctAll ) CLOSE -> {s == null}? ^( COUNT $p) -> ^( COUNT ^( ROW_STAR[\"*\"] ) ) | collectionExpr ) int alt90 = 3; switch ( input.LA(1) ) { case AVG: case MAX: case MIN: case SUM: { alt90 = 1; } break; case COUNT: { alt90 = 2; } break; case ELEMENTS: case INDICES: { alt90 = 3; } break; default: NoViableAltException nvae_d90s0 = new NoViableAltException("", 90, 0, input); throw nvae_d90s0; } switch (alt90) { case 1 : // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:576:4: (op= SUM | op= AVG | op= MAX | op= MIN ) OPEN additiveExpression CLOSE { // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:576:4: (op= SUM | op= AVG | op= MAX | op= MIN ) int alt88 = 4; switch ( input.LA(1) ) { case SUM: { alt88 = 1; } break; case AVG: { alt88 = 2; } break; case MAX: { alt88 = 3; } break; case MIN: { alt88 = 4; } break; default: NoViableAltException nvae_d88s0 = new NoViableAltException("", 88, 0, input); throw nvae_d88s0; } switch (alt88) { case 1 : // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:576:6: op= SUM { op=(IToken)Match(input,SUM,FOLLOW_SUM_in_aggregate3022); stream_SUM.Add(op); } break; case 2 : // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:576:15: op= AVG { op=(IToken)Match(input,AVG,FOLLOW_AVG_in_aggregate3028); stream_AVG.Add(op); } break; case 3 : // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:576:24: op= MAX { op=(IToken)Match(input,MAX,FOLLOW_MAX_in_aggregate3034); stream_MAX.Add(op); } break; case 4 : // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:576:33: op= MIN { op=(IToken)Match(input,MIN,FOLLOW_MIN_in_aggregate3040); stream_MIN.Add(op); } break; } OPEN251=(IToken)Match(input,OPEN,FOLLOW_OPEN_in_aggregate3044); stream_OPEN.Add(OPEN251); PushFollow(FOLLOW_additiveExpression_in_aggregate3046); additiveExpression252 = additiveExpression(); state.followingStackPointer--; stream_additiveExpression.Add(additiveExpression252.Tree); CLOSE253=(IToken)Match(input,CLOSE,FOLLOW_CLOSE_in_aggregate3048); stream_CLOSE.Add(CLOSE253); // AST REWRITE // elements: additiveExpression // token labels: // rule labels: retval // token list labels: // rule list labels: // wildcard labels: retval.Tree = root_0; RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null); root_0 = (IASTNode)adaptor.GetNilNode(); // 577:3: -> ^( AGGREGATE[$op] additiveExpression ) { // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:577:6: ^( AGGREGATE[$op] additiveExpression ) { IASTNode root_1 = (IASTNode)adaptor.GetNilNode(); root_1 = (IASTNode)adaptor.BecomeRoot((IASTNode)adaptor.Create(AGGREGATE, op), root_1); adaptor.AddChild(root_1, stream_additiveExpression.NextTree()); adaptor.AddChild(root_0, root_1); } } retval.Tree = root_0;retval.Tree = root_0; } break; case 2 : // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:579:5: COUNT OPEN (s= STAR | p= aggregateDistinctAll ) CLOSE { COUNT254=(IToken)Match(input,COUNT,FOLLOW_COUNT_in_aggregate3067); stream_COUNT.Add(COUNT254); OPEN255=(IToken)Match(input,OPEN,FOLLOW_OPEN_in_aggregate3069); stream_OPEN.Add(OPEN255); // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:579:16: (s= STAR | p= aggregateDistinctAll ) int alt89 = 2; int LA89_0 = input.LA(1); if ( (LA89_0 == STAR) ) { alt89 = 1; } else if ( (LA89_0 == ALL || (LA89_0 >= DISTINCT && LA89_0 <= ELEMENTS) || LA89_0 == INDICES || LA89_0 == IDENT) ) { alt89 = 2; } else { NoViableAltException nvae_d89s0 = new NoViableAltException("", 89, 0, input); throw nvae_d89s0; } switch (alt89) { case 1 : // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:579:18: s= STAR { s=(IToken)Match(input,STAR,FOLLOW_STAR_in_aggregate3075); stream_STAR.Add(s); } break; case 2 : // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:579:27: p= aggregateDistinctAll { PushFollow(FOLLOW_aggregateDistinctAll_in_aggregate3081); p = aggregateDistinctAll(); state.followingStackPointer--; stream_aggregateDistinctAll.Add(p.Tree); } break; } CLOSE256=(IToken)Match(input,CLOSE,FOLLOW_CLOSE_in_aggregate3085); stream_CLOSE.Add(CLOSE256); // AST REWRITE // elements: p, COUNT, COUNT // token labels: // rule labels: p, retval // token list labels: // rule list labels: // wildcard labels: retval.Tree = root_0; RewriteRuleSubtreeStream stream_p = new RewriteRuleSubtreeStream(adaptor, "rule p", p!=null ? p.Tree : null); RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null); root_0 = (IASTNode)adaptor.GetNilNode(); // 580:3: -> {s == null}? ^( COUNT $p) if (s == null) { // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:580:19: ^( COUNT $p) { IASTNode root_1 = (IASTNode)adaptor.GetNilNode(); root_1 = (IASTNode)adaptor.BecomeRoot(stream_COUNT.NextNode(), root_1); adaptor.AddChild(root_1, stream_p.NextTree()); adaptor.AddChild(root_0, root_1); } } else // 581:3: -> ^( COUNT ^( ROW_STAR[\"*\"] ) ) { // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:581:6: ^( COUNT ^( ROW_STAR[\"*\"] ) ) { IASTNode root_1 = (IASTNode)adaptor.GetNilNode(); root_1 = (IASTNode)adaptor.BecomeRoot(stream_COUNT.NextNode(), root_1); // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:581:14: ^( ROW_STAR[\"*\"] ) { IASTNode root_2 = (IASTNode)adaptor.GetNilNode(); root_2 = (IASTNode)adaptor.BecomeRoot((IASTNode)adaptor.Create(ROW_STAR, "*"), root_2); adaptor.AddChild(root_1, root_2); } adaptor.AddChild(root_0, root_1); } } retval.Tree = root_0;retval.Tree = root_0; } break; case 3 : // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:582:5: collectionExpr { root_0 = (IASTNode)adaptor.GetNilNode(); PushFollow(FOLLOW_collectionExpr_in_aggregate3117); collectionExpr257 = collectionExpr(); state.followingStackPointer--; adaptor.AddChild(root_0, collectionExpr257.Tree); } break; } retval.Stop = input.LT(-1); retval.Tree = (IASTNode)adaptor.RulePostProcessing(root_0); adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop); } catch (RecognitionException re) { ReportError(re); Recover(input,re); // Conversion of the second argument necessary, but harmless retval.Tree = (IASTNode)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re); } finally { } return retval; }
// $ANTLR start "aggregate" // Hql.g:593:1: aggregate : ( (op= SUM | op= AVG | op= MAX | op= MIN ) OPEN additiveExpression CLOSE -> ^( AGGREGATE[$op] additiveExpression ) | COUNT OPEN (s= STAR | p= aggregateDistinctAll ) CLOSE -> {s == null}? ^( COUNT $p) -> ^( COUNT ^( ROW_STAR[\"*\"] ) ) | collectionExpr ); public HqlParser.aggregate_return aggregate() // throws RecognitionException [1] { HqlParser.aggregate_return retval = new HqlParser.aggregate_return(); retval.Start = input.LT(1); IASTNode root_0 = null; IToken op = null; IToken s = null; IToken OPEN264 = null; IToken CLOSE266 = null; IToken COUNT267 = null; IToken OPEN268 = null; IToken CLOSE269 = null; HqlParser.aggregateDistinctAll_return p = default(HqlParser.aggregateDistinctAll_return); HqlParser.additiveExpression_return additiveExpression265 = default(HqlParser.additiveExpression_return); HqlParser.collectionExpr_return collectionExpr270 = default(HqlParser.collectionExpr_return); IASTNode op_tree=null; IASTNode s_tree=null; IASTNode OPEN264_tree=null; IASTNode CLOSE266_tree=null; IASTNode COUNT267_tree=null; IASTNode OPEN268_tree=null; IASTNode CLOSE269_tree=null; RewriteRuleTokenStream stream_OPEN = new RewriteRuleTokenStream(adaptor,"token OPEN"); RewriteRuleTokenStream stream_MAX = new RewriteRuleTokenStream(adaptor,"token MAX"); RewriteRuleTokenStream stream_COUNT = new RewriteRuleTokenStream(adaptor,"token COUNT"); RewriteRuleTokenStream stream_STAR = new RewriteRuleTokenStream(adaptor,"token STAR"); RewriteRuleTokenStream stream_MIN = new RewriteRuleTokenStream(adaptor,"token MIN"); RewriteRuleTokenStream stream_CLOSE = new RewriteRuleTokenStream(adaptor,"token CLOSE"); RewriteRuleTokenStream stream_SUM = new RewriteRuleTokenStream(adaptor,"token SUM"); RewriteRuleTokenStream stream_AVG = new RewriteRuleTokenStream(adaptor,"token AVG"); RewriteRuleSubtreeStream stream_aggregateDistinctAll = new RewriteRuleSubtreeStream(adaptor,"rule aggregateDistinctAll"); RewriteRuleSubtreeStream stream_additiveExpression = new RewriteRuleSubtreeStream(adaptor,"rule additiveExpression"); try { // Hql.g:594:2: ( (op= SUM | op= AVG | op= MAX | op= MIN ) OPEN additiveExpression CLOSE -> ^( AGGREGATE[$op] additiveExpression ) | COUNT OPEN (s= STAR | p= aggregateDistinctAll ) CLOSE -> {s == null}? ^( COUNT $p) -> ^( COUNT ^( ROW_STAR[\"*\"] ) ) | collectionExpr ) int alt96 = 3; switch ( input.LA(1) ) { case AVG: case MAX: case MIN: case SUM: { alt96 = 1; } break; case COUNT: { alt96 = 2; } break; case ELEMENTS: case INDICES: { alt96 = 3; } break; default: NoViableAltException nvae_d96s0 = new NoViableAltException("", 96, 0, input); throw nvae_d96s0; } switch (alt96) { case 1 : // Hql.g:594:4: (op= SUM | op= AVG | op= MAX | op= MIN ) OPEN additiveExpression CLOSE { // Hql.g:594:4: (op= SUM | op= AVG | op= MAX | op= MIN ) int alt94 = 4; switch ( input.LA(1) ) { case SUM: { alt94 = 1; } break; case AVG: { alt94 = 2; } break; case MAX: { alt94 = 3; } break; case MIN: { alt94 = 4; } break; default: NoViableAltException nvae_d94s0 = new NoViableAltException("", 94, 0, input); throw nvae_d94s0; } switch (alt94) { case 1 : // Hql.g:594:6: op= SUM { op=(IToken)Match(input,SUM,FOLLOW_SUM_in_aggregate3121); stream_SUM.Add(op); } break; case 2 : // Hql.g:594:15: op= AVG { op=(IToken)Match(input,AVG,FOLLOW_AVG_in_aggregate3127); stream_AVG.Add(op); } break; case 3 : // Hql.g:594:24: op= MAX { op=(IToken)Match(input,MAX,FOLLOW_MAX_in_aggregate3133); stream_MAX.Add(op); } break; case 4 : // Hql.g:594:33: op= MIN { op=(IToken)Match(input,MIN,FOLLOW_MIN_in_aggregate3139); stream_MIN.Add(op); } break; } OPEN264=(IToken)Match(input,OPEN,FOLLOW_OPEN_in_aggregate3143); stream_OPEN.Add(OPEN264); PushFollow(FOLLOW_additiveExpression_in_aggregate3145); additiveExpression265 = additiveExpression(); state.followingStackPointer--; stream_additiveExpression.Add(additiveExpression265.Tree); CLOSE266=(IToken)Match(input,CLOSE,FOLLOW_CLOSE_in_aggregate3147); stream_CLOSE.Add(CLOSE266); // AST REWRITE // elements: additiveExpression // token labels: // rule labels: retval // token list labels: // rule list labels: // wildcard labels: retval.Tree = root_0; RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null); root_0 = (IASTNode)adaptor.GetNilNode(); // 595:3: -> ^( AGGREGATE[$op] additiveExpression ) { // Hql.g:595:6: ^( AGGREGATE[$op] additiveExpression ) { IASTNode root_1 = (IASTNode)adaptor.GetNilNode(); root_1 = (IASTNode)adaptor.BecomeRoot((IASTNode)adaptor.Create(AGGREGATE, op), root_1); adaptor.AddChild(root_1, stream_additiveExpression.NextTree()); adaptor.AddChild(root_0, root_1); } } retval.Tree = root_0;retval.Tree = root_0; } break; case 2 : // Hql.g:597:5: COUNT OPEN (s= STAR | p= aggregateDistinctAll ) CLOSE { COUNT267=(IToken)Match(input,COUNT,FOLLOW_COUNT_in_aggregate3166); stream_COUNT.Add(COUNT267); OPEN268=(IToken)Match(input,OPEN,FOLLOW_OPEN_in_aggregate3168); stream_OPEN.Add(OPEN268); // Hql.g:597:16: (s= STAR | p= aggregateDistinctAll ) int alt95 = 2; int LA95_0 = input.LA(1); if ( (LA95_0 == STAR) ) { alt95 = 1; } else if ( (LA95_0 == ALL || (LA95_0 >= DISTINCT && LA95_0 <= ELEMENTS) || LA95_0 == INDICES || LA95_0 == IDENT) ) { alt95 = 2; } else { NoViableAltException nvae_d95s0 = new NoViableAltException("", 95, 0, input); throw nvae_d95s0; } switch (alt95) { case 1 : // Hql.g:597:18: s= STAR { s=(IToken)Match(input,STAR,FOLLOW_STAR_in_aggregate3174); stream_STAR.Add(s); } break; case 2 : // Hql.g:597:27: p= aggregateDistinctAll { PushFollow(FOLLOW_aggregateDistinctAll_in_aggregate3180); p = aggregateDistinctAll(); state.followingStackPointer--; stream_aggregateDistinctAll.Add(p.Tree); } break; } CLOSE269=(IToken)Match(input,CLOSE,FOLLOW_CLOSE_in_aggregate3184); stream_CLOSE.Add(CLOSE269); // AST REWRITE // elements: COUNT, COUNT, p // token labels: // rule labels: retval, p // token list labels: // rule list labels: // wildcard labels: retval.Tree = root_0; RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null); RewriteRuleSubtreeStream stream_p = new RewriteRuleSubtreeStream(adaptor, "rule p", p!=null ? p.Tree : null); root_0 = (IASTNode)adaptor.GetNilNode(); // 598:3: -> {s == null}? ^( COUNT $p) if (s == null) { // Hql.g:598:19: ^( COUNT $p) { IASTNode root_1 = (IASTNode)adaptor.GetNilNode(); root_1 = (IASTNode)adaptor.BecomeRoot(stream_COUNT.NextNode(), root_1); adaptor.AddChild(root_1, stream_p.NextTree()); adaptor.AddChild(root_0, root_1); } } else // 599:3: -> ^( COUNT ^( ROW_STAR[\"*\"] ) ) { // Hql.g:599:6: ^( COUNT ^( ROW_STAR[\"*\"] ) ) { IASTNode root_1 = (IASTNode)adaptor.GetNilNode(); root_1 = (IASTNode)adaptor.BecomeRoot(stream_COUNT.NextNode(), root_1); // Hql.g:599:14: ^( ROW_STAR[\"*\"] ) { IASTNode root_2 = (IASTNode)adaptor.GetNilNode(); root_2 = (IASTNode)adaptor.BecomeRoot((IASTNode)adaptor.Create(ROW_STAR, "*"), root_2); adaptor.AddChild(root_1, root_2); } adaptor.AddChild(root_0, root_1); } } retval.Tree = root_0;retval.Tree = root_0; } break; case 3 : // Hql.g:600:5: collectionExpr { root_0 = (IASTNode)adaptor.GetNilNode(); PushFollow(FOLLOW_collectionExpr_in_aggregate3216); collectionExpr270 = collectionExpr(); state.followingStackPointer--; adaptor.AddChild(root_0, collectionExpr270.Tree); } break; } retval.Stop = input.LT(-1); retval.Tree = (IASTNode)adaptor.RulePostProcessing(root_0); adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop); } catch (RecognitionException re) { ReportError(re); Recover(input,re); // Conversion of the second argument necessary, but harmless retval.Tree = (IASTNode)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re); } finally { } return retval; }