tree-sitter-zig
Version:
Zig grammar for tree-sitter
1,382 lines (1,205 loc) • 28.7 kB
Plain Text
============================================
Assigment expression
============================================
x = 10;
y = 11.0;
z = "what";
w = z;
(source_file
(assignment_expression
left: (identifier)
right: (integer_literal))
(assignment_expression
left: (identifier)
right: (float_literal))
(assignment_expression
left: (identifier)
right: (string_literal))
(assignment_expression
left: (identifier)
right: (identifier)))
============================================
Compound Assigment expression
============================================
x += 1;
y -= 11.1;
z *= w;
a /= 7;
b %= 2;
c &= 0b001100;
d |= 0xABABAB;
e ^= 0o777;
f <<= 1;
g >>= 2;
h +%= x;
i -%= 1;
j *%= 2;
(source_file
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (integer_literal))
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (float_literal))
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (identifier))
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (integer_literal))
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (integer_literal))
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (integer_literal))
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (integer_literal))
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (integer_literal))
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (integer_literal))
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (integer_literal))
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (identifier))
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (integer_literal))
(compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (integer_literal)))
============================================
Unary expression
============================================
!x;
~true;
-%10;
-11.9;
(source_file
(unary_expression
operator: (unary_operator)
expression: (identifier))
(unary_expression
operator: (unary_operator)
expression: (boolean_literal))
(unary_expression
operator: (unary_operator)
expression: (integer_literal))
(unary_expression
operator: (unary_operator)
expression: (float_literal)))
============================================
Binary expression
============================================
1 + 2;
x +% 10;
11.1 - 0.1;
y -% z;
2 * n;
2 *% m;
x / t;
10 % 2;
1 << 2;
3 >> 4;
true & false;
false | true;
right ^ left;
error1 || error2;
a orelse b;
x and y;
boy or girl;
vec1 ++ vec2;
vec1 ** vec3;
a == b;
10 != 11;
1.0 < 2.0;
x <= 1;
10 > y;
x >= 2;
(source_file
(binary_expression
left: (integer_literal)
operator: (binary_operator)
right: (integer_literal))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (integer_literal))
(binary_expression
left: (float_literal)
operator: (binary_operator)
right: (float_literal))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (integer_literal)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (integer_literal)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (integer_literal)
operator: (binary_operator)
right: (integer_literal))
(binary_expression
left: (integer_literal)
operator: (binary_operator)
right: (integer_literal))
(binary_expression
left: (integer_literal)
operator: (binary_operator)
right: (integer_literal))
(binary_expression
left: (boolean_literal)
operator: (binary_operator)
right: (boolean_literal))
(binary_expression
left: (boolean_literal)
operator: (binary_operator)
right: (boolean_literal))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (integer_literal)
operator: (binary_operator)
right: (integer_literal))
(binary_expression
left: (float_literal)
operator: (binary_operator)
right: (float_literal))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (integer_literal))
(binary_expression
left: (integer_literal)
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (identifier)
operator: (binary_operator)
right: (integer_literal)))
============================================
Complex unary/binary expression
============================================
a == b and a > 10;
!a and b;
!a and b > 10;
(source_file
(binary_expression
left: (binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
operator: (binary_operator)
right: (binary_expression
left: (identifier)
operator: (binary_operator)
right: (integer_literal)))
(binary_expression
left: (unary_expression
operator: (unary_operator)
expression: (identifier))
operator: (binary_operator)
right: (identifier))
(binary_expression
left: (unary_expression
operator: (unary_operator)
expression: (identifier))
operator: (binary_operator)
right: (binary_expression
left: (identifier)
operator: (binary_operator)
right: (integer_literal))))
============================================
Type expression
============================================
usize;
f64;
?i32;
?Point;
[]u8;
[_]u8;
[4]u8;
[*]u8;
[]align(16) u8;
*i32;
*allowzero i32;
*volatile i32;
*const Point;
*align(16) i32;
[]?u32;
?[]u32;
*[]u32;
[]*u32;
?*Point;
*?Point;
anyerror!*u8;
anyerror!u8;
anyerror!?u8;
i7;
u33;
(source_file
(primitive_type)
(primitive_type)
(optional_type
(primitive_type))
(optional_type
(type_identifier))
(array_type
(primitive_type))
(array_type
size: (identifier)
(primitive_type))
(array_type
size: (integer_literal)
(primitive_type))
(array_type
size: (pointer)
(primitive_type))
(array_type
(type_prefix
(integer_literal))
(primitive_type))
(pointer_type
(primitive_type))
(pointer_type
(type_prefix)
(primitive_type))
(pointer_type
(type_prefix)
(primitive_type))
(pointer_type
(type_prefix)
(type_identifier))
(pointer_type
(type_prefix
(integer_literal))
(primitive_type))
(array_type
(optional_type
(primitive_type)))
(optional_type
(array_type
(primitive_type)))
(pointer_type
(array_type
(primitive_type)))
(array_type
(pointer_type
(primitive_type)))
(optional_type
(pointer_type
(type_identifier)))
(pointer_type
(optional_type
(type_identifier)))
(error_type
err: (primitive_type)
ok: (pointer_type
(primitive_type)))
(error_type
err: (primitive_type)
ok: (primitive_type))
(error_type
err: (primitive_type)
ok: (optional_type
(primitive_type)))
(custom_number_type)
(custom_number_type))
============================================
Call expressions (both build in and normal)
============================================
@buildin();
@ptrToInt(ptr);
call();
double(x);
assert(@typeOf(ptr) == [*]i32);
std.debug.warn("Hello");
async afunc();
async afunc(a, b);
(source_file
(build_in_call_expr
function: (identifier)
arguments: (arguments))
(build_in_call_expr
function: (identifier)
arguments: (arguments
(identifier)))
(call_expression
function: (identifier)
arguments: (arguments))
(call_expression
function: (identifier)
arguments: (arguments
(identifier)))
(call_expression
function: (identifier)
arguments: (arguments
(binary_expression
left: (build_in_call_expr
function: (identifier)
arguments: (arguments
(identifier)))
operator: (binary_operator)
right: (array_type
size: (pointer)
(primitive_type)))))
(field_expression
value: (field_expression
value: (identifier)
field: (field_identifier))
field: (call_expression
function: (identifier)
arguments: (arguments
(string_literal))))
(call_expression
(call_modifier)
function: (identifier)
arguments: (arguments))
(call_expression
(call_modifier)
function: (identifier)
arguments: (arguments
(identifier)
(identifier))))
============================================
Await expression
============================================
await ptr;
await async call();
(source_file
(await_expression
(identifier))
(await_expression
(call_expression
(call_modifier)
function: (identifier)
arguments: (arguments))))
============================================
Suspend/Resume expression
============================================
suspend;
suspend p;
resume;
resume p;
suspend {}
suspend {
a
}
resume {}
resume {
a
}
(source_file
(suspend_expression)
(suspend_expression
(identifier))
(resume_expression)
(resume_expression
(identifier))
(suspend_block
(block))
(suspend_block
(block
(identifier)))
(resume_block
(block))
(resume_block
(block
(identifier))))
============================================
Reference and deference expression
============================================
&a;
a.*;
(source_file
(reference_expression
value: (identifier))
(dereference_expression
value: (identifier)))
============================================
If expression
============================================
if (true) {}
if (true) {} else {}
if (a > b) {} else if (a == b) {} else {}
if (a) |value| {}
if (a) |*value| {}
if (a) |value, i| {}
if (a) |*value, i| {}
if (a) |value| {} else {}
if (a) |*value| {} else {}
if (a) |value| {} else |err| {}
if (a) |*value| {} else |err| {}
if (a != b) 47 else 3089
if (true)
a
else
b
(source_file
(if_expression
condition: (boolean_literal)
consequence: (block))
(if_expression
condition: (boolean_literal)
consequence: (block)
alternative: (block))
(if_expression
condition: (binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
consequence: (block)
alternative: (if_expression
condition: (binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
consequence: (block)
alternative: (block)))
(if_expression
condition: (identifier)
consequence: (payload_expression
(payload
values: (payload_identifier))
(block)))
(if_expression
condition: (identifier)
consequence: (payload_expression
(payload
values: (payload_identifier))
(block)))
(if_expression
condition: (identifier)
consequence: (payload_expression
(payload
values: (payload_identifier)
values: (payload_identifier))
(block)))
(if_expression
condition: (identifier)
consequence: (payload_expression
(payload
values: (payload_identifier)
values: (payload_identifier))
(block)))
(if_expression
condition: (identifier)
consequence: (payload_expression
(payload
values: (payload_identifier))
(block))
alternative: (block))
(if_expression
condition: (identifier)
consequence: (payload_expression
(payload
values: (payload_identifier))
(block))
alternative: (block))
(if_expression
condition: (identifier)
consequence: (payload_expression
(payload
values: (payload_identifier))
(block))
alternative: (payload_expression
(payload
values: (payload_identifier))
(block)))
(if_expression
condition: (identifier)
consequence: (payload_expression
(payload
values: (payload_identifier))
(block))
alternative: (payload_expression
(payload
values: (payload_identifier))
(block)))
(if_expression
condition: (binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
consequence: (integer_literal)
alternative: (integer_literal))
(if_expression
condition: (boolean_literal)
consequence: (identifier)
alternative: (identifier)))
============================================
While expression
============================================
while (a) {}
outer: while (a) {}
inline while (a) {}
while (a) |value| {}
while (a < b) : (a += 1) {}
while (a) {} else {}
while (a) {} else |err| {}
(source_file
(while_expression
condition: (identifier)
body: (block))
(while_expression
(loop_label
name: (label_identifier))
condition: (identifier)
body: (block))
(while_expression
(loop_modifier)
condition: (identifier)
body: (block))
(while_expression
condition: (identifier)
(payload
values: (payload_identifier))
body: (block))
(while_expression
condition: (binary_expression
left: (identifier)
operator: (binary_operator)
right: (identifier))
continue: (compound_assignment_expr
left: (identifier)
operator: (assignment_operator)
right: (integer_literal))
body: (block))
(while_expression
condition: (identifier)
body: (block)
alternative: (block))
(while_expression
condition: (identifier)
body: (block)
alternative: (payload_expression
(payload
values: (payload_identifier))
(block))))
============================================
For expression
============================================
for (xs) |value| {}
inline for (xs) |value| {}
label: for (xs) |value| {}
label: inline for (xs) |value| {}
for (xs) |value| {} else blk: {}
(source_file
(for_expression
condition: (identifier)
(payload
values: (payload_identifier))
body: (block))
(for_expression
(loop_modifier)
condition: (identifier)
(payload
values: (payload_identifier))
body: (block))
(for_expression
(loop_label
name: (label_identifier))
condition: (identifier)
(payload
values: (payload_identifier))
body: (block))
(for_expression
(loop_label
name: (label_identifier))
(loop_modifier)
condition: (identifier)
(payload
values: (payload_identifier))
body: (block))
(for_expression
condition: (identifier)
(payload
values: (payload_identifier))
body: (block)
alternative: (block
label: (loop_label
name: (label_identifier)))))
============================================
Continue and Break expression
============================================
continue;
continue :blk;
break;
break 10;
break val;
break :blk;
break :blk 1.1;
break :blk "wut";
(source_file
(continue_expression)
(continue_expression
label: (loop_label_inverse
name: (label_identifier)))
(break_expression)
(break_expression
value: (integer_literal))
(break_expression
value: (identifier))
(break_expression
label: (loop_label_inverse
name: (label_identifier)))
(break_expression
label: (loop_label_inverse
name: (label_identifier))
value: (float_literal))
(break_expression
label: (loop_label_inverse
name: (label_identifier))
value: (string_literal)))
============================================
Return expression
============================================
return;
return 125;
(source_file
(return_expression)
(return_expression
(integer_literal)))
============================================
Comptime Block expression
============================================
comptime {}
comptime {
var x = 10;
}
comptime {
var x = 10;
x
}
(source_file
(comptime_block
(block))
(comptime_block
(block
(assignment_statement
name: (identifier)
expression: (integer_literal))))
(comptime_block
(block
(assignment_statement
name: (identifier)
expression: (integer_literal))
(identifier))))
============================================
Array expression
============================================
[_]u8{};
[4]u32{1, 2, 3, 4};
[_][_]u64{
[_]u64{1, 2, 3, 4},
[_]u64{5, 6, 7, 8},
};
(source_file
(array_expression
size: (identifier)
type: (primitive_type)
values: (array_values))
(array_expression
size: (integer_literal)
type: (primitive_type)
values: (array_values
(integer_literal)
(integer_literal)
(integer_literal)
(integer_literal)))
(array_expression
size: (identifier)
size: (identifier)
type: (primitive_type)
values: (array_values
(array_expression
size: (identifier)
type: (primitive_type)
values: (array_values
(integer_literal)
(integer_literal)
(integer_literal)
(integer_literal)))
(array_expression
size: (identifier)
type: (primitive_type)
values: (array_values
(integer_literal)
(integer_literal)
(integer_literal)
(integer_literal))))))
============================================
Anonymous Array expression
============================================
.{};
.{1, 2, 3, 4};
.{
.{1, 2, 3, 4},
.{5, 6, 7, 8},
};
(source_file
(anonymous_array_expr)
(anonymous_array_expr
values: (array_values
(integer_literal))
values: (array_values
(integer_literal)
(integer_literal)
(integer_literal)))
(anonymous_array_expr
values: (array_values
(anonymous_array_expr
values: (array_values
(integer_literal))
values: (array_values
(integer_literal)
(integer_literal)
(integer_literal))))
values: (array_values
(anonymous_array_expr
values: (array_values
(integer_literal))
values: (array_values
(integer_literal)
(integer_literal)
(integer_literal))))
values: (array_values)))
============================================
Index expression
============================================
a[10];
b[a];
[_]u8{1, 2, 3}[1];
.{1, 2, 3}[x];
(source_file
(index_expression
(identifier)
(integer_literal))
(index_expression
(identifier)
(identifier))
(index_expression
(array_expression
size: (identifier)
type: (primitive_type)
values: (array_values
(integer_literal)
(integer_literal)
(integer_literal)))
(integer_literal))
(index_expression
(anonymous_array_expr
values: (array_values
(integer_literal))
values: (array_values
(integer_literal)
(integer_literal)))
(identifier)))
============================================
Slice pattern expression
============================================
a[s..end];
b[..];
c[s..];
d[..end];
(source_file
(index_expression
(identifier)
(slice_pattern
start: (identifier)
end: (identifier)))
(index_expression
(identifier)
(slice_pattern))
(index_expression
(identifier)
(slice_pattern
start: (identifier)))
(index_expression
(identifier)
(slice_pattern
end: (identifier))))
============================================
Field expression
============================================
a.b;
find_pair().myfield;
(source_file
(field_expression
value: (identifier)
field: (field_identifier))
(field_expression
value: (call_expression
function: (identifier)
arguments: (arguments))
field: (field_identifier)))
============================================
Struct expression
============================================
struct { x: u8, y: u8 = 10, pub z: u8 };
struct {
fn name() {}
};
struct {
x: u8,
pub fn init() {}
};
(source_file
(struct_expression
field: (field_declaration
name: (field_identifier)
type: (primitive_type))
field: (field_declaration
name: (field_identifier)
type: (primitive_type)
default: (integer_literal))
field: (field_declaration
(visibility_modifier)
name: (field_identifier)
type: (primitive_type)))
(struct_expression
(function_declaration
name: (identifier)
parameters: (parameters)
body: (block)))
(struct_expression
field: (field_declaration
name: (field_identifier)
type: (primitive_type))
(function_declaration
(visibility_modifier)
name: (identifier)
parameters: (parameters)
body: (block))))
============================================
Struct construction expression
============================================
MyType {
.x = 10,
.y = 20,
};
(source_file
(struct_construction
(type_identifier)
field: (field_init
name: (field_identifier)
value: (integer_literal))
field: (field_init
name: (field_identifier)
value: (integer_literal))))
============================================
Anonymous Struct/Enum expression
============================================
.{ .x = 10 };
.{
.x = 10,
.y = .Var,
};
(source_file
(anonymous_struct_enum
field: (field_init
name: (field_identifier)
value: (integer_literal)))
(anonymous_struct_enum
field: (field_init
name: (field_identifier)
value: (integer_literal))
field: (field_init
name: (field_identifier)
value: (enum_literal
variant: (enum_identifier)))))
============================================
Enum expression
============================================
enum {};
enum { Ok, Err };
enum (u2) { Zero, One, Two };
enum { Zero = 0, One = 1};
(source_file
(enum_expression)
(enum_expression
variant: (variant_declaration
name: (enum_identifier))
variant: (variant_declaration
name: (enum_identifier)))
(enum_expression
type: (custom_number_type)
variant: (variant_declaration
name: (enum_identifier))
variant: (variant_declaration
name: (enum_identifier))
variant: (variant_declaration
name: (enum_identifier)))
(enum_expression
variant: (variant_declaration
name: (enum_identifier)
default: (integer_literal))
variant: (variant_declaration
name: (enum_identifier)
default: (integer_literal))))
============================================
Union expression
============================================
union {};
union { Abc: u8 };
union { Abc: u8, Def: Point, None};
union (enum) {};
union (MyEnum) {
Var1: u8,
Var2: u16,
Error,
};
union {
Var: u8,
fn myfunc() {}
};
(source_file
(union_expression)
(union_expression
field_variant: (union_field_variant
name: (union_identifier)
type: (primitive_type)))
(union_expression
field_variant: (union_field_variant
name: (union_identifier)
type: (primitive_type))
field_variant: (union_field_variant
name: (union_identifier)
type: (type_identifier))
field_variant: (union_field_variant
name: (union_identifier)))
(union_expression
type: (inference_type))
(union_expression
type: (type_identifier)
field_variant: (union_field_variant
name: (union_identifier)
type: (primitive_type))
field_variant: (union_field_variant
name: (union_identifier)
type: (primitive_type))
field_variant: (union_field_variant
name: (union_identifier)))
(union_expression
field_variant: (union_field_variant
name: (union_identifier)
type: (primitive_type))
(function_declaration
name: (identifier)
parameters: (parameters)
body: (block))))
============================================
Switch expression
============================================
switch (a) {
1 => 1,
2, 3 => 3,
4...7 => 4,
else => 5,
};
switch (a) {
Var.A => 1,
Var.B => 2,
};
(source_file
(switch_expression
value: (identifier)
body: (switch_block
(switch_arm
pattern: (switch_pattern
(literal_pattern
(integer_literal)))
value: (integer_literal))
(switch_arm
pattern: (switch_pattern
(literal_pattern
(integer_literal))
(literal_pattern
(integer_literal)))
value: (integer_literal))
(switch_arm
pattern: (switch_pattern
(slice_pattern
start: (float_literal)
end: (integer_literal)))
value: (integer_literal))
(switch_last_arm
pattern: (else_switch)
value: (integer_literal))))
(switch_expression
value: (identifier)
body: (switch_block
(switch_arm
pattern: (switch_pattern
(field_pattern
value: (identifier)
field: (field_identifier)))
value: (integer_literal))
(switch_last_arm
pattern: (switch_pattern
(field_pattern
value: (identifier)
field: (field_identifier)))
value: (integer_literal)))))
============================================
Error expression
============================================
error {
Error1,
Error2,
};
error.Error;
(source_file
(error_expression
error_variant: (error_identifier)
error_variant: (error_identifier))
(error_expression
error_variant: (error_identifier)))
============================================
Test expression
============================================
test "mytest" {}
test "assignment" {
foo();
}
(source_file
(test_expression
test_name: (string_literal)
body: (block))
(test_expression
test_name: (string_literal)
body: (block
(call_expression
function: (identifier)
arguments: (arguments)))))
============================================
Usingnamespace expression
============================================
usingnamespace std;
pub usingnamespace @cImport({
@cInclude("epoxy/gl.h");
@cInclude("GLFW/glfw3.h");
@cDefine("STBI_ONLY_PNG", "");
@cDefine("STBI_NO_STDIO", "");
@cInclude("stb_image.h");
});
(source_file
(usingnamespace_expression
import: (identifier))
(usingnamespace_expression
(visibility_modifier)
import: (build_in_call_expr
function: (identifier)
arguments: (arguments
(block
(build_in_call_expr
function: (identifier)
arguments: (arguments
(string_literal)))
(build_in_call_expr
function: (identifier)
arguments: (arguments
(string_literal)))
(build_in_call_expr
function: (identifier)
arguments: (arguments
(string_literal)
(string_literal)))
(build_in_call_expr
function: (identifier)
arguments: (arguments
(string_literal)
(string_literal)))
(build_in_call_expr
function: (identifier)
arguments: (arguments
(string_literal))))))))