हाय मैं कंपाइलर विकास में नया हूं, और सोच रहा हूं कि एएसटी कैसा दिखता है। मेरे पास कोड का एक छोटा सा भाग है, और मैं एएसटी उत्पन्न करने के लिए क्लैंग का उपयोग करता हूं। मुझे इससे ज्यादा जानकारी नहीं मिलती है। इसकी प्रकृति से, सिंटैक्स पेड़ स्रोत के समान ही है, एक संरचना को छोड़कर जो लगभग किसी भी नमूना में परीक्षण किया जाता है।क्लैंग: एएसटी (सार वाक्यविन्यास पेड़) कैसा दिखता है?
स्रोत:
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;
}
कमान उत्पन्न करने के लिए एएसटी:
clang++ -cc1 -ast-print ~/sum.cpp
एएसटी उत्पादन:
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;
}
धन्यवाद
बस एक नोट: आप -स्ट-प्रिंट की बजाय -स्ट-डंप को आजमा सकते हैं; वह प्रतिनिधित्व जो आप खोज रहे हैं उसके करीब हो सकता है। – servn
यदि सवाल यह है कि एएसटी कैसा दिखता है, और क्लांग की एएसटी कैसा दिखता है, तो आपको यह उत्तर उपयोगी नहीं मिलेगा: http://stackoverflow.com/questions/6376662/how-a-ast-for-an-object -ऑरिएंटेड-प्रोग्रामिंग-भाषा-दिखने वाला/6378 997 # 6378 997 –