docs: public final void mJavaLetter() throws RecognitionException {
  		try {
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1379:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '$' | '_' ) |{...}?~ ( '\\u0000' .. '\\u007F' | '\\uD800' .. '\\uDBFF' ) |{...}? ( '\\uD800' .. '\\uDBFF' ) ( '\\uDC00' .. '\\uDFFF' ) )
  			int alt27=3;
  			int LA27_0 = input.LA(1);
  			if ( (LA27_0=='$'||(LA27_0 >= 'A' && LA27_0 <= 'Z')||LA27_0=='_'||(LA27_0 >= 'a' && LA27_0 <= 'z')) ) {
  				alt27=1;
  			}
  			else if ( ((LA27_0 >= '\u0080' && LA27_0 <= '\uD7FF')||(LA27_0 >= '\uDC00' && LA27_0 <= '\uFFFF')) ) {
  				alt27=2;
  			}
  			else if ( ((LA27_0 >= '\uD800' && LA27_0 <= '\uDBFF')) ) {
  				alt27=3;
  			}
  
  			else {
  				NoViableAltException nvae =
  					new NoViableAltException("", 27, 0, input);
  				throw nvae;
  			}
  
  			switch (alt27) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1379:4: ( 'a' .. 'z' | 'A' .. 'Z' | '$' | '_' )
  					{
  					if ( input.LA(1)=='$'||(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;
  				case 2 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1380:6: {...}?~ ( '\\u0000' .. '\\u007F' | '\\uD800' .. '\\uDBFF' )
  					{
  					if ( !((Character.isJavaIdentifierStart(input.LA(1)))) ) {
  						throw new FailedPredicateException(input, "JavaLetter", "Character.isJavaIdentifierStart(input.LA(1))");
  					}
  					if ( (input.LA(1) >= '\u0080' && input.LA(1) <= '\uD7FF')||(input.LA(1) >= '\uDC00' && input.LA(1) <= '\uFFFF') ) {
  						input.consume();
  					}
  					else {
  						MismatchedSetException mse = new MismatchedSetException(null,input);
  						recover(mse);
  						throw mse;
  					}
  					}
  					break;
  				case 3 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1382:9: {...}? ( '\\uD800' .. '\\uDBFF' ) ( '\\uDC00' .. '\\uDFFF' )
  					{
  					if ( !((Character.isJavaIdentifierStart(Character.toCodePoint((char)input.LA(-1), (char)input.LA(1))))) ) {
  						throw new FailedPredicateException(input, "JavaLetter", "Character.isJavaIdentifierStart(Character.toCodePoint((char)input.LA(-1), (char)input.LA(1)))");
  					}
  					if ( (input.LA(1) >= '\uD800' && input.LA(1) <= '\uDBFF') ) {
  						input.consume();
  					}
  					else {
  						MismatchedSetException mse = new MismatchedSetException(null,input);
  						recover(mse);
  						throw mse;
  					}
  					if ( (input.LA(1) >= '\uDC00' && input.LA(1) <= '\uDFFF') ) {
  						input.consume();
  					}
  					else {
  						MismatchedSetException mse = new MismatchedSetException(null,input);
  						recover(mse);
  						throw mse;
  					}
  					}
  					break;
  
  			}
  		}
  		finally {
  			// do for sure before leaving
  		}
  	}