neovim-config/tree-sitter-c/test/corpus/expressions.txt

519 lines
13 KiB
Plaintext

============================================
Number literals
============================================
double a = {
0xAC00,
0.123,
0b1010001,
0xabc00ull,
-0.1f,
1'000'000.000'001,
24e-5,
0.1E,
58.,
4e2,
123.456e-67,
.1E4f,
0x10.1p0,
};
---
(translation_unit
(declaration
(primitive_type)
(init_declarator
(identifier)
(initializer_list
(number_literal)
(number_literal)
(number_literal)
(number_literal)
(number_literal)
(number_literal)
(number_literal)
(number_literal)
(number_literal)
(number_literal)
(number_literal)
(number_literal)
(number_literal)
))))
============================================
Identifiers
============================================
int main() {
_abc;
d_EG123;
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (identifier))
(expression_statement (identifier)))))
============================================
Common constants
============================================
int main() {
true;
false;
NULL;
// regression test - identifiers starting w/ these strings should tokenize correctly.
true_value;
false_value;
NULL_value;
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (true))
(expression_statement (false))
(expression_statement (null))
(comment)
(expression_statement (identifier))
(expression_statement (identifier))
(expression_statement (identifier)))))
============================================
Function calls
============================================
int main() {
printf("hi! %d\n", x);
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (call_expression
(identifier)
(argument_list (string_literal (escape_sequence)) (identifier)))))))
============================================
String literals
============================================
int main() {
"a";
"b" "c" "d";
"\"hi\"";
L"bonjour";
u"guten morgen";
U"buenos dias";
u8"buongiorno";
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (string_literal))
(expression_statement (concatenated_string (string_literal) (string_literal) (string_literal)))
(expression_statement (string_literal (escape_sequence) (escape_sequence)))
(expression_statement (string_literal))
(expression_statement (string_literal))
(expression_statement (string_literal))
(expression_statement (string_literal)))))
============================================
Character literals
============================================
int main() {
'a';
'\0';
'\t';
'\'';
L'b';
u'c';
U'\xa1';
u8'\x1A';
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (char_literal))
(expression_statement (char_literal (escape_sequence)))
(expression_statement (char_literal (escape_sequence)))
(expression_statement (char_literal (escape_sequence)))
(expression_statement (char_literal))
(expression_statement (char_literal))
(expression_statement (char_literal (escape_sequence)))
(expression_statement (char_literal (escape_sequence))))))
============================================
Field access
============================================
int main() {
s.data1;
p->data2;
q[data3];
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (field_expression (identifier) (field_identifier)))
(expression_statement (field_expression (identifier) (field_identifier)))
(expression_statement (subscript_expression (identifier) (identifier))))))
============================================
Boolean operators
============================================
int main() {
!x || !y && !z;
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (binary_expression
(unary_expression (identifier))
(binary_expression
(unary_expression (identifier))
(unary_expression (identifier))))))))
============================================
Math operators
============================================
int main() {
-a / b + c * -d;
a++ - ++b + c-- + --d;
++L;
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (binary_expression
(binary_expression
(unary_expression (identifier))
(identifier))
(binary_expression
(identifier)
(unary_expression (identifier)))))
(expression_statement
(binary_expression
(binary_expression
(binary_expression
(update_expression (identifier))
(update_expression (identifier)))
(update_expression (identifier)))
(update_expression (identifier))))
(expression_statement (update_expression (identifier))))))
============================================
The comma operator
============================================
int main() {
i--, j--;
(i--, j--);
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement
(comma_expression
(update_expression (identifier))
(update_expression (identifier))))
(expression_statement
(parenthesized_expression
(comma_expression
(update_expression (identifier))
(update_expression (identifier))))))))
============================================
Assignments
============================================
int main() {
static int a = 1;
b = *c = 2;
d.e = 3;
f->g = 4;
h[i] = j;
k += l;
m -= o;
n *= p;
q /= r;
*s++ = 1;
(*t) = 1;
}
---
(translation_unit
(function_definition
type: (primitive_type)
declarator: (function_declarator
declarator: (identifier)
parameters: (parameter_list))
body: (compound_statement
(declaration
(storage_class_specifier)
type: (primitive_type)
declarator: (init_declarator
declarator: (identifier)
value: (number_literal)))
(expression_statement (assignment_expression
left: (identifier)
right: (assignment_expression
left: (pointer_expression
argument: (identifier))
right: (number_literal))))
(expression_statement (assignment_expression
left: (field_expression
argument: (identifier)
field: (field_identifier))
right: (number_literal)))
(expression_statement (assignment_expression
left: (field_expression
argument: (identifier)
field: (field_identifier))
right: (number_literal)))
(expression_statement (assignment_expression
left: (subscript_expression
argument: (identifier)
index: (identifier))
right: (identifier)))
(expression_statement (assignment_expression
left: (identifier)
right: (identifier)))
(expression_statement (assignment_expression
left: (identifier)
right: (identifier)))
(expression_statement (assignment_expression
left: (identifier)
right: (identifier)))
(expression_statement (assignment_expression
left: (identifier)
right: (identifier)))
(expression_statement (assignment_expression
left: (pointer_expression
argument: (update_expression
argument: (identifier)))
right: (number_literal)))
(expression_statement (assignment_expression
left: (parenthesized_expression (pointer_expression
argument: (identifier)))
right: (number_literal))))))
============================================
Pointer operations
============================================
int main() {
doSomething(&x, *x);
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (call_expression
(identifier)
(argument_list
(pointer_expression (identifier))
(pointer_expression (identifier))))))))
============================================
Type-casts
============================================
int main() {
x = (const SomeType *)thing;
}
---
(translation_unit
(function_definition
type: (primitive_type)
declarator: (function_declarator
declarator: (identifier)
parameters: (parameter_list))
body: (compound_statement
(expression_statement (assignment_expression
left: (identifier)
right: (cast_expression
type: (type_descriptor
(type_qualifier)
type: (type_identifier)
declarator: (abstract_pointer_declarator))
value: (identifier)))))))
============================================
Sizeof expressions
============================================
int main() {
sizeof x.a;
sizeof(x.a);
sizeof(const char **);
sizeof(char * ());
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (sizeof_expression (field_expression (identifier) (field_identifier))))
(expression_statement (sizeof_expression (parenthesized_expression (field_expression (identifier) (field_identifier)))))
(expression_statement (sizeof_expression
(type_descriptor (type_qualifier) (primitive_type) (abstract_pointer_declarator (abstract_pointer_declarator)))))
(expression_statement (sizeof_expression
(type_descriptor (primitive_type) (abstract_pointer_declarator (abstract_function_declarator (parameter_list)))))))))
============================================
Compound literals
============================================
int main() {
x = (SomeType) {
.f1.f2[f3] = 5,
.f4 = {}
};
y = (struct SomeStruct) {
7,
8
};
z = (char const []) {'a', 'b'};
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (assignment_expression
(identifier)
(compound_literal_expression
(type_descriptor (type_identifier))
(initializer_list
(initializer_pair
(field_designator (field_identifier))
(field_designator (field_identifier))
(subscript_designator (identifier))
(number_literal))
(initializer_pair
(field_designator (field_identifier))
(initializer_list))))))
(expression_statement (assignment_expression
(identifier)
(compound_literal_expression
(type_descriptor (struct_specifier (type_identifier)))
(initializer_list
(number_literal)
(number_literal)))))
(expression_statement
(assignment_expression
(identifier)
(compound_literal_expression
(type_descriptor (primitive_type) (type_qualifier) (abstract_array_declarator))
(initializer_list (char_literal) (char_literal))))))))
============================================
Compound literals with trailing commas
============================================
int main() {
y = (struct SomeStruct) { 7, 8, };
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (assignment_expression
(identifier)
(compound_literal_expression
(type_descriptor (struct_specifier (type_identifier)))
(initializer_list
(number_literal)
(number_literal))))))))
====================================
Comments with escaped newlines
====================================
// one \
two
---
(translation_unit
(comment))
==============================================
Comments with escaped chars and newlines
==============================================
// one \a \b \
two
// one \c \d
---
(translation_unit
(comment)
(comment))