docs: public final EObject ruleRichStringElseIf() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_0=null;
          EObject lv_if_1_0 = null;
  
          EObject lv_then_2_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:11463:2: ( (otherlv_0= 'ELSEIF' ( (lv_if_1_0= ruleXExpression ) ) ( (lv_then_2_0= ruleInternalRichString ) ) ) )
              // InternalSARL.g:11464:2: (otherlv_0= 'ELSEIF' ( (lv_if_1_0= ruleXExpression ) ) ( (lv_then_2_0= ruleInternalRichString ) ) )
              {
              // InternalSARL.g:11464:2: (otherlv_0= 'ELSEIF' ( (lv_if_1_0= ruleXExpression ) ) ( (lv_then_2_0= ruleInternalRichString ) ) )
              // InternalSARL.g:11465:3: otherlv_0= 'ELSEIF' ( (lv_if_1_0= ruleXExpression ) ) ( (lv_then_2_0= ruleInternalRichString ) )
              {
              otherlv_0=(Token)match(input,104,FOLLOW_45); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			newLeafNode(otherlv_0, grammarAccess.getRichStringElseIfAccess().getELSEIFKeyword_0());
                		
              }
              // InternalSARL.g:11469:3: ( (lv_if_1_0= ruleXExpression ) )
              // InternalSARL.g:11470:4: (lv_if_1_0= ruleXExpression )
              {
              // InternalSARL.g:11470:4: (lv_if_1_0= ruleXExpression )
              // InternalSARL.g:11471:5: lv_if_1_0= ruleXExpression
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getRichStringElseIfAccess().getIfXExpressionParserRuleCall_1_0());
                				
              }
              pushFollow(FOLLOW_104);
              lv_if_1_0=ruleXExpression();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getRichStringElseIfRule());
                					}
                					set(
                						current,
                						"if",
                						lv_if_1_0,
                						"org.eclipse.xtext.xbase.Xbase.XExpression");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              // InternalSARL.g:11488:3: ( (lv_then_2_0= ruleInternalRichString ) )
              // InternalSARL.g:11489:4: (lv_then_2_0= ruleInternalRichString )
              {
              // InternalSARL.g:11489:4: (lv_then_2_0= ruleInternalRichString )
              // InternalSARL.g:11490:5: lv_then_2_0= ruleInternalRichString
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getRichStringElseIfAccess().getThenInternalRichStringParserRuleCall_2_0());
                				
              }
              pushFollow(FOLLOW_2);
              lv_then_2_0=ruleInternalRichString();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getRichStringElseIfRule());
                					}
                					set(
                						current,
                						"then",
                						lv_then_2_0,
                						"org.eclipse.xtend.core.Xtend.InternalRichString");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }