docs: public final EObject ruleXAnnotationOrExpression() throws RecognitionException {
          EObject current = null;
  
          EObject this_XAnnotation_0 = null;
  
          EObject this_XExpression_1 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:11988:2: ( (this_XAnnotation_0= ruleXAnnotation | this_XExpression_1= ruleXExpression ) )
              // InternalSARL.g:11989:2: (this_XAnnotation_0= ruleXAnnotation | this_XExpression_1= ruleXExpression )
              {
              // InternalSARL.g:11989:2: (this_XAnnotation_0= ruleXAnnotation | this_XExpression_1= ruleXExpression )
              int alt297=2;
              int LA297_0 = input.LA(1);
  
              if ( (LA297_0==105) ) {
                  alt297=1;
              }
              else if ( ((LA297_0>=RULE_STRING && LA297_0<=RULE_RICH_TEXT_START)||(LA297_0>=RULE_HEX && LA297_0<=RULE_DECIMAL)||LA297_0==25||(LA297_0>=28 && LA297_0<=29)||LA297_0==36||(LA297_0>=39 && LA297_0<=40)||(LA297_0>=42 && LA297_0<=45)||(LA297_0>=48 && LA297_0<=49)||LA297_0==51||LA297_0==55||(LA297_0>=60 && LA297_0<=63)||(LA297_0>=67 && LA297_0<=68)||(LA297_0>=73 && LA297_0<=75)||(LA297_0>=78 && LA297_0<=96)||LA297_0==106||LA297_0==129||(LA297_0>=131 && LA297_0<=140)) ) {
                  alt297=2;
              }
              else {
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 297, 0, input);
  
                  throw nvae;
              }
              switch (alt297) {
                  case 1 :
                      // InternalSARL.g:11990:3: this_XAnnotation_0= ruleXAnnotation
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXAnnotationOrExpressionAccess().getXAnnotationParserRuleCall_0());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XAnnotation_0=ruleXAnnotation();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XAnnotation_0;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:11999:3: this_XExpression_1= ruleXExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXAnnotationOrExpressionAccess().getXExpressionParserRuleCall_1());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XExpression_1=ruleXExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XExpression_1;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }