关于 GCC 里的tree结构
union tree_node GTY ((ptr_alias (union lang_tree_node),
desc ( "tree_node_structure (&%h) ")))
{
struct tree_common GTY ((tag ( "TS_COMMON "))) common;
struct tree_int_cst GTY ((tag ( "TS_INT_CST "))) int_cst;
struct tree_real_cst GTY ((tag ( "TS_REAL_CST "))) real_cst;
struct tree_vector GTY ((tag ( "TS_VECTOR "))) vector;
struct tree_string GTY ((tag ( "TS_STRING "))) string;
struct tree_complex GTY ((tag ( "TS_COMPLEX "))) complex;
struct tree_identifier GTY ((tag ( "TS_IDENTIFIER "))) identifier;
struct tree_decl_minimal GTY((tag ( "TS_DECL_MINIMAL "))) decl_minimal;
struct tree_decl_common GTY ((tag ( "TS_DECL_COMMON "))) decl_common;
struct tree_decl_with_rtl GTY ((tag ( "TS_DECL_WRTL "))) decl_with_rtl;
struct tree_decl_non_common GTY ((tag ( "TS_DECL_NON_COMMON "))) decl_non_common;
struct tree_parm_decl GTY ((tag ( "TS_PARM_DECL "))) parm_decl;
struct tree_decl_with_vis GTY ((tag ( "TS_DECL_WITH_VIS "))) decl_with_vis;
struct tree_var_decl GTY ((tag ( "TS_VAR_DECL "))) var_decl;
struct tree_field_decl GTY ((tag ( "TS_FIELD_DECL "))) field_decl;
struct tree_label_decl GTY ((tag ( "TS_LABEL_DECL "))) label_decl;
struct tree_result_decl GTY ((tag ( "TS_RESULT_DECL "))) result_decl;
struct tree_const_decl GTY ((tag ( "TS_CONST_DECL "))) const_decl;
struct tree_type_decl GTY ((tag ( "TS_TYPE_DECL "))) type_decl;
struct tree_function_decl GTY ((tag ( "TS_FUNCTION_DECL "))) function_decl;
struct tree_type GTY ((tag ( "TS_TYPE "))) type;
struct tree_list GTY ((tag ( "TS_LIST "))) list;
struct tree_vec GTY ((tag ( "TS_VEC "))) vec;
struct tree_exp GTY ((tag ( "TS_EXP "))) exp;
struct tree_ssa_name GTY ((tag ( "TS_SSA_NAME "))) ssa_name;
struct tree_phi_node GTY ((tag ( "TS_PHI_NODE "))) phi;
struct tree_block GTY ((tag ( "TS_BLOCK "))) block;
struct tree_binfo GTY ((tag ( "TS_BINFO "))) binfo;
struct tree_statement_list GTY ((tag ( "TS_STATEMENT_LIST "))) stmt_list;
struct tree_value_handle GTY ((tag ( "TS_VALUE_HANDLE "))) value_handle;
struct tree_constructor GTY ((tag ( "TS_CONSTRUCTOR "))) constructor;
};
这个是GCC里tree的一个大概结构图,不知道有没有前辈做个类似的分析研究.
能不能说说这个结构中各个variable的大概的作用.
[解决办法]
恕我孤陋寡闻阿,这是个什么东西啊,没见过:(
[解决办法]
lz是不是在阅读GCC的源码?
[解决办法]
不太清楚,我也想知道,帮你顶顶吧。
[解决办法]
吐血中~~
[解决办法]
lz牛啊, 给你找到一点资料:http://www.cs.wustl.edu/~mdeters/seminar/fall2005/notes0926.html
这个tree_node 是 gcc用来表示他的读进来的code的。
其中, GTY (( )) 是用来给GCC 's own internal garbage collector 提供信息的, 所以你可以不看他。
tree_node()其实是一个 union of structs。这里面, 最常用的是struct tree_common。他之后的每个一 struct里面有struct tree_common这个struct在里面。 struct tree_common他是这样的:
struct tree_common GTY(())
{
tree chain;
tree type;
union tree_ann_d *ann;
ENUM_BITFIELD(tree_code) code : 8;
unsigned side_effects_flag : 1;
unsigned constant_flag : 1;
unsigned addressable_flag : 1;
unsigned volatile_flag : 1;
unsigned readonly_flag : 1;
unsigned unsigned_flag : 1;
unsigned asm_written_flag: 1;
unsigned nowarning_flag : 1;
unsigned used_flag : 1;
unsigned nothrow_flag : 1;
unsigned static_flag : 1;
unsigned public_flag : 1;
unsigned private_flag : 1;
unsigned protected_flag : 1;
unsigned deprecated_flag : 1;
unsigned invariant_flag : 1;
unsigned lang_flag_0 : 1;
unsigned lang_flag_1 : 1;
unsigned lang_flag_2 : 1;
unsigned lang_flag_3 : 1;
unsigned lang_flag_4 : 1;
unsigned lang_flag_5 : 1;
unsigned lang_flag_6 : 1;
unsigned visited : 1;
};
在这struct里面,最重要的东西是chain, type, and code. 这里面code 最重要, 他告诉你是啥code 类型, 所以你找到对应的在tree_node struct 里面。
具体的细节你自己找书看了。
[解决办法]
http://www-128.ibm.com/developerworks/cn/linux/l-gcc/part1/
[解决办法]
原来楼主是在阅读gcc源代码阿!
那你最好先把编译原理学习好,否则是绝对看不懂的。
[解决办法]
恩,既然这样,楼主就继续看吧,不过难度很大的,因为gcc太大了,不太容易吃透的。。。
[解决办法]
C、C++的编译器是差不多最复杂的,因为C、C++语法不满足BNF描述。如果研究编译原理,最好换个简单点的语言的编译器。
[解决办法]
C、C++的编译器是差不多最复杂的,因为C、C++语法不满足BNF描述。如果研究编译原理,最好换个简单点的语言的编译器。
------------------------------
C++之父教导我们说不要用lex,yacc
