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

		CommonTree root_0 = null;

		Token hour=null;
		Token minute=null;
		Token second=null;
		Token COLON86=null;
		Token COLON87=null;

		CommonTree hour_tree=null;
		CommonTree minute_tree=null;
		CommonTree second_tree=null;
		CommonTree COLON86_tree=null;
		CommonTree COLON87_tree=null;
		RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
		RewriteRuleTokenStream stream_Number=new RewriteRuleTokenStream(adaptor,"token Number");

		 gParent.msgs.push("explicit_time"); 
		try {
			// SelectClauseParser.g:234:2: (hour= Number COLON minute= Number ( COLON second= Number )? -> ^( TOK_TIME $hour $minute ( $second)? ) )
			// SelectClauseParser.g:234:4: hour= Number COLON minute= Number ( COLON second= Number )?
			{
			hour=(Token)match(input,Number,FOLLOW_Number_in_explicit_time1592);  
			stream_Number.add(hour);

			COLON86=(Token)match(input,COLON,FOLLOW_COLON_in_explicit_time1594);  
			stream_COLON.add(COLON86);

			minute=(Token)match(input,Number,FOLLOW_Number_in_explicit_time1598);  
			stream_Number.add(minute);

			// SelectClauseParser.g:234:36: ( COLON second= Number )?
			int alt31=2;
			int LA31_0 = input.LA(1);
			if ( (LA31_0==COLON) ) {
				alt31=1;
			}
			switch (alt31) {
				case 1 :
					// SelectClauseParser.g:234:37: COLON second= Number
					{
					COLON87=(Token)match(input,COLON,FOLLOW_COLON_in_explicit_time1601);  
					stream_COLON.add(COLON87);

					second=(Token)match(input,Number,FOLLOW_Number_in_explicit_time1605);  
					stream_Number.add(second);

					}
					break;

			}

			// AST REWRITE
			// elements: minute, second, hour
			// token labels: minute, second, hour
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleTokenStream stream_minute=new RewriteRuleTokenStream(adaptor,"token minute",minute);
			RewriteRuleTokenStream stream_second=new RewriteRuleTokenStream(adaptor,"token second",second);
			RewriteRuleTokenStream stream_hour=new RewriteRuleTokenStream(adaptor,"token hour",hour);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (CommonTree)adaptor.nil();
			// 235:7: -> ^( TOK_TIME $hour $minute ( $second)? )
			{
				// SelectClauseParser.g:235:10: ^( TOK_TIME $hour $minute ( $second)? )
				{
				CommonTree root_1 = (CommonTree)adaptor.nil();
				root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TOK_TIME, "TOK_TIME"), root_1);
				adaptor.addChild(root_1, stream_hour.nextNode());
				adaptor.addChild(root_1, stream_minute.nextNode());
				// SelectClauseParser.g:235:36: ( $second)?
				if ( stream_second.hasNext() ) {
					adaptor.addChild(root_1, stream_second.nextNode());
				}
				stream_second.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;
	}