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