Xây dựng trình thông dịch đầy đủ cho một ngôn ngữ mini có cấu trúc điều khiển IF/ELSE và WHILE lồng nhau tuỳ ý, cùng biểu thức so sánh — mô hình thu nhỏ của phần thực thi mã trung gian trong một trình biên dịch ngôn ngữ mệnh lệnh. Biến là định danh chữ cái thường, một biến chưa từng được gán có giá trị mặc định 0. Các câu lệnh hợp lệ, mỗi dòng một câu lệnh:
x = <bieu_thuc>: gán giá trị biểu thức cho biến x. Biểu thức là dãy toán hạng (số nguyên hoặc tên biến) xen kẽ toán tử + - * / %, được tính tuần tự từ trái sang phải, không ưu tiên toán tử (giống các bài trước). Phép / chia lấy phần nguyên làm tròn về 0; phép % là phần dư tương ứng, thoả a=(a / b)×b+(a % b) với phép chia làm tròn về 0 (dấu của phần dư theo dấu của a, ví dụ −7 % 3=−1).print x: in ra giá trị hiện tại của x.if a op b ... (có thể có) else ... endif: nếu so sánh a op b đúng thì thực thi khối lệnh ngay sau if cho tới trước else/endif; nếu sai và có else thì thực thi khối lệnh sau else; nếu sai và không có else thì bỏ qua toàn bộ khối. Lưu ý: a và b trong điều kiện chỉ được phép là một số nguyên hoặc một tên biến đơn (không phải một biểu thức phức tạp); op là một trong == != < > <= >=.while a op b ... endwhile: lặp lại khối lệnh bên trong chừng nào so sánh a op b còn đúng (điều kiện được kiểm tra lại ở đầu mỗi vòng lặp); a, b cũng chỉ là số nguyên hoặc biến đơn như trên.Các khối if/endif (kèm else tuỳ chọn) và while/endwhile lồng nhau hợp lệ như ngoặc, độ sâu lồng nhau tổng cộng không vượt quá 20. Dữ liệu đảm bảo tổng số lệnh được thực thi thực tế (kể cả lặp lại) không vượt quá 5×106.
Dòng đầu là số nguyên n (1≤n≤1000) — số dòng chương trình. n dòng tiếp theo là nội dung chương trình như mô tả.
In ra các giá trị được lệnh print xuất ra theo đúng thứ tự thực thi, mỗi giá trị một dòng.
Ví dụ:
Input:
12
x = 5
y = 0
while x > 0
r = x % 2
if r == 0
y = y + x
else
y = y - x
endif
x = x - 1
endwhile
print y
Output:
-3
Ví dụ:
Đầu vào:
12
x = 5
y = 0
while x > 0
r = x % 2
if r == 0
y = y + x
else
y = y - x
endif
x = x - 1
endwhile
print y
Đầu ra:
-3
Đầu vào:
5
x = 3
if x > 10
y = 100
endif
print x
Đầu ra:
3
Đang tải editor...