簡體   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