docs: public final EObject ruleXCastedExpression() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_2=null;
          EObject this_XExponentExpression_0 = null;
  
          EObject lv_type_3_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:7686:2: ( (this_XExponentExpression_0= ruleXExponentExpression ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* ) )
              // InternalSARL.g:7687:2: (this_XExponentExpression_0= ruleXExponentExpression ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* )
              {
              // InternalSARL.g:7687:2: (this_XExponentExpression_0= ruleXExponentExpression ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* )
              // InternalSARL.g:7688:3: this_XExponentExpression_0= ruleXExponentExpression ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )*
              {
              if ( state.backtracking==0 ) {
  
                			newCompositeNode(grammarAccess.getXCastedExpressionAccess().getXExponentExpressionParserRuleCall_0());
                		
              }
              pushFollow(FOLLOW_74);
              this_XExponentExpression_0=ruleXExponentExpression();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			current = this_XExponentExpression_0;
                			afterParserOrEnumRuleCall();
                		
              }
              // InternalSARL.g:7696:3: ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )*
              loop217:
              do {
                  int alt217=2;
                  int LA217_0 = input.LA(1);
  
                  if ( (LA217_0==64) ) {
                      int LA217_2 = input.LA(2);
  
                      if ( (synpred5_InternalSARL()) ) {
                          alt217=1;
                      }
  
  
                  }
  
  
                  switch (alt217) {
              	case 1 :
              	    // InternalSARL.g:7697:4: ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) )
              	    {
              	    // InternalSARL.g:7697:4: ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) )
              	    // InternalSARL.g:7698:5: ( ( () 'as' ) )=> ( () otherlv_2= 'as' )
              	    {
              	    // InternalSARL.g:7704:5: ( () otherlv_2= 'as' )
              	    // InternalSARL.g:7705:6: () otherlv_2= 'as'
              	    {
              	    // InternalSARL.g:7705:6: ()
              	    // InternalSARL.g:7706:7: 
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      							current = forceCreateModelElementAndSet(
              	      								grammarAccess.getXCastedExpressionAccess().getSarlCastedExpressionTargetAction_1_0_0_0(),
              	      								current);
              	      						
              	    }
  
              	    }
  
              	    otherlv_2=(Token)match(input,64,FOLLOW_41); if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      						newLeafNode(otherlv_2, grammarAccess.getXCastedExpressionAccess().getAsKeyword_1_0_0_1());
              	      					
              	    }
  
              	    }
  
  
              	    }
  
              	    // InternalSARL.g:7718:4: ( (lv_type_3_0= ruleJvmTypeReference ) )
              	    // InternalSARL.g:7719:5: (lv_type_3_0= ruleJvmTypeReference )
              	    {
              	    // InternalSARL.g:7719:5: (lv_type_3_0= ruleJvmTypeReference )
              	    // InternalSARL.g:7720:6: lv_type_3_0= ruleJvmTypeReference
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      						newCompositeNode(grammarAccess.getXCastedExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_1_0());
              	      					
              	    }
              	    pushFollow(FOLLOW_74);
              	    lv_type_3_0=ruleJvmTypeReference();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      						if (current==null) {
              	      							current = createModelElementForParent(grammarAccess.getXCastedExpressionRule());
              	      						}
              	      						set(
              	      							current,
              	      							"type",
              	      							lv_type_3_0,
              	      							"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
              	      						afterParserOrEnumRuleCall();
              	      					
              	    }
  
              	    }
  
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop217;
                  }
              } while (true);
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }