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 パーサーを使用します。