Xét văn phạm biểu thức số học trung tố (các số là số nguyên không âm, có thể nhiều chữ số, không có khoảng trắng):
E→T ((+∣−) T)∗ T→F ((∗∣/) F)∗ F→num ∣ ( E )
Hãy cài đặt bộ phân tích cú pháp đệ quy xuống cho văn phạm trên; mỗi hàm (E, T, F) khi phân tích xong các toán hạng con của nó thì phát ra (emit) token tương ứng theo đúng thứ tự hậu tố (postfix / Reverse Polish Notation - RPN): với mỗi phép toán, hai toán hạng được phát ra trước, rồi mới đến ký hiệu phép toán.
Yêu cầu: in ra dãy token hậu tố thu được, cách nhau bởi đúng một khoảng trắng.
Ví dụ: với E= 12+3*(45-6), dãy hậu tố là 12 3 45 6 - * +.
Một dòng chứa biểu thức E (1≤∣E∣≤2000), gồm các chữ số 0-9, các ký tự + - * / ( ), không có khoảng trắng, được đảm bảo hợp lệ cú pháp theo văn phạm trên (các số nguyên không có số 0 ở đầu ngoại trừ số 0 chính nó).
In ra một dòng chứa các token hậu tố (số hoặc toán tử), cách nhau bởi một khoảng trắng.
Ví dụ:
Đầu vào:
12+3*(45-6)
Đầu ra:
12 3 45 6 - * +
Đầu vào:
42
Đầu ra:
42
Đang tải editor...