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