docs: public final EObject ruleXOtherOperatorExpression() throws RecognitionException {
          EObject current = null;
  
          EObject this_XAdditiveExpression_0 = null;
  
          EObject lv_rightOperand_3_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:12816:2: ( (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* ) )
              // InternalSARL.g:12817:2: (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* )
              {
              // InternalSARL.g:12817:2: (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* )
              // InternalSARL.g:12818:3: this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )*
              {
              if ( state.backtracking==0 ) {
  
                			newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getXAdditiveExpressionParserRuleCall_0());
                		
              }
              pushFollow(FOLLOW_119);
              this_XAdditiveExpression_0=ruleXAdditiveExpression();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			current = this_XAdditiveExpression_0;
                			afterParserOrEnumRuleCall();
                		
              }
              // InternalSARL.g:12826:3: ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )*
              loop308:
              do {
                  int alt308=2;
                  alt308 = dfa308.predict(input);
                  switch (alt308) {
              	case 1 :
              	    // InternalSARL.g:12827:4: ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) )
              	    {
              	    // InternalSARL.g:12827:4: ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) )
              	    // InternalSARL.g:12828:5: ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) )
              	    {
              	    // InternalSARL.g:12838:5: ( () ( ( ruleOpOther ) ) )
              	    // InternalSARL.g:12839:6: () ( ( ruleOpOther ) )
              	    {
              	    // InternalSARL.g:12839:6: ()
              	    // InternalSARL.g:12840:7: 
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      							current = forceCreateModelElementAndSet(
              	      								grammarAccess.getXOtherOperatorExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
              	      								current);
              	      						
              	    }
  
              	    }
  
              	    // InternalSARL.g:12846:6: ( ( ruleOpOther ) )
              	    // InternalSARL.g:12847:7: ( ruleOpOther )
              	    {
              	    // InternalSARL.g:12847:7: ( ruleOpOther )
              	    // InternalSARL.g:12848:8: ruleOpOther
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      								if (current==null) {
              	      									current = createModelElement(grammarAccess.getXOtherOperatorExpressionRule());
              	      								}
              	      							
              	    }
              	    if ( state.backtracking==0 ) {
  
              	      								newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0());
              	      							
              	    }
              	    pushFollow(FOLLOW_45);
              	    ruleOpOther();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      								afterParserOrEnumRuleCall();
              	      							
              	    }
  
              	    }
  
  
              	    }
  
  
              	    }
  
  
              	    }
  
              	    // InternalSARL.g:12864:4: ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) )
              	    // InternalSARL.g:12865:5: (lv_rightOperand_3_0= ruleXAdditiveExpression )
              	    {
              	    // InternalSARL.g:12865:5: (lv_rightOperand_3_0= ruleXAdditiveExpression )
              	    // InternalSARL.g:12866:6: lv_rightOperand_3_0= ruleXAdditiveExpression
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      						newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getRightOperandXAdditiveExpressionParserRuleCall_1_1_0());
              	      					
              	    }
              	    pushFollow(FOLLOW_119);
              	    lv_rightOperand_3_0=ruleXAdditiveExpression();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      						if (current==null) {
              	      							current = createModelElementForParent(grammarAccess.getXOtherOperatorExpressionRule());
              	      						}
              	      						set(
              	      							current,
              	      							"rightOperand",
              	      							lv_rightOperand_3_0,
              	      							"org.eclipse.xtext.xbase.Xbase.XAdditiveExpression");
              	      						afterParserOrEnumRuleCall();
              	      					
              	    }
  
              	    }
  
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop308;
                  }
              } while (true);
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }