Box
1 type ::= arrayType | simpleType | tupleType
Quy tắc type biểu diễn một kiểu nói chung. Trong ngôn ngữ lập trình này, dữ liệu được chia làm ba kiểu chính thể hiện qua ba quy tắc: simpleType,
tupleType và arrayType.
1 simpleType
2 ::= ‘void’ | ‘bool’
3 | ‘u8’ | ‘u16’ | ‘u32’ | ‘u64’
Quy tắc simpleTypeđược dùng để biểu diễn các kiểu dữ liệu cơ bản. Ngoại trừ kiểu dữ liệu đặc biệt voidđược dùng duy nhất trong định nghĩa hàm không có kết quả trả về, có 9 kiểu cơ bản cho dữ liệu:bool, u8, u16, u32, u64, i8, i16,
i32 và i64. Kiểu bool là kiểu dữ liệu chỉ có hai giá trị true và false. Các kiểu
u8, u16, u32 và u64 là các kiểu số tự nhiên (số nguyên không âm) và có độ rộng lần lượt là 8, 16, 32 và 64 bit. Tương tự, các kiểu i8, i16, i32 và i64 lần lượt là các kiểu số nguyên (có thể âm) với độ rộng 8, 16, 32 và 64 bit. Các số âm sẽ được biểu diễn bằng phương pháp bù 2 thông thường. Giới hạn của các kiểu dữ liệu cơ bản được cho trong Bảng 3.1.
Bảng 3.1: Giới hạn của các kiểu dữ liệu cơ bản
Kiểu Giá trị Ví dụ
bool true hoặc false true, false u8 [0,255] 42b, 196b u16 [0,65535] 12345s, 42000s u32 [0,232−1] 0x87654321i, 2271560481i u64 [0,264−1] 0xFEDCBA9876543210l, 18364758544493064720l i8 [−128,127] 42B, -69B u16 [−32768,32767] 12345s, -23536S u32 [−231,231−1] 0x87654321I, -2023406815I u64 [−263,263−1] 0xFEDCBA9876543210L, -81985529216486896I 1 tupleType ::= TupleIdentifier
Quy tắc tupleType được dùng để biểu diễn kiểu bản ghi bằng chính tên định danh của kiểu bản ghi đó.
1 beforeArrayType ::= simpleType | tupleType
2 arraySizeLiteral ::= UntypedNumberLiteral?
3 arraySuffix
4 ::= ‘[’ arraySizeLiteral ( ‘,’ arraySizeLiteral )* ‘]’
5 arrayType ::= beforeArrayType arraySuffix+
Quy tắc arrayType được dùng để biểu diễn kiểu dữ liệu mảng. Một mảng được biểu diễn bằng cách thêm các hậu tố chỉ định kích thước của mảng vào sau
một kiểu dữ liệu cơ bản hoặc một kiểu bản ghi. Một hậu tố chỉ định kích thước là một chuỗi các kích thước của mỗi chiều trong mảng, ngăn cách nhau bằng dấu phẩy. Kích thước của một chiều trong mảng có thể được bỏ qua để chỉ định một mảng không định trước kích thước. Ví dụ, i32[5,,3][32] định nghĩa một mảng một chiều có kích thước là 32, trong đó chứa các mảng ba chiều có kích thước chiều thứ nhất là 5, chiều thứ hai không cố định, chiều thứ ba có kích thước là 3.