我正在使用 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;
}
}
}
使用来自 ANTLR wiki的 Java 1.5语法。
但是生成的 AST 有一个重复的switch
节点。
我想解析输入文件并找到生成的 ASTcase
块内的 s 和复合块的数量。switch
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 语法中是否存在错误,或者我做错了什么?