如何使用Clojure分析Java源文件

如何使用Clojure分析Java源文件,clojure,antlr,Clojure,Antlr,我试图用Clojure分析Java源文件,但我找不到一种方法 首先,我想使用EclipseAST插件(通过将必要的JAR复制到我的Clojure项目中),但在看到EclipseAST的API(基于访问者的walker)后,我放弃了 然后我尝试用ANTLR创建Java解析器。我只能找到一个针对ANTLR()的Java1.6语法,它没有使用最新的ANTLR编译(这就是我得到的错误) 现在我不知道该怎么做。最坏的情况下,我会尽量和你一起去 有人知道用Clojure解析Java文件的更好方法吗 谢谢 编

我试图用Clojure分析Java源文件,但我找不到一种方法

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

然后我尝试用ANTLR创建Java解析器。我只能找到一个针对ANTLR()的Java1.6语法,它没有使用最新的ANTLR编译(这就是我得到的错误)

现在我不知道该怎么做。最坏的情况下,我会尽量和你一起去

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

谢谢

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

这取决于您想做什么-您希望从分析中得到什么

如果您想要实际编译Java或至少构建一个AST,那么您可能需要使用ANTLR或EclipseAST路径。Java不是一种很难解析的语言,但您可能仍然不想重新发明太多轮子。。。。。因此,您不妨在Eclipse和OpenJDK工作的基础上进行构建

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

  • (Clojure,不确定维护得如何)
  • (Java,但可能很容易从Clojure使用)
。。。而且它不使用最新的ANTLR编译

我无法复制这一点

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

您没有提到如何(尝试)生成lexer/parser,但以下是它的工作原理:

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 ls wgethttp://www.antlr.org/download/antlr-3.4-complete.jar wgethttp://openjdk.java.net/projects/compiler-grammar/antlrworks/Java.g java-cp antlr-3.4-complete.jar org.antlr.Tool java.g ls

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

编辑2
您可以使用现有的解析器(仅限Java 1.5 AFAIK)并从Clojure代码中调用它,而不是自己(根据语法)生成解析器。

嘿,谢谢,但这并不是我想要的。查看我的更新。您可以从我的错误日志中查看它。你能把你语法文件的链接发给我吗?啊,我通常不遵循外部代码和/或错误。语法是您在问题中发布的语法。当我将JAR移动到一个lib文件夹并执行
java-cp'lib/*'org.antlr.Tool java.g
时,生成解析器同样没有问题。你说得对。我想我在将Java.g的内容从浏览器复制到文件时犯了一个错误。现在我将链接保存为Java.g,并最终生成一个解析器。谢谢我仍然对解析Java源代码的其他方法持开放态度。谢谢。但现在我有另一个问题。奇怪的是,在ANTLR生成的解析器的源代码中,所有方法都返回
void
,因此我无法从Clojure获得任何数据。你知道这件事吗?@sinan,添加
output=AST
.g
文件中的
选项{…}
。这样,将返回一个
CommonTree
(您可能需要强制转换它)。