4

我正在尝试解析 Java 源代码以获取方法名称、它们的调用、变量名称等。我正在寻找 Python 中的预构建或可扩展模块并偶然发现了 plyj ( https://github.com/musiKk/plyj)。我想找出一个方法,然后获取该方法的代码并根据某些条件对其进行一些字符串处理。但我无法弄清楚它的用法,这个例子太模糊了。谁能指出一个很好的用法示例?

另外,如果您可以让我知道 antlr3 ( https://github.com/antlr/antlr3 ) 是否更有用(例如),因为我是这些模块的新手,不知道该使用哪个模块。我没有性能问题,我只想根据功能和易用性来比较它们。

谢谢!

4

1 回答 1

1

如果你会满足于一个简单的解决方案,那么找一个有可靠的 Java 解析器来构建 AST(我的理解是 ANTLR 对 Java 非常好),解析源代码,并构建自定义代码来爬取树数据结构向下找到类声明,然后再往下爬一层以到达方法/成员。[我不知道 PlyJ 是否有经过测试的 Java 语法,或构建 AST]。

至少对于 ANTLR 解决方案,打印出它们的名称应该很容易。打印尸体不会那么容易;据我所知,ANTLR 没有简单的方法将子树打印为文本。如果可以的话,您可能会发现评论消失了,在词法分析过程中被消除了。您也许可以从树节点中提取行号,然后返回原始文件并打印出行号范围以获取方法主体。(大多数解析器生成器即使构建 AST 也不支持打印任意子树,所以我假设 pylj 没有什么不同)。

这不会很好地处理每个文件的多个类或嵌套类。

有些工具可以可靠、准确地做到这一点,但需要付出更多努力。

于 2014-01-23T07:51:57.110 回答