docs: public final EObject ruleInternalRichString() throws RecognitionException {
          EObject current = null;
  
          EObject lv_expressions_1_0 = null;
  
          EObject lv_expressions_2_0 = null;
  
          EObject lv_expressions_3_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:11045:2: ( ( () ( ( (lv_expressions_1_0= ruleRichStringLiteralInbetween ) ) ( ( (lv_expressions_2_0= ruleRichStringPart ) )? ( (lv_expressions_3_0= ruleRichStringLiteralInbetween ) ) )* ) ) )
              // InternalSARL.g:11046:2: ( () ( ( (lv_expressions_1_0= ruleRichStringLiteralInbetween ) ) ( ( (lv_expressions_2_0= ruleRichStringPart ) )? ( (lv_expressions_3_0= ruleRichStringLiteralInbetween ) ) )* ) )
              {
              // InternalSARL.g:11046:2: ( () ( ( (lv_expressions_1_0= ruleRichStringLiteralInbetween ) ) ( ( (lv_expressions_2_0= ruleRichStringPart ) )? ( (lv_expressions_3_0= ruleRichStringLiteralInbetween ) ) )* ) )
              // InternalSARL.g:11047:3: () ( ( (lv_expressions_1_0= ruleRichStringLiteralInbetween ) ) ( ( (lv_expressions_2_0= ruleRichStringPart ) )? ( (lv_expressions_3_0= ruleRichStringLiteralInbetween ) ) )* )
              {
              // InternalSARL.g:11047:3: ()
              // InternalSARL.g:11048:4: 
              {
              if ( state.backtracking==0 ) {
  
                				current = forceCreateModelElement(
                					grammarAccess.getInternalRichStringAccess().getRichStringAction_0(),
                					current);
                			
              }
  
              }
  
              // InternalSARL.g:11054:3: ( ( (lv_expressions_1_0= ruleRichStringLiteralInbetween ) ) ( ( (lv_expressions_2_0= ruleRichStringPart ) )? ( (lv_expressions_3_0= ruleRichStringLiteralInbetween ) ) )* )
              // InternalSARL.g:11055:4: ( (lv_expressions_1_0= ruleRichStringLiteralInbetween ) ) ( ( (lv_expressions_2_0= ruleRichStringPart ) )? ( (lv_expressions_3_0= ruleRichStringLiteralInbetween ) ) )*
              {
              // InternalSARL.g:11055:4: ( (lv_expressions_1_0= ruleRichStringLiteralInbetween ) )
              // InternalSARL.g:11056:5: (lv_expressions_1_0= ruleRichStringLiteralInbetween )
              {
              // InternalSARL.g:11056:5: (lv_expressions_1_0= ruleRichStringLiteralInbetween )
              // InternalSARL.g:11057:6: lv_expressions_1_0= ruleRichStringLiteralInbetween
              {
              if ( state.backtracking==0 ) {
  
                						newCompositeNode(grammarAccess.getInternalRichStringAccess().getExpressionsRichStringLiteralInbetweenParserRuleCall_1_0_0());
                					
              }
              pushFollow(FOLLOW_102);
              lv_expressions_1_0=ruleRichStringLiteralInbetween();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                						if (current==null) {
                							current = createModelElementForParent(grammarAccess.getInternalRichStringRule());
                						}
                						add(
                							current,
                							"expressions",
                							lv_expressions_1_0,
                							"org.eclipse.xtend.core.Xtend.RichStringLiteralInbetween");
                						afterParserOrEnumRuleCall();
                					
              }
  
              }
  
  
              }
  
              // InternalSARL.g:11074:4: ( ( (lv_expressions_2_0= ruleRichStringPart ) )? ( (lv_expressions_3_0= ruleRichStringLiteralInbetween ) ) )*
              loop279:
              do {
                  int alt279=2;
                  int LA279_0 = input.LA(1);
  
                  if ( ((LA279_0>=RULE_STRING && LA279_0<=RULE_COMMENT_RICH_TEXT_INBETWEEN)||(LA279_0>=RULE_HEX && LA279_0<=RULE_DECIMAL)||LA279_0==25||(LA279_0>=28 && LA279_0<=29)||LA279_0==36||(LA279_0>=39 && LA279_0<=40)||(LA279_0>=42 && LA279_0<=45)||(LA279_0>=48 && LA279_0<=49)||LA279_0==51||LA279_0==55||(LA279_0>=60 && LA279_0<=63)||(LA279_0>=65 && LA279_0<=68)||(LA279_0>=73 && LA279_0<=75)||(LA279_0>=78 && LA279_0<=96)||LA279_0==99||LA279_0==101||LA279_0==106||LA279_0==129||(LA279_0>=131 && LA279_0<=140)) ) {
                      alt279=1;
                  }
  
  
                  switch (alt279) {
              	case 1 :
              	    // InternalSARL.g:11075:5: ( (lv_expressions_2_0= ruleRichStringPart ) )? ( (lv_expressions_3_0= ruleRichStringLiteralInbetween ) )
              	    {
              	    // InternalSARL.g:11075:5: ( (lv_expressions_2_0= ruleRichStringPart ) )?
              	    int alt278=2;
              	    int LA278_0 = input.LA(1);
  
              	    if ( ((LA278_0>=RULE_STRING && LA278_0<=RULE_RICH_TEXT_START)||(LA278_0>=RULE_HEX && LA278_0<=RULE_DECIMAL)||LA278_0==25||(LA278_0>=28 && LA278_0<=29)||LA278_0==36||(LA278_0>=39 && LA278_0<=40)||(LA278_0>=42 && LA278_0<=45)||(LA278_0>=48 && LA278_0<=49)||LA278_0==51||LA278_0==55||(LA278_0>=60 && LA278_0<=63)||(LA278_0>=65 && LA278_0<=68)||(LA278_0>=73 && LA278_0<=75)||(LA278_0>=78 && LA278_0<=96)||LA278_0==99||LA278_0==101||LA278_0==106||LA278_0==129||(LA278_0>=131 && LA278_0<=140)) ) {
              	        alt278=1;
              	    }
              	    switch (alt278) {
              	        case 1 :
              	            // InternalSARL.g:11076:6: (lv_expressions_2_0= ruleRichStringPart )
              	            {
              	            // InternalSARL.g:11076:6: (lv_expressions_2_0= ruleRichStringPart )
              	            // InternalSARL.g:11077:7: lv_expressions_2_0= ruleRichStringPart
              	            {
              	            if ( state.backtracking==0 ) {
  
              	              							newCompositeNode(grammarAccess.getInternalRichStringAccess().getExpressionsRichStringPartParserRuleCall_1_1_0_0());
              	              						
              	            }
              	            pushFollow(FOLLOW_103);
              	            lv_expressions_2_0=ruleRichStringPart();
  
              	            state._fsp--;
              	            if (state.failed) return current;
              	            if ( state.backtracking==0 ) {
  
              	              							if (current==null) {
              	              								current = createModelElementForParent(grammarAccess.getInternalRichStringRule());
              	              							}
              	              							add(
              	              								current,
              	              								"expressions",
              	              								lv_expressions_2_0,
              	              								"org.eclipse.xtend.core.Xtend.RichStringPart");
              	              							afterParserOrEnumRuleCall();
              	              						
              	            }
  
              	            }
  
  
              	            }
              	            break;
  
              	    }
  
              	    // InternalSARL.g:11094:5: ( (lv_expressions_3_0= ruleRichStringLiteralInbetween ) )
              	    // InternalSARL.g:11095:6: (lv_expressions_3_0= ruleRichStringLiteralInbetween )
              	    {
              	    // InternalSARL.g:11095:6: (lv_expressions_3_0= ruleRichStringLiteralInbetween )
              	    // InternalSARL.g:11096:7: lv_expressions_3_0= ruleRichStringLiteralInbetween
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      							newCompositeNode(grammarAccess.getInternalRichStringAccess().getExpressionsRichStringLiteralInbetweenParserRuleCall_1_1_1_0());
              	      						
              	    }
              	    pushFollow(FOLLOW_102);
              	    lv_expressions_3_0=ruleRichStringLiteralInbetween();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      							if (current==null) {
              	      								current = createModelElementForParent(grammarAccess.getInternalRichStringRule());
              	      							}
              	      							add(
              	      								current,
              	      								"expressions",
              	      								lv_expressions_3_0,
              	      								"org.eclipse.xtend.core.Xtend.RichStringLiteralInbetween");
              	      							afterParserOrEnumRuleCall();
              	      						
              	    }
  
              	    }
  
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop279;
                  }
              } while (true);
  
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }