この Java コードの AST を作成するために ANTLR 3.2 を使用しています。
テスト.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 文法にバグがありますか、それとも何か間違っていますか?