Mở rộng bộ kiểm tra kiểu để xử lý biểu thức hỗn hợp gồm toán tử số học, so sánh và logic. Biểu thức được cho ở dạng tiền tố có ngoặc đầy đủ, mỗi token (kể cả dấu ngoặc) cách nhau bởi khoảng trắng: biểu thức con nhị phân viết ( op A B ), biểu thức con phủ định viết ( ! A ), còn lại là token đơn (hằng số hoặc biến).
Toán hạng nguyên tố có kiểu:
true, false: kiểu bool.float; không có dấu chấm: kiểu int.int,float,bool}).Luật kiểm tra kiểu cho từng toán tử op:
int/float, được phép trộn); kết quả float nếu có ít nhất một bên float hoặc op là /, ngược lại int. Toán hạng bool là lỗi.int/float); kết quả bool.int so với float cũng là lỗi); kết quả bool.bool; kết quả bool.bool; kết quả bool.Nếu vi phạm bất kỳ luật nào, hoặc cấu trúc ngoặc không hợp lệ (thiếu/thừa token), in ERROR. Ngược lại in kiểu cuối cùng của toàn biểu thức.
Ví dụ: với a: int, b: float, biểu thức ( < a b ) hợp lệ, kết quả bool; biểu thức ( == a b ) là lỗi vì so sánh bằng giữa int và float không được phép.
Dòng đầu là số nguyên n — số biến khai báo. n dòng tiếp theo dạng <tên> <kiểu>. Dòng cuối cùng là biểu thức tiền tố có ngoặc, các token (bao gồm ( và )) cách nhau bởi khoảng trắng.
In ra một dòng duy nhất: kiểu (int, float hoặc bool) của biểu thức, hoặc ERROR.
Ví dụ:
Đầu vào:
0
5
Đầu ra:
int
Đầu vào:
2
a int
b float
( < a b )
Đầu ra:
bool
Đang tải editor...