6

我正在使用来自 tools.jar(即JavaCompiler)的 javac 来解析 java 文件。我使用TreePathScanner. 到目前为止,一切似乎都很好,因为我可以解析导入、包名、类名、方法名、指令......

但是我确实对内联注释有问题——我不能简单地让它们出现在创建的 AST 树中,或者访问它们。但是,我可以阅读类、方法等的javadoc 注释,但不能阅读内联注释。

如何以最佳方式阅读内联评论?我正在查看 netbeans 源代码(因为它也使用 javac 进行解析),但我找不到任何关于它的内容。

我绝望的解决方案是使用源文件的语句位置,然后手动解析两个语句之间的所有内容以进行注释。或类似的东西,但在两个树节点之间。

有谁知道更好的解决方案?谢谢!

4

2 回答 2

4

你不能。编译器将它们丢弃。编译器总是这样做。Java 编译器不会丢弃 Javadoc 注释,只是因为 Javadoc 使用编译器来查找它们,并且 Javadoc 人员与编译器人员聚在一起。

于 2013-02-02T00:12:16.510 回答
1

“编译器解析器”和“再工程解析器”之间的关键区别在于捕获的有关布局、注释和文本格式的信息。正如其他人所观察到的,大多数编译器都会丢弃所有这些信息,因为它与编译为低级代码无关。

类似地,经典的解析器生成器(如 JavaCC、ANTLR 等)几乎没有提供对捕获/重新生成此信息的支持。

相反,重新设计解析器用于分析代码注释,有时甚至在不丢失(或适当地修改注释)的情况下修改代码。对于带有注释的代码分析,您不能丢弃注释 :-} 对于代码修改,如果您根据原始代码重新生成更改的代码,如果更改的代码保留代码布局、注释和文字“格式”(例如,将十六进制文字重新生成为十进制值是合法且等效的,但会使原作者非常不高兴)。为此,重新设计解析器需要特殊的词法分析器来捕获所有这些数据,并解析不会丢弃这些数据的机器。

我们的 DMS 软件再造工具包包括一个作为通用机器的再造解析器;基于 DMS 的解析器适用于多种语言(包括 OP 对 Java 的兴趣)。DMS 捕获所有注释/布局/格式信息。分析工具可以访问这一切。

TXL 和Stratego 也为此提供了一些支持。

于 2013-02-02T00:26:13.257 回答