就像标题中所说的那样,当在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
我不想一层一层地找到孩子。嗯,有没有方便的方法?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。