使用antlr解析带有重复节点的开关情况下的AST for java代码
我正在使用ANTLR 3.2为以下java代码生成AST:
测试。java
public class Test {
public static void main(String args[]) {
int x = 10;
switch(x){
case 1:{
break;
}
case 2:{
break;
}
default:
return;
}
}
}
使用Java 1.5 grammar from the ANTLR wiki
但是生成的AST有一个重复的switch
节点
我想解析输入文件,并在生成的AST的switch
块内找到case
和复合块的数量
import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
import org.antlr.stringtemplate.*;
public class Main1 {
public static void main(String[] args) throws Exception {
JavaLexer lexer = new JavaLexer(new ANTLRFileStream("Test.java"));
JavaParser parser = new JavaParser(new CommonTokenStream(lexer));
CommonTree tree = (CommonTree)parser.javaSource().getTree();
DOTTreeGenerator gen = new DOTTreeGenerator();
StringTemplate st = gen.toDOT(tree);
System.out.println(st);
}
}
AST:
(点击图片放大)
ANTLR语法中有错误吗,还是我做错了什么
共 (0) 个答案