こんにちは、私はコンパイラの開発で新しく、どのようにASTのように見えるのだろうかと思っています。私はコードの小さな部分を持っており、私はASTを生成するためにClangを使用します。私はそれから多くの情報を得ることはありません。 見た目から、Syntaxツリーはソースとまったく同じですが、テストするほぼすべてのサンプルに追加される1つの構造体を除きます。Clang:AST(抽象構文ツリー)はどのように見えますか?
出典:
class A {
public:
int *a, *b, *c;
int i;
void sum() {
a = new int[5];
b = new int[5];
c = new int[5];
for (i = 0; i < 5; i++) {
a[i] = i;
b[i] = i;
}
for (i = 0; i < 5; i++) {
c[i] = a[i] + b[i];
}
delete[] a; delete[] b; delete[] c;
}
};
class B : public A {
};
int main() {
B bclass;
bclass.sum();
return 0;
}
コマンドが生成するAST:
clang++ -cc1 -ast-print ~/sum.cpp
AST出力:
struct __va_list_tag {
unsigned int gp_offset;
unsigned int fp_offset;
void *overflow_arg_area;
void *reg_save_area;
};
typedef struct __va_list_tag __va_list_tag;
class A {
public:
int *a;
int *b;
int *c;
int i;
void sum() {
this->a = new int [5];
this->b = new int [5];
this->c = new int [5];
for (this->i = 0; this->i < 5; this->i++) {
this->a[this->i] = this->i;
this->b[this->i] = this->i;
}
for (this->i = 0; this->i < 5; this->i++) {
this->c[this->i] = this->a[this->i] + this->b[this->i];
}
delete [] this->a;
delete [] this->b;
delete [] this->c;
}
};
class B : public A {
};
int main() {
B bclass;
bclass.sum();
return 0;
}
おかげ
メモ:-ast-printの代わりに-ast-dumpを試してみるとよいでしょう。その表現はあなたが探しているものに近いかもしれません。 – servn
質問がASTの外観であり、ClangのASTの外観ではない場合は、この回答が役に立ちます:http://stackoverflow.com/questions/6376662/how-a-ast-for-an-object -oriented-programming-language-like-look-like/6378997#6378997 –