docs: public final EObject ruleXMultiplicativeExpression() throws RecognitionException {
          EObject current = null;
  
          EObject this_XCastedExpression_0 = null;
  
          EObject lv_rightOperand_3_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:8758:2: ( (this_XCastedExpression_0= ruleXCastedExpression ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXCastedExpression ) ) )* ) )
              // InternalSARL.g:8759:2: (this_XCastedExpression_0= ruleXCastedExpression ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXCastedExpression ) ) )* )
              {
              // InternalSARL.g:8759:2: (this_XCastedExpression_0= ruleXCastedExpression ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXCastedExpression ) ) )* )
              // InternalSARL.g:8760:3: this_XCastedExpression_0= ruleXCastedExpression ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXCastedExpression ) ) )*
              {
              if ( state.backtracking==0 ) {
  
                			newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getXCastedExpressionParserRuleCall_0());
                		
              }
              pushFollow(FOLLOW_85);
              this_XCastedExpression_0=ruleXCastedExpression();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			current = this_XCastedExpression_0;
                			afterParserOrEnumRuleCall();
                		
              }
              // InternalSARL.g:8768:3: ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXCastedExpression ) ) )*
              loop235:
              do {
                  int alt235=2;
                  switch ( input.LA(1) ) {
                  case 59:
                      {
                      int LA235_2 = input.LA(2);
  
                      if ( (synpred13_InternalSARL()) ) {
                          alt235=1;
                      }
  
  
                      }
                      break;
                  case 70:
                      {
                      int LA235_3 = input.LA(2);
  
                      if ( (synpred13_InternalSARL()) ) {
                          alt235=1;
                      }
  
  
                      }
                      break;
                  case 71:
                      {
                      int LA235_4 = input.LA(2);
  
                      if ( (synpred13_InternalSARL()) ) {
                          alt235=1;
                      }
  
  
                      }
                      break;
  
                  }
  
                  switch (alt235) {
              	case 1 :
              	    // InternalSARL.g:8769:4: ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXCastedExpression ) )
              	    {
              	    // InternalSARL.g:8769:4: ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) )
              	    // InternalSARL.g:8770:5: ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) )
              	    {
              	    // InternalSARL.g:8780:5: ( () ( ( ruleOpMulti ) ) )
              	    // InternalSARL.g:8781:6: () ( ( ruleOpMulti ) )
              	    {
              	    // InternalSARL.g:8781:6: ()
              	    // InternalSARL.g:8782:7: 
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      							current = forceCreateModelElementAndSet(
              	      								grammarAccess.getXMultiplicativeExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
              	      								current);
              	      						
              	    }
  
              	    }
  
              	    // InternalSARL.g:8788:6: ( ( ruleOpMulti ) )
              	    // InternalSARL.g:8789:7: ( ruleOpMulti )
              	    {
              	    // InternalSARL.g:8789:7: ( ruleOpMulti )
              	    // InternalSARL.g:8790:8: ruleOpMulti
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      								if (current==null) {
              	      									current = createModelElement(grammarAccess.getXMultiplicativeExpressionRule());
              	      								}
              	      							
              	    }
              	    if ( state.backtracking==0 ) {
  
              	      								newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0());
              	      							
              	    }
              	    pushFollow(FOLLOW_45);
              	    ruleOpMulti();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      								afterParserOrEnumRuleCall();
              	      							
              	    }
  
              	    }
  
  
              	    }
  
  
              	    }
  
  
              	    }
  
              	    // InternalSARL.g:8806:4: ( (lv_rightOperand_3_0= ruleXCastedExpression ) )
              	    // InternalSARL.g:8807:5: (lv_rightOperand_3_0= ruleXCastedExpression )
              	    {
              	    // InternalSARL.g:8807:5: (lv_rightOperand_3_0= ruleXCastedExpression )
              	    // InternalSARL.g:8808:6: lv_rightOperand_3_0= ruleXCastedExpression
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      						newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getRightOperandXCastedExpressionParserRuleCall_1_1_0());
              	      					
              	    }
              	    pushFollow(FOLLOW_85);
              	    lv_rightOperand_3_0=ruleXCastedExpression();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      						if (current==null) {
              	      							current = createModelElementForParent(grammarAccess.getXMultiplicativeExpressionRule());
              	      						}
              	      						set(
              	      							current,
              	      							"rightOperand",
              	      							lv_rightOperand_3_0,
              	      							"io.sarl.lang.SARL.XCastedExpression");
              	      						afterParserOrEnumRuleCall();
              	      					
              	    }
  
              	    }
  
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop235;
                  }
              } while (true);
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }