有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用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:

enter image description here

(点击图片放大)

ANTLR语法中有错误吗,还是我做错了什么


共 (0) 个答案