2

JavaServer Page からすべての HTML を削除する方法を誰もが知っています。Java コードとすべての JSP プロパティのみを保持します。

私はそれを検索しますが、これを行う方法が見つかりません。意志が機能することを私が知っている唯一の方法は、jsp のパーサーを作成し、その後 AST を分析して重要なノードを保持することですが、この解決策は苦痛です。

誰かが簡単な方法でこれを行う方法を知っている場合は、私に知らせてください。そうでない場合は、パーサーが可能な唯一の方法であることを知っていれば、私も感謝します。

編集:

これは、すべての JSP で Java コードまたは JSP プロパティを含む行数をカウントするために必要です。

4

1 に答える 1

2

HTML と JSP は両方とも、アトム (語彙素) とより複雑な構造 (テーブル、ステートメントなど) の両方の点で豊富な構造であるため、これを簡単に行うことはできません。これらすべての構造を認識する完全なパーサーがトリックを実行します。 . そのようなパーサーを手に入れることができれば、それは簡単な方法です。

しかし、HTML と JSP の物理的な行数だけが必要な場合は、このタスクに必要なパーサーの部分だけが必要です。特に、すべての構文認識機構が必要なわけではありません。アトムを認識する部分だけです。たとえば、構文解析エンジンの字句部分だけです。

これは、シンタックスのタイプ (HTML や JSP など) ごとにレクサーを定義することで実行できます。レクサーは、構文間の遷移が発生したときに相互に制御を渡します。これは非常に標準的なタスク モジュロ汗エクイティです。次に、行カウントは非常に簡単です。認識された各語彙素は、その開始行と終了行を記録し、必要な生データを提供します。

HTML および JSP 用のレクサーを構築することは、技術的に難しいことではありませんが、多くの作業が必要になる場合があります (「苦痛」とは、あなたの言い方です)。特に HTML は長年にわたってかなり複雑になり、JSP にはおそらく Java7 のほとんどがサブセットとして含まれています。

そのようなパーサーを取得できれば、物理的な行数については、実際にはレクサー部分だけを抽出できるはずです。しかし、パーサーを変更せずにそのまま使用する方がおそらく簡単です。

JSP ページのより複雑なプロパティ (たとえば、HTML 構造のネストの深さ、 論理ステートメントの数、コードの結合など) を測定することに決めた場合、選択の余地はありません。これらの測定はベースであるため、パーサーが本当に必要になります。語彙素だけでなく、言語構造の複雑な構造について。

オープン ソースの JSP パーサーが利用できる可能性があります。確かに、JSP を実行する Web サーバーには、そのようなパーサーが含まれている必要があります。Tomcat の内臓を調べてください。Web サーバーからパーサーを抽出する必要がありますが、これには多少の作業が必要になる可能性があります。この種のタスクを正確にサポートすることを目的とした商用 JSP パーサーがあることは知っています (私の会社には 1 つあります)。

カウントだけが必要で、作業は必要ない場合は、このメトリック コレクションが既に組み込まれているツールを入手できます。私の会社のソース コード検索エンジン (SCSE) 製品を参照してください。この製品は、コードのインデックス作成ステップの副産物として、ファイルに対して SLOC、McCabe、および Cyclometric 測定値を生成します。SCSE は、この効果をすぐに実現するために必要な JSP パーサーを使用します。

于 2013-09-28T02:40:37.987 に答える