docs: public final EObject ruleRichString() throws RecognitionException {
          EObject current = null;
  
          EObject lv_expressions_1_0 = null;
  
          EObject lv_expressions_2_0 = null;
  
          EObject lv_expressions_3_0 = null;
  
          EObject lv_expressions_4_0 = null;
  
          EObject lv_expressions_5_0 = null;
  
          EObject lv_expressions_6_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:10680:2: ( ( () ( ( (lv_expressions_1_0= ruleRichStringLiteral ) ) | ( ( (lv_expressions_2_0= ruleRichStringLiteralStart ) ) ( (lv_expressions_3_0= ruleRichStringPart ) )? ( ( (lv_expressions_4_0= ruleRichStringLiteralInbetween ) ) ( (lv_expressions_5_0= ruleRichStringPart ) )? )* ( (lv_expressions_6_0= ruleRichStringLiteralEnd ) ) ) ) ) )
              // InternalSARL.g:10681:2: ( () ( ( (lv_expressions_1_0= ruleRichStringLiteral ) ) | ( ( (lv_expressions_2_0= ruleRichStringLiteralStart ) ) ( (lv_expressions_3_0= ruleRichStringPart ) )? ( ( (lv_expressions_4_0= ruleRichStringLiteralInbetween ) ) ( (lv_expressions_5_0= ruleRichStringPart ) )? )* ( (lv_expressions_6_0= ruleRichStringLiteralEnd ) ) ) ) )
              {
              // InternalSARL.g:10681:2: ( () ( ( (lv_expressions_1_0= ruleRichStringLiteral ) ) | ( ( (lv_expressions_2_0= ruleRichStringLiteralStart ) ) ( (lv_expressions_3_0= ruleRichStringPart ) )? ( ( (lv_expressions_4_0= ruleRichStringLiteralInbetween ) ) ( (lv_expressions_5_0= ruleRichStringPart ) )? )* ( (lv_expressions_6_0= ruleRichStringLiteralEnd ) ) ) ) )
              // InternalSARL.g:10682:3: () ( ( (lv_expressions_1_0= ruleRichStringLiteral ) ) | ( ( (lv_expressions_2_0= ruleRichStringLiteralStart ) ) ( (lv_expressions_3_0= ruleRichStringPart ) )? ( ( (lv_expressions_4_0= ruleRichStringLiteralInbetween ) ) ( (lv_expressions_5_0= ruleRichStringPart ) )? )* ( (lv_expressions_6_0= ruleRichStringLiteralEnd ) ) ) )
              {
              // InternalSARL.g:10682:3: ()
              // InternalSARL.g:10683:4: 
              {
              if ( state.backtracking==0 ) {
  
                				current = forceCreateModelElement(
                					grammarAccess.getRichStringAccess().getRichStringAction_0(),
                					current);
                			
              }
  
              }
  
              // InternalSARL.g:10689:3: ( ( (lv_expressions_1_0= ruleRichStringLiteral ) ) | ( ( (lv_expressions_2_0= ruleRichStringLiteralStart ) ) ( (lv_expressions_3_0= ruleRichStringPart ) )? ( ( (lv_expressions_4_0= ruleRichStringLiteralInbetween ) ) ( (lv_expressions_5_0= ruleRichStringPart ) )? )* ( (lv_expressions_6_0= ruleRichStringLiteralEnd ) ) ) )
              int alt275=2;
              int LA275_0 = input.LA(1);
  
              if ( (LA275_0==RULE_RICH_TEXT) ) {
                  alt275=1;
              }
              else if ( (LA275_0==RULE_RICH_TEXT_START) ) {
                  alt275=2;
              }
              else {
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 275, 0, input);
  
                  throw nvae;
              }
              switch (alt275) {
                  case 1 :
                      // InternalSARL.g:10690:4: ( (lv_expressions_1_0= ruleRichStringLiteral ) )
                      {
                      // InternalSARL.g:10690:4: ( (lv_expressions_1_0= ruleRichStringLiteral ) )
                      // InternalSARL.g:10691:5: (lv_expressions_1_0= ruleRichStringLiteral )
                      {
                      // InternalSARL.g:10691:5: (lv_expressions_1_0= ruleRichStringLiteral )
                      // InternalSARL.g:10692:6: lv_expressions_1_0= ruleRichStringLiteral
                      {
                      if ( state.backtracking==0 ) {
  
                        						newCompositeNode(grammarAccess.getRichStringAccess().getExpressionsRichStringLiteralParserRuleCall_1_0_0());
                        					
                      }
                      pushFollow(FOLLOW_2);
                      lv_expressions_1_0=ruleRichStringLiteral();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElementForParent(grammarAccess.getRichStringRule());
                        						}
                        						add(
                        							current,
                        							"expressions",
                        							lv_expressions_1_0,
                        							"org.eclipse.xtend.core.Xtend.RichStringLiteral");
                        						afterParserOrEnumRuleCall();
                        					
                      }
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:10710:4: ( ( (lv_expressions_2_0= ruleRichStringLiteralStart ) ) ( (lv_expressions_3_0= ruleRichStringPart ) )? ( ( (lv_expressions_4_0= ruleRichStringLiteralInbetween ) ) ( (lv_expressions_5_0= ruleRichStringPart ) )? )* ( (lv_expressions_6_0= ruleRichStringLiteralEnd ) ) )
                      {
                      // InternalSARL.g:10710:4: ( ( (lv_expressions_2_0= ruleRichStringLiteralStart ) ) ( (lv_expressions_3_0= ruleRichStringPart ) )? ( ( (lv_expressions_4_0= ruleRichStringLiteralInbetween ) ) ( (lv_expressions_5_0= ruleRichStringPart ) )? )* ( (lv_expressions_6_0= ruleRichStringLiteralEnd ) ) )
                      // InternalSARL.g:10711:5: ( (lv_expressions_2_0= ruleRichStringLiteralStart ) ) ( (lv_expressions_3_0= ruleRichStringPart ) )? ( ( (lv_expressions_4_0= ruleRichStringLiteralInbetween ) ) ( (lv_expressions_5_0= ruleRichStringPart ) )? )* ( (lv_expressions_6_0= ruleRichStringLiteralEnd ) )
                      {
                      // InternalSARL.g:10711:5: ( (lv_expressions_2_0= ruleRichStringLiteralStart ) )
                      // InternalSARL.g:10712:6: (lv_expressions_2_0= ruleRichStringLiteralStart )
                      {
                      // InternalSARL.g:10712:6: (lv_expressions_2_0= ruleRichStringLiteralStart )
                      // InternalSARL.g:10713:7: lv_expressions_2_0= ruleRichStringLiteralStart
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getRichStringAccess().getExpressionsRichStringLiteralStartParserRuleCall_1_1_0_0());
                        						
                      }
                      pushFollow(FOLLOW_101);
                      lv_expressions_2_0=ruleRichStringLiteralStart();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getRichStringRule());
                        							}
                        							add(
                        								current,
                        								"expressions",
                        								lv_expressions_2_0,
                        								"org.eclipse.xtend.core.Xtend.RichStringLiteralStart");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:10730:5: ( (lv_expressions_3_0= ruleRichStringPart ) )?
                      int alt272=2;
                      int LA272_0 = input.LA(1);
  
                      if ( ((LA272_0>=RULE_STRING && LA272_0<=RULE_RICH_TEXT_START)||(LA272_0>=RULE_HEX && LA272_0<=RULE_DECIMAL)||LA272_0==25||(LA272_0>=28 && LA272_0<=29)||LA272_0==36||(LA272_0>=39 && LA272_0<=40)||(LA272_0>=42 && LA272_0<=45)||(LA272_0>=48 && LA272_0<=49)||LA272_0==51||LA272_0==55||(LA272_0>=60 && LA272_0<=63)||(LA272_0>=65 && LA272_0<=68)||(LA272_0>=73 && LA272_0<=75)||(LA272_0>=78 && LA272_0<=96)||LA272_0==99||LA272_0==101||LA272_0==106||LA272_0==129||(LA272_0>=131 && LA272_0<=140)) ) {
                          alt272=1;
                      }
                      switch (alt272) {
                          case 1 :
                              // InternalSARL.g:10731:6: (lv_expressions_3_0= ruleRichStringPart )
                              {
                              // InternalSARL.g:10731:6: (lv_expressions_3_0= ruleRichStringPart )
                              // InternalSARL.g:10732:7: lv_expressions_3_0= ruleRichStringPart
                              {
                              if ( state.backtracking==0 ) {
  
                                							newCompositeNode(grammarAccess.getRichStringAccess().getExpressionsRichStringPartParserRuleCall_1_1_1_0());
                                						
                              }
                              pushFollow(FOLLOW_101);
                              lv_expressions_3_0=ruleRichStringPart();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                							if (current==null) {
                                								current = createModelElementForParent(grammarAccess.getRichStringRule());
                                							}
                                							add(
                                								current,
                                								"expressions",
                                								lv_expressions_3_0,
                                								"org.eclipse.xtend.core.Xtend.RichStringPart");
                                							afterParserOrEnumRuleCall();
                                						
                              }
  
                              }
  
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:10749:5: ( ( (lv_expressions_4_0= ruleRichStringLiteralInbetween ) ) ( (lv_expressions_5_0= ruleRichStringPart ) )? )*
                      loop274:
                      do {
                          int alt274=2;
                          int LA274_0 = input.LA(1);
  
                          if ( ((LA274_0>=RULE_RICH_TEXT_INBETWEEN && LA274_0<=RULE_COMMENT_RICH_TEXT_INBETWEEN)) ) {
                              alt274=1;
                          }
  
  
                          switch (alt274) {
                      	case 1 :
                      	    // InternalSARL.g:10750:6: ( (lv_expressions_4_0= ruleRichStringLiteralInbetween ) ) ( (lv_expressions_5_0= ruleRichStringPart ) )?
                      	    {
                      	    // InternalSARL.g:10750:6: ( (lv_expressions_4_0= ruleRichStringLiteralInbetween ) )
                      	    // InternalSARL.g:10751:7: (lv_expressions_4_0= ruleRichStringLiteralInbetween )
                      	    {
                      	    // InternalSARL.g:10751:7: (lv_expressions_4_0= ruleRichStringLiteralInbetween )
                      	    // InternalSARL.g:10752:8: lv_expressions_4_0= ruleRichStringLiteralInbetween
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      								newCompositeNode(grammarAccess.getRichStringAccess().getExpressionsRichStringLiteralInbetweenParserRuleCall_1_1_2_0_0());
                      	      							
                      	    }
                      	    pushFollow(FOLLOW_101);
                      	    lv_expressions_4_0=ruleRichStringLiteralInbetween();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      								if (current==null) {
                      	      									current = createModelElementForParent(grammarAccess.getRichStringRule());
                      	      								}
                      	      								add(
                      	      									current,
                      	      									"expressions",
                      	      									lv_expressions_4_0,
                      	      									"org.eclipse.xtend.core.Xtend.RichStringLiteralInbetween");
                      	      								afterParserOrEnumRuleCall();
                      	      							
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:10769:6: ( (lv_expressions_5_0= ruleRichStringPart ) )?
                      	    int alt273=2;
                      	    int LA273_0 = input.LA(1);
  
                      	    if ( ((LA273_0>=RULE_STRING && LA273_0<=RULE_RICH_TEXT_START)||(LA273_0>=RULE_HEX && LA273_0<=RULE_DECIMAL)||LA273_0==25||(LA273_0>=28 && LA273_0<=29)||LA273_0==36||(LA273_0>=39 && LA273_0<=40)||(LA273_0>=42 && LA273_0<=45)||(LA273_0>=48 && LA273_0<=49)||LA273_0==51||LA273_0==55||(LA273_0>=60 && LA273_0<=63)||(LA273_0>=65 && LA273_0<=68)||(LA273_0>=73 && LA273_0<=75)||(LA273_0>=78 && LA273_0<=96)||LA273_0==99||LA273_0==101||LA273_0==106||LA273_0==129||(LA273_0>=131 && LA273_0<=140)) ) {
                      	        alt273=1;
                      	    }
                      	    switch (alt273) {
                      	        case 1 :
                      	            // InternalSARL.g:10770:7: (lv_expressions_5_0= ruleRichStringPart )
                      	            {
                      	            // InternalSARL.g:10770:7: (lv_expressions_5_0= ruleRichStringPart )
                      	            // InternalSARL.g:10771:8: lv_expressions_5_0= ruleRichStringPart
                      	            {
                      	            if ( state.backtracking==0 ) {
  
                      	              								newCompositeNode(grammarAccess.getRichStringAccess().getExpressionsRichStringPartParserRuleCall_1_1_2_1_0());
                      	              							
                      	            }
                      	            pushFollow(FOLLOW_101);
                      	            lv_expressions_5_0=ruleRichStringPart();
  
                      	            state._fsp--;
                      	            if (state.failed) return current;
                      	            if ( state.backtracking==0 ) {
  
                      	              								if (current==null) {
                      	              									current = createModelElementForParent(grammarAccess.getRichStringRule());
                      	              								}
                      	              								add(
                      	              									current,
                      	              									"expressions",
                      	              									lv_expressions_5_0,
                      	              									"org.eclipse.xtend.core.Xtend.RichStringPart");
                      	              								afterParserOrEnumRuleCall();
                      	              							
                      	            }
  
                      	            }
  
  
                      	            }
                      	            break;
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop274;
                          }
                      } while (true);
  
                      // InternalSARL.g:10789:5: ( (lv_expressions_6_0= ruleRichStringLiteralEnd ) )
                      // InternalSARL.g:10790:6: (lv_expressions_6_0= ruleRichStringLiteralEnd )
                      {
                      // InternalSARL.g:10790:6: (lv_expressions_6_0= ruleRichStringLiteralEnd )
                      // InternalSARL.g:10791:7: lv_expressions_6_0= ruleRichStringLiteralEnd
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getRichStringAccess().getExpressionsRichStringLiteralEndParserRuleCall_1_1_3_0());
                        						
                      }
                      pushFollow(FOLLOW_2);
                      lv_expressions_6_0=ruleRichStringLiteralEnd();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getRichStringRule());
                        							}
                        							add(
                        								current,
                        								"expressions",
                        								lv_expressions_6_0,
                        								"org.eclipse.xtend.core.Xtend.RichStringLiteralEnd");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }