开发者社区> 问答> 正文

如何在ANTLR中找到具有儿童情境的孩子?

就像标题中所说的那样,当在ANTLR中侦听或访问节点时,是否可以找到子节点的子节点。

例如:(使用grammars-v4-java词法分析器和解析规则)

首先,我将一个Java文件添加到语法树中。

grun Java compilationUnit  -gui Example.java
// Example.java
public class Example {
    String name = "test";
    void call(){
        String name1 = "test";
    }
}

语法树是

Example.java语法tree.png(图片)

然后,我尝试使用Java扩展baseListerner以侦听enterClassDeclaration节点。这样我就可以得到该ClassDeclarationContext节点。我想找到ClassDeclarationContext子类型为的子节点的子项LocalDeclarationContext。

在此示例中:

public class MyListener extends JavaParserBaseListener {
    @Override
    public void enterClassDeclaration(JavaParser.ClassDeclarationContext ctx) {
        // find the children of children by ctx
        List<ParserRuleContext> contexts = findChildContextBy(ctx, LocalVariableDeclarationContext.class);
        super.enterClassDeclaration(ctx);
    }
}

该变量contexts应包含两个元素。name和name1

我不想一层一层地找到孩子。嗯,有没有方便的方法?

展开
收起
垚tutu 2019-11-29 19:54:20 654 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
重新定义儿童饮水习惯 立即下载
Gululu重新定义儿童饮水习惯 立即下载
PHP安全开发:从白帽角度做安全 立即下载