public final DirkExpParser.equalityExpr_return equalityExpr() throws RecognitionException {
        DirkExpParser.equalityExpr_return retval = new DirkExpParser.equalityExpr_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token set9=null;
        DirkExpParser.relationalExpr_return relationalExpr8 = null;

        DirkExpParser.relationalExpr_return relationalExpr10 = null;


        CommonTree set9_tree=null;

        try {
            // F:\\antlr\\BoncExp.g:31:5: ( relationalExpr ( ( EQUALS | NOTEQUALS ) relationalExpr )* )
            // F:\\antlr\\BoncExp.g:31:9: relationalExpr ( ( EQUALS | NOTEQUALS ) relationalExpr )*
            {
            root_0 = (CommonTree)adaptor.nil();

            pushFollow(FOLLOW_relationalExpr_in_equalityExpr227);
            relationalExpr8=relationalExpr();

            state._fsp--;

            adaptor.addChild(root_0, relationalExpr8.getTree());
            // F:\\antlr\\BoncExp.g:31:24: ( ( EQUALS | NOTEQUALS ) relationalExpr )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( ((LA3_0>=EQUALS && LA3_0<=NOTEQUALS)) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // F:\\antlr\\BoncExp.g:31:25: ( EQUALS | NOTEQUALS ) relationalExpr
            	    {
            	    set9=(Token)input.LT(1);
            	    set9=(Token)input.LT(1);
            	    if ( (input.LA(1)>=EQUALS && input.LA(1)<=NOTEQUALS) ) {
            	        input.consume();
            	        root_0 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(set9), root_0);
            	        state.errorRecovery=false;
            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }

            	    pushFollow(FOLLOW_relationalExpr_in_equalityExpr237);
            	    relationalExpr10=relationalExpr();

            	    state._fsp--;

            	    adaptor.addChild(root_0, relationalExpr10.getTree());

            	    }
            	    break;

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


            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }