public final void mRULE_COMMENT_RICH_TEXT_END() throws RecognitionException {
        try {
            int _type = RULE_COMMENT_RICH_TEXT_END;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // InternalSARL.g:48779:28: ( '\\uFFFD\\uFFFD' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' ( RULE_IN_RICH_STRING )* ( '\\'\\'\\'' | ( '\\'' ( '\\'' )? )? EOF ) | EOF ) )
            // InternalSARL.g:48779:30: '\\uFFFD\\uFFFD' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' ( RULE_IN_RICH_STRING )* ( '\\'\\'\\'' | ( '\\'' ( '\\'' )? )? EOF ) | EOF )
            {
            match("\uFFFD\uFFFD"); 

            // InternalSARL.g:48779:45: (~ ( ( '\\n' | '\\r' ) ) )*
            loop28:
            do {
                int alt28=2;
                int LA28_0 = input.LA(1);

                if ( ((LA28_0>='\u0000' && LA28_0<='\t')||(LA28_0>='\u000B' && LA28_0<='\f')||(LA28_0>='\u000E' && LA28_0<='\uFFFF')) ) {
                    alt28=1;
                }


                switch (alt28) {
            	case 1 :
            	    // InternalSARL.g:48779:45: ~ ( ( '\\n' | '\\r' ) )
            	    {
            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
            	        input.consume();

            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        recover(mse);
            	        throw mse;}


            	    }
            	    break;

            	default :
            	    break loop28;
                }
            } while (true);

            // InternalSARL.g:48779:61: ( ( '\\r' )? '\\n' ( RULE_IN_RICH_STRING )* ( '\\'\\'\\'' | ( '\\'' ( '\\'' )? )? EOF ) | EOF )
            int alt34=2;
            int LA34_0 = input.LA(1);

            if ( (LA34_0=='\n'||LA34_0=='\r') ) {
                alt34=1;
            }
            else {
                alt34=2;}
            switch (alt34) {
                case 1 :
                    // InternalSARL.g:48779:62: ( '\\r' )? '\\n' ( RULE_IN_RICH_STRING )* ( '\\'\\'\\'' | ( '\\'' ( '\\'' )? )? EOF )
                    {
                    // InternalSARL.g:48779:62: ( '\\r' )?
                    int alt29=2;
                    int LA29_0 = input.LA(1);

                    if ( (LA29_0=='\r') ) {
                        alt29=1;
                    }
                    switch (alt29) {
                        case 1 :
                            // InternalSARL.g:48779:62: '\\r'
                            {
                            match('\r'); 

                            }
                            break;

                    }

                    match('\n'); 
                    // InternalSARL.g:48779:73: ( RULE_IN_RICH_STRING )*
                    loop30:
                    do {
                        int alt30=2;
                        int LA30_0 = input.LA(1);

                        if ( (LA30_0=='\'') ) {
                            int LA30_1 = input.LA(2);

                            if ( (LA30_1=='\'') ) {
                                int LA30_4 = input.LA(3);

                                if ( ((LA30_4>='\u0000' && LA30_4<='&')||(LA30_4>='(' && LA30_4<='\uFFFC')||(LA30_4>='\uFFFE' && LA30_4<='\uFFFF')) ) {
                                    alt30=1;
                                }


                            }
                            else if ( ((LA30_1>='\u0000' && LA30_1<='&')||(LA30_1>='(' && LA30_1<='\uFFFC')||(LA30_1>='\uFFFE' && LA30_1<='\uFFFF')) ) {
                                alt30=1;
                            }


                        }
                        else if ( ((LA30_0>='\u0000' && LA30_0<='&')||(LA30_0>='(' && LA30_0<='\uFFFC')||(LA30_0>='\uFFFE' && LA30_0<='\uFFFF')) ) {
                            alt30=1;
                        }


                        switch (alt30) {
                    	case 1 :
                    	    // InternalSARL.g:48779:73: RULE_IN_RICH_STRING
                    	    {
                    	    mRULE_IN_RICH_STRING(); 

                    	    }
                    	    break;

                    	default :
                    	    break loop30;
                        }
                    } while (true);

                    // InternalSARL.g:48779:94: ( '\\'\\'\\'' | ( '\\'' ( '\\'' )? )? EOF )
                    int alt33=2;
                    int LA33_0 = input.LA(1);

                    if ( (LA33_0=='\'') ) {
                        int LA33_1 = input.LA(2);

                        if ( (LA33_1=='\'') ) {
                            int LA33_3 = input.LA(3);

                            if ( (LA33_3=='\'') ) {
                                alt33=1;
                            }
                            else {
                                alt33=2;}
                        }
                        else {
                            alt33=2;}
                    }
                    else {
                        alt33=2;}
                    switch (alt33) {
                        case 1 :
                            // InternalSARL.g:48779:95: '\\'\\'\\''
                            {
                            match("'''"); 


                            }
                            break;
                        case 2 :
                            // InternalSARL.g:48779:104: ( '\\'' ( '\\'' )? )? EOF
                            {
                            // InternalSARL.g:48779:104: ( '\\'' ( '\\'' )? )?
                            int alt32=2;
                            int LA32_0 = input.LA(1);

                            if ( (LA32_0=='\'') ) {
                                alt32=1;
                            }
                            switch (alt32) {
                                case 1 :
                                    // InternalSARL.g:48779:105: '\\'' ( '\\'' )?
                                    {
                                    match('\''); 
                                    // InternalSARL.g:48779:110: ( '\\'' )?
                                    int alt31=2;
                                    int LA31_0 = input.LA(1);

                                    if ( (LA31_0=='\'') ) {
                                        alt31=1;
                                    }
                                    switch (alt31) {
                                        case 1 :
                                            // InternalSARL.g:48779:110: '\\''
                                            {
                                            match('\''); 

                                            }
                                            break;

                                    }


                                    }
                                    break;

                            }

                            match(EOF); 

                            }
                            break;

                    }


                    }
                    break;
                case 2 :
                    // InternalSARL.g:48779:123: EOF
                    {
                    match(EOF); 

                    }
                    break;

            }


            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
public final void mRULE_COMMENT_RICH_TEXT_END ( ) throws RecognitionException { try { int _type = RULE_COMMENT_RICH_TEXT_END ; int _channel = DEFAULT_TOKEN_CHANNEL ; { match ( "��" ) ; loop28 : do { int alt28 = 2 ; int LA28_0 = input . LA ( 1 ) ; if ( ( ( LA28_0 >= '' && LA28_0 <= '\t' ) || ( LA28_0 >= '' && LA28_0 <= '\f' ) || ( LA28_0 >= '' && LA28_0 <= '' ) ) ) { alt28 = 1 ; } switch ( alt28 ) { case 1 : { if ( ( input . LA ( 1 ) >= '' && input . LA ( 1 ) <= '\t' ) || ( input . LA ( 1 ) >= '' && input . LA ( 1 ) <= '\f' ) || ( input . LA ( 1 ) >= '' && input . LA ( 1 ) <= '' ) ) { input . consume ( ) ; } else { MismatchedSetException mse = new MismatchedSetException ( null , input ) ; recover ( mse ) ; throw mse ; } } break ; default : break loop28 ; } } while ( true ) ; int alt34 = 2 ; int LA34_0 = input . LA ( 1 ) ; if ( ( LA34_0 == '\n' || LA34_0 == '\r' ) ) { alt34 = 1 ; } else { alt34 = 2 ; } switch ( alt34 ) { case 1 : { int alt29 = 2 ; int LA29_0 = input . LA ( 1 ) ; if ( ( LA29_0 == '\r' ) ) { alt29 = 1 ; } switch ( alt29 ) { case 1 : { match ( '\r' ) ; } break ; } match ( '\n' ) ; loop30 : do { int alt30 = 2 ; int LA30_0 = input . LA ( 1 ) ; if ( ( LA30_0 == '\'' ) ) { int LA30_1 = input . LA ( 2 ) ; if ( ( LA30_1 == '\'' ) ) { int LA30_4 = input . LA ( 3 ) ; if ( ( ( LA30_4 >= '' && LA30_4 <= '&' ) || ( LA30_4 >= '(' && LA30_4 <= '￼' ) || ( LA30_4 >= '' && LA30_4 <= '' ) ) ) { alt30 = 1 ; } } else if ( ( ( LA30_1 >= '' && LA30_1 <= '&' ) || ( LA30_1 >= '(' && LA30_1 <= '￼' ) || ( LA30_1 >= '' && LA30_1 <= '' ) ) ) { alt30 = 1 ; } } else if ( ( ( LA30_0 >= '' && LA30_0 <= '&' ) || ( LA30_0 >= '(' && LA30_0 <= '￼' ) || ( LA30_0 >= '' && LA30_0 <= '' ) ) ) { alt30 = 1 ; } switch ( alt30 ) { case 1 : { mRULE_IN_RICH_STRING ( ) ; } break ; default : break loop30 ; } } while ( true ) ; int alt33 = 2 ; int LA33_0 = input . LA ( 1 ) ; if ( ( LA33_0 == '\'' ) ) { int LA33_1 = input . LA ( 2 ) ; if ( ( LA33_1 == '\'' ) ) { int LA33_3 = input . LA ( 3 ) ; if ( ( LA33_3 == '\'' ) ) { alt33 = 1 ; } else { alt33 = 2 ; } } else { alt33 = 2 ; } } else { alt33 = 2 ; } switch ( alt33 ) { case 1 : { match ( "'''" ) ; } break ; case 2 : { int alt32 = 2 ; int LA32_0 = input . LA ( 1 ) ; if ( ( LA32_0 == '\'' ) ) { alt32 = 1 ; } switch ( alt32 ) { case 1 : { match ( '\'' ) ; int alt31 = 2 ; int LA31_0 = input . LA ( 1 ) ; if ( ( LA31_0 == '\'' ) ) { alt31 = 1 ; } switch ( alt31 ) { case 1 : { match ( '\'' ) ; } break ; } } break ; } match ( EOF ) ; } break ; } } break ; case 2 : { match ( EOF ) ; } break ; } } state . type = _type ; state . channel = _channel ; } finally { } }
$ANTLR start "RULE_COMMENT_RICH_TEXT_END"