1

您是否知道可以解析 Java 源代码(例如来自 jar 文件或定义的类路径)的 C++ 库(开源或免费用于非商业用途)?我想提取类、类成员、方法、方法调用以及这些工件之间的关系。

我花了一整天的时间在谷歌上搜索解决方案。要么我瞎了,要么看不懂!:)

4

2 回答 2

1

您无法从jar文件中获取源代码,因为它实际上是一组(二进制)类文件。假设您的意思是可能已用于生成 jar 文件的源代码,那么就有一个不错的答案。

如果您想要一个开源解决方案,您可以尝试ANTLR,它具有Java 1.5 语法,AFAIK 将构建 AST。从中您可以“提取”您想要的项目的树,或者至少是感兴趣的子树的行号;从那里,您可以提取所需的代码。

我相信 ANTLR 可以配置为生成基于 C++ 的解析器。

要捕获这些之间的关系,您需要全名和类型解析,这样您就知道标识符实际引用了哪个定义。为此,ANTLR 只是一个解析器并不能解决问题。你需要在解析后过上生活

一个替代方案可能是 Java 编译器。它提供了某种 API。

于 2012-07-02T23:36:18.160 回答
0

有许多可用于 Java 的反编译器。这些不一定基于 C++,但它们可以将 Java 类和库转换回源代码。

示例:JD Core、DJ Java 反编译器。更多的

于 2016-02-02T03:57:12.107 回答