如何使用Clojure分析Java源文件

sin*_*nan 5 antlr clojure

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

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

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

现在我不知道我该怎么做.在最坏的情况下,我会尝试使用Eclipse AST.

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

谢谢.

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

Bar*_*ers 4

...并且它不能使用最新的 ANTLR 进行编译...

我无法重现这一点。

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

您没有提到您如何(尝试)生成词法分析器/解析器,但它对我来说是如何工作的:

java -cp antlr-3.4.jar org.antlr.Tool Java.g
Run Code Online (Sandbox Code Playgroud)

编辑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

在此输入图像描述

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

编辑2

您可以使用像这样的现有解析器(据我所知仅限 Java 1.5)并从 Clojure 代码中调用它,而不是自己生成解析器(从语法)。