docs: public final EObject ruleRichStringPart() throws RecognitionException {
          EObject current = null;
  
          EObject this_XExpressionOrVarDeclaration_0 = null;
  
          EObject this_RichStringForLoop_1 = null;
  
          EObject this_RichStringIf_2 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:11132:2: ( (this_XExpressionOrVarDeclaration_0= ruleXExpressionOrVarDeclaration | this_RichStringForLoop_1= ruleRichStringForLoop | this_RichStringIf_2= ruleRichStringIf ) )
              // InternalSARL.g:11133:2: (this_XExpressionOrVarDeclaration_0= ruleXExpressionOrVarDeclaration | this_RichStringForLoop_1= ruleRichStringForLoop | this_RichStringIf_2= ruleRichStringIf )
              {
              // InternalSARL.g:11133:2: (this_XExpressionOrVarDeclaration_0= ruleXExpressionOrVarDeclaration | this_RichStringForLoop_1= ruleRichStringForLoop | this_RichStringIf_2= ruleRichStringIf )
              int alt280=3;
              switch ( input.LA(1) ) {
              case RULE_STRING:
              case RULE_ID:
              case RULE_RICH_TEXT:
              case RULE_RICH_TEXT_START:
              case RULE_HEX:
              case RULE_INT:
              case RULE_DECIMAL:
              case 25:
              case 28:
              case 29:
              case 36:
              case 39:
              case 40:
              case 42:
              case 43:
              case 44:
              case 45:
              case 48:
              case 49:
              case 51:
              case 55:
              case 60:
              case 61:
              case 62:
              case 63:
              case 65:
              case 66:
              case 67:
              case 68:
              case 73:
              case 74:
              case 75:
              case 78:
              case 79:
              case 80:
              case 81:
              case 82:
              case 83:
              case 84:
              case 85:
              case 86:
              case 87:
              case 88:
              case 89:
              case 90:
              case 91:
              case 92:
              case 93:
              case 94:
              case 95:
              case 96:
              case 106:
              case 129:
              case 131:
              case 132:
              case 133:
              case 134:
              case 135:
              case 136:
              case 137:
              case 138:
              case 139:
              case 140:
                  {
                  alt280=1;
                  }
                  break;
              case 99:
                  {
                  alt280=2;
                  }
                  break;
              case 101:
                  {
                  alt280=3;
                  }
                  break;
              default:
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 280, 0, input);
  
                  throw nvae;
              }
  
              switch (alt280) {
                  case 1 :
                      // InternalSARL.g:11134:3: this_XExpressionOrVarDeclaration_0= ruleXExpressionOrVarDeclaration
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getRichStringPartAccess().getXExpressionOrVarDeclarationParserRuleCall_0());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XExpressionOrVarDeclaration_0=ruleXExpressionOrVarDeclaration();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XExpressionOrVarDeclaration_0;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:11143:3: this_RichStringForLoop_1= ruleRichStringForLoop
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getRichStringPartAccess().getRichStringForLoopParserRuleCall_1());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_RichStringForLoop_1=ruleRichStringForLoop();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_RichStringForLoop_1;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 3 :
                      // InternalSARL.g:11152:3: this_RichStringIf_2= ruleRichStringIf
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getRichStringPartAccess().getRichStringIfParserRuleCall_2());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_RichStringIf_2=ruleRichStringIf();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_RichStringIf_2;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }