Xét ngôn ngữ mini có kiểu mảng nhiều chiều dạng T[n1][n2]…[nk] với T∈{int,float,bool} là kiểu cơ sở và n1,…,nk là kích thước cố định từng chiều (đánh số chỉ số từ 0). Xét các biểu thức truy cập phần tử x[i1][i2]...[im], trong đó x là biến mảng đã khai báo và i1,…,im là các hằng số nguyên (biết trước tại thời điểm biên dịch).
Trình biên dịch cần kiểm tra kiểu và biên tĩnh cùng lúc:
ERROR (truy cập vượt quá số chiều khai báo).ERROR (chỉ số vượt biên tĩnh).int[3][4]).Dòng đầu là n — số biến mảng khai báo. n dòng tiếp theo dạng <tên> <T> <k> <n1> ... <nk>. Dòng tiếp theo là q — số truy cập cần kiểm tra. q dòng tiếp theo dạng <tên> <m> <i1> ... <im> (m có thể bằng 0, khi đó không có chỉ số nào theo sau).
In ra q dòng, mỗi dòng là kiểu kết quả (ví dụ int, float[3], bool[2][5]) hoặc ERROR.
Ví dụ:
Đầu vào:
1
arr int 2 3 4
3
arr 0
arr 1 2
arr 2 2 3
Đầu ra:
int[3][4]
int[4]
int
Đầu vào:
1
arr int 2 3 4
1
arr 2 3 0
Đầu ra:
ERROR
Đang tải editor...