Xét văn phạm biểu thức số học (không có dấu trừ một ngôi):
E→T((+∣−)T)∗T→F((×∣/)F)∗F→NUM∣(E)
Hãy cài đặt bộ phân tích cú pháp đệ quy cho văn phạm trên; mỗi khi một hàm hoàn tất việc khớp một toán tử (ở vòng lặp * của E hoặc T), hãy sinh (emit) toán tử đó ngay sau khi hai toán hạng liên quan đã được sinh — đây chính là phép duyệt hậu thứ tự (postorder) trên cây phân tích cú pháp, cho kết quả là dạng hậu tố (postfix) của biểu thức. Dữ liệu vào đảm bảo luôn đúng văn phạm, không có khoảng trắng trong mỗi biểu thức.
Ví dụ: biểu thức 3+4*2 có cây phân tích với gốc là phép +, cây con trái là lá 3, cây con phải là cây phép * (con trái 4, con phải 2). Duyệt postorder cho kết quả 3 4 2 * +.
Dòng đầu tiên chứa số nguyên n (1≤n≤20) — số lượng biểu thức. n dòng tiếp theo, mỗi dòng là một biểu thức hợp lệ theo văn phạm trên (chỉ gồm chữ số và các ký tự + - * / ( ), không có khoảng trắng).
In ra n dòng, dòng thứ i là dạng hậu tố của biểu thức thứ i, các token cách nhau bởi đúng một khoảng trắng.
Ví dụ:
Đầu vào:
1
3+4*2
Đầu ra:
3 4 2 * +
Đầu vào:
1
(1+2)*(3+4)
Đầu ra:
1 2 + 3 4 + *
Đang tải editor...