C ソース コードを解析する語彙パーサーが必要で、Java 言語を使用して実行する必要があります。私はそれについて調査し、ANTLR と JAVACC を見ました。これらのパーサーのうち、使用するのに適しているのはどれですか?その理由は? または、他に推奨するパーサーはありますか?
回答をいただければ幸いです。ありがとう。
あなたがしようとしているのは、与えられたソースコードをスキャンし、コード内の変数と関数を数えることです。これには最初の2つのステップが含まれます。字句アナライザーは、文字ストリームからの入力をトークンに分割し(ステージ1)、トークンをパーサーに送信して(ステージ2)、トークンを識別して検証します。コンパイラを作成できるプログラミング言語に制約はありません。これは、任意の言語で任意の言語の完全なコンパイラを作成できるためです。あなたはコンパイラを設計する人であり、それが何をするかを完全に制御できます(ヘブライ語用のコンパイラを作成できます-忍耐力があれば-)
したがって、あなたの場合は、レクサーとパーサーを最初から手動で作成するか(これはあなたにとってより良いアプローチです)、非常に単純な命令から字句アナライザーを生成できるJLexのような字句アナライザージェネレーターを使用できます。トークンの正規表現パターン。
レクサーは、入力ストリームをトークンに分割するだけです。それらは何もカウントしないため、単純なメトリックを計算する目的には不完全です。
「関数」と「変数」を区別したい場合は、トークンのシーケンスをチェックしてそれらが何を表しているかを判断する何らかのパーサーが必要になります (たとえば、「変数宣言、使用、または関数宣言」)。ときどき間違いを犯す代償を払ってカウントのニーズを満たすアドホック パーサーを作成することも、実際のパーサーを入手して正しく実行することもできます。(C 変数宣言の解析は、一見したよりもはるかに困難です。かなり難解な構文です)。
これが宿題であるか、実際の問題であり、答えが間違っていてもかまわない場合は、任意のレクサー ジェネレーターとアドホック解析コードで十分に機能する可能性があります。
これを正確に行いたい場合は、プリプロセッサとパーサーが必要であり、それらを探した方がよいでしょう (暗黙的にレクサーを含む)。