docs: public final EObject ruleXPrimaryExpression() throws RecognitionException {
          EObject current = null;
  
          EObject this_BreakExpression_0 = null;
  
          EObject this_ContinueExpression_1 = null;
  
          EObject this_AssertExpression_2 = null;
  
          EObject this_AssumeExpression_3 = null;
  
          EObject this_XConstructorCall_4 = null;
  
          EObject this_XBlockExpression_5 = null;
  
          EObject this_XSwitchExpression_6 = null;
  
          EObject this_XSynchronizedExpression_7 = null;
  
          EObject this_XFeatureCall_8 = null;
  
          EObject this_XLiteral_9 = null;
  
          EObject this_XIfExpression_10 = null;
  
          EObject this_XForLoopExpression_11 = null;
  
          EObject this_XBasicForLoopExpression_12 = null;
  
          EObject this_XWhileExpression_13 = null;
  
          EObject this_XDoWhileExpression_14 = null;
  
          EObject this_XThrowExpression_15 = null;
  
          EObject this_XReturnExpression_16 = null;
  
          EObject this_XTryCatchFinallyExpression_17 = null;
  
          EObject this_XParenthesizedExpression_18 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:7755:2: ( (this_BreakExpression_0= ruleBreakExpression | this_ContinueExpression_1= ruleContinueExpression | this_AssertExpression_2= ruleAssertExpression | this_AssumeExpression_3= ruleAssumeExpression | this_XConstructorCall_4= ruleXConstructorCall | this_XBlockExpression_5= ruleXBlockExpression | this_XSwitchExpression_6= ruleXSwitchExpression | ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_7= ruleXSynchronizedExpression ) | this_XFeatureCall_8= ruleXFeatureCall | this_XLiteral_9= ruleXLiteral | this_XIfExpression_10= ruleXIfExpression | ( ( ( () 'for' '(' ( ( ruleSarlXLoopFormalParameter ) ) ':' ) )=>this_XForLoopExpression_11= ruleXForLoopExpression ) | this_XBasicForLoopExpression_12= ruleXBasicForLoopExpression | this_XWhileExpression_13= ruleXWhileExpression | this_XDoWhileExpression_14= ruleXDoWhileExpression | this_XThrowExpression_15= ruleXThrowExpression | this_XReturnExpression_16= ruleXReturnExpression | this_XTryCatchFinallyExpression_17= ruleXTryCatchFinallyExpression | this_XParenthesizedExpression_18= ruleXParenthesizedExpression ) )
              // InternalSARL.g:7756:2: (this_BreakExpression_0= ruleBreakExpression | this_ContinueExpression_1= ruleContinueExpression | this_AssertExpression_2= ruleAssertExpression | this_AssumeExpression_3= ruleAssumeExpression | this_XConstructorCall_4= ruleXConstructorCall | this_XBlockExpression_5= ruleXBlockExpression | this_XSwitchExpression_6= ruleXSwitchExpression | ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_7= ruleXSynchronizedExpression ) | this_XFeatureCall_8= ruleXFeatureCall | this_XLiteral_9= ruleXLiteral | this_XIfExpression_10= ruleXIfExpression | ( ( ( () 'for' '(' ( ( ruleSarlXLoopFormalParameter ) ) ':' ) )=>this_XForLoopExpression_11= ruleXForLoopExpression ) | this_XBasicForLoopExpression_12= ruleXBasicForLoopExpression | this_XWhileExpression_13= ruleXWhileExpression | this_XDoWhileExpression_14= ruleXDoWhileExpression | this_XThrowExpression_15= ruleXThrowExpression | this_XReturnExpression_16= ruleXReturnExpression | this_XTryCatchFinallyExpression_17= ruleXTryCatchFinallyExpression | this_XParenthesizedExpression_18= ruleXParenthesizedExpression )
              {
              // InternalSARL.g:7756:2: (this_BreakExpression_0= ruleBreakExpression | this_ContinueExpression_1= ruleContinueExpression | this_AssertExpression_2= ruleAssertExpression | this_AssumeExpression_3= ruleAssumeExpression | this_XConstructorCall_4= ruleXConstructorCall | this_XBlockExpression_5= ruleXBlockExpression | this_XSwitchExpression_6= ruleXSwitchExpression | ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_7= ruleXSynchronizedExpression ) | this_XFeatureCall_8= ruleXFeatureCall | this_XLiteral_9= ruleXLiteral | this_XIfExpression_10= ruleXIfExpression | ( ( ( () 'for' '(' ( ( ruleSarlXLoopFormalParameter ) ) ':' ) )=>this_XForLoopExpression_11= ruleXForLoopExpression ) | this_XBasicForLoopExpression_12= ruleXBasicForLoopExpression | this_XWhileExpression_13= ruleXWhileExpression | this_XDoWhileExpression_14= ruleXDoWhileExpression | this_XThrowExpression_15= ruleXThrowExpression | this_XReturnExpression_16= ruleXReturnExpression | this_XTryCatchFinallyExpression_17= ruleXTryCatchFinallyExpression | this_XParenthesizedExpression_18= ruleXParenthesizedExpression )
              int alt218=19;
              alt218 = dfa218.predict(input);
              switch (alt218) {
                  case 1 :
                      // InternalSARL.g:7757:3: this_BreakExpression_0= ruleBreakExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getBreakExpressionParserRuleCall_0());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_BreakExpression_0=ruleBreakExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_BreakExpression_0;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:7766:3: this_ContinueExpression_1= ruleContinueExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getContinueExpressionParserRuleCall_1());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_ContinueExpression_1=ruleContinueExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_ContinueExpression_1;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 3 :
                      // InternalSARL.g:7775:3: this_AssertExpression_2= ruleAssertExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getAssertExpressionParserRuleCall_2());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_AssertExpression_2=ruleAssertExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_AssertExpression_2;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 4 :
                      // InternalSARL.g:7784:3: this_AssumeExpression_3= ruleAssumeExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getAssumeExpressionParserRuleCall_3());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_AssumeExpression_3=ruleAssumeExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_AssumeExpression_3;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 5 :
                      // InternalSARL.g:7793:3: this_XConstructorCall_4= ruleXConstructorCall
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXConstructorCallParserRuleCall_4());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XConstructorCall_4=ruleXConstructorCall();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XConstructorCall_4;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 6 :
                      // InternalSARL.g:7802:3: this_XBlockExpression_5= ruleXBlockExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXBlockExpressionParserRuleCall_5());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XBlockExpression_5=ruleXBlockExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XBlockExpression_5;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 7 :
                      // InternalSARL.g:7811:3: this_XSwitchExpression_6= ruleXSwitchExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXSwitchExpressionParserRuleCall_6());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XSwitchExpression_6=ruleXSwitchExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XSwitchExpression_6;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 8 :
                      // InternalSARL.g:7820:3: ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_7= ruleXSynchronizedExpression )
                      {
                      // InternalSARL.g:7820:3: ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_7= ruleXSynchronizedExpression )
                      // InternalSARL.g:7821:4: ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_7= ruleXSynchronizedExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        				newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXSynchronizedExpressionParserRuleCall_7());
                        			
                      }
                      pushFollow(FOLLOW_2);
                      this_XSynchronizedExpression_7=ruleXSynchronizedExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				current = this_XSynchronizedExpression_7;
                        				afterParserOrEnumRuleCall();
                        			
                      }
  
                      }
  
  
                      }
                      break;
                  case 9 :
                      // InternalSARL.g:7838:3: this_XFeatureCall_8= ruleXFeatureCall
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXFeatureCallParserRuleCall_8());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XFeatureCall_8=ruleXFeatureCall();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XFeatureCall_8;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 10 :
                      // InternalSARL.g:7847:3: this_XLiteral_9= ruleXLiteral
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXLiteralParserRuleCall_9());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XLiteral_9=ruleXLiteral();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XLiteral_9;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 11 :
                      // InternalSARL.g:7856:3: this_XIfExpression_10= ruleXIfExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXIfExpressionParserRuleCall_10());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XIfExpression_10=ruleXIfExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XIfExpression_10;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 12 :
                      // InternalSARL.g:7865:3: ( ( ( () 'for' '(' ( ( ruleSarlXLoopFormalParameter ) ) ':' ) )=>this_XForLoopExpression_11= ruleXForLoopExpression )
                      {
                      // InternalSARL.g:7865:3: ( ( ( () 'for' '(' ( ( ruleSarlXLoopFormalParameter ) ) ':' ) )=>this_XForLoopExpression_11= ruleXForLoopExpression )
                      // InternalSARL.g:7866:4: ( ( () 'for' '(' ( ( ruleSarlXLoopFormalParameter ) ) ':' ) )=>this_XForLoopExpression_11= ruleXForLoopExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        				newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXForLoopExpressionParserRuleCall_11());
                        			
                      }
                      pushFollow(FOLLOW_2);
                      this_XForLoopExpression_11=ruleXForLoopExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				current = this_XForLoopExpression_11;
                        				afterParserOrEnumRuleCall();
                        			
                      }
  
                      }
  
  
                      }
                      break;
                  case 13 :
                      // InternalSARL.g:7889:3: this_XBasicForLoopExpression_12= ruleXBasicForLoopExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXBasicForLoopExpressionParserRuleCall_12());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XBasicForLoopExpression_12=ruleXBasicForLoopExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XBasicForLoopExpression_12;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 14 :
                      // InternalSARL.g:7898:3: this_XWhileExpression_13= ruleXWhileExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXWhileExpressionParserRuleCall_13());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XWhileExpression_13=ruleXWhileExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XWhileExpression_13;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 15 :
                      // InternalSARL.g:7907:3: this_XDoWhileExpression_14= ruleXDoWhileExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXDoWhileExpressionParserRuleCall_14());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XDoWhileExpression_14=ruleXDoWhileExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XDoWhileExpression_14;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 16 :
                      // InternalSARL.g:7916:3: this_XThrowExpression_15= ruleXThrowExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXThrowExpressionParserRuleCall_15());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XThrowExpression_15=ruleXThrowExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XThrowExpression_15;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 17 :
                      // InternalSARL.g:7925:3: this_XReturnExpression_16= ruleXReturnExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXReturnExpressionParserRuleCall_16());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XReturnExpression_16=ruleXReturnExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XReturnExpression_16;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 18 :
                      // InternalSARL.g:7934:3: this_XTryCatchFinallyExpression_17= ruleXTryCatchFinallyExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXTryCatchFinallyExpressionParserRuleCall_17());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XTryCatchFinallyExpression_17=ruleXTryCatchFinallyExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XTryCatchFinallyExpression_17;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 19 :
                      // InternalSARL.g:7943:3: this_XParenthesizedExpression_18= ruleXParenthesizedExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXParenthesizedExpressionParserRuleCall_18());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XParenthesizedExpression_18=ruleXParenthesizedExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XParenthesizedExpression_18;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }