Mở rộng văn phạm biểu thức số học để hỗ trợ dấu trừ một ngôi (unary minus) và phép lũy thừa ^ (kết hợp phải, ưu tiên cao hơn phép nhân/chia nhưng thấp hơn dấu trừ một ngôi bao ngoài — nghĩa là -2^2 được hiểu là −(22)=−4, còn 2^-2 được hiểu là 2−2=0.25):
E→T((+∣−)T)∗ T→F((×∣/)F)∗ F→−F∣P P→B(∧F)?(daˆˊu ? nghı˜a laˋ coˊ hoặc khoˆng coˊ phaˆˋn naˋy; neˆˊu coˊ, đoˆˊi soˆˊ beˆn phải của ∧ được phaˆn tıˊch lại từ F để đảm bảo keˆˊt hợp phải) B→NUM∣(E)
Hãy cài đặt bộ phân tích cú pháp đệ quy để định giá biểu thức bằng số thực. Dữ liệu vào đảm bảo hợp lệ theo văn phạm, không có khoảng trắng, không có phép chia cho 0. Các số trong biểu thức luôn là số nguyên không âm.
Ví dụ: 2^3^2 (kết hợp phải) =2(32)=29=512. Biểu thức (1+2)*3-4/2 =9−2=7.
Một dòng duy nhất chứa biểu thức (chỉ gồm chữ số và các ký tự + - * / ^ ( ), không có khoảng trắng).
In ra kết quả là một số thực với đúng 6 chữ số thập phân (theo định dạng %.6f của Python).
Ví dụ:
Đầu vào:
2^3^2
Đầu ra:
512.000000
Đầu vào:
-2^2
Đầu ra:
-4.000000
Đang tải editor...