Trong một bộ kiểm tra kiểu (type checker) đơn giản của trình biên dịch, mỗi biểu thức nhị phân A op B được đánh giá kiểu dựa trên kiểu của hai toán hạng và luật ép kiểu ngầm định (implicit coercion).
Phân loại hằng số (literal):
- ở đầu, không chứa dấu chấm → kiểu int.2.5, -3.14 → kiểu float.true hoặc false → kiểu bool."abc" (không chứa khoảng trắng bên trong) → kiểu string.Luật kiểm tra kiểu cho toán tử op ∈{+,−,∗,/}:
int: phép +, -, * cho kết quả int; riêng phép / luôn cho kết quả float (phép chia thực).float và toán hạng còn lại thuộc {int, float}: kết quả là float với mọi phép toán trên (ép kiểu ngầm int → float).string: chỉ phép + hợp lệ (nối chuỗi), kết quả là string; các phép -, *, / là lỗi.bool tham gia, hoặc string kết hợp với kiểu khác string) đều là lỗi kiểu.Với mỗi biểu thức, hãy xác định kiểu của kết quả, hoặc báo lỗi nếu biểu thức không hợp lệ về kiểu.
Ví dụ: với biểu thức 5 / 2, cả hai toán hạng là int nhưng phép / luôn trả float, nên kết quả là float.
Dòng đầu tiên là số nguyên n (0≤n≤1000) — số lượng biểu thức.
n dòng tiếp theo, mỗi dòng chứa một biểu thức dạng A op B, trong đó A, B là hằng số (token không chứa khoảng trắng bên trong, kể cả chuỗi) và op là một trong bốn ký tự + - * /, các thành phần cách nhau bởi đúng một khoảng trắng.
In ra n dòng, dòng thứ i là kết quả kiểm tra kiểu của biểu thức thứ i: một trong bốn chuỗi int, float, string, hoặc Type Error nếu biểu thức vi phạm luật kiểm tra kiểu. Nếu n=0 thì không in gì.
Ví dụ:
Đầu vào:
6
5 + 3
5 / 2
2.5 + 1
"ab" + "cd"
"ab" - "cd"
true + 1
Đầu ra:
int
float
float
string
Type Error
Type Error
Đầu vào:
1
5 + 3
Đầu ra:
int
Đang tải editor...