public final EObject ruleXRelationalExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        EObject this_XOtherOperatorExpression_0 = null;

        EObject lv_type_3_0 = null;

        EObject lv_rightOperand_6_0 = null;



        	enterRule();

        try {
            // InternalXbase.g:694:2: ( (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* ) )
            // InternalXbase.g:695:2: (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* )
            {
            // InternalXbase.g:695:2: (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* )
            // InternalXbase.g:696:3: this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getXOtherOperatorExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_12);
            this_XOtherOperatorExpression_0=ruleXOtherOperatorExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_XOtherOperatorExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXbase.g:704:3: ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )*
            loop9:
            do {
                int alt9=3;
                switch ( input.LA(1) ) {
                case 19:
                    {
                    int LA9_2 = input.LA(2);

                    if ( (synpred6_InternalXbase()) ) {
                        alt9=2;
                    }


                    }
                    break;
                case 20:
                    {
                    int LA9_3 = input.LA(2);

                    if ( (synpred6_InternalXbase()) ) {
                        alt9=2;
                    }


                    }
                    break;
                case 28:
                    {
                    int LA9_4 = input.LA(2);

                    if ( (synpred5_InternalXbase()) ) {
                        alt9=1;
                    }


                    }
                    break;
                case 21:
                    {
                    int LA9_5 = input.LA(2);

                    if ( (synpred6_InternalXbase()) ) {
                        alt9=2;
                    }


                    }
                    break;

                }

                switch (alt9) {
            	case 1 :
            	    // InternalXbase.g:705:4: ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )
            	    {
            	    // InternalXbase.g:705:4: ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )
            	    // InternalXbase.g:706:5: ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) )
            	    {
            	    // InternalXbase.g:706:5: ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) )
            	    // InternalXbase.g:707:6: ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' )
            	    {
            	    // InternalXbase.g:713:6: ( () otherlv_2= 'instanceof' )
            	    // InternalXbase.g:714:7: () otherlv_2= 'instanceof'
            	    {
            	    // InternalXbase.g:714:7: ()
            	    // InternalXbase.g:715:8: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      								current = forceCreateModelElementAndSet(
            	      									grammarAccess.getXRelationalExpressionAccess().getXInstanceOfExpressionExpressionAction_1_0_0_0_0(),
            	      									current);
            	      							
            	    }

            	    }

            	    otherlv_2=(Token)match(input,28,FOLLOW_13); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      							newLeafNode(otherlv_2, grammarAccess.getXRelationalExpressionAccess().getInstanceofKeyword_1_0_0_0_1());
            	      						
            	    }

            	    }


            	    }

            	    // InternalXbase.g:727:5: ( (lv_type_3_0= ruleJvmTypeReference ) )
            	    // InternalXbase.g:728:6: (lv_type_3_0= ruleJvmTypeReference )
            	    {
            	    // InternalXbase.g:728:6: (lv_type_3_0= ruleJvmTypeReference )
            	    // InternalXbase.g:729:7: lv_type_3_0= ruleJvmTypeReference
            	    {
            	    if ( state.backtracking==0 ) {

            	      							newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_0_1_0());
            	      						
            	    }
            	    pushFollow(FOLLOW_12);
            	    lv_type_3_0=ruleJvmTypeReference();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      							if (current==null) {
            	      								current = createModelElementForParent(grammarAccess.getXRelationalExpressionRule());
            	      							}
            	      							set(
            	      								current,
            	      								"type",
            	      								lv_type_3_0,
            	      								"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
            	      							afterParserOrEnumRuleCall();
            	      						
            	    }

            	    }


            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalXbase.g:748:4: ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) )
            	    {
            	    // InternalXbase.g:748:4: ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) )
            	    // InternalXbase.g:749:5: ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) )
            	    {
            	    // InternalXbase.g:749:5: ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) )
            	    // InternalXbase.g:750:6: ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) )
            	    {
            	    // InternalXbase.g:760:6: ( () ( ( ruleOpCompare ) ) )
            	    // InternalXbase.g:761:7: () ( ( ruleOpCompare ) )
            	    {
            	    // InternalXbase.g:761:7: ()
            	    // InternalXbase.g:762:8: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      								current = forceCreateModelElementAndSet(
            	      									grammarAccess.getXRelationalExpressionAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0(),
            	      									current);
            	      							
            	    }

            	    }

            	    // InternalXbase.g:768:7: ( ( ruleOpCompare ) )
            	    // InternalXbase.g:769:8: ( ruleOpCompare )
            	    {
            	    // InternalXbase.g:769:8: ( ruleOpCompare )
            	    // InternalXbase.g:770:9: ruleOpCompare
            	    {
            	    if ( state.backtracking==0 ) {

            	      									if (current==null) {
            	      										current = createModelElement(grammarAccess.getXRelationalExpressionRule());
            	      									}
            	      								
            	    }
            	    if ( state.backtracking==0 ) {

            	      									newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_0_0_1_0());
            	      								
            	    }
            	    pushFollow(FOLLOW_4);
            	    ruleOpCompare();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									afterParserOrEnumRuleCall();
            	      								
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalXbase.g:786:5: ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) )
            	    // InternalXbase.g:787:6: (lv_rightOperand_6_0= ruleXOtherOperatorExpression )
            	    {
            	    // InternalXbase.g:787:6: (lv_rightOperand_6_0= ruleXOtherOperatorExpression )
            	    // InternalXbase.g:788:7: lv_rightOperand_6_0= ruleXOtherOperatorExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      							newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getRightOperandXOtherOperatorExpressionParserRuleCall_1_1_1_0());
            	      						
            	    }
            	    pushFollow(FOLLOW_12);
            	    lv_rightOperand_6_0=ruleXOtherOperatorExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      							if (current==null) {
            	      								current = createModelElementForParent(grammarAccess.getXRelationalExpressionRule());
            	      							}
            	      							set(
            	      								current,
            	      								"rightOperand",
            	      								lv_rightOperand_6_0,
            	      								"org.eclipse.xtext.xbase.Xbase.XOtherOperatorExpression");
            	      							afterParserOrEnumRuleCall();
            	      						
            	    }

            	    }


            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop9;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
public final EObject ruleXRelationalExpression ( ) throws RecognitionException { EObject current = null ; Token otherlv_2 = null ; EObject this_XOtherOperatorExpression_0 = null ; EObject lv_type_3_0 = null ; EObject lv_rightOperand_6_0 = null ; enterRule ( ) ; try { { { if ( state . backtracking == 0 ) { newCompositeNode ( grammarAccess . getXRelationalExpressionAccess ( ) . getXOtherOperatorExpressionParserRuleCall_0 ( ) ) ; } pushFollow ( FOLLOW_12 ) ; this_XOtherOperatorExpression_0 = ruleXOtherOperatorExpression ( ) ; state . _fsp -- ; if ( state . failed ) return current ; if ( state . backtracking == 0 ) { current = this_XOtherOperatorExpression_0 ; afterParserOrEnumRuleCall ( ) ; } loop9 : do { int alt9 = 3 ; switch ( input . LA ( 1 ) ) { case 19 : { int LA9_2 = input . LA ( 2 ) ; if ( ( synpred6_InternalXbase ( ) ) ) { alt9 = 2 ; } } break ; case 20 : { int LA9_3 = input . LA ( 2 ) ; if ( ( synpred6_InternalXbase ( ) ) ) { alt9 = 2 ; } } break ; case 28 : { int LA9_4 = input . LA ( 2 ) ; if ( ( synpred5_InternalXbase ( ) ) ) { alt9 = 1 ; } } break ; case 21 : { int LA9_5 = input . LA ( 2 ) ; if ( ( synpred6_InternalXbase ( ) ) ) { alt9 = 2 ; } } break ; } switch ( alt9 ) { case 1 : { { { { { if ( state . backtracking == 0 ) { current = forceCreateModelElementAndSet ( grammarAccess . getXRelationalExpressionAccess ( ) . getXInstanceOfExpressionExpressionAction_1_0_0_0_0 ( ) , current ) ; } } otherlv_2 = ( Token ) match ( input , 28 , FOLLOW_13 ) ; if ( state . failed ) return current ; if ( state . backtracking == 0 ) { newLeafNode ( otherlv_2 , grammarAccess . getXRelationalExpressionAccess ( ) . getInstanceofKeyword_1_0_0_0_1 ( ) ) ; } } } { { if ( state . backtracking == 0 ) { newCompositeNode ( grammarAccess . getXRelationalExpressionAccess ( ) . getTypeJvmTypeReferenceParserRuleCall_1_0_1_0 ( ) ) ; } pushFollow ( FOLLOW_12 ) ; lv_type_3_0 = ruleJvmTypeReference ( ) ; state . _fsp -- ; if ( state . failed ) return current ; if ( state . backtracking == 0 ) { if ( current == null ) { current = createModelElementForParent ( grammarAccess . getXRelationalExpressionRule ( ) ) ; } set ( current , "type" , lv_type_3_0 , "org.eclipse.xtext.xbase.Xtype.JvmTypeReference" ) ; afterParserOrEnumRuleCall ( ) ; } } } } } break ; case 2 : { { { { { if ( state . backtracking == 0 ) { current = forceCreateModelElementAndSet ( grammarAccess . getXRelationalExpressionAccess ( ) . getXBinaryOperationLeftOperandAction_1_1_0_0_0 ( ) , current ) ; } } { { if ( state . backtracking == 0 ) { if ( current == null ) { current = createModelElement ( grammarAccess . getXRelationalExpressionRule ( ) ) ; } } if ( state . backtracking == 0 ) { newCompositeNode ( grammarAccess . getXRelationalExpressionAccess ( ) . getFeatureJvmIdentifiableElementCrossReference_1_1_0_0_1_0 ( ) ) ; } pushFollow ( FOLLOW_4 ) ; ruleOpCompare ( ) ; state . _fsp -- ; if ( state . failed ) return current ; if ( state . backtracking == 0 ) { afterParserOrEnumRuleCall ( ) ; } } } } } { { if ( state . backtracking == 0 ) { newCompositeNode ( grammarAccess . getXRelationalExpressionAccess ( ) . getRightOperandXOtherOperatorExpressionParserRuleCall_1_1_1_0 ( ) ) ; } pushFollow ( FOLLOW_12 ) ; lv_rightOperand_6_0 = ruleXOtherOperatorExpression ( ) ; state . _fsp -- ; if ( state . failed ) return current ; if ( state . backtracking == 0 ) { if ( current == null ) { current = createModelElementForParent ( grammarAccess . getXRelationalExpressionRule ( ) ) ; } set ( current , "rightOperand" , lv_rightOperand_6_0 , "org.eclipse.xtext.xbase.Xbase.XOtherOperatorExpression" ) ; afterParserOrEnumRuleCall ( ) ; } } } } } break ; default : break loop9 ; } } while ( true ) ; } } if ( state . backtracking == 0 ) { leaveRule ( ) ; } } catch ( RecognitionException re ) { recover ( input , re ) ; appendSkippedTokens ( ) ; } finally { } return current ; }
InternalXbase.g:688:1: ruleXRelationalExpression returns [EObject current=null] : (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* ) ;