public final void mTimeUnit() throws RecognitionException {
		try {
			int _type = TimeUnit;
			int _channel = DEFAULT_TOKEN_CHANNEL;
			// HiveLexer.g:423:5: ( ( Digit )+ ( DOT ( Digit )* )? '(' ( 'd' | 'h' | 'm' | 's' | 'D' | 'H' | 'M' | 'S' ) ')' )
			// HiveLexer.g:424:5: ( Digit )+ ( DOT ( Digit )* )? '(' ( 'd' | 'h' | 'm' | 's' | 'D' | 'H' | 'M' | 'S' ) ')'
			{
			// HiveLexer.g:424:5: ( Digit )+
			int cnt97=0;
			loop97:
			while (true) {
				int alt97=2;
				int LA97_0 = input.LA(1);
				if ( ((LA97_0 >= '0' && LA97_0 <= '9')) ) {
					alt97=1;
				}

				switch (alt97) {
				case 1 :
					// HiveLexer.g:
					{
					if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
						input.consume();
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						recover(mse);
						throw mse;
					}
					}
					break;

				default :
					if ( cnt97 >= 1 ) break loop97;
					EarlyExitException eee = new EarlyExitException(97, input);
					throw eee;
				}
				cnt97++;
			}

			// HiveLexer.g:424:14: ( DOT ( Digit )* )?
			int alt99=2;
			int LA99_0 = input.LA(1);
			if ( (LA99_0=='.') ) {
				alt99=1;
			}
			switch (alt99) {
				case 1 :
					// HiveLexer.g:424:15: DOT ( Digit )*
					{
					mDOT(); 

					// HiveLexer.g:424:19: ( Digit )*
					loop98:
					while (true) {
						int alt98=2;
						int LA98_0 = input.LA(1);
						if ( ((LA98_0 >= '0' && LA98_0 <= '9')) ) {
							alt98=1;
						}

						switch (alt98) {
						case 1 :
							// HiveLexer.g:
							{
							if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
								input.consume();
							}
							else {
								MismatchedSetException mse = new MismatchedSetException(null,input);
								recover(mse);
								throw mse;
							}
							}
							break;

						default :
							break loop98;
						}
					}

					}
					break;

			}

			match('('); 
			if ( input.LA(1)=='D'||input.LA(1)=='H'||input.LA(1)=='M'||input.LA(1)=='S'||input.LA(1)=='d'||input.LA(1)=='h'||input.LA(1)=='m'||input.LA(1)=='s' ) {
				input.consume();
			}
			else {
				MismatchedSetException mse = new MismatchedSetException(null,input);
				recover(mse);
				throw mse;
			}
			match(')'); 
			}

			state.type = _type;
			state.channel = _channel;
		}
		finally {
			// do for sure before leaving
		}
	}