public final void mIdentifier() throws RecognitionException {
		try {
			int _type = Identifier;
			int _channel = DEFAULT_TOKEN_CHANNEL;
			// HiveLexer.g:428:5: ( ( Letter | Digit ) ( Letter | Digit | '_' )* | '`' ( RegexComponent )+ '`' )
			int alt102=2;
			int LA102_0 = input.LA(1);
			if ( ((LA102_0 >= '0' && LA102_0 <= '9')||(LA102_0 >= 'A' && LA102_0 <= 'Z')||(LA102_0 >= 'a' && LA102_0 <= 'z')) ) {
				alt102=1;
			}
			else if ( (LA102_0=='`') ) {
				alt102=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 102, 0, input);
				throw nvae;
			}

			switch (alt102) {
				case 1 :
					// HiveLexer.g:429:5: ( Letter | Digit ) ( Letter | Digit | '_' )*
					{
					if ( (input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
						input.consume();
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						recover(mse);
						throw mse;
					}
					// HiveLexer.g:429:22: ( Letter | Digit | '_' )*
					loop100:
					while (true) {
						int alt100=2;
						int LA100_0 = input.LA(1);
						if ( ((LA100_0 >= '0' && LA100_0 <= '9')||(LA100_0 >= 'A' && LA100_0 <= 'Z')||LA100_0=='_'||(LA100_0 >= 'a' && LA100_0 <= 'z')) ) {
							alt100=1;
						}

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

						default :
							break loop100;
						}
					}

					}
					break;
				case 2 :
					// HiveLexer.g:430:7: '`' ( RegexComponent )+ '`'
					{
					match('`'); 
					// HiveLexer.g:430:11: ( RegexComponent )+
					int cnt101=0;
					loop101:
					while (true) {
						int alt101=2;
						int LA101_0 = input.LA(1);
						if ( (LA101_0=='$'||(LA101_0 >= '(' && LA101_0 <= '+')||(LA101_0 >= '-' && LA101_0 <= '.')||(LA101_0 >= '0' && LA101_0 <= '9')||LA101_0=='?'||(LA101_0 >= 'A' && LA101_0 <= '[')||(LA101_0 >= ']' && LA101_0 <= '_')||(LA101_0 >= 'a' && LA101_0 <= '}')) ) {
							alt101=1;
						}

						switch (alt101) {
						case 1 :
							// HiveLexer.g:
							{
							if ( input.LA(1)=='$'||(input.LA(1) >= '(' && input.LA(1) <= '+')||(input.LA(1) >= '-' && input.LA(1) <= '.')||(input.LA(1) >= '0' && input.LA(1) <= '9')||input.LA(1)=='?'||(input.LA(1) >= 'A' && input.LA(1) <= '[')||(input.LA(1) >= ']' && input.LA(1) <= '_')||(input.LA(1) >= 'a' && input.LA(1) <= '}') ) {
								input.consume();
							}
							else {
								MismatchedSetException mse = new MismatchedSetException(null,input);
								recover(mse);
								throw mse;
							}
							}
							break;

						default :
							if ( cnt101 >= 1 ) break loop101;
							EarlyExitException eee = new EarlyExitException(101, input);
							throw eee;
						}
						cnt101++;
					}

					match('`'); 
					}
					break;

			}
			state.type = _type;
			state.channel = _channel;
		}