Clang: Как выглядит AST (абстрактное синтаксическое дерево)?

Привет, я новичок в разработке компиляторов, и мне интересно, как выглядит AST. У меня есть небольшой фрагмент кода, и я использую 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_are,a;
    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;
}

Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос