Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于提取方法/注释的Java源代码的静态代码解析器_Java_Parsing_Static_Static Analysis - Fatal编程技术网

用于提取方法/注释的Java源代码的静态代码解析器

用于提取方法/注释的Java源代码的静态代码解析器,java,parsing,static,static-analysis,Java,Parsing,Static,Static Analysis,我正在寻找一个解析器,它可以从java类(静态源代码->.java文件)和方法签名、注释/文档、每个方法的变量中提取方法。最好使用Java编程语言 有人能给点建议吗 谢谢。如果您只需要每个方法的确切文本以及方法中变量的确切文本,您可以使用一个生成CST的解析器,遍历CST找到正确的节点,然后预打印找到的子树。这对这个有用。我不知道它是否会捕获评论。我认为ANTLR的主要发行版是用Java编写的 在Java中,使用lexer for Java,实现一个查找关键短语的坏岛解析器,您很可能可以更轻松地

我正在寻找一个解析器,它可以从java类(静态源代码->.java文件)和方法签名、注释/文档、每个方法的变量中提取方法。最好使用Java编程语言

有人能给点建议吗

谢谢。

如果您只需要每个方法的确切文本以及方法中变量的确切文本,您可以使用一个生成CST的解析器,遍历CST找到正确的节点,然后预打印找到的子树。这对这个有用。我不知道它是否会捕获评论。我认为ANTLR的主要发行版是用Java编写的

在Java中,使用lexer for Java,实现一个查找关键短语的坏岛解析器,您很可能可以更轻松地完成这项工作。(“class”之后,找到“{”并将找到的所有内容打印出来,直到匹配的“}”将为您提供所有的方法和字段)

如果您想要更精确的细节(例如,您想要知道参数的实际类型,而不仅仅是它的名称,或者类型的实际定义位置),那么您需要一个具有完整前端和名称解析的解析器。(ANTLR不会这么做。)树当然会建树;它很可能没有命名解析。我们的its可以提供此任务所需的一切,包括注释捕获和提取。DMS不是用Java编写的


您反对Javadoc是因为它没有提供方法的内容。也许我们的,这确实给你的代码,将更好地服务。它将DMS/Java前端的名称解析数据与hyperlink JavaDoc类型信息集成到可浏览的源文本中;所有字段以及局部变量都显式索引。源浏览器不是用Java编写的,但您可能只是想运行它并获取结果。这样的抓取可能比盯着屏幕看要困难得多;这样的显示背后有很多HTML。

您可以通过eclipse使用ASTParser。它的使用非常简单


找到一个快速的独立示例。

以下是我从java文件中提取方法签名的步骤:

我使用,到我想要从中获取签名的文件,以及为我制作的以下正则表达式设置的do a find Ctrl+F with regular expression(我在代码中测试了它,它工作了,我希望它也能为您工作)

突出显示结果后,我单击“全部查找”,然后复制Ctrl+C,打开一个新选项卡Ctrl+N并粘贴Ctrl+V。
然后,您将看到所有的方法签名


希望有帮助。

提取到什么格式?您可以只运行Javadoc工具并处理生成的HTML。对我来说,如果API可用,则更有用,如GetMethodName、getComments、getDocumentation等。此外,Javadoc不会给我方法内声明的私有变量,从方法调用的方法的名称等。您正在寻找的是一个完整的方法。我仍在对此进行研究。我想ASTParser和Doclet的组合可以解决这个问题。。任何帮助都将不胜感激。是的,我正在查看。有没有一种方法可以使用ASTParser在方法内部获取“注释”?ASTParser确实声明了一个名为“注释”的节点。您可以阅读它的JavadocCompliationUnit给出的注释列表,但我无法获得实际的注释。例如:如果注释是//hello world,那么它只输出//all-更有用。
((synchronized +)?(public|private|protected) +(static [a-Z\[\]]+|[a-Z\[\]]+) [a-Z]+\([a-Z ,\[\]]*\)\n?[a-Z ,\t\n]*\{)