来自java源代码的工件提取器 你知道一个C++库(开源,或者免费用于非商业用途),它可以解析java源代码,例如从JAR文件或定义的类路径中解析?我想提取类、类成员、方法、方法调用以及这些工件之间的关系

来自java源代码的工件提取器 你知道一个C++库(开源,或者免费用于非商业用途),它可以解析java源代码,例如从JAR文件或定义的类路径中解析?我想提取类、类成员、方法、方法调用以及这些工件之间的关系,java,c++,parsing,Java,C++,Parsing,我花了一整天的时间在谷歌上寻找解决方案。要么我是瞎子,要么我不识字 您无法从jar文件获取源代码,因为jar文件实际上是一组(二进制)类文件。假设您指的是可能用于生成jar文件的源代码,那么有一个不错的答案 如果你想要一个开源的解决方案,你可以试试,它有一个和AFAIK将建立AST。从中,您可以“提取”所需项目的树,或者至少提取感兴趣子树的行号;从那里,您可以提取所需的代码 我相信可以将ANTLR配置为生成基于C++的解析器 要捕获这些之间的关系,需要全名和类型解析,以便知道标识符实际引用的定义

我花了一整天的时间在谷歌上寻找解决方案。要么我是瞎子,要么我不识字

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

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

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

要捕获这些之间的关系,需要全名和类型解析,以便知道标识符实际引用的定义。因此,ANTLR仅仅是一个解析器是不会起作用的;你需要过一种舒适的生活


另一种选择可能是Java编译器;它提供了某种API

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

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

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

要捕获这些之间的关系,需要全名和类型解析,以便知道标识符实际引用的定义。因此,ANTLR仅仅是一个解析器是不会起作用的;你需要过一种舒适的生活


另一种选择可能是Java编译器;它提供了某种API

有许多反编译器可用于Java。这些不是基于C++的,但它们可以将java类和库转换为源代码。
示例:,DJ Java反编译器

有许多反编译器可用于Java。这些不是基于C++的,但它们可以将java类和库转换为源代码。 示例:,DJ Java反编译器