docs: public final EObject ruleXExponentExpression() throws RecognitionException {
          EObject current = null;
  
          EObject this_XUnaryOperation_0 = null;
  
          EObject lv_rightOperand_3_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:8879:2: ( (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpExponent ) ) ) )=> ( () ( ( ruleOpExponent ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* ) )
              // InternalSARL.g:8880:2: (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpExponent ) ) ) )=> ( () ( ( ruleOpExponent ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* )
              {
              // InternalSARL.g:8880:2: (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpExponent ) ) ) )=> ( () ( ( ruleOpExponent ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* )
              // InternalSARL.g:8881:3: this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpExponent ) ) ) )=> ( () ( ( ruleOpExponent ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )*
              {
              if ( state.backtracking==0 ) {
  
                			newCompositeNode(grammarAccess.getXExponentExpressionAccess().getXUnaryOperationParserRuleCall_0());
                		
              }
              pushFollow(FOLLOW_86);
              this_XUnaryOperation_0=ruleXUnaryOperation();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			current = this_XUnaryOperation_0;
                			afterParserOrEnumRuleCall();
                		
              }
              // InternalSARL.g:8889:3: ( ( ( ( () ( ( ruleOpExponent ) ) ) )=> ( () ( ( ruleOpExponent ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )*
              loop237:
              do {
                  int alt237=2;
                  int LA237_0 = input.LA(1);
  
                  if ( (LA237_0==72) ) {
                      int LA237_2 = input.LA(2);
  
                      if ( (synpred14_InternalSARL()) ) {
                          alt237=1;
                      }
  
  
                  }
  
  
                  switch (alt237) {
              	case 1 :
              	    // InternalSARL.g:8890:4: ( ( ( () ( ( ruleOpExponent ) ) ) )=> ( () ( ( ruleOpExponent ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) )
              	    {
              	    // InternalSARL.g:8890:4: ( ( ( () ( ( ruleOpExponent ) ) ) )=> ( () ( ( ruleOpExponent ) ) ) )
              	    // InternalSARL.g:8891:5: ( ( () ( ( ruleOpExponent ) ) ) )=> ( () ( ( ruleOpExponent ) ) )
              	    {
              	    // InternalSARL.g:8901:5: ( () ( ( ruleOpExponent ) ) )
              	    // InternalSARL.g:8902:6: () ( ( ruleOpExponent ) )
              	    {
              	    // InternalSARL.g:8902:6: ()
              	    // InternalSARL.g:8903:7: 
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      							current = forceCreateModelElementAndSet(
              	      								grammarAccess.getXExponentExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
              	      								current);
              	      						
              	    }
  
              	    }
  
              	    // InternalSARL.g:8909:6: ( ( ruleOpExponent ) )
              	    // InternalSARL.g:8910:7: ( ruleOpExponent )
              	    {
              	    // InternalSARL.g:8910:7: ( ruleOpExponent )
              	    // InternalSARL.g:8911:8: ruleOpExponent
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      								if (current==null) {
              	      									current = createModelElement(grammarAccess.getXExponentExpressionRule());
              	      								}
              	      							
              	    }
              	    if ( state.backtracking==0 ) {
  
              	      								newCompositeNode(grammarAccess.getXExponentExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0());
              	      							
              	    }
              	    pushFollow(FOLLOW_45);
              	    ruleOpExponent();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      								afterParserOrEnumRuleCall();
              	      							
              	    }
  
              	    }
  
  
              	    }
  
  
              	    }
  
  
              	    }
  
              	    // InternalSARL.g:8927:4: ( (lv_rightOperand_3_0= ruleXUnaryOperation ) )
              	    // InternalSARL.g:8928:5: (lv_rightOperand_3_0= ruleXUnaryOperation )
              	    {
              	    // InternalSARL.g:8928:5: (lv_rightOperand_3_0= ruleXUnaryOperation )
              	    // InternalSARL.g:8929:6: lv_rightOperand_3_0= ruleXUnaryOperation
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      						newCompositeNode(grammarAccess.getXExponentExpressionAccess().getRightOperandXUnaryOperationParserRuleCall_1_1_0());
              	      					
              	    }
              	    pushFollow(FOLLOW_86);
              	    lv_rightOperand_3_0=ruleXUnaryOperation();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      						if (current==null) {
              	      							current = createModelElementForParent(grammarAccess.getXExponentExpressionRule());
              	      						}
              	      						set(
              	      							current,
              	      							"rightOperand",
              	      							lv_rightOperand_3_0,
              	      							"io.sarl.lang.SARL.XUnaryOperation");
              	      						afterParserOrEnumRuleCall();
              	      					
              	    }
  
              	    }
  
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop237;
                  }
              } while (true);
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }