繁体   English   中英

如何使用javac工具解析器从java文件中读取内联注释?

[英]How to read inline comments from java file using javac tools parser?

我使用tools.jar(即JavaCompiler )中的javac来解析java文件。 我使用TreePathScanner的实现来解析源代码。 到目前为止,一切似乎都很好,因为我可以解析导入,包名,类名,方法名,说明......

但我确实有内联注释的问题 - 我不能简单地让它们出现在创建的AST树中,或访问它们。 但是,我能够读取类,方法等的javadoc注释 ,但没有内联注释。

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

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

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

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

“编译器解析器”和“重新设计解析器”之间的关键区别与捕获有关文字的布局,注释和格式的信息有关。 正如其他人所观察到的那样,大多数编译器都抛弃了所有这些信息,因为它与编译低级代码没有密切关系。

类似地,经典解析器生成器(例如JavaCC,ANTLR等)几乎不支持捕获/重新生成此信息。

相比之下,重新设计解析器用于分析代码注释,有时甚至可以修改代码而不会丢失(或适当地修改注释)。 对于带注释的代码分析,你不能丢弃注释: - }对于代码修改,如果你基于原始重新生成更改的代码,如果更改的代码保留代码布局,注释和文字“格式”(例如, ,将十六进制文字作为十进制值进行重新定义是合法且等效的,但会使原作者非常不满意。 要做到这一点,重新设计解析器需要特殊的词法分析器来捕获所有这些数据,并解析不会丢弃它的机器。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM