public final HiveParser_SelectClauseParser.selectItem_return selectItem() throws RecognitionException {
		HiveParser_SelectClauseParser.selectItem_return retval = new HiveParser_SelectClauseParser.selectItem_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token KW_AS44=null;
		Token KW_AS46=null;
		Token LPAREN47=null;
		Token COMMA49=null;
		Token RPAREN51=null;
		ParserRuleReturnScope selectExpression43 =null;
		ParserRuleReturnScope identifier45 =null;
		ParserRuleReturnScope identifier48 =null;
		ParserRuleReturnScope identifier50 =null;

		CommonTree KW_AS44_tree=null;
		CommonTree KW_AS46_tree=null;
		CommonTree LPAREN47_tree=null;
		CommonTree COMMA49_tree=null;
		CommonTree RPAREN51_tree=null;
		RewriteRuleTokenStream stream_KW_AS=new RewriteRuleTokenStream(adaptor,"token KW_AS");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleSubtreeStream stream_selectExpression=new RewriteRuleSubtreeStream(adaptor,"rule selectExpression");
		RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier");

		 gParent.msgs.push("selection target"); 
		try {
			// SelectClauseParser.g:132:5: ( ( selectExpression ( ( ( KW_AS )? identifier ) | ( KW_AS LPAREN identifier ( COMMA identifier )* RPAREN ) )? ) -> ^( TOK_SELEXPR selectExpression ( identifier )* ) )
			// SelectClauseParser.g:133:5: ( selectExpression ( ( ( KW_AS )? identifier ) | ( KW_AS LPAREN identifier ( COMMA identifier )* RPAREN ) )? )
			{
			// SelectClauseParser.g:133:5: ( selectExpression ( ( ( KW_AS )? identifier ) | ( KW_AS LPAREN identifier ( COMMA identifier )* RPAREN ) )? )
			// SelectClauseParser.g:133:7: selectExpression ( ( ( KW_AS )? identifier ) | ( KW_AS LPAREN identifier ( COMMA identifier )* RPAREN ) )?
			{
			pushFollow(FOLLOW_selectExpression_in_selectItem722);
			selectExpression43=selectExpression();
			state._fsp--;

			stream_selectExpression.add(selectExpression43.getTree());
			// SelectClauseParser.g:134:7: ( ( ( KW_AS )? identifier ) | ( KW_AS LPAREN identifier ( COMMA identifier )* RPAREN ) )?
			int alt16=3;
			alt16 = dfa16.predict(input);
			switch (alt16) {
				case 1 :
					// SelectClauseParser.g:134:8: ( ( KW_AS )? identifier )
					{
					// SelectClauseParser.g:134:8: ( ( KW_AS )? identifier )
					// SelectClauseParser.g:134:9: ( KW_AS )? identifier
					{
					// SelectClauseParser.g:134:9: ( KW_AS )?
					int alt14=2;
					alt14 = dfa14.predict(input);
					switch (alt14) {
						case 1 :
							// SelectClauseParser.g:134:9: KW_AS
							{
							KW_AS44=(Token)match(input,KW_AS,FOLLOW_KW_AS_in_selectItem732);  
							stream_KW_AS.add(KW_AS44);

							}
							break;

					}

					pushFollow(FOLLOW_identifier_in_selectItem735);
					identifier45=gHiveParser.identifier();
					state._fsp--;

					stream_identifier.add(identifier45.getTree());
					}

					}
					break;
				case 2 :
					// SelectClauseParser.g:134:30: ( KW_AS LPAREN identifier ( COMMA identifier )* RPAREN )
					{
					// SelectClauseParser.g:134:30: ( KW_AS LPAREN identifier ( COMMA identifier )* RPAREN )
					// SelectClauseParser.g:134:31: KW_AS LPAREN identifier ( COMMA identifier )* RPAREN
					{
					KW_AS46=(Token)match(input,KW_AS,FOLLOW_KW_AS_in_selectItem741);  
					stream_KW_AS.add(KW_AS46);

					LPAREN47=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_selectItem743);  
					stream_LPAREN.add(LPAREN47);

					pushFollow(FOLLOW_identifier_in_selectItem745);
					identifier48=gHiveParser.identifier();
					state._fsp--;

					stream_identifier.add(identifier48.getTree());
					// SelectClauseParser.g:134:55: ( COMMA identifier )*
					loop15:
					while (true) {
						int alt15=2;
						int LA15_0 = input.LA(1);
						if ( (LA15_0==COMMA) ) {
							alt15=1;
						}

						switch (alt15) {
						case 1 :
							// SelectClauseParser.g:134:56: COMMA identifier
							{
							COMMA49=(Token)match(input,COMMA,FOLLOW_COMMA_in_selectItem748);  
							stream_COMMA.add(COMMA49);

							pushFollow(FOLLOW_identifier_in_selectItem750);
							identifier50=gHiveParser.identifier();
							state._fsp--;

							stream_identifier.add(identifier50.getTree());
							}
							break;

						default :
							break loop15;
						}
					}

					RPAREN51=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_selectItem754);  
					stream_RPAREN.add(RPAREN51);

					}

					}
					break;

			}

			}

			// AST REWRITE
			// elements: selectExpression, identifier
			// 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.getTree():null);

			root_0 = (CommonTree)adaptor.nil();
			// 135:7: -> ^( TOK_SELEXPR selectExpression ( identifier )* )
			{
				// SelectClauseParser.g:135:10: ^( TOK_SELEXPR selectExpression ( identifier )* )
				{
				CommonTree root_1 = (CommonTree)adaptor.nil();
				root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TOK_SELEXPR, "TOK_SELEXPR"), root_1);
				adaptor.addChild(root_1, stream_selectExpression.nextTree());
				// SelectClauseParser.g:135:41: ( identifier )*
				while ( stream_identifier.hasNext() ) {
					adaptor.addChild(root_1, stream_identifier.nextTree());
				}
				stream_identifier.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

			 gParent.msgs.pop(); 
		}

		catch (RecognitionException e) {
		  throw e;
		}

		finally {
			// do for sure before leaving
		}
		return retval;
	}