public final void declaration() throws RecognitionException
    {
        try {
            // CPP.g:59:3: ( varDecl | directive | funcDecl )
            int alt2 = 3;
            alt2 = this.dfa2.predict(this.input);
            switch (alt2)
            {
                case 1:
                    // CPP.g:59:5: varDecl
                {
                    this.pushFollow(FOLLOW_varDecl_in_declaration121);
                    this.varDecl();
                    
                    this.state._fsp--;
                    if (this.state.failed) {
                        return;
                    }
                    
                }
                    break;
                case 2:
                    // CPP.g:60:5: directive
                {
                    this.pushFollow(FOLLOW_directive_in_declaration127);
                    this.directive();
                    
                    this.state._fsp--;
                    if (this.state.failed) {
                        return;
                    }
                    
                }
                    break;
                case 3:
                    // CPP.g:61:5: funcDecl
                {
                    this.pushFollow(FOLLOW_funcDecl_in_declaration133);
                    this.funcDecl();
                    
                    this.state._fsp--;
                    if (this.state.failed) {
                        return;
                    }
                    
                }
                    break;
                
            }
        }
        catch (RecognitionException re) {
            this.reportError(re);
            this.recover(this.input, re);
        } finally {
        }
        return;
    }