public final void directive() throws RecognitionException
    {
        Token id = null;
        
        AST ast1 = null;
        
        try {
            // CPP.g:68:3: ( '#define' id= IDENTIFIER pp_token )
            // CPP.g:68:5: '#define' id= IDENTIFIER pp_token
            {
                this.match(this.input, 22, FOLLOW_22_in_directive150);
                if (this.state.failed) {
                    return;
                }
                id = (Token) this.match(this.input, IDENTIFIER, FOLLOW_IDENTIFIER_in_directive154);
                if (this.state.failed) {
                    return;
                }
                this.pushFollow(FOLLOW_pp_token_in_directive156);
                this.pp_token();
                
                this.state._fsp--;
                if (this.state.failed) {
                    return;
                }
                if (this.state.backtracking == 0) {
                    ast1 = this.out;
                    this.out = new DefineDirectiveAST(id, (ExprAST) ast1);
                }
                
            }
            
        }
        catch (RecognitionException re) {
            this.reportError(re);
            this.recover(this.input, re);
        } finally {
        }
        return;
    }