我正在尝试用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。
答案 0 :(得分:4)
...它不能用最新的ANTLR编译......
我无法重现。
使用ANTLR v3.2,我收到了一些警告,但没有错误。使用ANTLR v3.3和v3.4(最新版本),生成解析器没有问题。
你没有提到你是如何(试图)生成一个词法分析器/解析器,但是这里它对我有用:
java -cp antlr-3.4.jar org.antlr.Tool Java.g
这是运行命令时的输出:
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
如您所见,lexer和解析器的.java
文件已正确创建。
您可以使用现有的解析器(仅限Java {1.5} AFAIK),而不是自己生成解析器(使用语法),并使用Clojure代码调用它。
答案 1 :(得分:2)