docs: public final void mSTRING() throws RecognitionException {
  		try {
  			int _type = STRING;
  			int _channel = DEFAULT_TOKEN_CHANNEL;
  			// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:108:5: ( ( '\"' ( EscapeSequence |~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence |~ ( '\\\\' | '\\'' ) )* '\\'' ) )
  			int alt22=2;
  			int LA22_0 = input.LA(1);
  			if ( (LA22_0=='\"') ) {
  				alt22=1;
  			}
  			else if ( (LA22_0=='\'') ) {
  				alt22=2;
  			}
  
  			else {
  				if (state.backtracking>0) {state.failed=true; return;}
  				NoViableAltException nvae =
  					new NoViableAltException("", 22, 0, input);
  				throw nvae;
  			}
  
  			switch (alt22) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:108:8: ( '\"' ( EscapeSequence |~ ( '\\\\' | '\"' ) )* '\"' )
  					{
  					// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:108:8: ( '\"' ( EscapeSequence |~ ( '\\\\' | '\"' ) )* '\"' )
  					// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:108:9: '\"' ( EscapeSequence |~ ( '\\\\' | '\"' ) )* '\"'
  					{
  					match('\"'); if (state.failed) return;
  					// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:108:13: ( EscapeSequence |~ ( '\\\\' | '\"' ) )*
  					loop20:
  					while (true) {
  						int alt20=3;
  						int LA20_0 = input.LA(1);
  						if ( (LA20_0=='\\') ) {
  							alt20=1;
  						}
  						else if ( ((LA20_0 >= '\u0000' && LA20_0 <= '!')||(LA20_0 >= '#' && LA20_0 <= '[')||(LA20_0 >= ']' && LA20_0 <= '\uFFFF')) ) {
  							alt20=2;
  						}
  
  						switch (alt20) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:108:15: EscapeSequence
  							{
  							mEscapeSequence(); if (state.failed) return;
  
  							}
  							break;
  						case 2 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:108:32: ~ ( '\\\\' | '\"' )
  							{
  							if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '!')||(input.LA(1) >= '#' && input.LA(1) <= '[')||(input.LA(1) >= ']' && input.LA(1) <= '\uFFFF') ) {
  								input.consume();
  								state.failed=false;
  							}
  							else {
  								if (state.backtracking>0) {state.failed=true; return;}
  								MismatchedSetException mse = new MismatchedSetException(null,input);
  								recover(mse);
  								throw mse;
  							}
  							}
  							break;
  
  						default :
  							break loop20;
  						}
  					}
  
  					match('\"'); if (state.failed) return;
  					}
  
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:109:8: ( '\\'' ( EscapeSequence |~ ( '\\\\' | '\\'' ) )* '\\'' )
  					{
  					// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:109:8: ( '\\'' ( EscapeSequence |~ ( '\\\\' | '\\'' ) )* '\\'' )
  					// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:109:9: '\\'' ( EscapeSequence |~ ( '\\\\' | '\\'' ) )* '\\''
  					{
  					match('\''); if (state.failed) return;
  					// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:109:14: ( EscapeSequence |~ ( '\\\\' | '\\'' ) )*
  					loop21:
  					while (true) {
  						int alt21=3;
  						int LA21_0 = input.LA(1);
  						if ( (LA21_0=='\\') ) {
  							alt21=1;
  						}
  						else if ( ((LA21_0 >= '\u0000' && LA21_0 <= '&')||(LA21_0 >= '(' && LA21_0 <= '[')||(LA21_0 >= ']' && LA21_0 <= '\uFFFF')) ) {
  							alt21=2;
  						}
  
  						switch (alt21) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:109:16: EscapeSequence
  							{
  							mEscapeSequence(); if (state.failed) return;
  
  							}
  							break;
  						case 2 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Lexer.g:109:33: ~ ( '\\\\' | '\\'' )
  							{
  							if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '&')||(input.LA(1) >= '(' && input.LA(1) <= '[')||(input.LA(1) >= ']' && input.LA(1) <= '\uFFFF') ) {
  								input.consume();
  								state.failed=false;
  							}
  							else {
  								if (state.backtracking>0) {state.failed=true; return;}
  								MismatchedSetException mse = new MismatchedSetException(null,input);
  								recover(mse);
  								throw mse;
  							}
  							}
  							break;
  
  						default :
  							break loop21;
  						}
  					}
  
  					match('\''); if (state.failed) return;
  					}
  
  					if ( state.backtracking==0 ) { setText( normalizeString( getText() ) ); }
  					}
  					break;
  
  			}
  			state.type = _type;
  			state.channel = _channel;
  		}
  		finally {
  			// do for sure before leaving
  		}
  	}