You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

285 lines
6.6 KiB

============================================
Struct declarations
============================================
struct s1;
struct s2 {
int x;
float y : 5;
};
---
(translation_unit
(struct_specifier (type_identifier))
(struct_specifier (type_identifier) (field_declaration_list
(field_declaration (primitive_type) (field_identifier))
(field_declaration (primitive_type) (field_identifier) (number_literal)))))
============================================
Union declarations
============================================
union u1;
union s2 {
int x;
float y;
};
---
(translation_unit
(union_specifier (type_identifier))
(union_specifier (type_identifier) (field_declaration_list
(field_declaration (primitive_type) (field_identifier))
(field_declaration (primitive_type) (field_identifier)))))
============================================
Enum declarations
============================================
enum e1;
enum e2 {
val1,
val2 = 5,
val3
};
enum e3 {
val1,
};
---
(translation_unit
(enum_specifier (type_identifier))
(enum_specifier (type_identifier) (enumerator_list
(enumerator (identifier))
(enumerator (identifier) (number_literal))
(enumerator (identifier))))
(enum_specifier (type_identifier) (enumerator_list
(enumerator (identifier)))))
============================================
Primitive-typed variable declarations
============================================
unsigned short int a;
long int b, c = 5, d;
float d, e;
unsigned f;
short g, h;
---
(translation_unit
(declaration (sized_type_specifier (primitive_type)) (identifier))
(declaration
(sized_type_specifier (primitive_type))
(identifier)
(init_declarator (identifier) (number_literal))
(identifier))
(declaration (primitive_type) (identifier) (identifier))
(declaration (sized_type_specifier) (identifier))
(declaration (sized_type_specifier) (identifier) (identifier)))
============================================
Variable storage classes
============================================
int a;
extern int b, c;
auto int d;
register int e;
static int f;
---
(translation_unit
(declaration (primitive_type) (identifier))
(declaration (storage_class_specifier) (primitive_type) (identifier) (identifier))
(declaration (storage_class_specifier) (primitive_type) (identifier))
(declaration (storage_class_specifier) (primitive_type) (identifier))
(declaration (storage_class_specifier) (primitive_type) (identifier)))
============================================
Composite-typed variable declarations
============================================
struct b c;
union { int e; } f;
enum { g, h } i;
---
(translation_unit
(declaration
(struct_specifier (type_identifier))
(identifier))
(declaration
(union_specifier (field_declaration_list
(field_declaration (primitive_type) (field_identifier))))
(identifier))
(declaration
(enum_specifier (enumerator_list
(enumerator (identifier))
(enumerator (identifier))))
(identifier)))
============================================
Pointer variable declarations
============================================
char *the_string;
const char **the_strings;
---
(translation_unit
(declaration
(primitive_type)
(pointer_declarator (identifier)))
(declaration
(type_qualifier)
(primitive_type)
(pointer_declarator (pointer_declarator (identifier)))))
============================================
Typedefs
============================================
typedef int my_int;
typedef struct {
int x;
} *a;
typedef void my_callback(void *, size_t);
---
(translation_unit
(type_definition (primitive_type) (type_identifier))
(type_definition
(struct_specifier (field_declaration_list (field_declaration (primitive_type) (field_identifier))))
(pointer_declarator (type_identifier)))
(type_definition
(primitive_type)
(function_declarator
(type_identifier)
(parameter_list
(parameter_declaration (primitive_type) (abstract_pointer_declarator))
(parameter_declaration (primitive_type))))))
============================================
Function declarations
============================================
int main(int argc, const char **argv);
static foo bar();
static baz quux(...);
---
(translation_unit
(declaration
(primitive_type)
(function_declarator
(identifier)
(parameter_list
(parameter_declaration
(primitive_type)
(identifier))
(parameter_declaration
(type_qualifier)
(primitive_type)
(pointer_declarator (pointer_declarator (identifier)))))))
(declaration
(storage_class_specifier)
(type_identifier)
(function_declarator (identifier) (parameter_list)))
(declaration
(storage_class_specifier)
(type_identifier)
(function_declarator (identifier) (parameter_list))))
============================================
Function definitions
============================================
void * do_stuff(int arg1) {
return 5;
}
---
(translation_unit
(function_definition
(primitive_type)
(pointer_declarator
(function_declarator (identifier)
(parameter_list
(parameter_declaration (primitive_type) (identifier)))))
(compound_statement (return_statement (number_literal)))))
============================================
Function specifiers after types
============================================
int static inline do_stuff(int arg1) {
return 5;
}
---
(translation_unit
(function_definition
(primitive_type)
(storage_class_specifier)
(storage_class_specifier)
(function_declarator
(identifier)
(parameter_list (parameter_declaration (primitive_type) (identifier))))
(compound_statement (return_statement (number_literal)))))
============================================
Linkage specifications
============================================
extern "C" int foo();
extern "C" int foo() { return 0; }
extern "C" {
int bar();
int baz();
}
---
(translation_unit
(linkage_specification
(string_literal)
(declaration
(primitive_type)
(function_declarator (identifier) (parameter_list))))
(linkage_specification
(string_literal)
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement (return_statement (number_literal)))))
(linkage_specification
(string_literal)
(declaration_list
(declaration
(primitive_type)
(function_declarator (identifier) (parameter_list)))
(declaration
(primitive_type)
(function_declarator (identifier) (parameter_list))))))