Mở rộng bài toán kiểm tra kiểu: hệ thống kiểu bây giờ gồm ba kiểu int, float, bool, với các nhóm toán tử áp dụng trên biểu thức hậu tố:
float nếu có ít nhất một toán hạng float, ngược lại là int.bool.bool; kết quả kiểu bool.! (một ngôi): toán hạng phải có kiểu bool; kết quả kiểu bool.Toán hạng có thể là: tên biến đã khai báo (kiểu int, float hoặc bool), hằng số nguyên/thực (như bài ép kiểu số học), hoặc hằng bool true/false.
Nếu tại bất kỳ bước áp dụng toán tử nào mà kiểu toán hạng không thoả điều kiện ở trên, đây là lỗi không tương thích kiểu.
Ví dụ
Input:
3
a:int b:float c:bool
a b < c &&
Output:
bool
Giải thích: a < b so sánh hai số, cho kiểu bool; sau đó bool && c (c cũng kiểu bool) hợp lệ, kết quả bool.
Dòng 1: số nguyên k (0≤k≤100) — số biến khai báo.
Dòng 2: nếu k>0, k cặp name:type cách nhau khoảng trắng (type ∈ {int, float, bool}); nếu k=0 dòng rỗng.
Dòng 3: biểu thức hậu tố, token cách nhau khoảng trắng, có thể chứa các toán tử số học, so sánh, luận lý, phủ định, hằng số, hằng true/false, tên biến. Dữ liệu vào đảm bảo cấu trúc hậu tố hợp lệ về mặt số lượng toán hạng.
Nếu gặp biến chưa khai báo, in ERROR: bien <name> chua khai bao và dừng (không xét token sau).
Nếu gặp toán tử áp dụng lên toán hạng sai kiểu, in ERROR: khong tuong thich kieu và dừng ngay tại đó (không xét token sau).
Nếu không có lỗi, in ra đúng một dòng là kiểu cuối cùng của biểu thức: int, float hoặc bool.
Ví dụ:
Đầu vào:
3
a:int b:float c:bool
a b < c &&
Đầu ra:
bool
Đầu vào:
1
x:bool
x !
Đầu ra:
bool
Đang tải editor...