[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Non-member submission from [Roger Keays <roger@ninthave.dyndns.org>]



Date: Tue, 3 Jul 2001 02:01:59 +1000 (EST)
From: Roger Keays <roger@ninthave.dyndns.org>
To: <sablecc-list@sable.mcgill.ca>
Subject: Custom Parser

Hi,

I know that the consensus is to do AST modifications after parsing, but
nevertheless I am trying to do it all in a single parse (using an
AnalysisAdapter for convenience). However, the information in Appendix D
of Etienne's thesis seems to be out of date.

The only way I have managed to get results is to change the Parser's
`node' object from protected to public, and use something like this :

public class CustomParser extends Parser
{
    public CustomParser(Lexer lexer)
    {
        super(lexer);
    }

    AstFix fix = new AstFix();
    private class AstFix extends AnalysisAdapter
    {
        public void caseAParsedModel(AParsedModel thisNode)
        {
           node = null; // node (from Parser) must be public !
           // this does not work
           // thisNode = null;
        }
    }

    protected void filter()
    {
     node.apply(fix);
    }
}

Is there any other way to use an Adapter/Switch class in a custom parser?
I'd rather not do all the code in filter (although I guess it is not such
a big deal).

Regards,

Roger.