在java中,如何使几行代码的抽象语法树不是一个完整的文件或类?

在java中,如何使几行代码的抽象语法树不是一个完整的文件或类?,java,compiler-construction,automated-tests,abstract-syntax-tree,Java,Compiler Construction,Automated Tests,Abstract Syntax Tree,我尝试使用AST比较来比较CFG。我已经尝试过Eclipse AST解析器,它很棒。但是我正在使用IntelliJ IDE,所以不能使用它。我研究了Java解析器,但它返回编译单元并处理完整的Java文件。请建议一种方法或API来获取基本块的抽象语法树(几行代码),进一步说,我应该能够比较生成的AST。我从来没有这样做过,但如何获取基本块的文本并在其周围放置一个简单的包装器: class AST { void method() { // basic block here

我尝试使用AST比较来比较CFG。我已经尝试过Eclipse AST解析器,它很棒。但是我正在使用IntelliJ IDE,所以不能使用它。我研究了Java解析器,但它返回编译单元并处理完整的Java文件。请建议一种方法或API来获取基本块的抽象语法树(几行代码),进一步说,我应该能够比较生成的AST。

我从来没有这样做过,但如何获取基本块的文本并在其周围放置一个简单的包装器:

class AST {
    void method() {
        // basic block here
    }
}

并将其传递给解析器?它将为您提供比您想要的更多的功能,但您可以在AST中向下导航几个节点,下面的整个子树将是您想要的AST。

根据Eclipse的ASTParser,可以在Eclipse IDE之外使用。现在我担心如何比较它,我是指语义。您尝试过吗?。。。如果我给你一点随机的Java,你到底要如何决定用什么包装它,这样它才能被解析?是的,如果有人给你一段声称是完整方法的代码,这很容易。否则就不那么明显了。如果OP真的只解析方法的话,这可能对他狭窄的应用程序有效。。。他已经说过他对基本块感兴趣,而不仅仅是方法。基本块只能出现在方法中,并且比方法中出现的更具限制性,因为它不能包含任何控制流构造。因此,任何包装都可以如上所述。