6

JavaCompilerjavaファイルを解析するためにtools.jar(つまり)からjavacを使用しています。の実装を使用してソースを解析しますTreePathScanner。これまでのところ、インポート、パッケージ名、クラス名、メソッド名、命令を解析できるので、すべて問題ないようです...

しかし、インラインコメントには問題があります。作成された AST ツリーにそれらを表示したり、アクセスしたりすることはできません。ただし、クラス、メソッドなどのjavadoc コメントを読み取ることはできますが、インライン コメントは読み取れません。

インラインコメントを最良の方法で読むには? 私はnetbeansのソースコードを見ています(解析にもjavacを使用しているため)が、それについて簡単に見つけることができません。

私の必死の解決策は、ソースファイルのステートメントの位置を使用してから、2つのステートメントの間にあるすべてのコメントを手動で解析することです。または同様のことですが、2 つのツリー ノード間です。

誰もがより良い解決策を知っていますか? ありがとうございました!

4

2 に答える 2

4

できません。コンパイラはそれらを破棄します。コンパイラは常にそれを行います。Java コンパイラーが Javadoc コメントを破棄しないのは、Javadoc がコンパイラーを使用してそれらを見つけ、Javadoc 担当者がコンパイラー担当者と協力したからにすぎません。

于 2013-02-02T00:12:16.510 に答える
1

「コンパイラ パーサー」と「リエンジニアリング パーサー」の主な違いは、リテラルのレイアウト、コメント、および形式に関してどのような情報を取得するかに関係しています。他の人が観察したように、ほとんどのコンパイラはこの情報をすべて捨てます。これは、低レベルのコードにコンパイルすることとは関係がないためです。

同様に、従来のパーサー ジェネレーター (JavaCC、ANTLR など) は、この情報のキャプチャ/再生成をほとんどサポートしていません。

対照的に、リエンジニアリング パーサーは、コードコメントを分析するために使用されます。場合によっては、コードを失うことなく (またはコメントを適切に修正して) コードを修正するためにも使用されます。コメント付きのコード分析の場合、コメントを捨てることはできません:-} コードの変更の場合、元のコードに基づいて変更されたコードを再生成する場合、変更されたコードがコードのレイアウト、コメント、および文字通りの「フォーマット」を保持すると便利です (例: 、16 進リテラルを 10 進値として再生成することは合法で同等ですが、元の作成者をかなり不幸にします)。これを行うには、リエンジニアリング パーサーには、このすべてのデータを取得するための特別なレクサーと、データを破棄しない解析機構が必要です。

当社の DMS ソフトウェア リエンジニアリング ツールキットには、リエンジニアリング パーサーが一般的な機構として含まれています。DMS ベースのパーサーは、さまざまな言語 (OP の Java への関心を含む) 用に存在します。DMS は、すべてのコメント/レイアウト/フォーマット情報をキャプチャします。分析ツールはそのすべてにアクセスできます。

TXL と Stratego もこれをサポートしています。

于 2013-02-02T00:26:13.257 に答える