ANTLR4:参考书示例静态类定义

时间:2015-06-24 14:35:09

标签: java

在本书的第7章中有很多例子中,有一堆使用这个定义定义的树步行者和听众:

public static class PropertyFileLoader extends PropretyFileBaseListener{
...
public static class PropertyFileVisitor extends PropertyFileBaseVisitor<Void>
...

为什么那里有静电?它做了什么?

上面的链接是讨论嵌套的内部类,我没有任何嵌套的内部类......我看不出使用static关键字而不使用static关键字的区别。

antlr生成的自动生成类的示例如下:

public class CymbolBaseListener implements CymbolListener {
    /**
     * {@inheritDoc}
     *
     * <p>The default implementation does nothing.</p>
     */
        @Override public void enterVarDecl(CymbolParser.VarDeclContext ctx){ }


public interface CymbolListener extends ParseTreeListener {
    /**
     * Enter a parse tree produced by {@link CymbolParser#rules}.
     * @param ctx the parse tree
     */
    void enterVarDecl(CymbolParser.VarDeclContext ctx);

其中ParseTreeListener附带了antlr运行时ParseTreeListener

如果我想使用这些类,我会做的是以下内容:

public class MyListener extends CymbolBaseListener {
    public void enterVarDecl(CymbolParser.VarDeclContext ctx)
    {
        System.out.println("I have found a variable declaration!");
    }
}

并且获取监听器的方法是编写一个执行以下操作的静态main:

public static void main(String[] args)
{
    ANTLRFileStream input = new ANTLRFileStream(args[0]);
    CymbolLexer mylexer = new CymbolLexer(input);
    CommonTokenStream tokens = new CommonTokenStream(mylexer);
    CymbolParser myparser = new CymbolParser(tokens);
    MyListener listener = new MyListener();
    ParseTreeWalker walker = new ParseTreeWalker();
    ParseTree tree = myparser.rules();
    walker.walk(listener, tree);
}

为什么作者使大部分示例都使用static关键字:

public static class MyListener extends CymbolBaseListener
也可以使用

作为非静态类。 我刚刚意识到书中的一些例子有静态关键字,而其他例子没有,但我不明白它背后的意图是什么。

0 个答案:

没有答案