【问题标题】:Static code parser for Java source code to extract methods / comments用于 Java 源代码的静态代码解析器以提取方法/注释
【发布时间】:2013-02-17 19:29:32
【问题描述】:

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

有人可以建议吗?

谢谢。

【问题讨论】:

  • 解压成什么格式?您可以只运行 Javadoc 工具并处理生成的 HTML。
  • 对我来说,如果 API 可用,它们会更有用,getMethodNames、getComments、getDocumentation 等。此外,Javadoc 不会给我在方法内部声明的私有变量、从方法调用的方法的名称等
  • 您正在寻找的是成熟的static analyzer
  • 我还在研究这个。我猜 ASTParser 和 Doclet 组合可以解决。任何帮助将不胜感激。

标签: java parsing static static-analysis


【解决方案1】:

您可以通过 Eclipse 使用 ASTParser。使用起来超级简单。

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

【讨论】:

  • 是的,我正在检查那个。有没有办法使用 ASTParser 在方法中获取“cmets”?
  • ASTParser 确实声明了一个名为“Comment”的节点。您可以阅读它的 javadoc
  • CompilationUnit 给出了commentList,但我无法获得实际的cmets。例如:如果注释是 // hello world,它只输出 //
  • 总的来说 - programcreek.com/2011/01/… 更有用。
【解决方案2】:

这是我从 java 文件中提取方法签名的方法:

我使用Sublime Text 2,到我想从中获取签名的文件,并使用为以下Regex I 设置的正则表达式查找Ctrl+F制作(我在我的代码上对其进行了测试,它可以工作,我希望它也对你有用)

((synchronized +)?(public|private|protected) +(static [a-Z\[\]]+|[a-Z\[\]]+) [a-Z]+\([a-Z ,\[\]]*\)\n?[a-Z ,\t\n]*\{)

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

希望对你有帮助。

【讨论】:

    【解决方案3】:

    如果您想要的 all 是每个方法的确切文本,以及方法内变量的确切文本,您可以使用生成 CST 的解析器,遍历 CST 以找到正确的节点,然后漂亮地打印找到的子树。 ANTLR has a Java parser 可以解决这个问题。我不知道它是否会捕获cmets。我认为 ANTLR 的主要分布是用 Java 编码的。

    您可能会在 Java 中使用 Java 的词法分析器来执行此操作,从而实现相当于查找关键短语的坏岛解析器。 (“在 'class' 之后,找到 '{' 并打印出找到匹配的 '}' 的所有内容”将为您提供所有方法和字段)。

    如果您想要更精确的细节(例如,您想知道参数的实际类型而不仅仅是它的名称,或者类型的实际定义位置),您将需要一个具有完整前端和名称解析的解析器. (ANTLR 不会这样做。)Eclipse JDT 肯定会构建树。它可能会进行名称解析。我们的DMS Software Reengineering Toolkit 及其Java Front End 可以提供此任务所需的一切,包括评论捕获和提取。 DMS 不是用 Java 编码的。

    您反对 Javadoc 的不足,因为它没有为您提供方法的内容。也许我们的Java Source Browser 确实为您提供了该代码,它会提供更好的服务。它集成了来自我们的 DMS/Java 前端的名称解析数据,以将 JavaDoc 类型的信息超链接到可浏览的源文本中;所有字段以及局部变量都被显式索引。源浏览器不是用 Java 编码的,但大概你只是想运行它并抓取你的结果。这种刮擦可能比盯着屏幕看起来更难;这样的显示背后有很多 HTML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 2011-07-26
      • 1970-01-01
      • 2023-03-25
      • 2013-04-07
      相关资源
      最近更新 更多