Xin chào Tôi là người mới trong việc phát triển Compiler, và tôi tự hỏi AST trông như thế nào. Tôi có một đoạn mã nhỏ, và tôi sử dụng Clang để tạo ra AST. Tôi không nhận được nhiều thông tin từ nó. Từ giao diện của nó, cây Cú pháp chính xác giống như nguồn, ngoại trừ một cấu trúc được thêm vào hầu như bất kỳ mẫu nào mà tôi thử nghiệm.Clang: AST (cây cú pháp trừu tượng) trông như thế nào?
Nguồn:
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;
}
Command để tạo AST:
clang++ -cc1 -ast-print ~/sum.cpp
sản lượng 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;
}
Cảm ơn
Chỉ cần lưu ý: bạn có thể muốn thử -ast-dump thay vì in-in; đại diện đó có thể gần hơn với những gì bạn đang tìm kiếm. – servn
Nếu câu hỏi là AST trông như thế nào, và không phải AST của Clang trông như thế nào, bạn có thể thấy câu trả lời này hữu ích: http://stackoverflow.com/questions/6376662/how-a-ast-for-an-object định hướng-lập trình-ngôn ngữ-trông giống như/6378997 # 6378997 –