C++ はコンテキスト フリーではないため、ヘッダーがないと完全に正確になることはありません。
「AB(C);」の古典的な例を使用すると、関数宣言またはオブジェクト定義として認識できることを意味します。どちらでも構いません。ファイルを完全に解析する必要があります。
私はコードのセマンティック分析には興味がありません。構文上の分析だけであり、私の知る限り、clang の文法は最高のものの 1 つです。
問題は、いくつかのシナリオでは、clang がタイプを認識していないときにいくつかの宣言を回避していることですが、正しく解析できると思います。
次のケースを参照してください。class.cpp の内容:
A::A() { }
A::~A() { }
void A::B() { }
A::C() { }
clang コマンド ライン アプリケーションの実行:
$ clang -Xclang -ast-dump -fsyntax-only class.cpp
コンストラクターと最後のメソッドを AST ノードとして認識しているだけです。
typedef char *__builtin_va_list;
int A() (CompoundStmt 0x9a6a570 <class.cpp:3:8, col:10>)
int C() (CompoundStmt 0x9a6a600 <class.cpp:9:8, col:10>)
完全な AST ツリーを取得する方法はありますか?
ありがとう!