如何使用Clojure分析Java源文件

时间:2012-02-21 10:09:41

标签: clojure antlr

我正在尝试用Clojure分析Java源文件,但我找不到办法做到这一点。

首先,我想使用Eclipse AST插件(通过将必要的JAR复制到我的Clojure项目中),但在看到Eclipse AST的API(基于访问者的walker)之后我放弃了。

然后我尝试用ANTLR创建一个Java解析器。我只能为ANTLR(http://openjdk.java.net/projects/compiler-grammar/antlrworks/Java.g)找到一个Java 1.6语法,并且它不会使用最新的ANTLR(here编译我正在获得的错误)。

现在我不知道我该怎么做。最糟糕的是,我会尝试使用Eclipse AST。

有没有人知道使用Clojure解析Java文件的更好方法?

感谢。

编辑:澄清我的观点: 我需要在Java项目中找到一些特定的方法调用并检查它的参数(我们有多个方法的定义,具有不同类型的参数)。现在我有一个用Java编写的简单解决方案(Eclipse AST),但我希望尽可能在这个项目中使用Clojure。

2 个答案:

答案 0 :(得分:4)

  

...它不能用最新的ANTLR编译......

我无法重现。

使用ANTLR v3.2,我收到了一些警告,但没有错误。使用ANTLR v3.3和v3.4(最新版本),生成解析器没有问题。

你没有提到你是如何(试图)生成一个词法分析器/解析器,但是这里它对我有用:

java -cp antlr-3.4.jar org.antlr.Tool Java.g

编辑1

这是运行命令时的输出:

ls
wget http://www.antlr.org/download/antlr-3.4-complete.jar
wget http://openjdk.java.net/projects/compiler-grammar/antlrworks/Java.g
java -cp antlr-3.4-complete.jar org.antlr.Tool Java.g
ls

enter image description here

如您所见,lexer和解析器的.java文件已正确创建。

编辑2

您可以使用现有的解析器(仅限Java {1.5} AFAIK),而不是自己生成解析器(使用语法),并使用Clojure代码调用它。

答案 1 :(得分:2)

这取决于你想做什么 - 你希望从分析中获得什么?

如果您想实际编译Java或至少构建一个AST,那么您可能需要使用ANTLR或Eclipse AST路由。 Java并不是一种要解析的语言,但你可能仍然不想重新发明过多的轮子.....所以你不妨在Eclipse和OpenJDK上工作。

但是,如果您只是在解析基本语法和分析某些功能时感兴趣,那么使用更简单的通用解析器组合器库可能会更容易。探索的选项:

  • fnparse(Clojure,不确定维护得如何)
  • jparsec(Java,但可以很容易地从Clojure中使用)