python - 在 Python 中使用 plyj 解析 Java 源代码

标签 python parsing antlr3 ply

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

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

谢谢!

最佳答案

如果您满足于一种启发式解决方案,那么可以选择具有构建 AST 的可靠 Java 解析器(我的理解是 ANTLR 非常适合 Java)的解决方案,解析源代码,并构建自定义代码来抓取树数据结构向下查找类声明,然后爬得更浅一层以获取方法/成员。 [我不知道 PlyJ 是否有经过测试的 Java 语法,或构建 ASTs]。

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

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

有些工具可以可靠、准确地完成这项工作,但需要付出更多的努力才能落实到位。

关于python - 在 Python 中使用 plyj 解析 Java 源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21298982/

相关文章:

python - Twitter oauth 与flask_oauthlib,无法生成请求 token

python - 逐位解析 argparse 输入

python - 使用 argparse 解析形式为 "arg= val"的参数

R-从字符串右边提取第n个字符后提取信息

Python:填补两个地 block 之间的空白

python - 计算文件中某个三联体的数量(DNA 密码子分析)

grammar - bool /条件表达式的 ANTLR v3 语法

parsing - ANTLR语法: parser- and lexer literals

c++ - ANTLR 3.2 中的 C++ 代码生成准备好了吗?

python - 如何验证表单中的电子邮件地址域?