Khi trình biên dịch định giá một biểu thức chứa biến, nó cần tra bảng ký hiệu (symbol table) để lấy giá trị hiện tại của từng biến trước khi thực thi trên máy ngăn xếp.
Cho một biểu thức trung tố gồm toán hạng là số nguyên hoặc biến (một chữ cái thường a-z), các toán tử +,−,×,÷,^ (+ - * / ^, ^ kết hợp phải, ưu tiên cao nhất) và dấu ngoặc đơn, cùng một bảng gán giá trị cho một số biến. Hãy chuyển biểu thức sang hậu tố rồi định giá bằng cách thay giá trị các biến từ bảng ký hiệu.
Quy tắc:
ERROR.Ví dụ: biểu thức ( a + b ) / c với a=10,b=4,c=2 cho kết quả 7.
Dòng 1: biểu thức trung tố, các token cách nhau bởi đúng một khoảng trắng.
Dòng 2: một số nguyên k — số lượng biến được gán giá trị.
k dòng tiếp theo, mỗi dòng gồm tên biến và giá trị nguyên của nó, cách nhau một khoảng trắng (ví dụ a 5).
In ra một số nguyên là giá trị của biểu thức sau khi thay các biến bằng giá trị tương ứng, hoặc in ERROR nếu có lỗi (chia cho 0, số mũ âm, hoặc biến không có trong bảng ký hiệu).
Ví dụ:
Đầu vào:
a + b * c
3
a 5
b 3
c 2
Đầu ra:
11
Đầu vào:
( a + b ) / c
3
a 10
b 4
c 2
Đầu ra:
7
Đang tải editor...