============================================ Function calls ============================================ int main() { printf("hi! %d\n", x); } --- (function_declaration (identifier) (identifier) (formal_parameters) (statement_block (expression_statement (function_call (identifier) (string) (identifier))))) ============================================ Character literals ============================================ int main() { 'a'; '\0'; '\t'; '\''; } --- (function_declaration (identifier) (identifier) (formal_parameters) (statement_block (expression_statement (char)) (expression_statement (char)) (expression_statement (char)) (expression_statement (char)))) ============================================ Field access ============================================ int main() { s.data1; p->data2; } --- (function_declaration (identifier) (identifier) (formal_parameters) (statement_block (expression_statement (field_access (identifier) (identifier))) (expression_statement (deref_field_access (identifier) (identifier))))) ============================================ Field access ============================================ int main() { s.data1; p->data2; } --- (function_declaration (identifier) (identifier) (formal_parameters) (statement_block (expression_statement (field_access (identifier) (identifier))) (expression_statement (deref_field_access (identifier) (identifier))))) ============================================ Boolean operators ============================================ int main() { !x || !y && !z; } --- (function_declaration (identifier) (identifier) (formal_parameters) (statement_block (expression_statement (bool_op (bool_op (identifier)) (bool_op (bool_op (identifier)) (bool_op (identifier))))))) ============================================ Math operators ============================================ int main() { -a / b + c * -d; } --- (function_declaration (identifier) (identifier) (formal_parameters) (statement_block (expression_statement (math_op (math_op (math_op (identifier)) (identifier)) (math_op (identifier) (math_op (identifier))))))) ============================================ Assignments ============================================ int main() { static int a = 1; b = c = 2; d.e = 3; f->g = 4; } --- (function_declaration (identifier) (identifier) (formal_parameters) (statement_block (var_declaration (identifier) (var_assignment (identifier) (number))) (expression_statement (assignment (identifier) (assignment (identifier) (number)))) (expression_statement (assignment (field_access (identifier) (identifier)) (number))) (expression_statement (assignment (deref_field_access (identifier) (identifier)) (number))))) ============================================ Compound literals ============================================ int main() { x = (SomeType) { .field1 = 5, .field2 = 6 }; y = (struct SomeStruct) { 7, 8 }; } --- (function_declaration (identifier) (identifier) (formal_parameters) (statement_block (expression_statement (assignment (identifier) (compound_literal (identifier) (struct_literal_field (identifier) (number)) (struct_literal_field (identifier) (number))))) (expression_statement (assignment (identifier) (compound_literal (struct_type (identifier)) (number) (number))))))