我想从 JavaParser 或其他 Java 代码解析器中获取类型化的 AST。这意味着我将能够获取特定变量的类型或参数+方法的返回类型。我用谷歌搜索了很多关于 JavaParser 的这个特性,但没有找到任何东西,我认为这是因为 JavaParser 生成了无类型的 AST。所以,请告诉我如何才能得到这个。但是请不要说要解析所有代码并制作我自己的一组类型,我试过了,这很难,我认为这比制作我自己的 AST 解析器更难。
1337 次
1 回答
2
我是 JavaParser 的贡献者,我只是在 Clojure 中基于 JavaParser 完成的。我在一篇文章How to build a symbol solver for Java, in Clojure中解释了如何实现它
JavaParser 或任何其他解析器只是构建代码的抽象语法树 (AST),然后您必须解析符号以了解哪些引用与哪些声明相关联。
假设您的代码中有如下内容:
a = 1;
现在,要了解 a 的类型,您应该找到它的声明位置。它可以是对参数、局部变量、在当前类中声明的字段或继承的字段的引用。如果它是继承的字段,您应该找到父类的代码(或字节码)并在那里查找 a 的声明。解析器不会这样做,解析器只需要一个字符串(或一个文件)并构建一个 AST。
构建符号解析器不是火箭科学,但它需要一些工作。我在上面链接的帖子中描述的解决方案可在 GitHub 上找到,如果您愿意,我很乐意帮助您使用它(即使它是用 Clojure 编写的,您也可以很容易地从 Java 调用它)
于 2015-05-20T20:44:07.467 回答