============================================ Struct declarations ============================================ struct s1; struct s2 { int x; float y; }; --- (translation_unit (declaration (struct_specifier (identifier))) (declaration (struct_specifier (identifier) (struct_declaration (identifier) (identifier)) (struct_declaration (identifier) (identifier))))) ============================================ Union declarations ============================================ union u1; union s2 { int x; float y; }; --- (translation_unit (declaration (union_specifier (identifier))) (declaration (union_specifier (identifier) (struct_declaration (identifier) (identifier)) (struct_declaration (identifier) (identifier))))) ============================================ Enum declarations ============================================ enum e1; enum e2 { val1, val2 = 5, val3 }; --- (translation_unit (declaration (enum_specifier (identifier))) (declaration (enum_specifier (identifier) (identifier) (enumerator (identifier) (number_literal)) (identifier)))) ============================================ Primitive-typed variable declarations ============================================ unsigned short int a; long int b, c = 5, d; float d, e; --- (translation_unit (declaration (type_specifier (identifier)) (identifier)) (declaration (type_specifier (identifier)) (identifier) (init_declarator (identifier) (number_literal)) (identifier)) (declaration (identifier) (identifier) (identifier))) ============================================ Variable storage classes ============================================ int a; extern int b, c; auto int d; register int e; static int f; --- (translation_unit (declaration (identifier) (identifier)) (declaration (storage_class_specifier) (identifier) (identifier) (identifier)) (declaration (storage_class_specifier) (identifier) (identifier)) (declaration (storage_class_specifier) (identifier) (identifier)) (declaration (storage_class_specifier) (identifier) (identifier))) ============================================ Composite-typed variable declarations ============================================ struct b c; union { int e; } f; enum { g, h } i; --- (translation_unit (declaration (struct_specifier (identifier)) (identifier)) (declaration (union_specifier (struct_declaration (identifier) (identifier))) (identifier)) (declaration (enum_specifier (identifier) (identifier)) (identifier))) ============================================ Pointer variable declarations ============================================ char *the_string; const char **the_strings; --- (translation_unit (declaration (identifier) (declarator (pointer) (identifier))) (declaration (type_qualifier) (identifier) (declarator (pointer) (pointer) (identifier)))) ============================================ Typedefs ============================================ typedef int my_int; typedef struct{ int x; } *a; --- (translation_unit (declaration (storage_class_specifier) (identifier) (identifier)) (declaration (storage_class_specifier) (struct_specifier (struct_declaration (identifier) (identifier))) (declarator (pointer) (identifier)))) ============================================ Function declarations ============================================ int main(int argc, const char **argv); static foo bar(); --- (translation_unit (declaration (identifier) (direct_declarator (identifier) (parameter_type_list (parameter_declaration (identifier) (identifier)) (parameter_declaration (type_qualifier) (identifier) (declarator (pointer) (pointer) (identifier)))))) (declaration (storage_class_specifier) (identifier) (direct_declarator (identifier)))) ============================================ Function definitions ============================================ void * do_stuff(int arg1) { return 5; } --- (function_definition (identifier) (declarator (pointer) (direct_declarator (identifier) (parameter_declaration (identifier) (identifier)))) (compound_statement (return_statement (number_literal))))