docs: public final EObject ruleXUnaryOperation() throws RecognitionException {
          EObject current = null;
  
          EObject lv_operand_2_0 = null;
  
          EObject this_XPostfixOperation_3 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:8986:2: ( ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) ) | this_XPostfixOperation_3= ruleXPostfixOperation ) )
              // InternalSARL.g:8987:2: ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) ) | this_XPostfixOperation_3= ruleXPostfixOperation )
              {
              // InternalSARL.g:8987:2: ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) ) | this_XPostfixOperation_3= ruleXPostfixOperation )
              int alt238=2;
              int LA238_0 = input.LA(1);
  
              if ( ((LA238_0>=73 && LA238_0<=75)) ) {
                  alt238=1;
              }
              else if ( ((LA238_0>=RULE_STRING && LA238_0<=RULE_RICH_TEXT_START)||(LA238_0>=RULE_HEX && LA238_0<=RULE_DECIMAL)||LA238_0==25||(LA238_0>=28 && LA238_0<=29)||LA238_0==36||(LA238_0>=39 && LA238_0<=40)||(LA238_0>=42 && LA238_0<=45)||(LA238_0>=48 && LA238_0<=49)||LA238_0==51||LA238_0==55||(LA238_0>=60 && LA238_0<=63)||(LA238_0>=67 && LA238_0<=68)||(LA238_0>=78 && LA238_0<=96)||LA238_0==106||LA238_0==129||(LA238_0>=131 && LA238_0<=140)) ) {
                  alt238=2;
              }
              else {
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 238, 0, input);
  
                  throw nvae;
              }
              switch (alt238) {
                  case 1 :
                      // InternalSARL.g:8988:3: ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) )
                      {
                      // InternalSARL.g:8988:3: ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) )
                      // InternalSARL.g:8989:4: () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) )
                      {
                      // InternalSARL.g:8989:4: ()
                      // InternalSARL.g:8990:5: 
                      {
                      if ( state.backtracking==0 ) {
  
                        					current = forceCreateModelElement(
                        						grammarAccess.getXUnaryOperationAccess().getXUnaryOperationAction_0_0(),
                        						current);
                        				
                      }
  
                      }
  
                      // InternalSARL.g:8996:4: ( ( ruleOpUnary ) )
                      // InternalSARL.g:8997:5: ( ruleOpUnary )
                      {
                      // InternalSARL.g:8997:5: ( ruleOpUnary )
                      // InternalSARL.g:8998:6: ruleOpUnary
                      {
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElement(grammarAccess.getXUnaryOperationRule());
                        						}
                        					
                      }
                      if ( state.backtracking==0 ) {
  
                        						newCompositeNode(grammarAccess.getXUnaryOperationAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0());
                        					
                      }
                      pushFollow(FOLLOW_45);
                      ruleOpUnary();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						afterParserOrEnumRuleCall();
                        					
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:9012:4: ( (lv_operand_2_0= ruleXUnaryOperation ) )
                      // InternalSARL.g:9013:5: (lv_operand_2_0= ruleXUnaryOperation )
                      {
                      // InternalSARL.g:9013:5: (lv_operand_2_0= ruleXUnaryOperation )
                      // InternalSARL.g:9014:6: lv_operand_2_0= ruleXUnaryOperation
                      {
                      if ( state.backtracking==0 ) {
  
                        						newCompositeNode(grammarAccess.getXUnaryOperationAccess().getOperandXUnaryOperationParserRuleCall_0_2_0());
                        					
                      }
                      pushFollow(FOLLOW_2);
                      lv_operand_2_0=ruleXUnaryOperation();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElementForParent(grammarAccess.getXUnaryOperationRule());
                        						}
                        						set(
                        							current,
                        							"operand",
                        							lv_operand_2_0,
                        							"io.sarl.lang.SARL.XUnaryOperation");
                        						afterParserOrEnumRuleCall();
                        					
                      }
  
                      }
  
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:9033:3: this_XPostfixOperation_3= ruleXPostfixOperation
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXUnaryOperationAccess().getXPostfixOperationParserRuleCall_1());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XPostfixOperation_3=ruleXPostfixOperation();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XPostfixOperation_3;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }