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

        EObject this_XRelationalExpression_0 = null;

        EObject lv_rightOperand_3_0 = null;



        	enterRule();

        try {
            // InternalXbase.g:567:2: ( (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* ) )
            // InternalXbase.g:568:2: (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* )
            {
            // InternalXbase.g:568:2: (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* )
            // InternalXbase.g:569:3: this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getXRelationalExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_11);
            this_XRelationalExpression_0=ruleXRelationalExpression();

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

              			current = this_XRelationalExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXbase.g:577:3: ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )*
            loop7:
            do {
                int alt7=2;
                switch ( input.LA(1) ) {
                case 24:
                    {
                    int LA7_2 = input.LA(2);

                    if ( (synpred4_InternalXbase()) ) {
                        alt7=1;
                    }


                    }
                    break;
                case 25:
                    {
                    int LA7_3 = input.LA(2);

                    if ( (synpred4_InternalXbase()) ) {
                        alt7=1;
                    }


                    }
                    break;
                case 26:
                    {
                    int LA7_4 = input.LA(2);

                    if ( (synpred4_InternalXbase()) ) {
                        alt7=1;
                    }


                    }
                    break;
                case 27:
                    {
                    int LA7_5 = input.LA(2);

                    if ( (synpred4_InternalXbase()) ) {
                        alt7=1;
                    }


                    }
                    break;

                }

                switch (alt7) {
            	case 1 :
            	    // InternalXbase.g:578:4: ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) )
            	    {
            	    // InternalXbase.g:578:4: ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) )
            	    // InternalXbase.g:579:5: ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) )
            	    {
            	    // InternalXbase.g:589:5: ( () ( ( ruleOpEquality ) ) )
            	    // InternalXbase.g:590:6: () ( ( ruleOpEquality ) )
            	    {
            	    // InternalXbase.g:590:6: ()
            	    // InternalXbase.g:591:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getXEqualityExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalXbase.g:597:6: ( ( ruleOpEquality ) )
            	    // InternalXbase.g:598:7: ( ruleOpEquality )
            	    {
            	    // InternalXbase.g:598:7: ( ruleOpEquality )
            	    // InternalXbase.g:599:8: ruleOpEquality
            	    {
            	    if ( state.backtracking==0 ) {

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

            	      								newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FOLLOW_4);
            	    ruleOpEquality();

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

            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalXbase.g:615:4: ( (lv_rightOperand_3_0= ruleXRelationalExpression ) )
            	    // InternalXbase.g:616:5: (lv_rightOperand_3_0= ruleXRelationalExpression )
            	    {
            	    // InternalXbase.g:616:5: (lv_rightOperand_3_0= ruleXRelationalExpression )
            	    // InternalXbase.g:617:6: lv_rightOperand_3_0= ruleXRelationalExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getRightOperandXRelationalExpressionParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_11);
            	    lv_rightOperand_3_0=ruleXRelationalExpression();

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

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getXEqualityExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"rightOperand",
            	      							lv_rightOperand_3_0,
            	      							"org.eclipse.xtext.xbase.Xbase.XRelationalExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
public final EObject ruleXEqualityExpression ( ) throws RecognitionException { EObject current = null ; EObject this_XRelationalExpression_0 = null ; EObject lv_rightOperand_3_0 = null ; enterRule ( ) ; try { { { if ( state . backtracking == 0 ) { newCompositeNode ( grammarAccess . getXEqualityExpressionAccess ( ) . getXRelationalExpressionParserRuleCall_0 ( ) ) ; } pushFollow ( FOLLOW_11 ) ; this_XRelationalExpression_0 = ruleXRelationalExpression ( ) ; state . _fsp -- ; if ( state . failed ) return current ; if ( state . backtracking == 0 ) { current = this_XRelationalExpression_0 ; afterParserOrEnumRuleCall ( ) ; } loop7 : do { int alt7 = 2 ; switch ( input . LA ( 1 ) ) { case 24 : { int LA7_2 = input . LA ( 2 ) ; if ( ( synpred4_InternalXbase ( ) ) ) { alt7 = 1 ; } } break ; case 25 : { int LA7_3 = input . LA ( 2 ) ; if ( ( synpred4_InternalXbase ( ) ) ) { alt7 = 1 ; } } break ; case 26 : { int LA7_4 = input . LA ( 2 ) ; if ( ( synpred4_InternalXbase ( ) ) ) { alt7 = 1 ; } } break ; case 27 : { int LA7_5 = input . LA ( 2 ) ; if ( ( synpred4_InternalXbase ( ) ) ) { alt7 = 1 ; } } break ; } switch ( alt7 ) { case 1 : { { { { if ( state . backtracking == 0 ) { current = forceCreateModelElementAndSet ( grammarAccess . getXEqualityExpressionAccess ( ) . getXBinaryOperationLeftOperandAction_1_0_0_0 ( ) , current ) ; } } { { if ( state . backtracking == 0 ) { if ( current == null ) { current = createModelElement ( grammarAccess . getXEqualityExpressionRule ( ) ) ; } } if ( state . backtracking == 0 ) { newCompositeNode ( grammarAccess . getXEqualityExpressionAccess ( ) . getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0 ( ) ) ; } pushFollow ( FOLLOW_4 ) ; ruleOpEquality ( ) ; state . _fsp -- ; if ( state . failed ) return current ; if ( state . backtracking == 0 ) { afterParserOrEnumRuleCall ( ) ; } } } } } { { if ( state . backtracking == 0 ) { newCompositeNode ( grammarAccess . getXEqualityExpressionAccess ( ) . getRightOperandXRelationalExpressionParserRuleCall_1_1_0 ( ) ) ; } pushFollow ( FOLLOW_11 ) ; lv_rightOperand_3_0 = ruleXRelationalExpression ( ) ; state . _fsp -- ; if ( state . failed ) return current ; if ( state . backtracking == 0 ) { if ( current == null ) { current = createModelElementForParent ( grammarAccess . getXEqualityExpressionRule ( ) ) ; } set ( current , "rightOperand" , lv_rightOperand_3_0 , "org.eclipse.xtext.xbase.Xbase.XRelationalExpression" ) ; afterParserOrEnumRuleCall ( ) ; } } } } break ; default : break loop7 ; } } while ( true ) ; } } if ( state . backtracking == 0 ) { leaveRule ( ) ; } } catch ( RecognitionException re ) { recover ( input , re ) ; appendSkippedTokens ( ) ; } finally { } return current ; }
InternalXbase.g:561:1: ruleXEqualityExpression returns [EObject current=null] : (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* ) ;