0

いくつかの情報を取得するために、いくつかの C++ ファイルを解析する必要があります。ユーザー ケースの 1 つは、列挙値 "ID_XYZ" があり、それがソース ファイルに何回出現するかを知りたい場合です。だから私の質問は、C++ の区切り記号は何ですか?

4

1 に答える 1

2

純粋に区切り文字に基づいて C または C++ ソース コードをトークン化することはできません。一度に 1 文字ずつ読み込み、その文字が現在のトークンの一部であるかどうかを判断する必要があります。

いくつかの例を挙げると、C スタイルのコメント開始トークンが表示されたら、コメント終了トークンに遭遇するまで文字を調べる必要があります。同様に、文字列とプリプロセッサ ディレクティブ (#if 0 .... #endifシーケンスなど) も同様です。本当に正しく行うには、トリグラフも正しく処理する必要があります。たとえば、次のようなことを考えてみてください。

// Why doesn't this work??/
ID_XYZ = 1;

lexer がトライグラフを正しく処理しない場合、おそらくこれをあなたのインスタンスとして識別しますID_XYZが、実際にはそうではありません??/。前の行の最後の は、実際には に解決されるトライグラフです\。つまり、" single-line" コメントは実際には次の行の最後まで伸びており、 の見かけのインスタンスID_XYZは実際にはコメントの一部です。

于 2013-07-17T05:09:31.043 に答える