我正在尝试解析Java源代码以获取方法名称,调用它们,变量名称等。我在Python中寻找一个预构建或可扩展的模块,偶然发现了plyj(https://github.com/musiKk/plyj)。 我想找出一个方法,然后获取方法的代码并根据某些条件对其进行一些字符串处理。 但我无法弄清楚它的用法,这个例子太模糊了。有人能指出一个很好的用法例子吗?
另外,如果你能告诉我antlr3(https://github.com/antlr/antlr3)是否更有用(例如),因为我是这些模块的新手并且不知道应该使用哪一个。 我没有性能问题,我只想根据功能和易用性进行比较。
谢谢!
答案 0 :(得分:1)
如果你愿意接受一个有害的解决方案,那就得到一个有可靠的Java解析器来构建一个AST(我的理解是ANTLR非常适合Java),解析源代码,并构建自定义代码来抓取树数据结构向下找到类声明,并爬行一层较浅以获取方法/成员。 [我不知道PlyJ是否有经过测试的Java语法,或构建AST]。
对于ANTLR解决方案,至少应该很容易打印出那些名称。印刷这些尸体并不容易; ANTLR没有简单的方法让我知道如何将子树打印成文本。如果可以的话,你可能会发现评论已经消失,在lexing期间被淘汰了。您可以从树节点中提取行号,然后返回到原始文件并打印行号范围以获取方法体。 (大多数解析器生成器即使它们构建AST也不支持打印任意子树,所以我认为pylj没有区别。)
这不会为每个文件或嵌套类处理多个类。
有些工具可以可靠而准确地完成这项工作,但需要付出更多努力。