docs: public final EObject ruleRichStringLiteralEnd() throws RecognitionException {
          EObject current = null;
  
          Token lv_value_1_0=null;
          Token lv_value_2_0=null;
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:10980:2: ( ( () ( ( (lv_value_1_0= RULE_RICH_TEXT_END ) ) | ( (lv_value_2_0= RULE_COMMENT_RICH_TEXT_END ) ) ) ) )
              // InternalSARL.g:10981:2: ( () ( ( (lv_value_1_0= RULE_RICH_TEXT_END ) ) | ( (lv_value_2_0= RULE_COMMENT_RICH_TEXT_END ) ) ) )
              {
              // InternalSARL.g:10981:2: ( () ( ( (lv_value_1_0= RULE_RICH_TEXT_END ) ) | ( (lv_value_2_0= RULE_COMMENT_RICH_TEXT_END ) ) ) )
              // InternalSARL.g:10982:3: () ( ( (lv_value_1_0= RULE_RICH_TEXT_END ) ) | ( (lv_value_2_0= RULE_COMMENT_RICH_TEXT_END ) ) )
              {
              // InternalSARL.g:10982:3: ()
              // InternalSARL.g:10983:4: 
              {
              if ( state.backtracking==0 ) {
  
                				current = forceCreateModelElement(
                					grammarAccess.getRichStringLiteralEndAccess().getRichStringLiteralAction_0(),
                					current);
                			
              }
  
              }
  
              // InternalSARL.g:10989:3: ( ( (lv_value_1_0= RULE_RICH_TEXT_END ) ) | ( (lv_value_2_0= RULE_COMMENT_RICH_TEXT_END ) ) )
              int alt277=2;
              int LA277_0 = input.LA(1);
  
              if ( (LA277_0==RULE_RICH_TEXT_END) ) {
                  alt277=1;
              }
              else if ( (LA277_0==RULE_COMMENT_RICH_TEXT_END) ) {
                  alt277=2;
              }
              else {
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 277, 0, input);
  
                  throw nvae;
              }
              switch (alt277) {
                  case 1 :
                      // InternalSARL.g:10990:4: ( (lv_value_1_0= RULE_RICH_TEXT_END ) )
                      {
                      // InternalSARL.g:10990:4: ( (lv_value_1_0= RULE_RICH_TEXT_END ) )
                      // InternalSARL.g:10991:5: (lv_value_1_0= RULE_RICH_TEXT_END )
                      {
                      // InternalSARL.g:10991:5: (lv_value_1_0= RULE_RICH_TEXT_END )
                      // InternalSARL.g:10992:6: lv_value_1_0= RULE_RICH_TEXT_END
                      {
                      lv_value_1_0=(Token)match(input,RULE_RICH_TEXT_END,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						newLeafNode(lv_value_1_0, grammarAccess.getRichStringLiteralEndAccess().getValueRICH_TEXT_ENDTerminalRuleCall_1_0_0());
                        					
                      }
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElement(grammarAccess.getRichStringLiteralEndRule());
                        						}
                        						setWithLastConsumed(
                        							current,
                        							"value",
                        							lv_value_1_0,
                        							"org.eclipse.xtend.core.Xtend.RICH_TEXT_END");
                        					
                      }
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:11009:4: ( (lv_value_2_0= RULE_COMMENT_RICH_TEXT_END ) )
                      {
                      // InternalSARL.g:11009:4: ( (lv_value_2_0= RULE_COMMENT_RICH_TEXT_END ) )
                      // InternalSARL.g:11010:5: (lv_value_2_0= RULE_COMMENT_RICH_TEXT_END )
                      {
                      // InternalSARL.g:11010:5: (lv_value_2_0= RULE_COMMENT_RICH_TEXT_END )
                      // InternalSARL.g:11011:6: lv_value_2_0= RULE_COMMENT_RICH_TEXT_END
                      {
                      lv_value_2_0=(Token)match(input,RULE_COMMENT_RICH_TEXT_END,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						newLeafNode(lv_value_2_0, grammarAccess.getRichStringLiteralEndAccess().getValueCOMMENT_RICH_TEXT_ENDTerminalRuleCall_1_1_0());
                        					
                      }
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElement(grammarAccess.getRichStringLiteralEndRule());
                        						}
                        						setWithLastConsumed(
                        							current,
                        							"value",
                        							lv_value_2_0,
                        							"org.eclipse.xtend.core.Xtend.COMMENT_RICH_TEXT_END");
                        					
                      }
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }