Xây dựng bộ phân tích cú pháp đệ quy cho biểu thức số học có biến (mỗi biến là một chữ cái, có thể hoa hoặc thường), số nguyên, các phép toán +,−,× (*), chia nguyên /, lấy dư %, lũy thừa ^, dấu trừ đơn, và dấu ngoặc đơn, theo văn phạm (độ ưu tiên tăng dần từ trên xuống, ^ kết hợp phải, còn lại kết hợp trái):
Phép / và % thực hiện theo đúng ngữ nghĩa chia làm tròn xuống (floor) như toán tử // và % của Python (ví dụ −7%3=2). Lũy thừa ^ chỉ hợp lệ khi số mũ (bên phải) là số nguyên không âm.
Ví dụ: với a + b * 2, a=3,b=4, kết quả là 3+4×2=11.
Dòng 1: biểu thức (có thể chứa khoảng trắng). Dòng 2: số nguyên n — số lượng biến được gán giá trị. n dòng tiếp theo, mỗi dòng gồm tên biến và giá trị nguyên (có thể âm), cách nhau một khoảng trắng, ví dụ a 3. Biến không xuất hiện trong danh sách gán có giá trị mặc định là 0.
Nếu trong quá trình tính toán có phép / hoặc % cho mẫu số 0, hoặc phép ^ với số mũ âm, in ra đúng chuỗi ERROR. Ngược lại in ra một số nguyên duy nhất là kết quả của biểu thức.
Ví dụ:
Đầu vào:
a + b * 2
2
a 3
b 4
Đầu ra:
11
Đầu vào:
2^3^2
0
Đầu ra:
512
Đang tải editor...