Merhaba Compiler geliştirmede yeni ve AST'nin nasıl olduğunu merak ediyorum. Küçük bir kod bölümüm var ve AST'yi üretmek için Clang kullanıyorum. Bundan fazla bilgi alamıyorum. Görünüşten hemen sonra, sözdizimi yaptığım hemen hemen tüm örneklere eklenen bir yapı dışında, sözdizimi ağacı kaynakla tam olarak aynıdır.Clang: AST (soyut sözdizimi ağacı) neye benziyor?
Kaynak:
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;
}
Komut üretmek için AST:
clang++ -cc1 -ast-print ~/sum.cpp
AST çıkışı:
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;
}
Teşekkür
Sadece bir not: -ast-print yerine -ast-dump'i denemek isteyebilirsiniz; Bu temsil, aradığınız şeylere daha yakın olabilir. – servn
Eğer soru AST'nin neye benzediğini ve Clang'ın AST'sinin neye benzediğini sorgulamıyorsa, bu cevabı yararlı bulabilirsiniz: http://stackoverflow.com/questions/6376662/how-a-ast-for-an-object -akıcı-programlama-dil-olur gibi/6378997 # 6378997 –