Xét một ngôn ngữ lập trình đơn giản với bốn kiểu dữ liệu cơ bản: int, float, bool, string. Trình biên dịch cho phép ép kiểu ngầm định (implicit widening conversion) khi gán giá trị cho biến, theo các luật một chiều sau (không được ép ngược lại):
bool gán được cho biến kiểu bool, int, hoặc float.int gán được cho biến kiểu int, hoặc float.float chỉ gán được cho biến kiểu float.string chỉ gán được cho biến kiểu string.Mọi trường hợp còn lại là lỗi kiểu. Nếu vế trái hoặc vế phải tham chiếu một biến chưa được khai báo, câu lệnh cũng coi là lỗi.
Vế phải của phép gán là một hằng số hoặc tên một biến đã khai báo, được nhận dạng theo quy tắc: true/false → bool; chuỗi trong cặp nháy kép "..." → string; số có dấu chấm thập phân → float; số chỉ gồm chữ số (có thể có dấu - phía trước) → int; nếu không thuộc các dạng trên, đó là tên biến.
Cho bảng khai báo biến và các câu lệnh gán, hãy cho biết mỗi câu lệnh có hợp lệ hay không.
Ví dụ
Input:
3
a int
b float
c string
3
a = 5
b = a
c = "hi"
Output:
OK
OK
OK
<tên biến> <kiểu> (kiểu ∈{int,float,bool,string}).<tên biến đích> = <vế phải> (có đúng một dấu cách trước và sau dấu =).In ra m dòng, mỗi dòng là OK nếu câu lệnh gán hợp lệ, hoặc ERROR nếu không (kể cả khi biến đích hoặc biến ở vế phải chưa được khai báo).
Ví dụ:
Đầu vào:
3
a int
b float
c string
3
a = 5
b = a
c = "hi"
Đầu ra:
OK
OK
OK
Đầu vào:
2
x bool
y int
3
y = true
x = 5
x = true
Đầu ra:
OK
ERROR
OK
Đang tải editor...